From 47483e60cb7bb5c4b4fcae79fcaa86ad45261888 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sun, 21 Mar 2021 00:10:10 +0800 Subject: [PATCH 001/186] update version to 5.2.0-SNAPSHOT, update samples --- modules/openapi-generator-cli/pom.xml | 2 +- modules/openapi-generator-core/pom.xml | 2 +- modules/openapi-generator-gradle-plugin/gradle.properties | 2 +- modules/openapi-generator-gradle-plugin/pom.xml | 2 +- .../samples/local-spec/gradle.properties | 2 +- modules/openapi-generator-maven-plugin/examples/java-client.xml | 2 +- modules/openapi-generator-maven-plugin/examples/kotlin.xml | 2 +- .../examples/multi-module/java-client/pom.xml | 2 +- .../examples/non-java-invalid-spec.xml | 2 +- modules/openapi-generator-maven-plugin/examples/non-java.xml | 2 +- modules/openapi-generator-maven-plugin/examples/spring.xml | 2 +- modules/openapi-generator-maven-plugin/pom.xml | 2 +- modules/openapi-generator-online/pom.xml | 2 +- modules/openapi-generator/pom.xml | 2 +- pom.xml | 2 +- samples/client/petstore/R/.openapi-generator/VERSION | 2 +- samples/client/petstore/apex/.openapi-generator/VERSION | 2 +- samples/client/petstore/c/.openapi-generator/VERSION | 2 +- samples/client/petstore/cpp-qt5/.openapi-generator/VERSION | 2 +- .../petstore/cpp-restsdk/client/.openapi-generator/VERSION | 2 +- samples/client/petstore/cpp-restsdk/client/ApiClient.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/ApiClient.h | 2 +- samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h | 2 +- samples/client/petstore/cpp-restsdk/client/ApiException.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/ApiException.h | 2 +- samples/client/petstore/cpp-restsdk/client/HttpContent.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/HttpContent.h | 2 +- samples/client/petstore/cpp-restsdk/client/IHttpBody.h | 2 +- samples/client/petstore/cpp-restsdk/client/JsonBody.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/JsonBody.h | 2 +- samples/client/petstore/cpp-restsdk/client/ModelBase.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/ModelBase.h | 2 +- .../client/petstore/cpp-restsdk/client/MultipartFormData.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/MultipartFormData.h | 2 +- samples/client/petstore/cpp-restsdk/client/Object.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/Object.h | 2 +- samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/api/PetApi.h | 2 +- samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/api/StoreApi.h | 2 +- samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/api/UserApi.h | 2 +- .../client/petstore/cpp-restsdk/client/model/ApiResponse.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h | 2 +- samples/client/petstore/cpp-restsdk/client/model/Category.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/Category.h | 2 +- samples/client/petstore/cpp-restsdk/client/model/Order.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/Order.h | 2 +- samples/client/petstore/cpp-restsdk/client/model/Pet.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/Pet.h | 2 +- samples/client/petstore/cpp-restsdk/client/model/Tag.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/Tag.h | 2 +- samples/client/petstore/cpp-restsdk/client/model/User.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/User.h | 2 +- samples/client/petstore/crystal/.openapi-generator/VERSION | 2 +- samples/client/petstore/crystal/.travis.yml | 2 +- samples/client/petstore/crystal/spec/spec_helper.cr | 2 +- samples/client/petstore/crystal/src/petstore.cr | 2 +- samples/client/petstore/crystal/src/petstore/api/pet_api.cr | 2 +- samples/client/petstore/crystal/src/petstore/api/store_api.cr | 2 +- samples/client/petstore/crystal/src/petstore/api/user_api.cr | 2 +- samples/client/petstore/crystal/src/petstore/api_client.cr | 2 +- samples/client/petstore/crystal/src/petstore/api_error.cr | 2 +- samples/client/petstore/crystal/src/petstore/configuration.cr | 2 +- .../client/petstore/crystal/src/petstore/models/api_response.cr | 2 +- samples/client/petstore/crystal/src/petstore/models/category.cr | 2 +- samples/client/petstore/crystal/src/petstore/models/order.cr | 2 +- samples/client/petstore/crystal/src/petstore/models/pet.cr | 2 +- samples/client/petstore/crystal/src/petstore/models/tag.cr | 2 +- samples/client/petstore/crystal/src/petstore/models/user.cr | 2 +- .../OpenAPIClient-httpclient/.openapi-generator/VERSION | 2 +- .../OpenAPIClient-net47/.openapi-generator/VERSION | 2 +- .../OpenAPIClient-net5.0/.openapi-generator/VERSION | 2 +- .../csharp-netcore/OpenAPIClient/.openapi-generator/VERSION | 2 +- .../csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION | 2 +- .../petstore/csharp/OpenAPIClient/.openapi-generator/VERSION | 2 +- .../dart-dio/petstore_client_lib/.openapi-generator/VERSION | 2 +- .../flutter_petstore/openapi/.openapi-generator/VERSION | 2 +- .../flutter_proto_petstore/openapi/.openapi-generator/VERSION | 2 +- .../petstore/dart-jaguar/openapi/.openapi-generator/VERSION | 2 +- .../dart-jaguar/openapi_proto/.openapi-generator/VERSION | 2 +- .../dart2/petstore_client_lib/.openapi-generator/VERSION | 2 +- samples/client/petstore/elixir/.openapi-generator/VERSION | 2 +- .../client/petstore/go/go-petstore/.openapi-generator/VERSION | 2 +- samples/client/petstore/groovy/.openapi-generator/VERSION | 2 +- .../petstore/haskell-http-client/.openapi-generator/VERSION | 2 +- .../petstore/java/feign-no-nullable/.openapi-generator/VERSION | 2 +- samples/client/petstore/java/feign/.openapi-generator/VERSION | 2 +- .../petstore/java/google-api-client/.openapi-generator/VERSION | 2 +- samples/client/petstore/java/jersey1/.openapi-generator/VERSION | 2 +- .../java/jersey2-java8-localdatetime/.openapi-generator/VERSION | 2 +- .../petstore/java/jersey2-java8/.openapi-generator/VERSION | 2 +- .../java/microprofile-rest-client/.openapi-generator/VERSION | 2 +- .../petstore/java/native-async/.openapi-generator/VERSION | 2 +- samples/client/petstore/java/native/.openapi-generator/VERSION | 2 +- .../okhttp-gson-dynamicOperations/.openapi-generator/VERSION | 2 +- .../java/okhttp-gson-parcelableModel/.openapi-generator/VERSION | 2 +- .../client/petstore/java/okhttp-gson/.openapi-generator/VERSION | 2 +- .../java/rest-assured-jackson/.openapi-generator/VERSION | 2 +- .../petstore/java/rest-assured/.openapi-generator/VERSION | 2 +- .../client/petstore/java/resteasy/.openapi-generator/VERSION | 2 +- .../java/resttemplate-withXml/.openapi-generator/VERSION | 2 +- .../petstore/java/resttemplate/.openapi-generator/VERSION | 2 +- .../petstore/java/retrofit2-play26/.openapi-generator/VERSION | 2 +- .../client/petstore/java/retrofit2/.openapi-generator/VERSION | 2 +- .../petstore/java/retrofit2rx2/.openapi-generator/VERSION | 2 +- .../petstore/java/retrofit2rx3/.openapi-generator/VERSION | 2 +- .../petstore/java/vertx-no-nullable/.openapi-generator/VERSION | 2 +- samples/client/petstore/java/vertx/.openapi-generator/VERSION | 2 +- .../client/petstore/java/webclient/.openapi-generator/VERSION | 2 +- .../client/petstore/javascript-es6/.openapi-generator/VERSION | 2 +- .../petstore/javascript-promise-es6/.openapi-generator/VERSION | 2 +- samples/client/petstore/kotlin-gson/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-jackson/.openapi-generator/VERSION | 2 +- .../kotlin-json-request-string/.openapi-generator/VERSION | 2 +- .../kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-moshi-codegen/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-multiplatform/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-nonpublic/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-nullable/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-okhttp3/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-retrofit2/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-string/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-threetenbp/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-uppercase-enum/.openapi-generator/VERSION | 2 +- samples/client/petstore/kotlin/.openapi-generator/VERSION | 2 +- samples/client/petstore/lua/.openapi-generator/VERSION | 2 +- samples/client/petstore/nim/.openapi-generator/VERSION | 2 +- .../client/petstore/objc/core-data/.openapi-generator/VERSION | 2 +- samples/client/petstore/objc/default/.openapi-generator/VERSION | 2 +- samples/client/petstore/perl/.openapi-generator/VERSION | 2 +- .../petstore/php/OpenAPIClient-php/.openapi-generator/VERSION | 2 +- .../petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php | 2 +- .../php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/ApiException.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Configuration.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/HeaderSelector.php | 2 +- .../OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php | 2 +- .../OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php | 2 +- .../php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php | 2 +- samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/Category.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/Client.php | 2 +- samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/File.php | 2 +- .../php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php | 2 +- samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php | 2 +- .../php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php | 2 +- .../php/OpenAPIClient-php/lib/Model/HealthCheckResult.php | 2 +- .../php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php | 2 +- .../lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php | 2 +- .../php/OpenAPIClient-php/lib/Model/Model200Response.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ModelList.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/Name.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/Order.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php | 2 +- .../php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php | 2 +- .../php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php | 2 +- .../lib/Model/OuterEnumIntegerDefaultValue.php | 2 +- .../OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php | 2 +- samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php | 2 +- .../php/OpenAPIClient-php/lib/Model/SpecialModelName.php | 2 +- samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/User.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php | 2 +- samples/client/petstore/powershell/.openapi-generator/VERSION | 2 +- .../client/petstore/python-asyncio/.openapi-generator/VERSION | 2 +- .../client/petstore/python-legacy/.openapi-generator/VERSION | 2 +- .../client/petstore/python-tornado/.openapi-generator/VERSION | 2 +- samples/client/petstore/python/.openapi-generator/VERSION | 2 +- samples/client/petstore/ruby-faraday/.openapi-generator/VERSION | 2 +- samples/client/petstore/ruby-faraday/lib/petstore.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/api/default_api.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb | 2 +- .../ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/api/store_api.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/api/user_api.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/configuration.rb | 2 +- .../lib/petstore/models/additional_properties_class.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/animal.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/api_response.rb | 2 +- .../lib/petstore/models/array_of_array_of_number_only.rb | 2 +- .../ruby-faraday/lib/petstore/models/array_of_number_only.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/array_test.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/capitalization.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/category.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/class_model.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/client.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/enum_class.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/enum_test.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/file.rb | 2 +- .../ruby-faraday/lib/petstore/models/file_schema_test_class.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/format_test.rb | 2 +- .../ruby-faraday/lib/petstore/models/has_only_read_only.rb | 2 +- .../ruby-faraday/lib/petstore/models/health_check_result.rb | 2 +- .../ruby-faraday/lib/petstore/models/inline_response_default.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/list.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/map_test.rb | 2 +- .../models/mixed_properties_and_additional_properties_class.rb | 2 +- .../ruby-faraday/lib/petstore/models/model200_response.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/model_return.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/name.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/nullable_class.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/number_only.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/order.rb | 2 +- .../ruby-faraday/lib/petstore/models/outer_composite.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/outer_enum.rb | 2 +- .../lib/petstore/models/outer_enum_default_value.rb | 2 +- .../ruby-faraday/lib/petstore/models/outer_enum_integer.rb | 2 +- .../lib/petstore/models/outer_enum_integer_default_value.rb | 2 +- .../lib/petstore/models/outer_object_with_enum_property.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb | 2 +- .../ruby-faraday/lib/petstore/models/read_only_first.rb | 2 +- .../ruby-faraday/lib/petstore/models/special_model_name.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/user.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/version.rb | 2 +- samples/client/petstore/ruby-faraday/petstore.gemspec | 2 +- samples/client/petstore/ruby-faraday/spec/api_client_spec.rb | 2 +- samples/client/petstore/ruby-faraday/spec/configuration_spec.rb | 2 +- samples/client/petstore/ruby-faraday/spec/spec_helper.rb | 2 +- samples/client/petstore/ruby/.openapi-generator/VERSION | 2 +- samples/client/petstore/ruby/lib/petstore.rb | 2 +- .../client/petstore/ruby/lib/petstore/api/another_fake_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api/default_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api/fake_api.rb | 2 +- .../ruby/lib/petstore/api/fake_classname_tags123_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api/pet_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api/store_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api/user_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api_client.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api_error.rb | 2 +- samples/client/petstore/ruby/lib/petstore/configuration.rb | 2 +- .../ruby/lib/petstore/models/additional_properties_class.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/animal.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/api_response.rb | 2 +- .../ruby/lib/petstore/models/array_of_array_of_number_only.rb | 2 +- .../petstore/ruby/lib/petstore/models/array_of_number_only.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/array_test.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/capitalization.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/cat.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/category.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/class_model.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/client.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/dog.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/enum_class.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/enum_test.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/file.rb | 2 +- .../petstore/ruby/lib/petstore/models/file_schema_test_class.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/foo.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/format_test.rb | 2 +- .../petstore/ruby/lib/petstore/models/has_only_read_only.rb | 2 +- .../petstore/ruby/lib/petstore/models/health_check_result.rb | 2 +- .../ruby/lib/petstore/models/inline_response_default.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/list.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/map_test.rb | 2 +- .../models/mixed_properties_and_additional_properties_class.rb | 2 +- .../petstore/ruby/lib/petstore/models/model200_response.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/model_return.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/name.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/nullable_class.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/number_only.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/order.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/outer_composite.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb | 2 +- .../ruby/lib/petstore/models/outer_enum_default_value.rb | 2 +- .../petstore/ruby/lib/petstore/models/outer_enum_integer.rb | 2 +- .../lib/petstore/models/outer_enum_integer_default_value.rb | 2 +- .../ruby/lib/petstore/models/outer_object_with_enum_property.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/pet.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/read_only_first.rb | 2 +- .../petstore/ruby/lib/petstore/models/special_model_name.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/tag.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/user.rb | 2 +- samples/client/petstore/ruby/lib/petstore/version.rb | 2 +- samples/client/petstore/ruby/petstore.gemspec | 2 +- samples/client/petstore/ruby/spec/api_client_spec.rb | 2 +- samples/client/petstore/ruby/spec/configuration_spec.rb | 2 +- samples/client/petstore/ruby/spec/spec_helper.rb | 2 +- .../petstore/rust/hyper/petstore/.openapi-generator/VERSION | 2 +- .../rust/reqwest/petstore-async/.openapi-generator/VERSION | 2 +- .../petstore/rust/reqwest/petstore/.openapi-generator/VERSION | 2 +- samples/client/petstore/scala-akka/.openapi-generator/VERSION | 2 +- samples/client/petstore/scala-sttp/.openapi-generator/VERSION | 2 +- .../petstore/spring-cloud-async/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../spring-cloud-no-nullable/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../spring-cloud-spring-pageable/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- samples/client/petstore/spring-cloud/.openapi-generator/VERSION | 2 +- .../spring-cloud/src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- samples/client/petstore/spring-stubs/.openapi-generator/VERSION | 2 +- .../spring-stubs/src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/swift5/alamofireLibrary/.openapi-generator/VERSION | 2 +- .../petstore/swift5/combineLibrary/.openapi-generator/VERSION | 2 +- .../client/petstore/swift5/default/.openapi-generator/VERSION | 2 +- .../petstore/swift5/deprecated/.openapi-generator/VERSION | 2 +- .../petstore/swift5/nonPublicApi/.openapi-generator/VERSION | 2 +- .../petstore/swift5/objcCompatible/.openapi-generator/VERSION | 2 +- .../swift5/promisekitLibrary/.openapi-generator/VERSION | 2 +- .../swift5/readonlyProperties/.openapi-generator/VERSION | 2 +- .../petstore/swift5/resultLibrary/.openapi-generator/VERSION | 2 +- .../petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION | 2 +- .../swift5/urlsessionLibrary/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/single-request-parameter/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/with-prefixed-module-name/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../typescript-aurelia/default/.openapi-generator/VERSION | 2 +- .../builds/composed-schemas/.openapi-generator/VERSION | 2 +- .../typescript-axios/builds/default/.openapi-generator/VERSION | 2 +- .../builds/es6-target/.openapi-generator/VERSION | 2 +- .../builds/with-complex-headers/.openapi-generator/VERSION | 2 +- .../builds/with-interfaces/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../builds/with-npm-version/.openapi-generator/VERSION | 2 +- .../with-single-request-parameters/.openapi-generator/VERSION | 2 +- .../builds/default-v3.0/.openapi-generator/VERSION | 2 +- .../typescript-fetch/builds/default/.openapi-generator/VERSION | 2 +- .../typescript-fetch/builds/enum/.openapi-generator/VERSION | 2 +- .../builds/es6-target/.openapi-generator/VERSION | 2 +- .../builds/multiple-parameters/.openapi-generator/VERSION | 2 +- .../prefix-parameter-interfaces/.openapi-generator/VERSION | 2 +- .../builds/typescript-three-plus/.openapi-generator/VERSION | 2 +- .../builds/with-interfaces/.openapi-generator/VERSION | 2 +- .../builds/with-npm-version/.openapi-generator/VERSION | 2 +- .../builds/without-runtime-checks/.openapi-generator/VERSION | 2 +- .../petstore/typescript-inversify/.openapi-generator/VERSION | 2 +- .../typescript-jquery/default/.openapi-generator/VERSION | 2 +- .../petstore/typescript-jquery/npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../petstore/typescript-node/default/.openapi-generator/VERSION | 2 +- .../petstore/typescript-node/npm/.openapi-generator/VERSION | 2 +- .../builds/with-npm-version/.openapi-generator/VERSION | 2 +- .../typescript-rxjs/builds/default/.openapi-generator/VERSION | 2 +- .../builds/es6-target/.openapi-generator/VERSION | 2 +- .../builds/with-npm-version/.openapi-generator/VERSION | 2 +- .../builds/with-progress-subscriber/.openapi-generator/VERSION | 2 +- .../config/petstore/protobuf-schema/.openapi-generator/VERSION | 2 +- samples/openapi3/client/elm/.openapi-generator/VERSION | 2 +- .../x-auth-id-alias/go-experimental/.openapi-generator/VERSION | 2 +- .../java/jersey2-java8/.openapi-generator/VERSION | 2 +- .../x-auth-id-alias/python/.openapi-generator/VERSION | 2 +- .../x-auth-id-alias/ruby-client/.openapi-generator/VERSION | 2 +- .../x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb | 2 +- .../ruby-client/lib/x_auth_id_alias/api/usage_api.rb | 2 +- .../ruby-client/lib/x_auth_id_alias/api_client.rb | 2 +- .../ruby-client/lib/x_auth_id_alias/api_error.rb | 2 +- .../ruby-client/lib/x_auth_id_alias/configuration.rb | 2 +- .../x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb | 2 +- .../x-auth-id-alias/ruby-client/spec/api_client_spec.rb | 2 +- .../x-auth-id-alias/ruby-client/spec/configuration_spec.rb | 2 +- .../extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb | 2 +- .../x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec | 2 +- .../features/dynamic-servers/python/.openapi-generator/VERSION | 2 +- .../features/dynamic-servers/ruby/.openapi-generator/VERSION | 2 +- .../features/dynamic-servers/ruby/dynamic_servers.gemspec | 2 +- .../client/features/dynamic-servers/ruby/lib/dynamic_servers.rb | 2 +- .../dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb | 2 +- .../dynamic-servers/ruby/lib/dynamic_servers/api_client.rb | 2 +- .../dynamic-servers/ruby/lib/dynamic_servers/api_error.rb | 2 +- .../dynamic-servers/ruby/lib/dynamic_servers/configuration.rb | 2 +- .../dynamic-servers/ruby/lib/dynamic_servers/version.rb | 2 +- .../features/dynamic-servers/ruby/spec/api_client_spec.rb | 2 +- .../features/dynamic-servers/ruby/spec/configuration_spec.rb | 2 +- .../client/features/dynamic-servers/ruby/spec/spec_helper.rb | 2 +- .../ruby-client/.openapi-generator/VERSION | 2 +- .../generate-alias-as-model/ruby-client/lib/petstore.rb | 2 +- .../ruby-client/lib/petstore/api/usage_api.rb | 2 +- .../ruby-client/lib/petstore/api_client.rb | 2 +- .../ruby-client/lib/petstore/api_error.rb | 2 +- .../ruby-client/lib/petstore/configuration.rb | 2 +- .../ruby-client/lib/petstore/models/array_alias.rb | 2 +- .../ruby-client/lib/petstore/models/map_alias.rb | 2 +- .../generate-alias-as-model/ruby-client/lib/petstore/version.rb | 2 +- .../generate-alias-as-model/ruby-client/petstore.gemspec | 2 +- .../generate-alias-as-model/ruby-client/spec/api_client_spec.rb | 2 +- .../ruby-client/spec/configuration_spec.rb | 2 +- .../generate-alias-as-model/ruby-client/spec/spec_helper.rb | 2 +- .../dart-dio/petstore_client_lib/.openapi-generator/VERSION | 2 +- .../petstore_client_lib_fake/.openapi-generator/VERSION | 2 +- .../dart2/petstore_client_lib/.openapi-generator/VERSION | 2 +- .../dart2/petstore_client_lib_fake/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../client/petstore/go/go-petstore/.openapi-generator/VERSION | 2 +- .../jersey2-java8-special-characters/.openapi-generator/VERSION | 2 +- .../petstore/java/jersey2-java8/.openapi-generator/VERSION | 2 +- .../client/petstore/java/native/.openapi-generator/VERSION | 2 +- .../client/petstore/python-legacy/.openapi-generator/VERSION | 2 +- .../openapi3/client/petstore/python/.openapi-generator/VERSION | 2 +- .../typescript/builds/default/.openapi-generator/VERSION | 2 +- .../petstore/typescript/builds/deno/.openapi-generator/VERSION | 2 +- .../typescript/builds/inversify/.openapi-generator/VERSION | 2 +- .../typescript/builds/jquery/.openapi-generator/VERSION | 2 +- .../typescript/builds/object_params/.openapi-generator/VERSION | 2 +- samples/schema/petstore/ktorm/.openapi-generator/VERSION | 2 +- samples/schema/petstore/mysql/.openapi-generator/VERSION | 2 +- .../server/petstore/aspnetcore-3.0/.openapi-generator/VERSION | 2 +- .../server/petstore/aspnetcore-3.1/.openapi-generator/VERSION | 2 +- .../server/petstore/aspnetcore-5.0/.openapi-generator/VERSION | 2 +- samples/server/petstore/aspnetcore/.openapi-generator/VERSION | 2 +- .../cpp-qt5-qhttpengine-server/.openapi-generator/VERSION | 2 +- .../server/petstore/go-api-server/.openapi-generator/VERSION | 2 +- .../petstore/go-gin-api-server/.openapi-generator/VERSION | 2 +- samples/server/petstore/java-msf4j/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../java-play-framework-async/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../java-play-framework-no-interface/.openapi-generator/VERSION | 2 +- .../java-play-framework-no-nullable/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../petstore/java-play-framework/.openapi-generator/VERSION | 2 +- .../server/petstore/java-undertow/.openapi-generator/VERSION | 2 +- .../server/petstore/java-vertx-web/.openapi-generator/VERSION | 2 +- .../jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION | 2 +- .../jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION | 2 +- .../server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION | 2 +- .../jaxrs-cxf-non-spring-app/.openapi-generator/VERSION | 2 +- samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION | 2 +- .../server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION | 2 +- samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION | 2 +- .../jaxrs-resteasy/default-value/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs-resteasy/default/.openapi-generator/VERSION | 2 +- .../jaxrs-resteasy/eap-java8/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs-spec-interface/.openapi-generator/VERSION | 2 +- samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION | 2 +- .../server/petstore/jaxrs/jersey1/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION | 2 +- .../server/petstore/jaxrs/jersey2/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-server/ktor/.openapi-generator/VERSION | 2 +- samples/server/petstore/kotlin-server/ktor/README.md | 2 +- .../kotlin-springboot-delegate/.openapi-generator/VERSION | 2 +- .../src/main/kotlin/org/openapitools/api/PetApi.kt | 2 +- .../src/main/kotlin/org/openapitools/api/StoreApi.kt | 2 +- .../src/main/kotlin/org/openapitools/api/UserApi.kt | 2 +- .../kotlin-springboot-reactive/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-springboot/.openapi-generator/VERSION | 2 +- samples/server/petstore/php-laravel/.openapi-generator/VERSION | 2 +- samples/server/petstore/php-lumen/.openapi-generator/VERSION | 2 +- .../server/petstore/php-mezzio-ph/.openapi-generator/VERSION | 2 +- samples/server/petstore/php-slim4/.openapi-generator/VERSION | 2 +- .../php-symfony/SymfonyBundle-php/.openapi-generator/VERSION | 2 +- .../python-aiohttp-srclayout/.openapi-generator/VERSION | 2 +- .../server/petstore/python-aiohttp/.openapi-generator/VERSION | 2 +- .../petstore/python-blueplanet/.openapi-generator/VERSION | 2 +- samples/server/petstore/python-flask/.openapi-generator/VERSION | 2 +- .../rust-server/output/multipart-v3/.openapi-generator/VERSION | 2 +- .../rust-server/output/no-example-v3/.openapi-generator/VERSION | 2 +- .../rust-server/output/openapi-v3/.openapi-generator/VERSION | 2 +- .../rust-server/output/ops-v3/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../output/ping-bearer-auth/.openapi-generator/VERSION | 2 +- .../output/rust-server-test/.openapi-generator/VERSION | 2 +- .../spring-mvc-default-value/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/TestHeadersApi.java | 2 +- .../src/main/java/org/openapitools/api/TestQueryParamsApi.java | 2 +- .../petstore/spring-mvc-j8-async/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../spring-mvc-j8-localdatetime/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/spring-mvc-no-nullable/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../spring-mvc-spring-pageable/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- samples/server/petstore/spring-mvc/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../spring-mvc/src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../spring-mvc/src/main/java/org/openapitools/api/PetApi.java | 2 +- .../spring-mvc/src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../spring-mvc/src/main/java/org/openapitools/api/UserApi.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../springboot-beanvalidation/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/springboot-delegate-j8/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/springboot-delegate/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../springboot-implicitHeaders/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/springboot-reactive/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../springboot-spring-pageable/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/springboot-useoptional/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/springboot-virtualan/.openapi-generator/VERSION | 2 +- .../java/org/openapitools/virtualan/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/virtualan/api/FakeApi.java | 2 +- .../org/openapitools/virtualan/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/virtualan/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/virtualan/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/virtualan/api/UserApi.java | 2 +- samples/server/petstore/springboot/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../springboot/src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../springboot/src/main/java/org/openapitools/api/PetApi.java | 2 +- .../springboot/src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../springboot/src/main/java/org/openapitools/api/UserApi.java | 2 +- 654 files changed, 654 insertions(+), 654 deletions(-) diff --git a/modules/openapi-generator-cli/pom.xml b/modules/openapi-generator-cli/pom.xml index 3d97efb83457..fb3c5139b0e3 100644 --- a/modules/openapi-generator-cli/pom.xml +++ b/modules/openapi-generator-cli/pom.xml @@ -4,7 +4,7 @@ org.openapitools openapi-generator-project - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT ../.. diff --git a/modules/openapi-generator-core/pom.xml b/modules/openapi-generator-core/pom.xml index 7995a10523e5..dc964764aa68 100644 --- a/modules/openapi-generator-core/pom.xml +++ b/modules/openapi-generator-core/pom.xml @@ -6,7 +6,7 @@ openapi-generator-project org.openapitools - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT ../.. diff --git a/modules/openapi-generator-gradle-plugin/gradle.properties b/modules/openapi-generator-gradle-plugin/gradle.properties index c82f792a787a..01c9f563508e 100644 --- a/modules/openapi-generator-gradle-plugin/gradle.properties +++ b/modules/openapi-generator-gradle-plugin/gradle.properties @@ -1,5 +1,5 @@ # RELEASE_VERSION -openApiGeneratorVersion=5.1.1-SNAPSHOT +openApiGeneratorVersion=5.2.0-SNAPSHOT # /RELEASE_VERSION # BEGIN placeholders diff --git a/modules/openapi-generator-gradle-plugin/pom.xml b/modules/openapi-generator-gradle-plugin/pom.xml index bcf9abfe79e1..fc856601f671 100644 --- a/modules/openapi-generator-gradle-plugin/pom.xml +++ b/modules/openapi-generator-gradle-plugin/pom.xml @@ -4,7 +4,7 @@ org.openapitools openapi-generator-project - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT ../.. diff --git a/modules/openapi-generator-gradle-plugin/samples/local-spec/gradle.properties b/modules/openapi-generator-gradle-plugin/samples/local-spec/gradle.properties index 589e91215782..8b65b3b4572d 100644 --- a/modules/openapi-generator-gradle-plugin/samples/local-spec/gradle.properties +++ b/modules/openapi-generator-gradle-plugin/samples/local-spec/gradle.properties @@ -1,3 +1,3 @@ # RELEASE_VERSION -openApiGeneratorVersion=5.1.1-SNAPSHOT +openApiGeneratorVersion=5.2.0-SNAPSHOT # /RELEASE_VERSION diff --git a/modules/openapi-generator-maven-plugin/examples/java-client.xml b/modules/openapi-generator-maven-plugin/examples/java-client.xml index bd5f9cbc6c96..fb7e9a810c3d 100644 --- a/modules/openapi-generator-maven-plugin/examples/java-client.xml +++ b/modules/openapi-generator-maven-plugin/examples/java-client.xml @@ -13,7 +13,7 @@ org.openapitools openapi-generator-maven-plugin - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT diff --git a/modules/openapi-generator-maven-plugin/examples/kotlin.xml b/modules/openapi-generator-maven-plugin/examples/kotlin.xml index f501797cec62..d6ddeeb890db 100644 --- a/modules/openapi-generator-maven-plugin/examples/kotlin.xml +++ b/modules/openapi-generator-maven-plugin/examples/kotlin.xml @@ -15,7 +15,7 @@ org.openapitools openapi-generator-maven-plugin - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT diff --git a/modules/openapi-generator-maven-plugin/examples/multi-module/java-client/pom.xml b/modules/openapi-generator-maven-plugin/examples/multi-module/java-client/pom.xml index 04e2e1dd6127..b2a3696e1c08 100644 --- a/modules/openapi-generator-maven-plugin/examples/multi-module/java-client/pom.xml +++ b/modules/openapi-generator-maven-plugin/examples/multi-module/java-client/pom.xml @@ -19,7 +19,7 @@ org.openapitools openapi-generator-maven-plugin - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT diff --git a/modules/openapi-generator-maven-plugin/examples/non-java-invalid-spec.xml b/modules/openapi-generator-maven-plugin/examples/non-java-invalid-spec.xml index 2fdca946a92f..f3ef4ff8d49c 100644 --- a/modules/openapi-generator-maven-plugin/examples/non-java-invalid-spec.xml +++ b/modules/openapi-generator-maven-plugin/examples/non-java-invalid-spec.xml @@ -13,7 +13,7 @@ org.openapitools openapi-generator-maven-plugin - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT diff --git a/modules/openapi-generator-maven-plugin/examples/non-java.xml b/modules/openapi-generator-maven-plugin/examples/non-java.xml index 808f52ddc066..1f18f87d7553 100644 --- a/modules/openapi-generator-maven-plugin/examples/non-java.xml +++ b/modules/openapi-generator-maven-plugin/examples/non-java.xml @@ -13,7 +13,7 @@ org.openapitools openapi-generator-maven-plugin - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT diff --git a/modules/openapi-generator-maven-plugin/examples/spring.xml b/modules/openapi-generator-maven-plugin/examples/spring.xml index 538b3a1f3d03..c0932d04dd09 100644 --- a/modules/openapi-generator-maven-plugin/examples/spring.xml +++ b/modules/openapi-generator-maven-plugin/examples/spring.xml @@ -20,7 +20,7 @@ org.openapitools openapi-generator-maven-plugin - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT diff --git a/modules/openapi-generator-maven-plugin/pom.xml b/modules/openapi-generator-maven-plugin/pom.xml index 4de0f38b2b5a..f58c7f17bcd1 100644 --- a/modules/openapi-generator-maven-plugin/pom.xml +++ b/modules/openapi-generator-maven-plugin/pom.xml @@ -5,7 +5,7 @@ org.openapitools openapi-generator-project - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT ../.. diff --git a/modules/openapi-generator-online/pom.xml b/modules/openapi-generator-online/pom.xml index 16e5b8b6f3fa..eff136ed4a37 100644 --- a/modules/openapi-generator-online/pom.xml +++ b/modules/openapi-generator-online/pom.xml @@ -4,7 +4,7 @@ org.openapitools openapi-generator-project - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT ../.. diff --git a/modules/openapi-generator/pom.xml b/modules/openapi-generator/pom.xml index 8c5211e0637a..2347fc4090ea 100644 --- a/modules/openapi-generator/pom.xml +++ b/modules/openapi-generator/pom.xml @@ -4,7 +4,7 @@ org.openapitools openapi-generator-project - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT ../.. diff --git a/pom.xml b/pom.xml index 30babe9a9729..d9cf582c4f99 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ pom openapi-generator-project - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT https://github.com/openapitools/openapi-generator diff --git a/samples/client/petstore/R/.openapi-generator/VERSION b/samples/client/petstore/R/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/R/.openapi-generator/VERSION +++ b/samples/client/petstore/R/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/apex/.openapi-generator/VERSION b/samples/client/petstore/apex/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/apex/.openapi-generator/VERSION +++ b/samples/client/petstore/apex/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/c/.openapi-generator/VERSION b/samples/client/petstore/c/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/c/.openapi-generator/VERSION +++ b/samples/client/petstore/c/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION b/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION +++ b/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION b/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION +++ b/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp b/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp index ed3804a63930..cb51123c894d 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp +++ b/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ApiClient.h b/samples/client/petstore/cpp-restsdk/client/ApiClient.h index 3fe71f4fec92..46e2f100ef29 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiClient.h +++ b/samples/client/petstore/cpp-restsdk/client/ApiClient.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp index 728a0ccdc584..52554ff63c7b 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp +++ b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h index 6251627ba436..74c298a5a94c 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h +++ b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ApiException.cpp b/samples/client/petstore/cpp-restsdk/client/ApiException.cpp index cb21e1298177..bfae070986ee 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiException.cpp +++ b/samples/client/petstore/cpp-restsdk/client/ApiException.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ApiException.h b/samples/client/petstore/cpp-restsdk/client/ApiException.h index ec28c60f25b0..cd7915e04e0d 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiException.h +++ b/samples/client/petstore/cpp-restsdk/client/ApiException.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp b/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp index 8a5d29f45bb2..9de06a9eea1e 100644 --- a/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp +++ b/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/HttpContent.h b/samples/client/petstore/cpp-restsdk/client/HttpContent.h index 05cac432a0df..ffba49f782a8 100644 --- a/samples/client/petstore/cpp-restsdk/client/HttpContent.h +++ b/samples/client/petstore/cpp-restsdk/client/HttpContent.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/IHttpBody.h b/samples/client/petstore/cpp-restsdk/client/IHttpBody.h index b54af3c2097f..1a1b0a55e908 100644 --- a/samples/client/petstore/cpp-restsdk/client/IHttpBody.h +++ b/samples/client/petstore/cpp-restsdk/client/IHttpBody.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp b/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp index 91626b210597..658ef28191c8 100644 --- a/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp +++ b/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/JsonBody.h b/samples/client/petstore/cpp-restsdk/client/JsonBody.h index 90b3eb906dbc..f9717b9c9bea 100644 --- a/samples/client/petstore/cpp-restsdk/client/JsonBody.h +++ b/samples/client/petstore/cpp-restsdk/client/JsonBody.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp b/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp index fcc6a2cd6d8a..4803353fa2c6 100644 --- a/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp +++ b/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ModelBase.h b/samples/client/petstore/cpp-restsdk/client/ModelBase.h index 228969e55c0f..417c04a69e0c 100644 --- a/samples/client/petstore/cpp-restsdk/client/ModelBase.h +++ b/samples/client/petstore/cpp-restsdk/client/ModelBase.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp index b979bc4af517..c6c22d581856 100644 --- a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp +++ b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h index 8d1dc908666a..ea1f59b31a41 100644 --- a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h +++ b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/Object.cpp b/samples/client/petstore/cpp-restsdk/client/Object.cpp index 5e5e3fb1ddf4..0c05fe80e4bb 100644 --- a/samples/client/petstore/cpp-restsdk/client/Object.cpp +++ b/samples/client/petstore/cpp-restsdk/client/Object.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/Object.h b/samples/client/petstore/cpp-restsdk/client/Object.h index 38eb4031c4df..fcb51a1da3b4 100644 --- a/samples/client/petstore/cpp-restsdk/client/Object.h +++ b/samples/client/petstore/cpp-restsdk/client/Object.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp b/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp index 83a11eec83d2..fe9bcacf4582 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp +++ b/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/PetApi.h b/samples/client/petstore/cpp-restsdk/client/api/PetApi.h index fc1dbb645afe..694cde1512cc 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/PetApi.h +++ b/samples/client/petstore/cpp-restsdk/client/api/PetApi.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp index b16721b01fd6..b60e41cfcfce 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp +++ b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h index 2e14f86c1c57..c5241a6e2d8d 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h +++ b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp b/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp index 1f882a6404bf..4927b6785ecb 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp +++ b/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/UserApi.h b/samples/client/petstore/cpp-restsdk/client/api/UserApi.h index ac86e5a99111..c4aa9ed60249 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/UserApi.h +++ b/samples/client/petstore/cpp-restsdk/client/api/UserApi.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp index 5d7b3e3c70c0..e43dcecded18 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h index 08e5ae881d1f..f892cedb7f87 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h +++ b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Category.cpp b/samples/client/petstore/cpp-restsdk/client/model/Category.cpp index 07cc8c4795e9..38ee7a831309 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Category.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/Category.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Category.h b/samples/client/petstore/cpp-restsdk/client/model/Category.h index 5dffad3f8181..5aab92bf04d4 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Category.h +++ b/samples/client/petstore/cpp-restsdk/client/model/Category.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Order.cpp b/samples/client/petstore/cpp-restsdk/client/model/Order.cpp index 07bc660c60e3..17f40a62a73d 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Order.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/Order.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Order.h b/samples/client/petstore/cpp-restsdk/client/model/Order.h index 952662b984f2..dbe4b2cb7745 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Order.h +++ b/samples/client/petstore/cpp-restsdk/client/model/Order.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp b/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp index 63eeecb446de..e7e6228a95f7 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Pet.h b/samples/client/petstore/cpp-restsdk/client/model/Pet.h index 37027d2960ae..543a4fed12e5 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Pet.h +++ b/samples/client/petstore/cpp-restsdk/client/model/Pet.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp b/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp index 1bcc796db30b..401b81b68931 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Tag.h b/samples/client/petstore/cpp-restsdk/client/model/Tag.h index 96efc9b42bbc..f183c7adf9d8 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Tag.h +++ b/samples/client/petstore/cpp-restsdk/client/model/Tag.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/User.cpp b/samples/client/petstore/cpp-restsdk/client/model/User.cpp index 7a742815920a..3065eb0b5542 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/User.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/User.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/User.h b/samples/client/petstore/cpp-restsdk/client/model/User.h index 92ab01e42ac4..731b2517d6d1 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/User.h +++ b/samples/client/petstore/cpp-restsdk/client/model/User.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.2.0-SNAPSHOT. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/crystal/.openapi-generator/VERSION b/samples/client/petstore/crystal/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/crystal/.openapi-generator/VERSION +++ b/samples/client/petstore/crystal/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/crystal/.travis.yml b/samples/client/petstore/crystal/.travis.yml index a8fa5ad86ea1..b40e33fb20e5 100644 --- a/samples/client/petstore/crystal/.travis.yml +++ b/samples/client/petstore/crystal/.travis.yml @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # language: crystal diff --git a/samples/client/petstore/crystal/spec/spec_helper.cr b/samples/client/petstore/crystal/spec/spec_helper.cr index 5a27efa1a2fa..6532505ff2b2 100644 --- a/samples/client/petstore/crystal/spec/spec_helper.cr +++ b/samples/client/petstore/crystal/spec/spec_helper.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # # load modules diff --git a/samples/client/petstore/crystal/src/petstore.cr b/samples/client/petstore/crystal/src/petstore.cr index 13d16661a6bd..1f02cc1930df 100644 --- a/samples/client/petstore/crystal/src/petstore.cr +++ b/samples/client/petstore/crystal/src/petstore.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # # Dependencies diff --git a/samples/client/petstore/crystal/src/petstore/api/pet_api.cr b/samples/client/petstore/crystal/src/petstore/api/pet_api.cr index efcf4a26ff09..7e672a21a613 100644 --- a/samples/client/petstore/crystal/src/petstore/api/pet_api.cr +++ b/samples/client/petstore/crystal/src/petstore/api/pet_api.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "uri" diff --git a/samples/client/petstore/crystal/src/petstore/api/store_api.cr b/samples/client/petstore/crystal/src/petstore/api/store_api.cr index 226a3a779517..126dbab7bf42 100644 --- a/samples/client/petstore/crystal/src/petstore/api/store_api.cr +++ b/samples/client/petstore/crystal/src/petstore/api/store_api.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "uri" diff --git a/samples/client/petstore/crystal/src/petstore/api/user_api.cr b/samples/client/petstore/crystal/src/petstore/api/user_api.cr index 6601e7d57ea7..2b6d6acdace5 100644 --- a/samples/client/petstore/crystal/src/petstore/api/user_api.cr +++ b/samples/client/petstore/crystal/src/petstore/api/user_api.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "uri" diff --git a/samples/client/petstore/crystal/src/petstore/api_client.cr b/samples/client/petstore/crystal/src/petstore/api_client.cr index 579bc3f3b968..75fe8faa2032 100644 --- a/samples/client/petstore/crystal/src/petstore/api_client.cr +++ b/samples/client/petstore/crystal/src/petstore/api_client.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "json" diff --git a/samples/client/petstore/crystal/src/petstore/api_error.cr b/samples/client/petstore/crystal/src/petstore/api_error.cr index 9e7c178a48ff..ef28c709d56a 100644 --- a/samples/client/petstore/crystal/src/petstore/api_error.cr +++ b/samples/client/petstore/crystal/src/petstore/api_error.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # module Petstore diff --git a/samples/client/petstore/crystal/src/petstore/configuration.cr b/samples/client/petstore/crystal/src/petstore/configuration.cr index 0b97ee465e34..780228391592 100644 --- a/samples/client/petstore/crystal/src/petstore/configuration.cr +++ b/samples/client/petstore/crystal/src/petstore/configuration.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "log" diff --git a/samples/client/petstore/crystal/src/petstore/models/api_response.cr b/samples/client/petstore/crystal/src/petstore/models/api_response.cr index 57d64a5c8fb8..b0603e98c032 100644 --- a/samples/client/petstore/crystal/src/petstore/models/api_response.cr +++ b/samples/client/petstore/crystal/src/petstore/models/api_response.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "time" diff --git a/samples/client/petstore/crystal/src/petstore/models/category.cr b/samples/client/petstore/crystal/src/petstore/models/category.cr index 5d05264ea490..d96bac1cf1c6 100644 --- a/samples/client/petstore/crystal/src/petstore/models/category.cr +++ b/samples/client/petstore/crystal/src/petstore/models/category.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "time" diff --git a/samples/client/petstore/crystal/src/petstore/models/order.cr b/samples/client/petstore/crystal/src/petstore/models/order.cr index 4941aa0126cc..ee5a4356492a 100644 --- a/samples/client/petstore/crystal/src/petstore/models/order.cr +++ b/samples/client/petstore/crystal/src/petstore/models/order.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "time" diff --git a/samples/client/petstore/crystal/src/petstore/models/pet.cr b/samples/client/petstore/crystal/src/petstore/models/pet.cr index 7d63ff38d555..91e5552b02e9 100644 --- a/samples/client/petstore/crystal/src/petstore/models/pet.cr +++ b/samples/client/petstore/crystal/src/petstore/models/pet.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "time" diff --git a/samples/client/petstore/crystal/src/petstore/models/tag.cr b/samples/client/petstore/crystal/src/petstore/models/tag.cr index 85051f4ad6b7..4121f2e67a78 100644 --- a/samples/client/petstore/crystal/src/petstore/models/tag.cr +++ b/samples/client/petstore/crystal/src/petstore/models/tag.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "time" diff --git a/samples/client/petstore/crystal/src/petstore/models/user.cr b/samples/client/petstore/crystal/src/petstore/models/user.cr index d3bce3feb3be..4f0d617e98dd 100644 --- a/samples/client/petstore/crystal/src/petstore/models/user.cr +++ b/samples/client/petstore/crystal/src/petstore/models/user.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.2.0-SNAPSHOT # require "time" diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION b/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION b/samples/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION +++ b/samples/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/dart-jaguar/flutter_petstore/openapi/.openapi-generator/VERSION b/samples/client/petstore/dart-jaguar/flutter_petstore/openapi/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/dart-jaguar/flutter_petstore/openapi/.openapi-generator/VERSION +++ b/samples/client/petstore/dart-jaguar/flutter_petstore/openapi/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/dart-jaguar/flutter_proto_petstore/openapi/.openapi-generator/VERSION b/samples/client/petstore/dart-jaguar/flutter_proto_petstore/openapi/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/dart-jaguar/flutter_proto_petstore/openapi/.openapi-generator/VERSION +++ b/samples/client/petstore/dart-jaguar/flutter_proto_petstore/openapi/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/dart-jaguar/openapi/.openapi-generator/VERSION b/samples/client/petstore/dart-jaguar/openapi/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/dart-jaguar/openapi/.openapi-generator/VERSION +++ b/samples/client/petstore/dart-jaguar/openapi/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/dart-jaguar/openapi_proto/.openapi-generator/VERSION b/samples/client/petstore/dart-jaguar/openapi_proto/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/dart-jaguar/openapi_proto/.openapi-generator/VERSION +++ b/samples/client/petstore/dart-jaguar/openapi_proto/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION b/samples/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION +++ b/samples/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/elixir/.openapi-generator/VERSION b/samples/client/petstore/elixir/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/elixir/.openapi-generator/VERSION +++ b/samples/client/petstore/elixir/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION b/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/groovy/.openapi-generator/VERSION b/samples/client/petstore/groovy/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/groovy/.openapi-generator/VERSION +++ b/samples/client/petstore/groovy/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION b/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION +++ b/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION b/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION +++ b/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/feign/.openapi-generator/VERSION b/samples/client/petstore/java/feign/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/feign/.openapi-generator/VERSION +++ b/samples/client/petstore/java/feign/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION b/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION +++ b/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/jersey1/.openapi-generator/VERSION b/samples/client/petstore/java/jersey1/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/jersey1/.openapi-generator/VERSION +++ b/samples/client/petstore/java/jersey1/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION b/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION +++ b/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION b/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION +++ b/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION b/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION +++ b/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/native-async/.openapi-generator/VERSION b/samples/client/petstore/java/native-async/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/native-async/.openapi-generator/VERSION +++ b/samples/client/petstore/java/native-async/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/native/.openapi-generator/VERSION b/samples/client/petstore/java/native/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/native/.openapi-generator/VERSION +++ b/samples/client/petstore/java/native/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION b/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION +++ b/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION b/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION +++ b/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION b/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION +++ b/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION b/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION +++ b/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION b/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION +++ b/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/resteasy/.openapi-generator/VERSION b/samples/client/petstore/java/resteasy/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/resteasy/.openapi-generator/VERSION +++ b/samples/client/petstore/java/resteasy/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION b/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION +++ b/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION b/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION +++ b/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION +++ b/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION +++ b/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION +++ b/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION +++ b/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION b/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION +++ b/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/vertx/.openapi-generator/VERSION b/samples/client/petstore/java/vertx/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/vertx/.openapi-generator/VERSION +++ b/samples/client/petstore/java/vertx/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/java/webclient/.openapi-generator/VERSION b/samples/client/petstore/java/webclient/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/java/webclient/.openapi-generator/VERSION +++ b/samples/client/petstore/java/webclient/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/javascript-es6/.openapi-generator/VERSION b/samples/client/petstore/javascript-es6/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/javascript-es6/.openapi-generator/VERSION +++ b/samples/client/petstore/javascript-es6/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION b/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION +++ b/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION b/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION b/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION b/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION b/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION b/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION b/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-string/.openapi-generator/VERSION b/samples/client/petstore/kotlin-string/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-string/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-string/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/kotlin/.openapi-generator/VERSION b/samples/client/petstore/kotlin/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/kotlin/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/lua/.openapi-generator/VERSION b/samples/client/petstore/lua/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/lua/.openapi-generator/VERSION +++ b/samples/client/petstore/lua/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/nim/.openapi-generator/VERSION b/samples/client/petstore/nim/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/nim/.openapi-generator/VERSION +++ b/samples/client/petstore/nim/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/objc/core-data/.openapi-generator/VERSION b/samples/client/petstore/objc/core-data/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/objc/core-data/.openapi-generator/VERSION +++ b/samples/client/petstore/objc/core-data/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/objc/default/.openapi-generator/VERSION b/samples/client/petstore/objc/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/objc/default/.openapi-generator/VERSION +++ b/samples/client/petstore/objc/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/perl/.openapi-generator/VERSION b/samples/client/petstore/perl/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/perl/.openapi-generator/VERSION +++ b/samples/client/petstore/perl/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION +++ b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php index ead5b3c65f10..4905cc16f4b5 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php @@ -17,7 +17,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php index cdee737dcbca..d88009eaae7b 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php @@ -17,7 +17,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php index 85bdf8b8b431..589231247c35 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php @@ -17,7 +17,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php index 1bf9e08dbd48..bf9294690cfb 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php @@ -17,7 +17,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php index eac844650d81..7361dd7b6313 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php @@ -17,7 +17,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php index fd2cbfe60f49..e62c899aef5b 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php @@ -17,7 +17,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php index 7f380d187185..652f354c449d 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php @@ -17,7 +17,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php b/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php index e858f99e1b86..b0ea0ab6b5ab 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php @@ -17,7 +17,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php index cf931ae29bf1..929863b30351 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php @@ -17,7 +17,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php b/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php index 6c586d11a312..26336cbeee5c 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php @@ -17,7 +17,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php index 523ba3279788..26ba887c2b0e 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php index e36094265161..9047ef5007cc 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php index 66ebf80a39f3..d5ef879fb159 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php index e9e571f859da..44ec9b84be19 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php index 3e1431cf014b..bfe558117f0f 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php index 22a912415ee3..1c9fec6281eb 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php index 9b282d3e50e0..41442025fd5d 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php index 94e7a3b209c1..df587132e89e 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php index efd89de0ce0b..51d0fa9f86c7 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php index 266efef15f41..bfaefa57035b 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php index 1d8705a3db01..358441e141b1 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php index 902019253ce2..b7b2cdce0d92 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php index 7f7fa2781ec9..c68cf10c7bcd 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php index 99a992b61a77..5593dd5cee86 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php index 89c3d2d8877b..4c9c9f5225bb 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php index f78a407acbdf..52309989bf85 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php index 68d7d26213f6..b036b1da0391 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php index 8adb43821aba..8eb2d3ba7af1 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php index 02208bc6e3bb..8a005aa80ffa 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php index 271a9f170caa..c5cccf134fda 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php index 02b01fde7c68..bacf91e0685f 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php index 15d671e56193..391fb82e9276 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php index 3d7e15944ca3..3ab55c3be230 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php index 7d16be6ad7e5..fd6f623f0c0f 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php index aa803d6071d6..de3111f6d6dc 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php index 626d4d5a2f5a..11289da1444f 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php index c041f5991137..ed985e6311ec 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php index 627927f32caa..3edb2f54667d 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php index 065dba1c2ae6..fcaa61d6dbd1 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php index 6581057641ae..a577e3305712 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php index 4f623ce2aa6c..d3aeaf6b432b 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php index 063855d78c9c..727a506831cb 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php index 4eae4d0d4282..577b30bc6946 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php index d37dbd3dd1ff..25b4ed3751a9 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php index ccbd24d1daea..f3564410f982 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php index 45fd9b7dbe89..9899fbc88121 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php index 41242fa43911..1e0365f36f1b 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php index 6f32448fc7c7..68e02ac17004 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php index 0d2e70ac6291..d4431fcce841 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php index f886100f2316..44e80f9f69ef 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php index 7ee94716c040..eda4397cf301 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php index 7b541be7cf0c..cf26e3ac1d0d 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php index dbb8ae2ed5fd..4d1f1ae518ed 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php index bf7d0193b978..11dbbeddc461 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php index 2706dbada96a..d73f11d1efa6 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php index ccd84696c360..1abb11cba79f 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php @@ -18,7 +18,7 @@ * The version of the OpenAPI document: 1.0.0 * * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.2.0-SNAPSHOT */ /** diff --git a/samples/client/petstore/powershell/.openapi-generator/VERSION b/samples/client/petstore/powershell/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/powershell/.openapi-generator/VERSION +++ b/samples/client/petstore/powershell/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/python-asyncio/.openapi-generator/VERSION b/samples/client/petstore/python-asyncio/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/python-asyncio/.openapi-generator/VERSION +++ b/samples/client/petstore/python-asyncio/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/python-legacy/.openapi-generator/VERSION b/samples/client/petstore/python-legacy/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/python-legacy/.openapi-generator/VERSION +++ b/samples/client/petstore/python-legacy/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/python-tornado/.openapi-generator/VERSION b/samples/client/petstore/python-tornado/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/python-tornado/.openapi-generator/VERSION +++ b/samples/client/petstore/python-tornado/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/python/.openapi-generator/VERSION b/samples/client/petstore/python/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/python/.openapi-generator/VERSION +++ b/samples/client/petstore/python/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION b/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION +++ b/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/ruby-faraday/lib/petstore.rb b/samples/client/petstore/ruby-faraday/lib/petstore.rb index 53c34a479c92..54f85714b6c9 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb index 31f396bc6fff..6145ff7431c0 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb index 8ddf6417a454..9d3dc978d094 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb index cade25d18cea..2155182abf54 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb index 2e79f8990631..fd68ab477734 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb index 5603a1a75a13..4754887194d1 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb index 3660dee4ed96..3851c7b2ab6f 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb index dfa6e8b57d35..73bca582e269 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb index 2fb744160be6..c50394c22f26 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb index 4d782c07943e..124c188d8d8d 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb b/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb index 7baf9de86426..9b2851dfaa08 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb index 523e041be8f3..01b2eb58d7f3 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb index eba827e1c697..8e737d582c84 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb index 203ffa7b52be..2bbfba46c3f0 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb index 00aeb8af61b2..057c5b787b60 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb index ef39e5f498f5..9585dd80a6ba 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb index a6ffbc5a783b..583ea424607c 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb index c27768d78d07..0d698fee60fd 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb index 56219265c257..984aee85a084 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb index c9277722620b..cca5e6828b35 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb index 622bc6faac92..3bdce1b83f3a 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb index 8fd250a74181..d185566668f1 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb index 124b4b82ed90..7f6d0947223d 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb index 82ba33c1257a..9874575bd0bb 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb index 3fadc430f4c8..62839a7cb131 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb index 29b4ca8c98d8..e281d2ddc469 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb index 4ecaa5b59314..6c44023fb2b2 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb index 28a3d7e15fca..d3416f495acf 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb index 6c94412ae1b2..76ee99558105 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb index b0766bb8b405..c07f1a43ea08 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb index f7912997098a..54eb0760f5e8 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb index dadf1b830250..0c57d78ac252 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb index efd7d13f25f2..3fe1977ba7d3 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb index a6ef81651a14..aebfc27084e6 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb index 7e16c669206f..2eb6b88a2242 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb index 7c7f31a3fbdb..f04fceff81b6 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb index 74b5bfe8f086..552d9ae330ac 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb index 142e6863ab89..bf90d3cd06f7 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb index ec5c0050ba37..bad3bfcce3a3 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb index 9614b6d779d8..d33b1bf1dac4 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb index 56e27726a180..6a1777a426da 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb index 2e73715f8815..3d0d81a74442 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb index ed136aee1a5d..7359f1b1115b 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb index fed40c355d49..6778c4b97fb3 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb index 06989683169e..b6d4bd88ace7 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb index 871c119cf872..92a7aac382b7 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb index 0da84d9c8908..7097f7d9fb95 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb index 7d81f819acf4..30c26017cc75 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb index 7b42c137e3f0..a95eab63a6ee 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb index 142aea914503..6950269d9971 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb index 6d28da4b86d0..c810bf54845f 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb index 522c0f0fbeb1..53774ce12d44 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb index 5101343d5f2e..06d53c68ff09 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb index 0f8faa295b43..b9a14f579744 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb index 7364a794f503..c1f7816f475b 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/version.rb b/samples/client/petstore/ruby-faraday/lib/petstore/version.rb index 5b0cca787bc5..ab3b0dfefbde 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/version.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/version.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/petstore.gemspec b/samples/client/petstore/ruby-faraday/petstore.gemspec index d649b5e641ab..06a7eb1a52c1 100644 --- a/samples/client/petstore/ruby-faraday/petstore.gemspec +++ b/samples/client/petstore/ruby-faraday/petstore.gemspec @@ -8,7 +8,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb b/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb index 9d0bb4ced1da..05a5580fd4d1 100644 --- a/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb +++ b/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb b/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb index 1770139baa3e..10c9510b2398 100644 --- a/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb +++ b/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby-faraday/spec/spec_helper.rb b/samples/client/petstore/ruby-faraday/spec/spec_helper.rb index 50cce9b05c77..86d92cda2b9f 100644 --- a/samples/client/petstore/ruby-faraday/spec/spec_helper.rb +++ b/samples/client/petstore/ruby-faraday/spec/spec_helper.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/.openapi-generator/VERSION b/samples/client/petstore/ruby/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/ruby/.openapi-generator/VERSION +++ b/samples/client/petstore/ruby/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/ruby/lib/petstore.rb b/samples/client/petstore/ruby/lib/petstore.rb index 53c34a479c92..54f85714b6c9 100644 --- a/samples/client/petstore/ruby/lib/petstore.rb +++ b/samples/client/petstore/ruby/lib/petstore.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb b/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb index 31f396bc6fff..6145ff7431c0 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/default_api.rb b/samples/client/petstore/ruby/lib/petstore/api/default_api.rb index 8ddf6417a454..9d3dc978d094 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/default_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/default_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb b/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb index cade25d18cea..2155182abf54 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb b/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb index 2e79f8990631..fd68ab477734 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index 46fccf778e92..13b4b66578da 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb index aaab20af2a47..df456319b41b 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb index b42a3b3a7677..879e9eb4ad6a 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/api_client.rb b/samples/client/petstore/ruby/lib/petstore/api_client.rb index d5cf46fd74ca..3a1bf4bd35d3 100644 --- a/samples/client/petstore/ruby/lib/petstore/api_client.rb +++ b/samples/client/petstore/ruby/lib/petstore/api_client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/api_error.rb b/samples/client/petstore/ruby/lib/petstore/api_error.rb index 4d782c07943e..124c188d8d8d 100644 --- a/samples/client/petstore/ruby/lib/petstore/api_error.rb +++ b/samples/client/petstore/ruby/lib/petstore/api_error.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/configuration.rb b/samples/client/petstore/ruby/lib/petstore/configuration.rb index 1bb52c50be18..cc5e1929d674 100644 --- a/samples/client/petstore/ruby/lib/petstore/configuration.rb +++ b/samples/client/petstore/ruby/lib/petstore/configuration.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb b/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb index 523e041be8f3..01b2eb58d7f3 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/animal.rb b/samples/client/petstore/ruby/lib/petstore/models/animal.rb index eba827e1c697..8e737d582c84 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/animal.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/animal.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/api_response.rb b/samples/client/petstore/ruby/lib/petstore/models/api_response.rb index 203ffa7b52be..2bbfba46c3f0 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/api_response.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/api_response.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb b/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb index 00aeb8af61b2..057c5b787b60 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb b/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb index ef39e5f498f5..9585dd80a6ba 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/array_test.rb b/samples/client/petstore/ruby/lib/petstore/models/array_test.rb index a6ffbc5a783b..583ea424607c 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/array_test.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/array_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb b/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb index c27768d78d07..0d698fee60fd 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/cat.rb b/samples/client/petstore/ruby/lib/petstore/models/cat.rb index 56219265c257..984aee85a084 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/cat.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/cat.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb b/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb index c9277722620b..cca5e6828b35 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/category.rb b/samples/client/petstore/ruby/lib/petstore/models/category.rb index 622bc6faac92..3bdce1b83f3a 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/category.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/category.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/class_model.rb b/samples/client/petstore/ruby/lib/petstore/models/class_model.rb index 8fd250a74181..d185566668f1 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/class_model.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/class_model.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/client.rb b/samples/client/petstore/ruby/lib/petstore/models/client.rb index 124b4b82ed90..7f6d0947223d 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/client.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/dog.rb b/samples/client/petstore/ruby/lib/petstore/models/dog.rb index 82ba33c1257a..9874575bd0bb 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/dog.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/dog.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb b/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb index 3fadc430f4c8..62839a7cb131 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb b/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb index 29b4ca8c98d8..e281d2ddc469 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb b/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb index 4ecaa5b59314..6c44023fb2b2 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb b/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb index 28a3d7e15fca..d3416f495acf 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/file.rb b/samples/client/petstore/ruby/lib/petstore/models/file.rb index 6c94412ae1b2..76ee99558105 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/file.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/file.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb b/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb index b0766bb8b405..c07f1a43ea08 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/foo.rb b/samples/client/petstore/ruby/lib/petstore/models/foo.rb index f7912997098a..54eb0760f5e8 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/foo.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/foo.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/format_test.rb b/samples/client/petstore/ruby/lib/petstore/models/format_test.rb index dadf1b830250..0c57d78ac252 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/format_test.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/format_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb b/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb index efd7d13f25f2..3fe1977ba7d3 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb b/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb index a6ef81651a14..aebfc27084e6 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb b/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb index 7e16c669206f..2eb6b88a2242 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/list.rb b/samples/client/petstore/ruby/lib/petstore/models/list.rb index 7c7f31a3fbdb..f04fceff81b6 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/list.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/list.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/map_test.rb b/samples/client/petstore/ruby/lib/petstore/models/map_test.rb index 74b5bfe8f086..552d9ae330ac 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/map_test.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/map_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb b/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb index 142e6863ab89..bf90d3cd06f7 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb b/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb index ec5c0050ba37..bad3bfcce3a3 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/model_return.rb b/samples/client/petstore/ruby/lib/petstore/models/model_return.rb index 9614b6d779d8..d33b1bf1dac4 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/model_return.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/model_return.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/name.rb b/samples/client/petstore/ruby/lib/petstore/models/name.rb index 56e27726a180..6a1777a426da 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/name.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/name.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb b/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb index 2e73715f8815..3d0d81a74442 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/number_only.rb b/samples/client/petstore/ruby/lib/petstore/models/number_only.rb index ed136aee1a5d..7359f1b1115b 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/number_only.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/order.rb b/samples/client/petstore/ruby/lib/petstore/models/order.rb index fed40c355d49..6778c4b97fb3 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/order.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/order.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb index 06989683169e..b6d4bd88ace7 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb index 871c119cf872..92a7aac382b7 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb index 0da84d9c8908..7097f7d9fb95 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb index 7d81f819acf4..30c26017cc75 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb index 7b42c137e3f0..a95eab63a6ee 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb index 142aea914503..6950269d9971 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/pet.rb b/samples/client/petstore/ruby/lib/petstore/models/pet.rb index 6d28da4b86d0..c810bf54845f 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/pet.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/pet.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb b/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb index 522c0f0fbeb1..53774ce12d44 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb b/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb index 5101343d5f2e..06d53c68ff09 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/tag.rb b/samples/client/petstore/ruby/lib/petstore/models/tag.rb index 0f8faa295b43..b9a14f579744 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/tag.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/tag.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/user.rb b/samples/client/petstore/ruby/lib/petstore/models/user.rb index 7364a794f503..c1f7816f475b 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/user.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/user.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/lib/petstore/version.rb b/samples/client/petstore/ruby/lib/petstore/version.rb index 5b0cca787bc5..ab3b0dfefbde 100644 --- a/samples/client/petstore/ruby/lib/petstore/version.rb +++ b/samples/client/petstore/ruby/lib/petstore/version.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/petstore.gemspec b/samples/client/petstore/ruby/petstore.gemspec index a3b6e8e06944..fca963ec152c 100644 --- a/samples/client/petstore/ruby/petstore.gemspec +++ b/samples/client/petstore/ruby/petstore.gemspec @@ -8,7 +8,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/spec/api_client_spec.rb b/samples/client/petstore/ruby/spec/api_client_spec.rb index 45a5468ae6e5..663b8081006c 100644 --- a/samples/client/petstore/ruby/spec/api_client_spec.rb +++ b/samples/client/petstore/ruby/spec/api_client_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/spec/configuration_spec.rb b/samples/client/petstore/ruby/spec/configuration_spec.rb index 1770139baa3e..10c9510b2398 100644 --- a/samples/client/petstore/ruby/spec/configuration_spec.rb +++ b/samples/client/petstore/ruby/spec/configuration_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/ruby/spec/spec_helper.rb b/samples/client/petstore/ruby/spec/spec_helper.rb index 50cce9b05c77..86d92cda2b9f 100644 --- a/samples/client/petstore/ruby/spec/spec_helper.rb +++ b/samples/client/petstore/ruby/spec/spec_helper.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION b/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION b/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION +++ b/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION b/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/scala-akka/.openapi-generator/VERSION b/samples/client/petstore/scala-akka/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/scala-akka/.openapi-generator/VERSION +++ b/samples/client/petstore/scala-akka/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/scala-sttp/.openapi-generator/VERSION b/samples/client/petstore/scala-sttp/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/scala-sttp/.openapi-generator/VERSION +++ b/samples/client/petstore/scala-sttp/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION +++ b/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java index 99022f109cb1..6dc5d09f0c8a 100644 --- a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java index e45f9f5326ad..0c181e59ee37 100644 --- a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java index 868fe7fb79ec..f62f460d1213 100644 --- a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-no-nullable/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud-no-nullable/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/spring-cloud-no-nullable/.openapi-generator/VERSION +++ b/samples/client/petstore/spring-cloud-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/PetApi.java index 8d98ace26836..f77fdf21de24 100644 --- a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/StoreApi.java index 3fa561593964..241a82690b1e 100644 --- a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/UserApi.java index 9028712a4e70..ad21d7b81059 100644 --- a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION +++ b/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java index d5038a0b69c9..8b6ead39e2c7 100644 --- a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java index d36fad83e9d8..83d5530deb79 100644 --- a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java index 71663c22f23d..683cff0ce64b 100644 --- a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/spring-cloud/.openapi-generator/VERSION +++ b/samples/client/petstore/spring-cloud/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java index 8d98ace26836..f77fdf21de24 100644 --- a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java index 3fa561593964..241a82690b1e 100644 --- a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java index 9028712a4e70..ad21d7b81059 100644 --- a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-stubs/.openapi-generator/VERSION b/samples/client/petstore/spring-stubs/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/spring-stubs/.openapi-generator/VERSION +++ b/samples/client/petstore/spring-stubs/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java index 851efbab912f..08660cdaac36 100644 --- a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java index 25101f4d05da..229a0ba4240a 100644 --- a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java index d46665a11815..e2d924590ee8 100644 --- a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/default/.openapi-generator/VERSION b/samples/client/petstore/swift5/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/default/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION b/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION b/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION b/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION b/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION b/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION b/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION +++ b/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/elm/.openapi-generator/VERSION b/samples/openapi3/client/elm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/elm/.openapi-generator/VERSION +++ b/samples/openapi3/client/elm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION +++ b/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION +++ b/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION +++ b/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb index 57f6fbbec4a3..e0d70e377a4d 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb index dea64fcd53a6..e150a0f673f3 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb index bafd7c3ddc9e..dceb19bdb223 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb index 75a7eb7cff54..3984528e045e 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb index 1a79bce664cf..65f2cfea56a5 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb index a58259effb73..80e58dd211a7 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb index de6667830496..0b4502a11c8b 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb index 59fbe08f126a..df8bb818aa76 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb index c800de0f9b78..ae5d77411e26 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec index bbd905db7d61..0b5caba0e8bd 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec @@ -8,7 +8,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION b/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION +++ b/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION b/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION +++ b/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec b/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec index 5bf3aefb73ae..bfaeacb1aed8 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec +++ b/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec @@ -8,7 +8,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb index de9bed53f27d..2fdd66b4145d 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb index eebb239b3382..1fdb9e468f0e 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb index dbc8f908f4bf..5e236ccddd9b 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb index 46e6a2ca0add..fbb07fa1c4dc 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb index 47c7180a2a6e..9ae58b4a33a6 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb index bc9def4db998..6c7f7ac27d90 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb b/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb index e3270122c377..685f1ee26c87 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb b/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb index 6cfbb27797ee..adc964496e42 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb b/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb index ea1690def96d..68368b2e587e 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb index 3762ec7f7ab8..8a643c8a5143 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb index b978d1beaeed..355c78dd797b 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb index 42da7d802008..02e0f300d109 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb index a9fdba6803b3..921981794ebb 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb index e8a443c18d77..20bb2cf0269d 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb index 90fba2508b88..b9f03227ba99 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb index 99f8455ae776..6cac74ac13e7 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb index fbaf1271f073..787763a66f3b 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec index 151037c85a54..af450c8fe8df 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec @@ -8,7 +8,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb index 489a718996ae..495e376a0946 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb index 18846fa3c626..55ca88de58b4 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb index 5dace1f934dc..9ab6dba6ba0c 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.2.0-SNAPSHOT =end diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION b/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION b/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION b/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/java/native/.openapi-generator/VERSION b/samples/openapi3/client/petstore/java/native/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/java/native/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/java/native/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION b/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100755 --- a/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/python/.openapi-generator/VERSION b/samples/openapi3/client/petstore/python/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/python/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/python/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/schema/petstore/ktorm/.openapi-generator/VERSION b/samples/schema/petstore/ktorm/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/schema/petstore/ktorm/.openapi-generator/VERSION +++ b/samples/schema/petstore/ktorm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/schema/petstore/mysql/.openapi-generator/VERSION b/samples/schema/petstore/mysql/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/schema/petstore/mysql/.openapi-generator/VERSION +++ b/samples/schema/petstore/mysql/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/VERSION b/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/VERSION +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/go-api-server/.openapi-generator/VERSION b/samples/server/petstore/go-api-server/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/go-api-server/.openapi-generator/VERSION +++ b/samples/server/petstore/go-api-server/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION b/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION +++ b/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-msf4j/.openapi-generator/VERSION b/samples/server/petstore/java-msf4j/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-msf4j/.openapi-generator/VERSION +++ b/samples/server/petstore/java-msf4j/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-play-framework/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-undertow/.openapi-generator/VERSION b/samples/server/petstore/java-undertow/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-undertow/.openapi-generator/VERSION +++ b/samples/server/petstore/java-undertow/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION b/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION +++ b/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION b/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION +++ b/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server/ktor/README.md b/samples/server/petstore/kotlin-server/ktor/README.md index 7cb90e7f8536..118998788067 100644 --- a/samples/server/petstore/kotlin-server/ktor/README.md +++ b/samples/server/petstore/kotlin-server/ktor/README.md @@ -2,7 +2,7 @@ This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -Generated by OpenAPI Generator 5.1.1-SNAPSHOT. +Generated by OpenAPI Generator 5.2.0-SNAPSHOT. ## Requires diff --git a/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION +++ b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt index 62837ade76f9..2880b39b990d 100644 --- a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt +++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt index 15cc95c4d7b9..14a9d0fa525d 100644 --- a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt +++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt index 7c42d4ae283e..233a3bb1a5f2 100644 --- a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt +++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION +++ b/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION +++ b/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/php-laravel/.openapi-generator/VERSION b/samples/server/petstore/php-laravel/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/php-laravel/.openapi-generator/VERSION +++ b/samples/server/petstore/php-laravel/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/php-lumen/.openapi-generator/VERSION b/samples/server/petstore/php-lumen/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/php-lumen/.openapi-generator/VERSION +++ b/samples/server/petstore/php-lumen/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION b/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION +++ b/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/php-slim4/.openapi-generator/VERSION b/samples/server/petstore/php-slim4/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/php-slim4/.openapi-generator/VERSION +++ b/samples/server/petstore/php-slim4/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION b/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION b/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION +++ b/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION b/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION +++ b/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION b/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION +++ b/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/python-flask/.openapi-generator/VERSION b/samples/server/petstore/python-flask/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/python-flask/.openapi-generator/VERSION +++ b/samples/server/petstore/python-flask/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java index 016fb8657356..2d31a64a04d4 100644 --- a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java +++ b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java index 14eeb6403601..a3f907809a00 100644 --- a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java +++ b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java index 67f680d139b0..8326ab48c02c 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java index 3b25c6d7d78d..b301ad0b4855 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index d61dfa63e878..3de6e0e21889 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java index 0e5716fc1ad5..f2512f9eac34 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java index b41f4bddc4bf..03fa53219d90 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java index 60a6ba8a507f..bc349aa67c0f 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..62b5e8c1c9ec 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java index a641e78829df..1d52ff9cf887 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ce5242fa1b93 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java index 1f1ff854ce6b..6c50971728c1 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..a18ef0803417 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..bdd829c2178f 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..62b5e8c1c9ec 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java index 535060645a5e..9c17aee08e3d 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ce5242fa1b93 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java index 1f1ff854ce6b..6c50971728c1 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..a18ef0803417 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..bdd829c2178f 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..62b5e8c1c9ec 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java index 0033e1e5940a..b0b57f815bd6 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ce5242fa1b93 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java index 3616754568d3..2e67f9eb6099 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..a18ef0803417 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..bdd829c2178f 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/spring-mvc/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..62b5e8c1c9ec 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java index 535060645a5e..9c17aee08e3d 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ce5242fa1b93 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java index 1f1ff854ce6b..6c50971728c1 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..a18ef0803417 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..bdd829c2178f 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION b/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java index 388462a95376..dfae7d61930c 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java index 5a70cda84f72..68cec85a19ab 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 5967985c2540..d2215dd0d1be 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java index 334bdc9a82e6..b9655c2c700f 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java index 57b8bddb8816..69c047f7c677 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java index e8f4fc3d844c..972cc8bc4682 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION b/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..62b5e8c1c9ec 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java index 535060645a5e..9c17aee08e3d 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ce5242fa1b93 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java index 1f1ff854ce6b..6c50971728c1 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..a18ef0803417 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..bdd829c2178f 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION b/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java index 958a16e9bb92..f4afb63f6185 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java index ce0cdec40152..f085be2317d2 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 1cd4f8903465..572b49ba2a94 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java index b78cdfa71495..b7a84c916cfb 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java index 57d70d7cd091..05cfb8f5758a 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java index 96528d91dee0..5b3512235937 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION b/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java index 958a16e9bb92..f4afb63f6185 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java index ce0cdec40152..f085be2317d2 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 1cd4f8903465..572b49ba2a94 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java index b78cdfa71495..b7a84c916cfb 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java index 57d70d7cd091..05cfb8f5758a 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java index 96528d91dee0..5b3512235937 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION b/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java index 84692f831dc0..0fa0742fe83a 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java index e30d8084ace4..e985e37bc09e 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index bb04ba91937f..3d7f2e2ea285 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java index d4e93dfa88e0..209a72ff9778 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java index 51ca3cba19e2..94057aa6fc58 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java index e36f0b478666..b60e3580cf6b 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION b/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java index 43517a22bf80..eea35ce51b89 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java index 22df9d55c342..33228158d4d3 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index f6bd5bc94220..15b48f22a526 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java index 27aa83d6f198..41ed1eeccd35 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java index 5e4c7dd51931..520c688e3fa4 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java index d58ba4dd213b..2f3e0a55c9bd 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java index 388462a95376..dfae7d61930c 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java index 7bab611bc094..54e73fc876d0 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 5967985c2540..d2215dd0d1be 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java index b6676ee8e79f..dcdb633acf62 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java index 57b8bddb8816..69c047f7c677 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java index e8f4fc3d844c..972cc8bc4682 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java index 958a16e9bb92..f4afb63f6185 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java index 0256dd794c24..02a920c8bf8b 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 1cd4f8903465..572b49ba2a94 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java index c493551f7049..0e5bdeffced3 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java index 57d70d7cd091..05cfb8f5758a 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java index 96528d91dee0..5b3512235937 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java index 388462a95376..dfae7d61930c 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java index 7bab611bc094..54e73fc876d0 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 5967985c2540..d2215dd0d1be 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java index b6676ee8e79f..dcdb633acf62 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java index 57b8bddb8816..69c047f7c677 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java index e8f4fc3d844c..972cc8bc4682 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..62b5e8c1c9ec 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java index 0033e1e5940a..b0b57f815bd6 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ce5242fa1b93 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java index 3616754568d3..2e67f9eb6099 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..a18ef0803417 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..bdd829c2178f 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION b/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..62b5e8c1c9ec 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java index f3315076f434..5360eef212b6 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ce5242fa1b93 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java index f4ad20eef3c8..581c9ec1d36f 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..a18ef0803417 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..bdd829c2178f 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION b/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java index 31ff3bf73e1a..5ba806e0898f 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java index 7eccddfa1fad..b3dcb0a94008 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java index b7343dafc32a..a963e3199694 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java index 6a36a1742d50..a83c6d8326d2 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java index 7d2ffbc696e5..e9cd51627cd0 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java index 80d269c1b0c0..d730f7e2ab01 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/.openapi-generator/VERSION b/samples/server/petstore/springboot/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/springboot/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..62b5e8c1c9ec 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java index 535060645a5e..9c17aee08e3d 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ce5242fa1b93 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java index 1f1ff854ce6b..6c50971728c1 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..a18ef0803417 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..bdd829c2178f 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.2.0-SNAPSHOT). * https://openapi-generator.tech * Do not edit the class manually. */ From 3a0eb9d040fb89185fbada972159805c4deb77bf Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sun, 21 Mar 2021 00:58:43 +0800 Subject: [PATCH 002/186] update meta-codegen --- samples/meta-codegen/lib/pom.xml | 2 +- samples/meta-codegen/usage/.openapi-generator/VERSION | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/meta-codegen/lib/pom.xml b/samples/meta-codegen/lib/pom.xml index 7a28653feaa4..3132601fc90c 100644 --- a/samples/meta-codegen/lib/pom.xml +++ b/samples/meta-codegen/lib/pom.xml @@ -121,7 +121,7 @@ UTF-8 - 5.1.1-SNAPSHOT + 5.2.0-SNAPSHOT 1.0.0 4.8.1 diff --git a/samples/meta-codegen/usage/.openapi-generator/VERSION b/samples/meta-codegen/usage/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/meta-codegen/usage/.openapi-generator/VERSION +++ b/samples/meta-codegen/usage/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file From 6cc270633b057fe97155b2033ede810134c68bfd Mon Sep 17 00:00:00 2001 From: Justin Black Date: Wed, 31 Mar 2021 08:48:12 -0700 Subject: [PATCH 003/186] [python] Fixes additional_properties_type for models (#8802) * Fixes additionalProperties values for models, updates docs, adds tag test of it, fixes frit and gmfruit tests * Moves this.setDisallowAdditionalPropertiesIfNotPresent higher * Makes setting additional_properties_model_instances contingent on the presence of addprosp in schema, updates sample spec composed schemas to remove addprops False form two * Fixes oneOf anyOf allOf instantiation logic * Removes Address from Cat definition * Adds required vars for apple and banana, removes required vars from composed schema init sig * Updates composed schema vars to be set on self and all composed instances * Removes get_unused_args, get_var_name_to_model_instances, and get_additional_properties_model_instances * Fixes fruit + deserilization tests, creates ComposedSchemaWithPropsAndNoAddProps * Fixes FruitReq tests * Fixes GmFruit tests * Fixes discard_unknown_keys tests * Samples updated * Removes additionalproperties False in Child * Samples updated * Improves handling of v2 and v3 specs for isFreeFormObject, v2 sample spec updated with link to bug * Adds cli option disallowAdditionalPropertiesIfNotPresent to python * Adds getAdditionalProperties method so the value for addProps will be correct * Reverts file * Reverts file * Updates python doc * Reverted anytype_3 definition * Updates test_deserialize_lizard * Updates test_deserialize_dict_str_dog * Updates testDog * Updates testChild * Adds v2 python_composition sample * Adds needed files for python testing * Adds existing tests into the new python sample * Fixes test_dog * Removes addProps false form Dog * Fixes testChild * Updates how additionalProperties are set * Fixes empty_map type * Type generation fixed for v2 and v3 specs * Refactors getTypeString, updates artifactids in pom.xml files * Adds new python sample to CI testing I think * Fixes artifactId collision, regenrates docs --- bin/configs/python-oas2.yaml | 5 +- ...allowAdditionalPropertiesIfNotPresent.yaml | 7 + docs/generators/python.md | 2 +- .../languages/PythonClientCodegen.java | 124 +- .../languages/PythonLegacyClientCodegen.java | 1 + .../main/resources/python/model_doc.mustache | 6 +- .../python/model_templates/classvars.mustache | 10 +- .../method_init_composed.mustache | 65 +- .../methods_setattr_getattr_composed.mustache | 67 +- .../resources/python/model_utils.mustache | 182 +- .../options/PythonClientOptionsProvider.java | 13 +- .../PythonLegacyClientOptionsProvider.java | 59 + .../python/PythonClientOptionsTest.java | 4 +- .../python/PythonLegacyClientOptionsTest.java | 54 + ...ith-fake-endpoints-models-for-testing.yaml | 17 +- ...odels-for-testing-with-http-signature.yaml | 30 +- pom.xml | 1 + .../docs/AdditionalPropertiesAnyType.md | 2 +- .../python/docs/AdditionalPropertiesArray.md | 2 +- .../python/docs/AdditionalPropertiesClass.md | 11 +- .../python/docs/AdditionalPropertiesObject.md | 2 +- samples/client/petstore/python/docs/Animal.md | 1 + .../client/petstore/python/docs/AnimalFarm.md | 1 + .../petstore/python/docs/ApiResponse.md | 1 + .../python/docs/ArrayOfArrayOfNumberOnly.md | 1 + .../petstore/python/docs/ArrayOfNumberOnly.md | 1 + .../client/petstore/python/docs/ArrayTest.md | 1 + .../petstore/python/docs/Capitalization.md | 1 + samples/client/petstore/python/docs/Cat.md | 1 + .../client/petstore/python/docs/CatAllOf.md | 1 + .../client/petstore/python/docs/Category.md | 1 + samples/client/petstore/python/docs/Child.md | 1 + .../client/petstore/python/docs/ChildAllOf.md | 1 + .../client/petstore/python/docs/ChildCat.md | 1 + .../petstore/python/docs/ChildCatAllOf.md | 1 + .../client/petstore/python/docs/ChildDog.md | 1 + .../petstore/python/docs/ChildDogAllOf.md | 1 + .../petstore/python/docs/ChildLizard.md | 1 + .../petstore/python/docs/ChildLizardAllOf.md | 1 + .../client/petstore/python/docs/ClassModel.md | 1 + samples/client/petstore/python/docs/Client.md | 1 + samples/client/petstore/python/docs/Dog.md | 1 + .../client/petstore/python/docs/DogAllOf.md | 1 + .../client/petstore/python/docs/EnumArrays.md | 1 + .../client/petstore/python/docs/EnumClass.md | 1 + .../client/petstore/python/docs/EnumTest.md | 1 + samples/client/petstore/python/docs/File.md | 1 + .../python/docs/FileSchemaTestClass.md | 1 + .../client/petstore/python/docs/FormatTest.md | 1 + .../petstore/python/docs/Grandparent.md | 1 + .../petstore/python/docs/GrandparentAnimal.md | 1 + .../petstore/python/docs/HasOnlyReadOnly.md | 1 + samples/client/petstore/python/docs/List.md | 1 + .../client/petstore/python/docs/MapTest.md | 1 + ...dPropertiesAndAdditionalPropertiesClass.md | 1 + .../petstore/python/docs/Model200Response.md | 1 + .../petstore/python/docs/ModelReturn.md | 1 + samples/client/petstore/python/docs/Name.md | 1 + .../client/petstore/python/docs/NumberOnly.md | 1 + .../python/docs/NumberWithValidations.md | 1 + .../python/docs/ObjectModelWithRefProps.md | 1 + samples/client/petstore/python/docs/Order.md | 1 + samples/client/petstore/python/docs/Parent.md | 1 + .../petstore/python/docs/ParentAllOf.md | 1 + .../client/petstore/python/docs/ParentPet.md | 1 + samples/client/petstore/python/docs/Pet.md | 1 + samples/client/petstore/python/docs/Player.md | 1 + .../petstore/python/docs/ReadOnlyFirst.md | 1 + .../petstore/python/docs/SpecialModelName.md | 1 + .../client/petstore/python/docs/StringEnum.md | 1 + samples/client/petstore/python/docs/Tag.md | 1 + .../petstore/python/docs/TypeHolderDefault.md | 1 + .../petstore/python/docs/TypeHolderExample.md | 1 + samples/client/petstore/python/docs/User.md | 1 + .../client/petstore/python/docs/XmlItem.md | 1 + .../model/additional_properties_any_type.py | 2 +- .../model/additional_properties_array.py | 2 +- .../model/additional_properties_class.py | 28 +- .../model/additional_properties_object.py | 2 +- .../python/petstore_api/model/animal.py | 9 +- .../python/petstore_api/model/animal_farm.py | 9 +- .../python/petstore_api/model/api_response.py | 8 +- .../model/array_of_array_of_number_only.py | 8 +- .../model/array_of_number_only.py | 8 +- .../python/petstore_api/model/array_test.py | 9 +- .../petstore_api/model/capitalization.py | 8 +- .../petstore/python/petstore_api/model/cat.py | 31 +- .../python/petstore_api/model/cat_all_of.py | 8 +- .../python/petstore_api/model/category.py | 8 +- .../python/petstore_api/model/child.py | 24 +- .../python/petstore_api/model/child_all_of.py | 8 +- .../python/petstore_api/model/child_cat.py | 31 +- .../petstore_api/model/child_cat_all_of.py | 8 +- .../python/petstore_api/model/child_dog.py | 31 +- .../petstore_api/model/child_dog_all_of.py | 8 +- .../python/petstore_api/model/child_lizard.py | 31 +- .../petstore_api/model/child_lizard_all_of.py | 8 +- .../python/petstore_api/model/class_model.py | 8 +- .../python/petstore_api/model/client.py | 8 +- .../petstore/python/petstore_api/model/dog.py | 31 +- .../python/petstore_api/model/dog_all_of.py | 8 +- .../python/petstore_api/model/enum_arrays.py | 8 +- .../python/petstore_api/model/enum_class.py | 8 +- .../python/petstore_api/model/enum_test.py | 9 +- .../python/petstore_api/model/file.py | 8 +- .../model/file_schema_test_class.py | 9 +- .../python/petstore_api/model/format_test.py | 8 +- .../python/petstore_api/model/grandparent.py | 8 +- .../petstore_api/model/grandparent_animal.py | 9 +- .../petstore_api/model/has_only_read_only.py | 8 +- .../python/petstore_api/model/list.py | 8 +- .../python/petstore_api/model/map_test.py | 9 +- ...perties_and_additional_properties_class.py | 9 +- .../petstore_api/model/model200_response.py | 8 +- .../python/petstore_api/model/model_return.py | 8 +- .../python/petstore_api/model/name.py | 8 +- .../python/petstore_api/model/number_only.py | 8 +- .../model/number_with_validations.py | 8 +- .../model/object_model_with_ref_props.py | 9 +- .../python/petstore_api/model/order.py | 8 +- .../python/petstore_api/model/parent.py | 24 +- .../petstore_api/model/parent_all_of.py | 8 +- .../python/petstore_api/model/parent_pet.py | 31 +- .../petstore/python/petstore_api/model/pet.py | 9 +- .../python/petstore_api/model/player.py | 8 +- .../petstore_api/model/read_only_first.py | 8 +- .../petstore_api/model/special_model_name.py | 8 +- .../python/petstore_api/model/string_enum.py | 8 +- .../petstore/python/petstore_api/model/tag.py | 8 +- .../petstore_api/model/type_holder_default.py | 8 +- .../petstore_api/model/type_holder_example.py | 8 +- .../python/petstore_api/model/user.py | 8 +- .../python/petstore_api/model/xml_item.py | 8 +- .../python/petstore_api/model_utils.py | 251 +- samples/client/petstore/python/pom.xml | 4 +- .../client/petstore/python/test/test_child.py | 39 +- .../client/petstore/python/test/test_dog.py | 46 +- .../.gitignore | 66 + .../.gitlab-ci.yml | 24 + .../.openapi-generator-ignore | 23 + .../.openapi-generator/FILES | 160 ++ .../.openapi-generator/VERSION | 1 + .../.travis.yml | 13 + .../Makefile | 18 + .../README.md | 247 ++ .../dev-requirements.txt | 2 + .../docs/AdditionalPropertiesAnyType.md | 12 + .../docs/AdditionalPropertiesArray.md | 12 + .../docs/AdditionalPropertiesBoolean.md | 12 + .../docs/AdditionalPropertiesClass.md | 21 + .../docs/AdditionalPropertiesInteger.md | 12 + .../docs/AdditionalPropertiesNumber.md | 12 + .../docs/AdditionalPropertiesObject.md | 12 + .../docs/AdditionalPropertiesString.md | 12 + .../docs/Animal.md | 12 + .../docs/AnimalFarm.md | 11 + .../docs/AnotherFakeApi.md | 76 + .../docs/ApiResponse.md | 13 + .../docs/ArrayOfArrayOfNumberOnly.md | 11 + .../docs/ArrayOfNumberOnly.md | 11 + .../docs/ArrayTest.md | 13 + .../docs/Capitalization.md | 16 + .../docs/Cat.md | 13 + .../docs/CatAllOf.md | 11 + .../docs/Category.md | 12 + .../docs/Child.md | 13 + .../docs/ChildAllOf.md | 11 + .../docs/ChildCat.md | 12 + .../docs/ChildCatAllOf.md | 11 + .../docs/ChildDog.md | 12 + .../docs/ChildDogAllOf.md | 11 + .../docs/ChildLizard.md | 12 + .../docs/ChildLizardAllOf.md | 11 + .../docs/ClassModel.md | 12 + .../docs/Client.md | 11 + .../docs/Dog.md | 13 + .../docs/DogAllOf.md | 11 + .../docs/EnumArrays.md | 12 + .../docs/EnumClass.md | 11 + .../docs/EnumTest.md | 15 + .../docs/FakeApi.md | 1205 +++++++++ .../docs/FakeClassnameTags123Api.md | 87 + .../docs/File.md | 12 + .../docs/FileSchemaTestClass.md | 12 + .../docs/FormatTest.md | 23 + .../docs/Grandparent.md | 11 + .../docs/GrandparentAnimal.md | 11 + .../docs/HasOnlyReadOnly.md | 12 + .../docs/List.md | 11 + .../docs/MapTest.md | 14 + ...dPropertiesAndAdditionalPropertiesClass.md | 13 + .../docs/Model200Response.md | 13 + .../docs/ModelReturn.md | 12 + .../docs/Name.md | 15 + .../docs/NumberOnly.md | 11 + .../docs/NumberWithValidations.md | 11 + .../docs/ObjectModelWithRefProps.md | 14 + .../docs/Order.md | 16 + .../docs/Parent.md | 12 + .../docs/ParentAllOf.md | 11 + .../docs/ParentPet.md | 11 + .../docs/Pet.md | 16 + .../docs/PetApi.md | 782 ++++++ .../docs/Player.md | 12 + .../docs/ReadOnlyFirst.md | 12 + .../docs/SpecialModelName.md | 11 + .../docs/StoreApi.md | 285 +++ .../docs/StringBooleanMap.md | 11 + .../docs/StringEnum.md | 11 + .../docs/Tag.md | 13 + .../docs/TypeHolderDefault.md | 18 + .../docs/TypeHolderExample.md | 16 + .../docs/User.md | 18 + .../docs/UserApi.md | 562 +++++ .../docs/XmlItem.md | 39 + .../git_push.sh | 58 + .../petstore_api/__init__.py | 27 + .../petstore_api/api/__init__.py | 3 + .../petstore_api/api/another_fake_api.py | 155 ++ .../petstore_api/api/fake_api.py | 2223 +++++++++++++++++ .../api/fake_classname_tags_123_api.py | 157 ++ .../petstore_api/api/pet_api.py | 1170 +++++++++ .../petstore_api/api/store_api.py | 499 ++++ .../petstore_api/api/user_api.py | 962 +++++++ .../petstore_api/api_client.py | 849 +++++++ .../petstore_api/apis/__init__.py | 22 + .../petstore_api/configuration.py | 511 ++++ .../petstore_api/exceptions.py | 159 ++ .../petstore_api/model/__init__.py | 5 + .../model/additional_properties_any_type.py | 172 ++ .../model/additional_properties_array.py | 172 ++ .../model/additional_properties_boolean.py | 172 ++ .../model/additional_properties_class.py | 196 ++ .../model/additional_properties_integer.py | 172 ++ .../model/additional_properties_number.py | 172 ++ .../model/additional_properties_object.py | 172 ++ .../model/additional_properties_string.py | 172 ++ .../petstore_api/model/animal.py | 185 ++ .../petstore_api/model/animal_farm.py | 184 ++ .../petstore_api/model/api_response.py | 172 ++ .../model/array_of_array_of_number_only.py | 166 ++ .../model/array_of_number_only.py | 166 ++ .../petstore_api/model/array_test.py | 177 ++ .../petstore_api/model/capitalization.py | 181 ++ .../petstore_api/model/cat.py | 218 ++ .../petstore_api/model/cat_all_of.py | 166 ++ .../petstore_api/model/category.py | 173 ++ .../petstore_api/model/child.py | 215 ++ .../petstore_api/model/child_all_of.py | 166 ++ .../petstore_api/model/child_cat.py | 215 ++ .../petstore_api/model/child_cat_all_of.py | 166 ++ .../petstore_api/model/child_dog.py | 215 ++ .../petstore_api/model/child_dog_all_of.py | 166 ++ .../petstore_api/model/child_lizard.py | 215 ++ .../petstore_api/model/child_lizard_all_of.py | 166 ++ .../petstore_api/model/class_model.py | 166 ++ .../petstore_api/model/client.py | 166 ++ .../petstore_api/model/dog.py | 218 ++ .../petstore_api/model/dog_all_of.py | 166 ++ .../petstore_api/model/enum_arrays.py | 177 ++ .../petstore_api/model/enum_class.py | 180 ++ .../petstore_api/model/enum_test.py | 204 ++ .../petstore_api/model/file.py | 166 ++ .../model/file_schema_test_class.py | 174 ++ .../petstore_api/model/format_test.py | 243 ++ .../petstore_api/model/grandparent.py | 166 ++ .../petstore_api/model/grandparent_animal.py | 188 ++ .../petstore_api/model/has_only_read_only.py | 169 ++ .../petstore_api/model/list.py | 166 ++ .../petstore_api/model/map_test.py | 184 ++ ...perties_and_additional_properties_class.py | 177 ++ .../petstore_api/model/model200_response.py | 169 ++ .../petstore_api/model/model_return.py | 166 ++ .../petstore_api/model/name.py | 178 ++ .../petstore_api/model/number_only.py | 166 ++ .../model/number_with_validations.py | 183 ++ .../model/object_model_with_ref_props.py | 177 ++ .../petstore_api/model/order.py | 186 ++ .../petstore_api/model/parent.py | 212 ++ .../petstore_api/model/parent_all_of.py | 166 ++ .../petstore_api/model/parent_pet.py | 219 ++ .../petstore_api/model/pet.py | 197 ++ .../petstore_api/model/player.py | 172 ++ .../petstore_api/model/read_only_first.py | 169 ++ .../petstore_api/model/special_model_name.py | 166 ++ .../petstore_api/model/string_boolean_map.py | 169 ++ .../petstore_api/model/string_enum.py | 184 ++ .../petstore_api/model/tag.py | 172 ++ .../petstore_api/model/type_holder_default.py | 195 ++ .../petstore_api/model/type_holder_example.py | 197 ++ .../petstore_api/model/user.py | 187 ++ .../petstore_api/model/xml_item.py | 250 ++ .../petstore_api/model_utils.py | 1848 ++++++++++++++ .../petstore_api/models/__init__.py | 74 + .../petstore_api/rest.py | 292 +++ .../pom.xml | 46 + .../requirements.txt | 3 + .../setup.cfg | 2 + .../setup.py | 43 + .../test-requirements.txt | 1 + .../test/__init__.py | 0 .../test_additional_properties_any_type.py | 38 + .../test/test_additional_properties_array.py | 50 + .../test_additional_properties_boolean.py | 45 + .../test/test_additional_properties_class.py | 38 + .../test_additional_properties_integer.py | 45 + .../test/test_additional_properties_number.py | 45 + .../test/test_additional_properties_object.py | 50 + .../test/test_additional_properties_string.py | 45 + .../test/test_animal.py | 48 + .../test/test_animal_farm.py | 43 + .../test/test_another_fake_api.py | 39 + .../test/test_api_response.py | 38 + .../test_array_of_array_of_number_only.py | 38 + .../test/test_array_of_number_only.py | 38 + .../test/test_array_test.py | 43 + .../test/test_capitalization.py | 38 + .../test/test_cat.py | 48 + .../test/test_cat_all_of.py | 38 + .../test/test_category.py | 38 + .../test/test_child.py | 57 + .../test/test_child_all_of.py | 38 + .../test/test_child_cat.py | 48 + .../test/test_child_cat_all_of.py | 38 + .../test/test_child_dog.py | 48 + .../test/test_child_dog_all_of.py | 38 + .../test/test_child_lizard.py | 48 + .../test/test_child_lizard_all_of.py | 38 + .../test/test_class_model.py | 38 + .../test/test_client.py | 38 + .../test/test_dog.py | 57 + .../test/test_dog_all_of.py | 38 + .../test/test_enum_arrays.py | 162 ++ .../test/test_enum_class.py | 38 + .../test/test_enum_test.py | 43 + .../test/test_fake_api.py | 197 ++ .../test/test_fake_classname_tags_123_api.py | 39 + .../test/test_file.py | 38 + .../test/test_file_schema_test_class.py | 43 + .../test/test_format_test.py | 153 ++ .../test/test_grandparent.py | 38 + .../test/test_grandparent_animal.py | 58 + .../test/test_has_only_read_only.py | 38 + .../test/test_list.py | 38 + .../test/test_map_test.py | 125 + ...perties_and_additional_properties_class.py | 43 + .../test/test_model200_response.py | 38 + .../test/test_model_return.py | 38 + .../test/test_name.py | 38 + .../test/test_number_only.py | 38 + .../test/test_number_with_validations.py | 45 + .../test/test_object_model_with_ref_props.py | 49 + .../test/test_order.py | 41 + .../test/test_parent.py | 48 + .../test/test_parent_all_of.py | 38 + .../test/test_parent_pet.py | 58 + .../test/test_pet.py | 89 + .../test/test_pet_api.py | 95 + .../test/test_player.py | 44 + .../test/test_read_only_first.py | 38 + .../test/test_special_model_name.py | 38 + .../test/test_store_api.py | 60 + .../test/test_string_boolean_map.py | 38 + .../test/test_string_enum.py | 49 + .../test/test_tag.py | 38 + .../test/test_type_holder_default.py | 41 + .../test/test_type_holder_example.py | 38 + .../test/test_user.py | 38 + .../test/test_user_api.py | 88 + .../test/test_xml_item.py | 38 + .../test_python.sh | 31 + .../testfiles/1px_pic1.png | Bin 0 -> 67 bytes .../testfiles/1px_pic2.png | Bin 0 -> 67 bytes .../testfiles/foo.png | Bin 0 -> 43280 bytes .../tests/__init__.py | 0 .../tests/test_api_client.py | 221 ++ .../tests/test_api_exception.py | 86 + .../tests/test_deserialization.py | 442 ++++ .../tests/test_pet_api.py | 406 +++ .../tests/test_serialization.py | 78 + .../tests/test_store_api.py | 32 + .../tests/util.py | 8 + .../tox.ini | 9 + .../python/x_auth_id_alias/model_utils.py | 251 +- .../python/dynamic_servers/model_utils.py | 251 +- .../petstore/python-experimental/.coverage | Bin 0 -> 94208 bytes .../client/petstore/python-legacy/pom.xml | 2 +- .../petstore/python/.openapi-generator/FILES | 2 + .../openapi3/client/petstore/python/README.md | 1 + .../python/docs/AdditionalPropertiesClass.md | 3 +- .../AdditionalPropertiesWithArrayOfEnums.md | 2 +- .../client/petstore/python/docs/Animal.md | 1 + .../client/petstore/python/docs/AnimalFarm.md | 1 + .../petstore/python/docs/ApiResponse.md | 1 + .../client/petstore/python/docs/Apple.md | 3 +- .../python/docs/ArrayOfArrayOfNumberOnly.md | 1 + .../petstore/python/docs/ArrayOfEnums.md | 1 + .../petstore/python/docs/ArrayOfNumberOnly.md | 1 + .../client/petstore/python/docs/ArrayTest.md | 1 + .../client/petstore/python/docs/Banana.md | 3 +- .../client/petstore/python/docs/BasquePig.md | 1 + .../petstore/python/docs/Capitalization.md | 1 + .../client/petstore/python/docs/CatAllOf.md | 1 + .../client/petstore/python/docs/Category.md | 1 + .../petstore/python/docs/ChildCatAllOf.md | 1 + .../client/petstore/python/docs/ClassModel.md | 1 + .../client/petstore/python/docs/Client.md | 1 + .../ComposedSchemaWithPropsAndNoAddProps.md | 13 + .../client/petstore/python/docs/DanishPig.md | 1 + .../client/petstore/python/docs/DogAllOf.md | 1 + .../client/petstore/python/docs/Drawing.md | 2 +- .../client/petstore/python/docs/EnumArrays.md | 1 + .../client/petstore/python/docs/EnumClass.md | 1 + .../client/petstore/python/docs/EnumTest.md | 1 + .../client/petstore/python/docs/File.md | 1 + .../python/docs/FileSchemaTestClass.md | 1 + .../client/petstore/python/docs/Foo.md | 1 + .../client/petstore/python/docs/FormatTest.md | 1 + .../client/petstore/python/docs/Fruit.md | 6 +- .../client/petstore/python/docs/FruitReq.md | 2 + .../client/petstore/python/docs/GmFruit.md | 5 +- .../petstore/python/docs/GrandparentAnimal.md | 1 + .../petstore/python/docs/HasOnlyReadOnly.md | 1 + .../petstore/python/docs/HealthCheckResult.md | 1 + .../python/docs/InlineResponseDefault.md | 1 + .../petstore/python/docs/IntegerEnum.md | 1 + .../python/docs/IntegerEnumOneValue.md | 1 + .../docs/IntegerEnumWithDefaultValue.md | 1 + .../petstore/python/docs/IsoscelesTriangle.md | 1 + .../client/petstore/python/docs/List.md | 1 + .../client/petstore/python/docs/MapTest.md | 1 + ...dPropertiesAndAdditionalPropertiesClass.md | 1 + .../petstore/python/docs/Model200Response.md | 1 + .../petstore/python/docs/ModelReturn.md | 1 + .../client/petstore/python/docs/Name.md | 1 + .../petstore/python/docs/NullableClass.md | 3 +- .../client/petstore/python/docs/NumberOnly.md | 1 + .../python/docs/NumberWithValidations.md | 1 + .../python/docs/ObjectModelWithRefProps.md | 1 + .../client/petstore/python/docs/Order.md | 1 + .../client/petstore/python/docs/Pet.md | 1 + .../python/docs/QuadrilateralInterface.md | 1 + .../petstore/python/docs/ReadOnlyFirst.md | 1 + .../petstore/python/docs/ShapeInterface.md | 1 + .../petstore/python/docs/SpecialModelName.md | 1 + .../client/petstore/python/docs/StringEnum.md | 1 + .../python/docs/StringEnumWithDefaultValue.md | 1 + .../client/petstore/python/docs/Tag.md | 1 + .../petstore/python/docs/TriangleInterface.md | 1 + .../client/petstore/python/docs/User.md | 1 + .../client/petstore/python/docs/Whale.md | 1 + .../model/additional_properties_class.py | 12 +- .../python/petstore_api/model/animal.py | 9 +- .../python/petstore_api/model/animal_farm.py | 9 +- .../python/petstore_api/model/api_response.py | 8 +- .../python/petstore_api/model/apple.py | 15 +- .../model/array_of_array_of_number_only.py | 8 +- .../petstore_api/model/array_of_enums.py | 9 +- .../model/array_of_number_only.py | 8 +- .../python/petstore_api/model/array_test.py | 9 +- .../python/petstore_api/model/banana.py | 15 +- .../python/petstore_api/model/basque_pig.py | 8 +- .../petstore_api/model/capitalization.py | 8 +- .../petstore/python/petstore_api/model/cat.py | 25 +- .../python/petstore_api/model/cat_all_of.py | 8 +- .../python/petstore_api/model/category.py | 8 +- .../python/petstore_api/model/child_cat.py | 22 +- .../petstore_api/model/child_cat_all_of.py | 8 +- .../python/petstore_api/model/class_model.py | 8 +- .../python/petstore_api/model/client.py | 8 +- .../model/complex_quadrilateral.py | 23 +- ...composed_one_of_number_with_validations.py | 15 +- ...osed_schema_with_props_and_no_add_props.py | 212 ++ .../python/petstore_api/model/danish_pig.py | 8 +- .../petstore/python/petstore_api/model/dog.py | 22 +- .../python/petstore_api/model/dog_all_of.py | 8 +- .../python/petstore_api/model/enum_arrays.py | 8 +- .../python/petstore_api/model/enum_class.py | 8 +- .../python/petstore_api/model/enum_test.py | 9 +- .../model/equilateral_triangle.py | 23 +- .../python/petstore_api/model/file.py | 8 +- .../model/file_schema_test_class.py | 9 +- .../petstore/python/petstore_api/model/foo.py | 8 +- .../python/petstore_api/model/format_test.py | 8 +- .../python/petstore_api/model/fruit.py | 36 +- .../python/petstore_api/model/fruit_req.py | 24 +- .../python/petstore_api/model/gm_fruit.py | 36 +- .../petstore_api/model/grandparent_animal.py | 9 +- .../petstore_api/model/has_only_read_only.py | 8 +- .../petstore_api/model/health_check_result.py | 8 +- .../model/inline_response_default.py | 9 +- .../python/petstore_api/model/integer_enum.py | 8 +- .../model/integer_enum_one_value.py | 8 +- .../model/integer_enum_with_default_value.py | 8 +- .../petstore_api/model/isosceles_triangle.py | 32 +- .../python/petstore_api/model/list.py | 8 +- .../python/petstore_api/model/mammal.py | 22 +- .../python/petstore_api/model/map_test.py | 9 +- ...perties_and_additional_properties_class.py | 9 +- .../petstore_api/model/model200_response.py | 8 +- .../python/petstore_api/model/model_return.py | 8 +- .../python/petstore_api/model/name.py | 8 +- .../petstore_api/model/nullable_class.py | 5 +- .../petstore_api/model/nullable_shape.py | 22 +- .../python/petstore_api/model/number_only.py | 8 +- .../model/number_with_validations.py | 8 +- .../model/object_model_with_ref_props.py | 9 +- .../python/petstore_api/model/order.py | 8 +- .../python/petstore_api/model/parent_pet.py | 22 +- .../petstore/python/petstore_api/model/pet.py | 9 +- .../petstore/python/petstore_api/model/pig.py | 22 +- .../petstore_api/model/quadrilateral.py | 22 +- .../model/quadrilateral_interface.py | 8 +- .../petstore_api/model/read_only_first.py | 8 +- .../petstore_api/model/scalene_triangle.py | 23 +- .../python/petstore_api/model/shape.py | 22 +- .../petstore_api/model/shape_interface.py | 8 +- .../petstore_api/model/shape_or_null.py | 22 +- .../model/simple_quadrilateral.py | 23 +- .../python/petstore_api/model/some_object.py | 15 +- .../petstore_api/model/special_model_name.py | 8 +- .../python/petstore_api/model/string_enum.py | 8 +- .../model/string_enum_with_default_value.py | 8 +- .../petstore/python/petstore_api/model/tag.py | 8 +- .../python/petstore_api/model/triangle.py | 22 +- .../petstore_api/model/triangle_interface.py | 8 +- .../python/petstore_api/model/user.py | 8 +- .../python/petstore_api/model/whale.py | 8 +- .../python/petstore_api/model_utils.py | 251 +- .../python/petstore_api/models/__init__.py | 1 + .../openapi3/client/petstore/python/pom.xml | 4 +- ...osed_schema_with_props_and_no_add_props.py | 37 + ...osed_schema_with_props_and_no_add_props.py | 45 + .../tests_manual/test_deserialization.py | 9 +- .../test_discard_unknown_properties.py | 44 +- .../python/tests_manual/test_fruit.py | 153 +- .../python/tests_manual/test_fruit_req.py | 80 +- .../python/tests_manual/test_gm_fruit.py | 115 +- .../petstore/python/tests_manual/test_tag.py | 35 + 539 files changed, 32480 insertions(+), 1621 deletions(-) create mode 100644 bin/configs/python-oas2_disallowAdditionalPropertiesIfNotPresent.yaml create mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PythonLegacyClientOptionsProvider.java create mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonLegacyClientOptionsTest.java create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.gitignore create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.gitlab-ci.yml create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator-ignore create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/FILES create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.travis.yml create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/Makefile create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/README.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/dev-requirements.txt create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesAnyType.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesArray.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesBoolean.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesClass.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesInteger.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesNumber.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesObject.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesString.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Animal.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AnimalFarm.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AnotherFakeApi.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ApiResponse.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayOfArrayOfNumberOnly.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayOfNumberOnly.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayTest.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Capitalization.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Cat.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/CatAllOf.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Category.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Child.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildAllOf.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildCat.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildCatAllOf.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildDog.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildDogAllOf.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildLizard.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildLizardAllOf.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ClassModel.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Client.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Dog.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/DogAllOf.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumArrays.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumClass.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumTest.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeApi.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeClassnameTags123Api.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/File.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FileSchemaTestClass.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FormatTest.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Grandparent.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/GrandparentAnimal.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/HasOnlyReadOnly.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/List.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/MapTest.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/MixedPropertiesAndAdditionalPropertiesClass.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Model200Response.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ModelReturn.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Name.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/NumberOnly.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/NumberWithValidations.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ObjectModelWithRefProps.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Order.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Parent.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ParentAllOf.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ParentPet.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Pet.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/PetApi.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Player.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ReadOnlyFirst.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/SpecialModelName.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StoreApi.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StringBooleanMap.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StringEnum.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Tag.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/TypeHolderDefault.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/TypeHolderExample.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/User.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/UserApi.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/XmlItem.md create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/git_push.sh create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/__init__.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/__init__.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/another_fake_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/fake_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/fake_classname_tags_123_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/pet_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/store_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/user_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api_client.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/apis/__init__.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/configuration.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/exceptions.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/__init__.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_any_type.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_array.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_boolean.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_class.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_integer.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_number.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_object.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_string.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal_farm.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/api_response.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_array_of_number_only.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_number_only.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_test.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/capitalization.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/category.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/class_model.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/client.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_arrays.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_class.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_test.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file_schema_test_class.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/format_test.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent_animal.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/has_only_read_only.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/list.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/map_test.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/mixed_properties_and_additional_properties_class.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model200_response.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model_return.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/name.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_only.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_with_validations.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/object_model_with_ref_props.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/order.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_pet.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/pet.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/player.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/read_only_first.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/special_model_name.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_boolean_map.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_enum.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/tag.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_default.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_example.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/user.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/xml_item.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/models/__init__.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/rest.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/pom.xml create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/requirements.txt create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/setup.cfg create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/setup.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test-requirements.txt create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/__init__.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_any_type.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_array.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_boolean.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_class.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_integer.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_number.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_object.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_string.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_animal.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_animal_farm.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_another_fake_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_api_response.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_of_array_of_number_only.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_of_number_only.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_test.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_capitalization.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_cat.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_cat_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_category.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_cat.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_cat_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_dog.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_dog_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_lizard.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_lizard_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_class_model.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_client.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_dog.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_dog_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_arrays.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_class.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_test.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_fake_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_fake_classname_tags_123_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_file.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_file_schema_test_class.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_format_test.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_grandparent.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_grandparent_animal.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_has_only_read_only.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_list.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_map_test.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_mixed_properties_and_additional_properties_class.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_model200_response.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_model_return.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_name.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_number_only.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_number_with_validations.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_object_model_with_ref_props.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_order.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent_all_of.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent_pet.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_pet.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_pet_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_player.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_read_only_first.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_special_model_name.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_store_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_string_boolean_map.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_string_enum.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_tag.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_type_holder_default.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_type_holder_example.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_user.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_user_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_xml_item.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test_python.sh create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/testfiles/1px_pic1.png create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/testfiles/1px_pic2.png create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/testfiles/foo.png create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/__init__.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_api_client.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_api_exception.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_deserialization.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_pet_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_serialization.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_store_api.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/util.py create mode 100644 samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tox.ini create mode 100644 samples/openapi3/client/petstore/python-experimental/.coverage create mode 100644 samples/openapi3/client/petstore/python/docs/ComposedSchemaWithPropsAndNoAddProps.md create mode 100644 samples/openapi3/client/petstore/python/petstore_api/model/composed_schema_with_props_and_no_add_props.py create mode 100644 samples/openapi3/client/petstore/python/test/test_composed_schema_with_props_and_no_add_props.py create mode 100644 samples/openapi3/client/petstore/python/tests_manual/test_composed_schema_with_props_and_no_add_props.py create mode 100644 samples/openapi3/client/petstore/python/tests_manual/test_tag.py diff --git a/bin/configs/python-oas2.yaml b/bin/configs/python-oas2.yaml index 4555376bd167..7c548fb39269 100644 --- a/bin/configs/python-oas2.yaml +++ b/bin/configs/python-oas2.yaml @@ -1,7 +1,10 @@ +# this file exists because in this file we omit setting disallowAdditionalPropertiesIfNotPresent +# which makes it default to false +# that false setting is needed for composed schemas to work +# Composed schemas are schemas that contain the allOf/oneOf/anyOf keywords. v2 specs only support the allOf keyword. generatorName: python outputDir: samples/client/petstore/python inputSpec: modules/openapi-generator/src/test/resources/2_0/python-client-experimental/petstore-with-fake-endpoints-models-for-testing.yaml templateDir: modules/openapi-generator/src/main/resources/python additionalProperties: - disallowAdditionalPropertiesIfNotPresent: "true" packageName: petstore_api diff --git a/bin/configs/python-oas2_disallowAdditionalPropertiesIfNotPresent.yaml b/bin/configs/python-oas2_disallowAdditionalPropertiesIfNotPresent.yaml new file mode 100644 index 000000000000..841cf77854eb --- /dev/null +++ b/bin/configs/python-oas2_disallowAdditionalPropertiesIfNotPresent.yaml @@ -0,0 +1,7 @@ +generatorName: python +outputDir: samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent +inputSpec: modules/openapi-generator/src/test/resources/2_0/python-client-experimental/petstore-with-fake-endpoints-models-for-testing.yaml +templateDir: modules/openapi-generator/src/main/resources/python +additionalProperties: + disallowAdditionalPropertiesIfNotPresent: "true" + packageName: petstore_api diff --git a/docs/generators/python.md b/docs/generators/python.md index 4cf503ff2786..fe60f0e511c7 100644 --- a/docs/generators/python.md +++ b/docs/generators/python.md @@ -7,6 +7,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl | Option | Description | Values | Default | | ------ | ----------- | ------ | ------- | +|disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
**false**
The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
**true**
Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default. NOTE: this option breaks composition and will be removed in 6.0.0
|false| |generateSourceCodeOnly|Specifies that only a library source code is to be generated.| |false| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true| |library|library template (sub-template) to use: asyncio, tornado, urllib3| |urllib3| @@ -28,7 +29,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl | Type/Alias | Instantiated By | | ---------- | --------------- | -|map|dict| ## LANGUAGE PRIMITIVES diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java index b38d2448d87e..9b9f8b6da4b2 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java @@ -65,10 +65,6 @@ public PythonClientCodegen() { // in other code generators, support needs to be enabled on a case-by-case basis. supportsAdditionalPropertiesWithComposedSchema = true; - // When the 'additionalProperties' keyword is not present in a OAS schema, allow - // undeclared properties. This is compliant with the JSON schema specification. - this.setDisallowAdditionalPropertiesIfNotPresent(false); - modifyFeatureSet(features -> features .includeDocumentationFeatures(DocumentationFeature.Readme) .wireFormatFeatures(EnumSet.of(WireFormatFeature.JSON, WireFormatFeature.XML, WireFormatFeature.Custom)) @@ -94,9 +90,8 @@ public PythonClientCodegen() { ParameterFeature.Cookie ) ); - - // this may set datatype right for additional properties - instantiationTypes.put("map", "dict"); + // needed for type object with additionalProperties: false + typeMapping.put("object", "dict"); languageSpecificPrimitives.add("file_type"); languageSpecificPrimitives.add("none_type"); @@ -111,6 +106,20 @@ public PythonClientCodegen() { cliOptions.add(new CliOption(CodegenConstants.PYTHON_ATTR_NONE_IF_UNSET, CodegenConstants.PYTHON_ATTR_NONE_IF_UNSET_DESC) .defaultValue(Boolean.FALSE.toString())); + // option to change how we process + set the data in the 'additionalProperties' keyword. + CliOption disallowAdditionalPropertiesIfNotPresentOpt = CliOption.newBoolean( + CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT, + CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT_DESC).defaultValue(Boolean.FALSE.toString()); + Map disallowAdditionalPropertiesIfNotPresentOpts = new HashMap<>(); + disallowAdditionalPropertiesIfNotPresentOpts.put("false", + "The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications."); + disallowAdditionalPropertiesIfNotPresentOpts.put("true", + "Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default. NOTE: "+ + "this option breaks composition and will be removed in 6.0.0" + ); + disallowAdditionalPropertiesIfNotPresentOpt.setEnum(disallowAdditionalPropertiesIfNotPresentOpts); + cliOptions.add(disallowAdditionalPropertiesIfNotPresentOpt); + generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata) .stability(Stability.EXPERIMENTAL) .build(); @@ -160,6 +169,18 @@ public void processOpts() { } additionalProperties.put("attrNoneIfUnset", attrNoneIfUnset); + // When the 'additionalProperties' keyword is not present in a OAS schema, allow + // undeclared properties. This is compliant with the JSON schema specification. + // setting this to false is required to have composed schemas work because: + // anyOf SchemaA + SchemaB, requires that props present only in A are accepted in B because in B + // they are additional properties + Boolean disallowAddProps = false; + if (additionalProperties.containsKey(CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT)) { + disallowAddProps = Boolean.valueOf(additionalProperties.get(CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT).toString()); + } + this.setDisallowAdditionalPropertiesIfNotPresent(disallowAddProps); + + // check library option to ensure only urllib3 is supported if (!DEFAULT_LIBRARY.equals(getLibrary())) { throw new RuntimeException("Only the `urllib3` library is supported in the refactored `python` client generator at the moment. Please fall back to `python-legacy` client generator for the time being. We welcome contributions to add back `asyncio`, `tornado` support to the `python` client generator."); @@ -728,6 +749,62 @@ public String getModelName(Schema sc) { return null; } + @Override + protected Schema getAdditionalProperties(Schema schema) { + /* + Use cases: + 1. addProps set to schema in spec: return that schema + 2. addProps unset w/ getDisallowAdditionalPropertiesIfNotPresent -> null + 3. addProps unset w/ getDisallowAdditionalPropertiesIfNotPresent=False -> new Schema() + 4. addProps true -> new Schema() NOTE: v3 only + 5. addprops false -> null NOTE: v3 only + */ + Object addProps = schema.getAdditionalProperties(); + if (addProps instanceof Schema) { + return (Schema) addProps; + } + if (addProps == null) { + // When reaching this code path, this should indicate the 'additionalProperties' keyword is + // not present in the OAS schema. This is true for OAS 3.0 documents. + // However, the parsing logic is broken for OAS 2.0 documents because of the + // https://github.com/swagger-api/swagger-parser/issues/1369 issue. + // When OAS 2.0 documents are parsed, the swagger-v2-converter ignores the 'additionalProperties' + // keyword if the value is boolean. That means codegen is unable to determine whether + // additional properties are allowed or not. + // + // The original behavior was to assume additionalProperties had been set to false. + if (getDisallowAdditionalPropertiesIfNotPresent()) { + // If the 'additionalProperties' keyword is not present in a OAS schema, + // interpret as if the 'additionalProperties' keyword had been set to false. + // This is NOT compliant with the JSON schema specification. It is the original + // 'openapi-generator' behavior. + return null; + } + /* + // The disallowAdditionalPropertiesIfNotPresent CLI option has been set to true, + // but for now that only works with OAS 3.0 documents. + // The new behavior does not work with OAS 2.0 documents. + if (extensions == null || !extensions.containsKey(EXTENSION_OPENAPI_DOC_VERSION)) { + // Fallback to the legacy behavior. + return null; + } + // Get original swagger version from OAS extension. + // Note openAPI.getOpenapi() is always set to 3.x even when the document + // is converted from a OAS/Swagger 2.0 document. + // https://github.com/swagger-api/swagger-parser/pull/1374 + SemVer version = new SemVer((String)extensions.get(EXTENSION_OPENAPI_DOC_VERSION)); + if (version.major != 3) { + return null; + } + */ + } + if (addProps == null || (addProps instanceof Boolean && (Boolean) addProps)) { + // Return empty schema to allow any type + return new Schema(); + } + return null; + } + /** * Return a string representation of the Python types for the specified OAS schema. * Primitive types in the OAS specification are implemented in Python using the corresponding @@ -767,16 +844,39 @@ private String getTypeString(Schema p, String prefix, String suffix, List both become use case 1 + // switch to v3 if you need use cases 1 + 2 to work correctly + return prefix + "bool, date, datetime, dict, float, int, list, str, none_type" + fullSuffix; + } // Resolve $ref because ModelUtils.isXYZ methods do not automatically resolve references. if (ModelUtils.isNullable(ModelUtils.getReferencedSchema(this.openAPI, p))) { fullSuffix = ", none_type" + suffix; } - if (isFreeFormObject(p) && getAdditionalProperties(p) == null) { - return prefix + "bool, date, datetime, dict, float, int, list, str" + fullSuffix; - } - if ((ModelUtils.isMapSchema(p) || "object".equals(p.getType())) && getAdditionalProperties(p) != null) { + Boolean v3WithCompositionAddPropsAnyTypeSchemaCase = (getAdditionalProperties(p) != null && emptySchema.equals(getAdditionalProperties(p)) && originalSpecVersion.equals("3")); + if (isFreeFormObject(p) && v3WithCompositionAddPropsAnyTypeSchemaCase) { + // v3 code path, use case: type object schema with no other schema info + return prefix + "{str: (bool, date, datetime, dict, float, int, list, str, none_type)}" + fullSuffix; + } else if ((ModelUtils.isMapSchema(p) || "object".equals(p.getType())) && getAdditionalProperties(p) != null) { Schema inner = getAdditionalProperties(p); return prefix + "{str: " + getTypeString(inner, "(", ")", referencedModelNames) + "}" + fullSuffix; } else if (ModelUtils.isArraySchema(p)) { @@ -835,7 +935,7 @@ protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Sc // The 'addProps' may be a reference, getTypeDeclaration will resolve // the reference. List referencedModelNames = new ArrayList(); - codegenModel.additionalPropertiesType = getTypeString(addProps, "", "", referencedModelNames); + getTypeString(addProps, "", "", referencedModelNames); if (referencedModelNames.size() != 0) { // Models that are referenced in the 'additionalPropertiesType' keyword // must be added to the imports. diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonLegacyClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonLegacyClientCodegen.java index 7d5cc631a8bf..ca169e641229 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonLegacyClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonLegacyClientCodegen.java @@ -35,6 +35,7 @@ public class PythonLegacyClientCodegen extends AbstractPythonCodegen implements // nose is a python testing framework, we use pytest if USE_NOSE is unset public static final String USE_NOSE = "useNose"; public static final String RECURSION_LIMIT = "recursionLimit"; + public static final String PYTHON_ATTR_NONE_IF_UNSET = "pythonAttrNoneIfUnset"; protected String packageUrl; protected String apiDocPath = "docs/"; diff --git a/modules/openapi-generator/src/main/resources/python/model_doc.mustache b/modules/openapi-generator/src/main/resources/python/model_doc.mustache index ff7358618ea5..3f7c8263df20 100644 --- a/modules/openapi-generator/src/main/resources/python/model_doc.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_doc.mustache @@ -28,9 +28,9 @@ Name | Type | Description | Notes {{#optionalVars}} **{{name}}** | {{^complexType}}**{{dataType}}**{{/complexType}}{{#complexType}}[**{{dataType}}**]({{complexType}}.md){{/complexType}} | {{description}} | [optional] {{#isReadOnly}}[readonly] {{/isReadOnly}}{{#defaultValue}} if omitted the server will use the default value of {{{.}}}{{/defaultValue}} {{/optionalVars}} -{{#additionalPropertiesType}} -**any string name** | **{{additionalPropertiesType}}** | any string name can be used but the value must be the correct type | [optional] -{{/additionalPropertiesType}} +{{#additionalProperties}} +**any string name** | {{^complexType}}**{{dataType}}**{{/complexType}}{{#complexType}}[**{{dataType}}**]({{complexType}}.md){{/complexType}} | any string name can be used but the value must be the correct type | [optional] +{{/additionalProperties}} [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/classvars.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/classvars.mustache index 88ae5df9f121..0e5ff25b97fb 100644 --- a/modules/openapi-generator/src/main/resources/python/model_templates/classvars.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_templates/classvars.mustache @@ -60,7 +60,7 @@ {{/optionalVars}} } -{{#additionalPropertiesType}} +{{#additionalProperties}} @cached_property def additional_properties_type(): """ @@ -72,11 +72,11 @@ lazy_import() {{/-first}} {{/imports}} - return ({{{additionalPropertiesType}}},) # noqa: E501 -{{/additionalPropertiesType}} -{{^additionalPropertiesType}} + return ({{{dataType}}},) # noqa: E501 +{{/additionalProperties}} +{{^additionalProperties}} additional_properties_type = None -{{/additionalPropertiesType}} +{{/additionalProperties}} _nullable = {{#isNullable}}True{{/isNullable}}{{^isNullable}}False{{/isNullable}} diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/method_init_composed.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/method_init_composed.mustache index 9b298379710c..ca0505ead969 100644 --- a/modules/openapi-generator/src/main/resources/python/model_templates/method_init_composed.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_templates/method_init_composed.mustache @@ -10,7 +10,52 @@ '_additional_properties_model_instances', ]) -{{> model_templates/method_init_shared }} + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """{{classname}} - a model defined in OpenAPI + + Keyword Args: +{{#requiredVars}} +{{#defaultValue}} + {{name}} ({{{dataType}}}):{{#description}} {{{description}}}.{{/description}} defaults to {{{defaultValue}}}{{#allowableValues}}, must be one of [{{#enumVars}}{{{value}}}, {{/enumVars}}]{{/allowableValues}} # noqa: E501 +{{/defaultValue}} +{{^defaultValue}} + {{name}} ({{{dataType}}}):{{#description}} {{{description}}}{{/description}} +{{/defaultValue}} +{{/requiredVars}} +{{> model_templates/docstring_init_required_kwargs }} +{{#optionalVars}} + {{name}} ({{{dataType}}}):{{#description}} {{{description}}}.{{/description}} [optional]{{#defaultValue}} if omitted the server will use the default value of {{{defaultValue}}}{{/defaultValue}} # noqa: E501 +{{/optionalVars}} + """ + +{{#requiredVars}} +{{#defaultValue}} + {{name}} = kwargs.get('{{name}}', {{{defaultValue}}}) +{{/defaultValue}} +{{/requiredVars}} + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) constant_args = { '_check_type': _check_type, @@ -19,28 +64,18 @@ '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { -{{#requiredVars}} - '{{name}}': {{name}}, -{{/requiredVars}} - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/methods_setattr_getattr_composed.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/methods_setattr_getattr_composed.mustache index 6b1013ca997d..de7887ebdbda 100644 --- a/modules/openapi-generator/src/main/resources/python/model_templates/methods_setattr_getattr_composed.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_templates/methods_setattr_getattr_composed.mustache @@ -4,27 +4,43 @@ self.__dict__[name] = value return - # set the attribute on the correct instance - model_instances = self._var_name_to_model_instances.get( - name, self._additional_properties_model_instances) - if model_instances: - for model_instance in model_instances: - if model_instance == self: - self.set_attribute(name, value) - else: - setattr(model_instance, name, value) - if name not in self._var_name_to_model_instances: - # we assigned an additional property - self.__dict__['_var_name_to_model_instances'][name] = ( - model_instance - ) - return None + """ + Use cases: + 1. additional_properties_type is None (additionalProperties == False in spec) + Check for property presence in self.openapi_types + if not present then throw an error + if present set in self, set attribute + always set on composed schemas + 2. additional_properties_type exists + set attribute on self + always set on composed schemas + """ + if self.additional_properties_type is None: + """ + For an attribute to exist on a composed schema it must: + - fulfill schema_requirements in the self composed schema not considering oneOf/anyOf/allOf schemas AND + - fulfill schema_requirements in each oneOf/anyOf/allOf schemas - raise ApiAttributeError( - "{0} has no attribute '{1}'".format( - type(self).__name__, name), - [e for e in [self._path_to_item, name] if e] - ) + schema_requirements: + For an attribute to exist on a schema it must: + - be present in properties at the schema OR + - have additionalProperties unset (defaults additionalProperties = any type) OR + - have additionalProperties set + """ + if name not in self.openapi_types: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + # attribute must be set on self and composed instances + self.set_attribute(name, value) + for model_instance in self._composed_instances: + setattr(model_instance, name, value) + if name not in self._var_name_to_model_instances: + # we assigned an additional property + self.__dict__['_var_name_to_model_instances'][name] = self._composed_instances + [self] + return None __unset_attribute_value__ = object() @@ -34,13 +50,12 @@ return self.__dict__[name] # get the attribute from the correct instance - model_instances = self._var_name_to_model_instances.get( - name, self._additional_properties_model_instances) + model_instances = self._var_name_to_model_instances.get(name) values = [] - # A composed model stores child (oneof/anyOf/allOf) models under - # self._var_name_to_model_instances. A named property can exist in - # multiple child models. If the property is present in more than one - # child model, the value must be the same across all the child models. + # A composed model stores self and child (oneof/anyOf/allOf) models under + # self._var_name_to_model_instances. + # Any property must exist in self and all model instances + # The value stored in all model instances must be the same if model_instances: for model_instance in model_instances: if name in model_instance._data_store: diff --git a/modules/openapi-generator/src/main/resources/python/model_utils.mustache b/modules/openapi-generator/src/main/resources/python/model_utils.mustache index 07b77a99d18c..9b5a8dd9e811 100644 --- a/modules/openapi-generator/src/main/resources/python/model_utils.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_utils.mustache @@ -1291,8 +1291,13 @@ def get_allof_instances(self, model_args, constant_args): self: the class we are handling model_args (dict): var_name to var_value used to make instances - constant_args (dict): var_name to var_value - used to make instances + constant_args (dict): + metadata arguments: + _check_type + _path_to_item + _spec_property_naming + _configuration + _visited_composed_classes Returns composed_instances (list) @@ -1300,20 +1305,8 @@ def get_allof_instances(self, model_args, constant_args): composed_instances = [] for allof_class in self._composed_schemas['allOf']: - # no need to handle changing js keys to python because - # for composed schemas, allof parameters are included in the - # composed schema and were changed to python keys in __new__ - # extract a dict of only required keys from fixed_model_args - kwargs = {} - var_names = set(allof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in model_args: - kwargs[var_name] = model_args[var_name] - - # and use it to make the instance - kwargs.update(constant_args) try: - allof_instance = allof_class(**kwargs) + allof_instance = allof_class(**model_args, **constant_args) composed_instances.append(allof_instance) except Exception as ex: raise ApiValueError( @@ -1373,31 +1366,9 @@ def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None): single_value_input = allows_single_value_input(oneof_class) - if not single_value_input: - # transform js keys from input data to python keys in fixed_model_args - fixed_model_args = change_keys_js_to_python( - model_kwargs, oneof_class) - - # Extract a dict with the properties that are declared in the oneOf schema. - # Undeclared properties (e.g. properties that are allowed because of the - # additionalProperties attribute in the OAS document) are not added to - # the dict. - kwargs = {} - var_names = set(oneof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in fixed_model_args: - kwargs[var_name] = fixed_model_args[var_name] - - # do not try to make a model with no input args - if len(kwargs) == 0: - continue - - # and use it to make the instance - kwargs.update(constant_kwargs) - try: if not single_value_input: - oneof_instance = oneof_class(**kwargs) + oneof_instance = oneof_class(**model_kwargs, **constant_kwargs) else: if issubclass(oneof_class, ModelSimple): oneof_instance = oneof_class(model_arg, **constant_kwargs) @@ -1454,24 +1425,8 @@ def get_anyof_instances(self, model_args, constant_args): # none_type deserialization is handled in the __new__ method continue - # transform js keys to python keys in fixed_model_args - fixed_model_args = change_keys_js_to_python(model_args, anyof_class) - - # extract a dict of only required keys from these_model_vars - kwargs = {} - var_names = set(anyof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in fixed_model_args: - kwargs[var_name] = fixed_model_args[var_name] - - # do not try to make a model with no input args - if len(kwargs) == 0: - continue - - # and use it to make the instance - kwargs.update(constant_args) try: - anyof_instance = anyof_class(**kwargs) + anyof_instance = anyof_class(**model_args, **constant_args) anyof_instances.append(anyof_instance) except Exception: pass @@ -1484,47 +1439,34 @@ def get_anyof_instances(self, model_args, constant_args): return anyof_instances -def get_additional_properties_model_instances( - composed_instances, self): - additional_properties_model_instances = [] - all_instances = [self] - all_instances.extend(composed_instances) - for instance in all_instances: - if instance.additional_properties_type is not None: - additional_properties_model_instances.append(instance) - return additional_properties_model_instances - - -def get_var_name_to_model_instances(self, composed_instances): - var_name_to_model_instances = {} - all_instances = [self] - all_instances.extend(composed_instances) - for instance in all_instances: - for var_name in instance.openapi_types: - if var_name not in var_name_to_model_instances: - var_name_to_model_instances[var_name] = [instance] - else: - var_name_to_model_instances[var_name].append(instance) - return var_name_to_model_instances - - -def get_unused_args(self, composed_instances, model_args): - unused_args = dict(model_args) - # arguments apssed to self were already converted to python names +def get_discarded_args(self, composed_instances, model_args): + """ + Gathers the args that were discarded by configuration.discard_unknown_keys + """ + model_arg_keys = model_args.keys() + discarded_args = set() + # arguments passed to self were already converted to python names # before __init__ was called - for var_name_py in self.attribute_map: - if var_name_py in unused_args: - del unused_args[var_name_py] for instance in composed_instances: if instance.__class__ in self._composed_schemas['allOf']: - for var_name_py in instance.attribute_map: - if var_name_py in unused_args: - del unused_args[var_name_py] + try: + keys = instance.to_dict().keys() + discarded_keys = model_args - keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass else: - for var_name_js in instance.attribute_map.values(): - if var_name_js in unused_args: - del unused_args[var_name_js] - return unused_args + try: + all_keys = set(model_to_dict(instance, serialize=False).keys()) + js_keys = model_to_dict(instance, serialize=True).keys() + all_keys.update(js_keys) + discarded_keys = model_arg_keys - all_keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass + return discarded_args def validate_get_composed_info(constant_args, model_args, self): @@ -1568,36 +1510,42 @@ def validate_get_composed_info(constant_args, model_args, self): composed_instances.append(oneof_instance) anyof_instances = get_anyof_instances(self, model_args, constant_args) composed_instances.extend(anyof_instances) + """ + set additional_properties_model_instances + additional properties must be evaluated at the schema level + so self's additional properties are most important + If self is a composed schema with: + - no properties defined in self + - additionalProperties: False + Then for object payloads every property is an additional property + and they are not allowed, so only empty dict is allowed + + Properties must be set on all matching schemas + so when a property is assigned toa composed instance, it must be set on all + composed instances regardless of additionalProperties presence + keeping it to prevent breaking changes in v5.0.1 + TODO remove cls._additional_properties_model_instances in 6.0.0 + """ + additional_properties_model_instances = [] + if self.additional_properties_type is not None: + additional_properties_model_instances = [self] - # map variable names to composed_instances - var_name_to_model_instances = get_var_name_to_model_instances( - self, composed_instances) - - # set additional_properties_model_instances - additional_properties_model_instances = ( - get_additional_properties_model_instances(composed_instances, self) - ) - - # set any remaining values - unused_args = get_unused_args(self, composed_instances, model_args) - if len(unused_args) > 0 and \ - len(additional_properties_model_instances) == 0 and \ - (self._configuration is None or - not self._configuration.discard_unknown_keys): - raise ApiValueError( - "Invalid input arguments input when making an instance of " - "class %s. Not all inputs were used. The unused input data " - "is %s" % (self.__class__.__name__, unused_args) - ) + """ + no need to set properties on self in here, they will be set in __init__ + By here all composed schema oneOf/anyOf/allOf instances have their properties set using + model_args + """ + discarded_args = get_discarded_args(self, composed_instances, model_args) - # no need to add additional_properties to var_name_to_model_instances here - # because additional_properties_model_instances will direct us to that - # instance when we use getattr or setattr - # and we update var_name_to_model_instances in setattr + # map variable names to composed_instances + var_name_to_model_instances = {} + for prop_name in model_args: + if prop_name not in discarded_args: + var_name_to_model_instances[prop_name] = [self] + composed_instances return [ composed_instances, var_name_to_model_instances, additional_properties_model_instances, - unused_args + discarded_args ] diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PythonClientOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PythonClientOptionsProvider.java index 7beb3ec69c0d..fc7d74074dd8 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PythonClientOptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PythonClientOptionsProvider.java @@ -19,7 +19,7 @@ import com.google.common.collect.ImmutableMap; import org.openapitools.codegen.CodegenConstants; -import org.openapitools.codegen.languages.PythonLegacyClientCodegen; +import org.openapitools.codegen.languages.PythonClientCodegen; import java.util.Map; @@ -30,6 +30,8 @@ public class PythonClientOptionsProvider implements OptionsProvider { public static final String PACKAGE_URL_VALUE = ""; public static final String USE_NOSE_VALUE = "false"; public static final String RECURSION_LIMIT = "1200"; + public static final String DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT = "false"; + public static final String PYTHON_ATTR_NONE_IF_UNSET = "false"; @Override public String getLanguage() { @@ -39,16 +41,17 @@ public String getLanguage() { @Override public Map createOptions() { ImmutableMap.Builder builder = new ImmutableMap.Builder(); - return builder.put(PythonLegacyClientCodegen.PACKAGE_URL, PACKAGE_URL_VALUE) + return builder.put(PythonClientCodegen.PACKAGE_URL, PACKAGE_URL_VALUE) .put(CodegenConstants.PACKAGE_NAME, PACKAGE_NAME_VALUE) .put(CodegenConstants.PROJECT_NAME, PROJECT_NAME_VALUE) .put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE) - .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true") .put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "true") .put(CodegenConstants.SOURCECODEONLY_GENERATION, "false") .put(CodegenConstants.LIBRARY, "urllib3") - .put(PythonLegacyClientCodegen.USE_NOSE, USE_NOSE_VALUE) - .put(PythonLegacyClientCodegen.RECURSION_LIMIT, RECURSION_LIMIT) + .put(CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT, DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT) + .put(PythonClientCodegen.USE_NOSE, USE_NOSE_VALUE) + .put(PythonClientCodegen.RECURSION_LIMIT, RECURSION_LIMIT) + .put(PythonClientCodegen.PYTHON_ATTR_NONE_IF_UNSET, PYTHON_ATTR_NONE_IF_UNSET) .build(); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PythonLegacyClientOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PythonLegacyClientOptionsProvider.java new file mode 100644 index 000000000000..90e76caea16f --- /dev/null +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/PythonLegacyClientOptionsProvider.java @@ -0,0 +1,59 @@ +/* + * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech) + * Copyright 2018 SmartBear Software + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openapitools.codegen.options; + +import com.google.common.collect.ImmutableMap; +import org.openapitools.codegen.CodegenConstants; +import org.openapitools.codegen.languages.PythonLegacyClientCodegen; + +import java.util.Map; + +public class PythonLegacyClientOptionsProvider implements OptionsProvider { + public static final String PACKAGE_NAME_VALUE = "swagger_client_python"; + public static final String PROJECT_NAME_VALUE = "swagger-client-python"; + public static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT"; + public static final String PACKAGE_URL_VALUE = ""; + public static final String USE_NOSE_VALUE = "false"; + public static final String RECURSION_LIMIT = "1200"; + + @Override + public String getLanguage() { + return "python"; + } + + @Override + public Map createOptions() { + ImmutableMap.Builder builder = new ImmutableMap.Builder(); + return builder.put(PythonLegacyClientCodegen.PACKAGE_URL, PACKAGE_URL_VALUE) + .put(CodegenConstants.PACKAGE_NAME, PACKAGE_NAME_VALUE) + .put(CodegenConstants.PROJECT_NAME, PROJECT_NAME_VALUE) + .put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE) + .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true") + .put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "true") + .put(CodegenConstants.SOURCECODEONLY_GENERATION, "false") + .put(CodegenConstants.LIBRARY, "urllib3") + .put(PythonLegacyClientCodegen.USE_NOSE, USE_NOSE_VALUE) + .put(PythonLegacyClientCodegen.RECURSION_LIMIT, RECURSION_LIMIT) + .build(); + } + + @Override + public boolean isServer() { + return false; + } +} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonClientOptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonClientOptionsTest.java index 8bec98892ef6..e423c6e85842 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonClientOptionsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonClientOptionsTest.java @@ -19,7 +19,7 @@ import org.openapitools.codegen.AbstractOptionsTest; import org.openapitools.codegen.CodegenConfig; -import org.openapitools.codegen.languages.PythonLegacyClientCodegen; +import org.openapitools.codegen.languages.PythonClientCodegen; import org.openapitools.codegen.options.PythonClientOptionsProvider; import org.testng.Assert; @@ -29,7 +29,7 @@ import static org.mockito.Mockito.verify; public class PythonClientOptionsTest extends AbstractOptionsTest { - private PythonLegacyClientCodegen clientCodegen = mock(PythonLegacyClientCodegen.class, mockSettings); + private PythonClientCodegen clientCodegen = mock(PythonClientCodegen.class, mockSettings); public PythonClientOptionsTest() { super(new PythonClientOptionsProvider()); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonLegacyClientOptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonLegacyClientOptionsTest.java new file mode 100644 index 000000000000..8c17cdbb2fd8 --- /dev/null +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/PythonLegacyClientOptionsTest.java @@ -0,0 +1,54 @@ +/* + * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech) + * Copyright 2018 SmartBear Software + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openapitools.codegen.python; + +import org.openapitools.codegen.AbstractOptionsTest; +import org.openapitools.codegen.CodegenConfig; +import org.openapitools.codegen.languages.PythonLegacyClientCodegen; +import org.openapitools.codegen.options.PythonLegacyClientOptionsProvider; +import org.testng.Assert; + +import java.io.File; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class PythonLegacyClientOptionsTest extends AbstractOptionsTest { + private PythonLegacyClientCodegen clientCodegen = mock(PythonLegacyClientCodegen.class, mockSettings); + + public PythonLegacyClientOptionsTest() { + super(new PythonLegacyClientOptionsProvider()); + } + + @Override + protected CodegenConfig getCodegenConfig() { + return clientCodegen; + } + + @SuppressWarnings("unused") + @Override + protected void verifyOptions() { + Assert.assertEquals(clientCodegen.packagePath(), PythonLegacyClientOptionsProvider.PACKAGE_NAME_VALUE.replace('.', File.separatorChar)); + + verify(clientCodegen).setPackageName(PythonLegacyClientOptionsProvider.PACKAGE_NAME_VALUE); + verify(clientCodegen).setProjectName(PythonLegacyClientOptionsProvider.PROJECT_NAME_VALUE); + verify(clientCodegen).setPackageVersion(PythonLegacyClientOptionsProvider.PACKAGE_VERSION_VALUE); + verify(clientCodegen).setPackageUrl(PythonLegacyClientOptionsProvider.PACKAGE_URL_VALUE); + verify(clientCodegen).setUseNose(PythonLegacyClientOptionsProvider.USE_NOSE_VALUE); + } +} diff --git a/modules/openapi-generator/src/test/resources/2_0/python-client-experimental/petstore-with-fake-endpoints-models-for-testing.yaml b/modules/openapi-generator/src/test/resources/2_0/python-client-experimental/petstore-with-fake-endpoints-models-for-testing.yaml index 9e9451dcc5be..097ae6768bb7 100644 --- a/modules/openapi-generator/src/test/resources/2_0/python-client-experimental/petstore-with-fake-endpoints-models-for-testing.yaml +++ b/modules/openapi-generator/src/test/resources/2_0/python-client-experimental/petstore-with-fake-endpoints-models-for-testing.yaml @@ -1373,8 +1373,6 @@ definitions: properties: breed: type: string - additionalProperties: false - additionalProperties: false Cat: allOf: - $ref: '#/definitions/Animal' @@ -1523,8 +1521,7 @@ definitions: type: object additionalProperties: type: array - items: - type: object + items: {} map_map_string: type: object additionalProperties: @@ -1535,14 +1532,15 @@ definitions: type: object additionalProperties: type: object - additionalProperties: - type: object - anytype_1: - type: object - anytype_2: {} + additionalProperties: {} + anytype_1: {} + anytype_2: + description: no type is set for this anytype_3: type: object properties: {} + description: 'because of a bug in swagger-parser, this should have values {str: (str, int, float...)} + but instead we get any type. See https://github.com/swagger-api/swagger-parser/issues/1378' AdditionalPropertiesString: type: object properties: @@ -2091,7 +2089,6 @@ definitions: properties: interNet: type: boolean - additionalProperties: false GrandparentAnimal: type: object required: diff --git a/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml b/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml index bd29a22a5f9b..631e09dab8aa 100644 --- a/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml @@ -1584,7 +1584,6 @@ components: Cat: allOf: - $ref: '#/components/schemas/Animal' - - $ref: '#/components/schemas/Address' - type: object properties: declawed: @@ -2037,6 +2036,9 @@ components: items: type: object nullable: true + object_nullable: + type: object + nullable: true object_nullable_prop: type: object nullable: true @@ -2054,18 +2056,27 @@ components: type: object nullable: true additionalProperties: - type: object nullable: true + ComposedSchemaWithPropsAndNoAddProps: + properties: + color: + type: string + allOf: + - $ref: '#/components/schemas/Tag' + # Below additionalProperties is set to false to validate the use + # case when a composed schema has additionalProperties set to false. + # This definition will only allow in object payloads that set color and no other properties because + # additionalProperties are evaluated at the schema level and do not include composed schema + # properties. Only color is defined here, all others are additional + additionalProperties: false fruit: + description: a schema that tests oneOf and includes a schema level property properties: color: type: string oneOf: - $ref: '#/components/schemas/apple' - $ref: '#/components/schemas/banana' - # Below additionalProperties is set to false to validate the use - # case when a composed schema has additionalProperties set to false. - additionalProperties: false apple: type: object properties: @@ -2075,12 +2086,16 @@ components: origin: type: string pattern: /^[A-Z\s]*$/i + required: + - cultivar nullable: true banana: type: object properties: lengthCm: type: number + required: + - lengthCm mammal: oneOf: - $ref: '#/components/schemas/whale' @@ -2140,13 +2155,13 @@ components: anyOf: - $ref: '#/components/schemas/apple' - $ref: '#/components/schemas/banana' - additionalProperties: false fruitReq: + description: a schema where additionalProperties is on in the composed schema and off in the oneOf object schemas + also, this schem accepts null as a value oneOf: - type: 'null' - $ref: '#/components/schemas/appleReq' - $ref: '#/components/schemas/bananaReq' - additionalProperties: false appleReq: type: object properties: @@ -2250,7 +2265,6 @@ components: allOf: - $ref: '#/components/schemas/ShapeInterface' - $ref: '#/components/schemas/TriangleInterface' - additionalProperties: false ScaleneTriangle: allOf: - $ref: '#/components/schemas/ShapeInterface' diff --git a/pom.xml b/pom.xml index 97fbcd3eb61b..c571e6b1abed 100644 --- a/pom.xml +++ b/pom.xml @@ -1206,6 +1206,7 @@ samples/client/petstore/javascript-flowtyped samples/client/petstore/python + samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent samples/client/petstore/python-legacy samples/client/petstore/python-asyncio samples/client/petstore/python-tornado diff --git a/samples/client/petstore/python/docs/AdditionalPropertiesAnyType.md b/samples/client/petstore/python/docs/AdditionalPropertiesAnyType.md index a69ff4928f44..d31d12de0822 100644 --- a/samples/client/petstore/python/docs/AdditionalPropertiesAnyType.md +++ b/samples/client/petstore/python/docs/AdditionalPropertiesAnyType.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **str** | | [optional] -**any string name** | **bool, date, datetime, dict, float, int, list, str** | any string name can be used but the value must be the correct type | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/AdditionalPropertiesArray.md b/samples/client/petstore/python/docs/AdditionalPropertiesArray.md index 697494b373ff..40537cbf8384 100644 --- a/samples/client/petstore/python/docs/AdditionalPropertiesArray.md +++ b/samples/client/petstore/python/docs/AdditionalPropertiesArray.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **str** | | [optional] -**any string name** | **[bool, date, datetime, dict, float, int, list, str]** | any string name can be used but the value must be the correct type | [optional] +**any string name** | **[bool, date, datetime, dict, float, int, list, str, none_type]** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/AdditionalPropertiesClass.md b/samples/client/petstore/python/docs/AdditionalPropertiesClass.md index 3646837b853b..3ba7bab6f3d0 100644 --- a/samples/client/petstore/python/docs/AdditionalPropertiesClass.md +++ b/samples/client/petstore/python/docs/AdditionalPropertiesClass.md @@ -9,12 +9,13 @@ Name | Type | Description | Notes **map_integer** | **{str: (int,)}** | | [optional] **map_boolean** | **{str: (bool,)}** | | [optional] **map_array_integer** | **{str: ([int],)}** | | [optional] -**map_array_anytype** | **{str: ([bool, date, datetime, dict, float, int, list, str],)}** | | [optional] +**map_array_anytype** | **{str: ([bool, date, datetime, dict, float, int, list, str, none_type],)}** | | [optional] **map_map_string** | **{str: ({str: (str,)},)}** | | [optional] -**map_map_anytype** | **{str: ({str: (bool, date, datetime, dict, float, int, list, str,)},)}** | | [optional] -**anytype_1** | **bool, date, datetime, dict, float, int, list, str** | | [optional] -**anytype_2** | **bool, date, datetime, dict, float, int, list, str** | | [optional] -**anytype_3** | **bool, date, datetime, dict, float, int, list, str** | | [optional] +**map_map_anytype** | **{str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type,)},)}** | | [optional] +**anytype_1** | **bool, date, datetime, dict, float, int, list, str, none_type** | | [optional] +**anytype_2** | **bool, date, datetime, dict, float, int, list, str, none_type** | no type is set for this | [optional] +**anytype_3** | **bool, date, datetime, dict, float, int, list, str, none_type** | because of a bug in swagger-parser, this should have values {str: (str, int, float...)} but instead we get any type. See https://github.com/swagger-api/swagger-parser/issues/1378 | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/AdditionalPropertiesObject.md b/samples/client/petstore/python/docs/AdditionalPropertiesObject.md index 73ba59147122..dc64a0d91c24 100644 --- a/samples/client/petstore/python/docs/AdditionalPropertiesObject.md +++ b/samples/client/petstore/python/docs/AdditionalPropertiesObject.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **str** | | [optional] -**any string name** | **{str: (bool, date, datetime, dict, float, int, list, str,)}** | any string name can be used but the value must be the correct type | [optional] +**any string name** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type,)}** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Animal.md b/samples/client/petstore/python/docs/Animal.md index 1d1c77c01abc..d36c66a5d882 100644 --- a/samples/client/petstore/python/docs/Animal.md +++ b/samples/client/petstore/python/docs/Animal.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **class_name** | **str** | | **color** | **str** | | [optional] if omitted the server will use the default value of "red" +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/AnimalFarm.md b/samples/client/petstore/python/docs/AnimalFarm.md index fc299cf27d34..fb3b33c9c9c2 100644 --- a/samples/client/petstore/python/docs/AnimalFarm.md +++ b/samples/client/petstore/python/docs/AnimalFarm.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | [**[Animal]**](Animal.md) | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ApiResponse.md b/samples/client/petstore/python/docs/ApiResponse.md index 81a7d0d85227..bedefea9a9cb 100644 --- a/samples/client/petstore/python/docs/ApiResponse.md +++ b/samples/client/petstore/python/docs/ApiResponse.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **code** | **int** | | [optional] **type** | **str** | | [optional] **message** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ArrayOfArrayOfNumberOnly.md b/samples/client/petstore/python/docs/ArrayOfArrayOfNumberOnly.md index 6ab77963788b..11cd25c98ee4 100644 --- a/samples/client/petstore/python/docs/ArrayOfArrayOfNumberOnly.md +++ b/samples/client/petstore/python/docs/ArrayOfArrayOfNumberOnly.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **array_array_number** | **[[float]]** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ArrayOfNumberOnly.md b/samples/client/petstore/python/docs/ArrayOfNumberOnly.md index ebc65a54ba7e..1e9bb12e4e8b 100644 --- a/samples/client/petstore/python/docs/ArrayOfNumberOnly.md +++ b/samples/client/petstore/python/docs/ArrayOfNumberOnly.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **array_number** | **[float]** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ArrayTest.md b/samples/client/petstore/python/docs/ArrayTest.md index 4e1bda8fc3af..9eac1f8874c4 100644 --- a/samples/client/petstore/python/docs/ArrayTest.md +++ b/samples/client/petstore/python/docs/ArrayTest.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **array_of_string** | **[str]** | | [optional] **array_array_of_integer** | **[[int]]** | | [optional] **array_array_of_model** | [**[[ReadOnlyFirst]]**](ReadOnlyFirst.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Capitalization.md b/samples/client/petstore/python/docs/Capitalization.md index 1ddeadeb3f46..df9989f8db57 100644 --- a/samples/client/petstore/python/docs/Capitalization.md +++ b/samples/client/petstore/python/docs/Capitalization.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **capital_snake** | **str** | | [optional] **sca_eth_flow_points** | **str** | | [optional] **att_name** | **str** | Name of the pet | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Cat.md b/samples/client/petstore/python/docs/Cat.md index e9ce235cd632..082715a28421 100644 --- a/samples/client/petstore/python/docs/Cat.md +++ b/samples/client/petstore/python/docs/Cat.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **class_name** | **str** | | **declawed** | **bool** | | [optional] **color** | **str** | | [optional] if omitted the server will use the default value of "red" +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/CatAllOf.md b/samples/client/petstore/python/docs/CatAllOf.md index 0ff7809a99ac..6fd1390a749b 100644 --- a/samples/client/petstore/python/docs/CatAllOf.md +++ b/samples/client/petstore/python/docs/CatAllOf.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **declawed** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Category.md b/samples/client/petstore/python/docs/Category.md index 940f6a45e641..7650eccafba5 100644 --- a/samples/client/petstore/python/docs/Category.md +++ b/samples/client/petstore/python/docs/Category.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **str** | | defaults to "default-name" **id** | **int** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Child.md b/samples/client/petstore/python/docs/Child.md index eb4392445710..6bf6903fb203 100644 --- a/samples/client/petstore/python/docs/Child.md +++ b/samples/client/petstore/python/docs/Child.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **radio_waves** | **bool** | | [optional] **tele_vision** | **bool** | | [optional] **inter_net** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ChildAllOf.md b/samples/client/petstore/python/docs/ChildAllOf.md index f9ae99c7c157..bae8ced90067 100644 --- a/samples/client/petstore/python/docs/ChildAllOf.md +++ b/samples/client/petstore/python/docs/ChildAllOf.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **inter_net** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ChildCat.md b/samples/client/petstore/python/docs/ChildCat.md index 9e3a0fb4b51a..513903ac5793 100644 --- a/samples/client/petstore/python/docs/ChildCat.md +++ b/samples/client/petstore/python/docs/ChildCat.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **pet_type** | **str** | | **name** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ChildCatAllOf.md b/samples/client/petstore/python/docs/ChildCatAllOf.md index c5883b9a87c8..c5b2f58f28ce 100644 --- a/samples/client/petstore/python/docs/ChildCatAllOf.md +++ b/samples/client/petstore/python/docs/ChildCatAllOf.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ChildDog.md b/samples/client/petstore/python/docs/ChildDog.md index 9a6e5b372664..e5b410ce1e79 100644 --- a/samples/client/petstore/python/docs/ChildDog.md +++ b/samples/client/petstore/python/docs/ChildDog.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **pet_type** | **str** | | **bark** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ChildDogAllOf.md b/samples/client/petstore/python/docs/ChildDogAllOf.md index 673050667cb3..45928c57ef2a 100644 --- a/samples/client/petstore/python/docs/ChildDogAllOf.md +++ b/samples/client/petstore/python/docs/ChildDogAllOf.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **bark** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ChildLizard.md b/samples/client/petstore/python/docs/ChildLizard.md index e881ee0a1d1b..d2e22826e77f 100644 --- a/samples/client/petstore/python/docs/ChildLizard.md +++ b/samples/client/petstore/python/docs/ChildLizard.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **pet_type** | **str** | | **loves_rocks** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ChildLizardAllOf.md b/samples/client/petstore/python/docs/ChildLizardAllOf.md index 6e2b70c01505..6effcfd9313f 100644 --- a/samples/client/petstore/python/docs/ChildLizardAllOf.md +++ b/samples/client/petstore/python/docs/ChildLizardAllOf.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **loves_rocks** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ClassModel.md b/samples/client/petstore/python/docs/ClassModel.md index 48ed7cbf2ff0..6605a16d74a9 100644 --- a/samples/client/petstore/python/docs/ClassModel.md +++ b/samples/client/petstore/python/docs/ClassModel.md @@ -6,6 +6,7 @@ Model for testing model with \"_class\" property Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **_class** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Client.md b/samples/client/petstore/python/docs/Client.md index c3986008d6c3..1b293140f348 100644 --- a/samples/client/petstore/python/docs/Client.md +++ b/samples/client/petstore/python/docs/Client.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **client** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Dog.md b/samples/client/petstore/python/docs/Dog.md index 7065c4c983d9..51b5b32bdacb 100644 --- a/samples/client/petstore/python/docs/Dog.md +++ b/samples/client/petstore/python/docs/Dog.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **class_name** | **str** | | **breed** | **str** | | [optional] **color** | **str** | | [optional] if omitted the server will use the default value of "red" +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/DogAllOf.md b/samples/client/petstore/python/docs/DogAllOf.md index 6382bbd80671..2907a9fd5c43 100644 --- a/samples/client/petstore/python/docs/DogAllOf.md +++ b/samples/client/petstore/python/docs/DogAllOf.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **breed** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/EnumArrays.md b/samples/client/petstore/python/docs/EnumArrays.md index 9be5c645a809..ad4e9d2fcb7c 100644 --- a/samples/client/petstore/python/docs/EnumArrays.md +++ b/samples/client/petstore/python/docs/EnumArrays.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **just_symbol** | **str** | | [optional] **array_enum** | **[str]** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/EnumClass.md b/samples/client/petstore/python/docs/EnumClass.md index a1f9aae58190..39bb0e1644c5 100644 --- a/samples/client/petstore/python/docs/EnumClass.md +++ b/samples/client/petstore/python/docs/EnumClass.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | **str** | | defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/EnumTest.md b/samples/client/petstore/python/docs/EnumTest.md index eb8842241390..052596bfd045 100644 --- a/samples/client/petstore/python/docs/EnumTest.md +++ b/samples/client/petstore/python/docs/EnumTest.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **enum_integer** | **int** | | [optional] **enum_number** | **float** | | [optional] **string_enum** | [**StringEnum**](StringEnum.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/File.md b/samples/client/petstore/python/docs/File.md index 63b1d1a65186..f84547d19331 100644 --- a/samples/client/petstore/python/docs/File.md +++ b/samples/client/petstore/python/docs/File.md @@ -6,6 +6,7 @@ Must be named `File` for test. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **source_uri** | **str** | Test capitalization | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/FileSchemaTestClass.md b/samples/client/petstore/python/docs/FileSchemaTestClass.md index caf2440821da..4572aa0905b3 100644 --- a/samples/client/petstore/python/docs/FileSchemaTestClass.md +++ b/samples/client/petstore/python/docs/FileSchemaTestClass.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **file** | [**File**](File.md) | | [optional] **files** | [**[File]**](File.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/FormatTest.md b/samples/client/petstore/python/docs/FormatTest.md index aef09bfcc83e..dbb4c3e6683d 100644 --- a/samples/client/petstore/python/docs/FormatTest.md +++ b/samples/client/petstore/python/docs/FormatTest.md @@ -17,6 +17,7 @@ Name | Type | Description | Notes **binary** | **file_type** | | [optional] **date_time** | **datetime** | | [optional] **uuid** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Grandparent.md b/samples/client/petstore/python/docs/Grandparent.md index b6d80a719457..af143938ab51 100644 --- a/samples/client/petstore/python/docs/Grandparent.md +++ b/samples/client/petstore/python/docs/Grandparent.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **radio_waves** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/GrandparentAnimal.md b/samples/client/petstore/python/docs/GrandparentAnimal.md index 15db0708bb1a..a1c340378106 100644 --- a/samples/client/petstore/python/docs/GrandparentAnimal.md +++ b/samples/client/petstore/python/docs/GrandparentAnimal.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **pet_type** | **str** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/HasOnlyReadOnly.md b/samples/client/petstore/python/docs/HasOnlyReadOnly.md index 0e1334519a8b..88bc03d4ff5c 100644 --- a/samples/client/petstore/python/docs/HasOnlyReadOnly.md +++ b/samples/client/petstore/python/docs/HasOnlyReadOnly.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **bar** | **str** | | [optional] [readonly] **foo** | **str** | | [optional] [readonly] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/List.md b/samples/client/petstore/python/docs/List.md index 4b60956971aa..13f2694de358 100644 --- a/samples/client/petstore/python/docs/List.md +++ b/samples/client/petstore/python/docs/List.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **_123_list** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/MapTest.md b/samples/client/petstore/python/docs/MapTest.md index 15228ee1f282..e6584f3811e0 100644 --- a/samples/client/petstore/python/docs/MapTest.md +++ b/samples/client/petstore/python/docs/MapTest.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **map_of_enum_string** | **{str: (str,)}** | | [optional] **direct_map** | **{str: (bool,)}** | | [optional] **indirect_map** | [**StringBooleanMap**](StringBooleanMap.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/MixedPropertiesAndAdditionalPropertiesClass.md b/samples/client/petstore/python/docs/MixedPropertiesAndAdditionalPropertiesClass.md index f489944a20af..f32c4e04134b 100644 --- a/samples/client/petstore/python/docs/MixedPropertiesAndAdditionalPropertiesClass.md +++ b/samples/client/petstore/python/docs/MixedPropertiesAndAdditionalPropertiesClass.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **uuid** | **str** | | [optional] **date_time** | **datetime** | | [optional] **map** | [**{str: (Animal,)}**](Animal.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Model200Response.md b/samples/client/petstore/python/docs/Model200Response.md index c958bd4b33f8..f7ef7d79acf6 100644 --- a/samples/client/petstore/python/docs/Model200Response.md +++ b/samples/client/petstore/python/docs/Model200Response.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **int** | | [optional] **_class** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ModelReturn.md b/samples/client/petstore/python/docs/ModelReturn.md index 043e9d466fab..75fb39a88698 100644 --- a/samples/client/petstore/python/docs/ModelReturn.md +++ b/samples/client/petstore/python/docs/ModelReturn.md @@ -6,6 +6,7 @@ Model for testing reserved words Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **_return** | **int** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Name.md b/samples/client/petstore/python/docs/Name.md index 3be719cdbfba..6e58fae6d0bb 100644 --- a/samples/client/petstore/python/docs/Name.md +++ b/samples/client/petstore/python/docs/Name.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **snake_case** | **int** | | [optional] [readonly] **_property** | **str** | | [optional] **_123_number** | **int** | | [optional] [readonly] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/NumberOnly.md b/samples/client/petstore/python/docs/NumberOnly.md index 37195c5d8994..172e86163a44 100644 --- a/samples/client/petstore/python/docs/NumberOnly.md +++ b/samples/client/petstore/python/docs/NumberOnly.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **just_number** | **float** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/NumberWithValidations.md b/samples/client/petstore/python/docs/NumberWithValidations.md index 119e0f678239..cc6f77c152c6 100644 --- a/samples/client/petstore/python/docs/NumberWithValidations.md +++ b/samples/client/petstore/python/docs/NumberWithValidations.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | **float** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ObjectModelWithRefProps.md b/samples/client/petstore/python/docs/ObjectModelWithRefProps.md index 5ff4e52033d6..a0d15f4bbd15 100644 --- a/samples/client/petstore/python/docs/ObjectModelWithRefProps.md +++ b/samples/client/petstore/python/docs/ObjectModelWithRefProps.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **my_number** | [**NumberWithValidations**](NumberWithValidations.md) | | [optional] **my_string** | **str** | | [optional] **my_boolean** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Order.md b/samples/client/petstore/python/docs/Order.md index d29e1a381de8..0423082932d5 100644 --- a/samples/client/petstore/python/docs/Order.md +++ b/samples/client/petstore/python/docs/Order.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **ship_date** | **datetime** | | [optional] **status** | **str** | Order Status | [optional] **complete** | **bool** | | [optional] if omitted the server will use the default value of False +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Parent.md b/samples/client/petstore/python/docs/Parent.md index 9d3f02d68b31..9db770844ee1 100644 --- a/samples/client/petstore/python/docs/Parent.md +++ b/samples/client/petstore/python/docs/Parent.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **radio_waves** | **bool** | | [optional] **tele_vision** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ParentAllOf.md b/samples/client/petstore/python/docs/ParentAllOf.md index 569a5e4af14f..84ac2c066eed 100644 --- a/samples/client/petstore/python/docs/ParentAllOf.md +++ b/samples/client/petstore/python/docs/ParentAllOf.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **tele_vision** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ParentPet.md b/samples/client/petstore/python/docs/ParentPet.md index 09e409c8fcf1..111ada88b3d1 100644 --- a/samples/client/petstore/python/docs/ParentPet.md +++ b/samples/client/petstore/python/docs/ParentPet.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **pet_type** | **str** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Pet.md b/samples/client/petstore/python/docs/Pet.md index 6e78495272e4..e0b129784564 100644 --- a/samples/client/petstore/python/docs/Pet.md +++ b/samples/client/petstore/python/docs/Pet.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **category** | [**Category**](Category.md) | | [optional] **tags** | [**[Tag]**](Tag.md) | | [optional] **status** | **str** | pet status in the store | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Player.md b/samples/client/petstore/python/docs/Player.md index 2014198aa1bd..97441ae316bb 100644 --- a/samples/client/petstore/python/docs/Player.md +++ b/samples/client/petstore/python/docs/Player.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **str** | | **enemy_player** | [**Player**](Player.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/ReadOnlyFirst.md b/samples/client/petstore/python/docs/ReadOnlyFirst.md index 53b4c61d8445..ba39ec3d04e4 100644 --- a/samples/client/petstore/python/docs/ReadOnlyFirst.md +++ b/samples/client/petstore/python/docs/ReadOnlyFirst.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **bar** | **str** | | [optional] [readonly] **baz** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/SpecialModelName.md b/samples/client/petstore/python/docs/SpecialModelName.md index 268e1134192d..4a1c86ff4de0 100644 --- a/samples/client/petstore/python/docs/SpecialModelName.md +++ b/samples/client/petstore/python/docs/SpecialModelName.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **special_property_name** | **int** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/StringEnum.md b/samples/client/petstore/python/docs/StringEnum.md index bb195ec0e453..1ac6df2fb797 100644 --- a/samples/client/petstore/python/docs/StringEnum.md +++ b/samples/client/petstore/python/docs/StringEnum.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | **str** | | must be one of ["placed", "approved", "delivered", ] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/Tag.md b/samples/client/petstore/python/docs/Tag.md index b9fe1e0944c4..bfe06d1c5bfe 100644 --- a/samples/client/petstore/python/docs/Tag.md +++ b/samples/client/petstore/python/docs/Tag.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **id** | **int** | | [optional] **name** | **str** | | [optional] **full_name** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/TypeHolderDefault.md b/samples/client/petstore/python/docs/TypeHolderDefault.md index 904915aec010..f15c61cc4618 100644 --- a/samples/client/petstore/python/docs/TypeHolderDefault.md +++ b/samples/client/petstore/python/docs/TypeHolderDefault.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **bool_item** | **bool** | | defaults to True **date_item** | **date** | | [optional] **datetime_item** | **datetime** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/TypeHolderExample.md b/samples/client/petstore/python/docs/TypeHolderExample.md index d2954c64dcef..d707ca3af203 100644 --- a/samples/client/petstore/python/docs/TypeHolderExample.md +++ b/samples/client/petstore/python/docs/TypeHolderExample.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **string_item** | **str** | | defaults to "what" **number_item** | **float** | | defaults to 1.234 **integer_item** | **int** | | defaults to -2 +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/User.md b/samples/client/petstore/python/docs/User.md index b0079f591b6e..8e677b63cca6 100644 --- a/samples/client/petstore/python/docs/User.md +++ b/samples/client/petstore/python/docs/User.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **password** | **str** | | [optional] **phone** | **str** | | [optional] **user_status** | **int** | User Status | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/docs/XmlItem.md b/samples/client/petstore/python/docs/XmlItem.md index ea3d7f92804b..9852234a7367 100644 --- a/samples/client/petstore/python/docs/XmlItem.md +++ b/samples/client/petstore/python/docs/XmlItem.md @@ -33,6 +33,7 @@ Name | Type | Description | Notes **prefix_ns_boolean** | **bool** | | [optional] **prefix_ns_array** | **[int]** | | [optional] **prefix_ns_wrapped_array** | **[int]** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_any_type.py b/samples/client/petstore/python/petstore_api/model/additional_properties_any_type.py index 4531d8f2d862..7239795cf4af 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_any_type.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_any_type.py @@ -63,7 +63,7 @@ def additional_properties_type(): This must be a method because a model may have properties that are of type self, this must run after the class is loaded """ - return (bool, date, datetime, dict, float, int, list, str,) # noqa: E501 + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_array.py b/samples/client/petstore/python/petstore_api/model/additional_properties_array.py index 4a35500c63f3..7d9403758a0d 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_array.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_array.py @@ -63,7 +63,7 @@ def additional_properties_type(): This must be a method because a model may have properties that are of type self, this must run after the class is loaded """ - return ([bool, date, datetime, dict, float, int, list, str],) # noqa: E501 + return ([bool, date, datetime, dict, float, int, list, str, none_type],) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_class.py b/samples/client/petstore/python/petstore_api/model/additional_properties_class.py index 743f3be54d44..39719e00dcfa 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_class.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_class.py @@ -57,7 +57,13 @@ class AdditionalPropertiesClass(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -77,12 +83,12 @@ def openapi_types(): 'map_integer': ({str: (int,)},), # noqa: E501 'map_boolean': ({str: (bool,)},), # noqa: E501 'map_array_integer': ({str: ([int],)},), # noqa: E501 - 'map_array_anytype': ({str: ([bool, date, datetime, dict, float, int, list, str],)},), # noqa: E501 + 'map_array_anytype': ({str: ([bool, date, datetime, dict, float, int, list, str, none_type],)},), # noqa: E501 'map_map_string': ({str: ({str: (str,)},)},), # noqa: E501 - 'map_map_anytype': ({str: ({str: (bool, date, datetime, dict, float, int, list, str,)},)},), # noqa: E501 - 'anytype_1': (bool, date, datetime, dict, float, int, list, str,), # noqa: E501 - 'anytype_2': (bool, date, datetime, dict, float, int, list, str,), # noqa: E501 - 'anytype_3': (bool, date, datetime, dict, float, int, list, str,), # noqa: E501 + 'map_map_anytype': ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type,)},)},), # noqa: E501 + 'anytype_1': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501 + 'anytype_2': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501 + 'anytype_3': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501 } @cached_property @@ -155,12 +161,12 @@ def __init__(self, *args, **kwargs): # noqa: E501 map_integer ({str: (int,)}): [optional] # noqa: E501 map_boolean ({str: (bool,)}): [optional] # noqa: E501 map_array_integer ({str: ([int],)}): [optional] # noqa: E501 - map_array_anytype ({str: ([bool, date, datetime, dict, float, int, list, str],)}): [optional] # noqa: E501 + map_array_anytype ({str: ([bool, date, datetime, dict, float, int, list, str, none_type],)}): [optional] # noqa: E501 map_map_string ({str: ({str: (str,)},)}): [optional] # noqa: E501 - map_map_anytype ({str: ({str: (bool, date, datetime, dict, float, int, list, str,)},)}): [optional] # noqa: E501 - anytype_1 (bool, date, datetime, dict, float, int, list, str): [optional] # noqa: E501 - anytype_2 (bool, date, datetime, dict, float, int, list, str): [optional] # noqa: E501 - anytype_3 (bool, date, datetime, dict, float, int, list, str): [optional] # noqa: E501 + map_map_anytype ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type,)},)}): [optional] # noqa: E501 + anytype_1 (bool, date, datetime, dict, float, int, list, str, none_type): [optional] # noqa: E501 + anytype_2 (bool, date, datetime, dict, float, int, list, str, none_type): no type is set for this. [optional] # noqa: E501 + anytype_3 (bool, date, datetime, dict, float, int, list, str, none_type): because of a bug in swagger-parser, this should have values {str: (str, int, float...)} but instead we get any type. See https://github.com/swagger-api/swagger-parser/issues/1378. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_object.py b/samples/client/petstore/python/petstore_api/model/additional_properties_object.py index 40e80e16044d..000653f13a73 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_object.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_object.py @@ -63,7 +63,7 @@ def additional_properties_type(): This must be a method because a model may have properties that are of type self, this must run after the class is loaded """ - return ({str: (bool, date, datetime, dict, float, int, list, str,)},) # noqa: E501 + return ({str: (bool, date, datetime, dict, float, int, list, str, none_type,)},) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/animal.py b/samples/client/petstore/python/petstore_api/model/animal.py index a3d48b6ea975..c53b1e1ad289 100644 --- a/samples/client/petstore/python/petstore_api/model/animal.py +++ b/samples/client/petstore/python/petstore_api/model/animal.py @@ -63,7 +63,14 @@ class Animal(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/animal_farm.py b/samples/client/petstore/python/petstore_api/model/animal_farm.py index 838b18a12970..fb58224ebd4c 100644 --- a/samples/client/petstore/python/petstore_api/model/animal_farm.py +++ b/samples/client/petstore/python/petstore_api/model/animal_farm.py @@ -57,7 +57,14 @@ class AnimalFarm(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/api_response.py b/samples/client/petstore/python/petstore_api/model/api_response.py index 01e2175b8004..53adb5aba12f 100644 --- a/samples/client/petstore/python/petstore_api/model/api_response.py +++ b/samples/client/petstore/python/petstore_api/model/api_response.py @@ -57,7 +57,13 @@ class ApiResponse(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py b/samples/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py index 008b74dd42a3..8b6a2c42d0ed 100644 --- a/samples/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py +++ b/samples/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py @@ -57,7 +57,13 @@ class ArrayOfArrayOfNumberOnly(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/array_of_number_only.py b/samples/client/petstore/python/petstore_api/model/array_of_number_only.py index f2e080bc258e..7b754dc283e6 100644 --- a/samples/client/petstore/python/petstore_api/model/array_of_number_only.py +++ b/samples/client/petstore/python/petstore_api/model/array_of_number_only.py @@ -57,7 +57,13 @@ class ArrayOfNumberOnly(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/array_test.py b/samples/client/petstore/python/petstore_api/model/array_test.py index ac42b07b93c9..9691a1e60374 100644 --- a/samples/client/petstore/python/petstore_api/model/array_test.py +++ b/samples/client/petstore/python/petstore_api/model/array_test.py @@ -61,7 +61,14 @@ class ArrayTest(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/capitalization.py b/samples/client/petstore/python/petstore_api/model/capitalization.py index 710c17e51a56..6d939535ceef 100644 --- a/samples/client/petstore/python/petstore_api/model/capitalization.py +++ b/samples/client/petstore/python/petstore_api/model/capitalization.py @@ -57,7 +57,13 @@ class Capitalization(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/cat.py b/samples/client/petstore/python/petstore_api/model/cat.py index 8b5c46413b99..eeea79359fc9 100644 --- a/samples/client/petstore/python/petstore_api/model/cat.py +++ b/samples/client/petstore/python/petstore_api/model/cat.py @@ -63,7 +63,14 @@ class Cat(ModelComposed): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -111,13 +118,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, class_name, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """Cat - a model defined in OpenAPI - Args: - class_name (str): - Keyword Args: + class_name (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -182,26 +187,18 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'class_name': class_name, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python/petstore_api/model/cat_all_of.py b/samples/client/petstore/python/petstore_api/model/cat_all_of.py index 50b046510dfa..7efba680b4d8 100644 --- a/samples/client/petstore/python/petstore_api/model/cat_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/cat_all_of.py @@ -57,7 +57,13 @@ class CatAllOf(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/category.py b/samples/client/petstore/python/petstore_api/model/category.py index ed167471d356..4936b4f0e443 100644 --- a/samples/client/petstore/python/petstore_api/model/category.py +++ b/samples/client/petstore/python/petstore_api/model/category.py @@ -57,7 +57,13 @@ class Category(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/child.py b/samples/client/petstore/python/petstore_api/model/child.py index c8f0a70a1931..8fad3bf107bd 100644 --- a/samples/client/petstore/python/petstore_api/model/child.py +++ b/samples/client/petstore/python/petstore_api/model/child.py @@ -63,7 +63,14 @@ class Child(ModelComposed): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -177,25 +184,18 @@ def __init__(self, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python/petstore_api/model/child_all_of.py b/samples/client/petstore/python/petstore_api/model/child_all_of.py index 2339e520bd65..9db852ec725b 100644 --- a/samples/client/petstore/python/petstore_api/model/child_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/child_all_of.py @@ -57,7 +57,13 @@ class ChildAllOf(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/child_cat.py b/samples/client/petstore/python/petstore_api/model/child_cat.py index a7d52b48e8ac..d054cb7a97a0 100644 --- a/samples/client/petstore/python/petstore_api/model/child_cat.py +++ b/samples/client/petstore/python/petstore_api/model/child_cat.py @@ -63,7 +63,14 @@ class ChildCat(ModelComposed): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -109,13 +116,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, pet_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """ChildCat - a model defined in OpenAPI - Args: - pet_type (str): - Keyword Args: + pet_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -179,26 +184,18 @@ def __init__(self, pet_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'pet_type': pet_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python/petstore_api/model/child_cat_all_of.py b/samples/client/petstore/python/petstore_api/model/child_cat_all_of.py index f0f1a1ae6bd4..3d732d085fba 100644 --- a/samples/client/petstore/python/petstore_api/model/child_cat_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/child_cat_all_of.py @@ -57,7 +57,13 @@ class ChildCatAllOf(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/child_dog.py b/samples/client/petstore/python/petstore_api/model/child_dog.py index 2bc0882ac2a9..6244359fea2b 100644 --- a/samples/client/petstore/python/petstore_api/model/child_dog.py +++ b/samples/client/petstore/python/petstore_api/model/child_dog.py @@ -63,7 +63,14 @@ class ChildDog(ModelComposed): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -109,13 +116,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, pet_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """ChildDog - a model defined in OpenAPI - Args: - pet_type (str): - Keyword Args: + pet_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -179,26 +184,18 @@ def __init__(self, pet_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'pet_type': pet_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python/petstore_api/model/child_dog_all_of.py b/samples/client/petstore/python/petstore_api/model/child_dog_all_of.py index d460b68b3d3a..d3a0d89c4da6 100644 --- a/samples/client/petstore/python/petstore_api/model/child_dog_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/child_dog_all_of.py @@ -57,7 +57,13 @@ class ChildDogAllOf(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/child_lizard.py b/samples/client/petstore/python/petstore_api/model/child_lizard.py index 6142b9c751fe..b56925a0c92b 100644 --- a/samples/client/petstore/python/petstore_api/model/child_lizard.py +++ b/samples/client/petstore/python/petstore_api/model/child_lizard.py @@ -63,7 +63,14 @@ class ChildLizard(ModelComposed): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -109,13 +116,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, pet_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """ChildLizard - a model defined in OpenAPI - Args: - pet_type (str): - Keyword Args: + pet_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -179,26 +184,18 @@ def __init__(self, pet_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'pet_type': pet_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python/petstore_api/model/child_lizard_all_of.py b/samples/client/petstore/python/petstore_api/model/child_lizard_all_of.py index 669b9338d796..1c8f29548b57 100644 --- a/samples/client/petstore/python/petstore_api/model/child_lizard_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/child_lizard_all_of.py @@ -57,7 +57,13 @@ class ChildLizardAllOf(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/class_model.py b/samples/client/petstore/python/petstore_api/model/class_model.py index 18c16f89f908..9e65a9373650 100644 --- a/samples/client/petstore/python/petstore_api/model/class_model.py +++ b/samples/client/petstore/python/petstore_api/model/class_model.py @@ -57,7 +57,13 @@ class ClassModel(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/client.py b/samples/client/petstore/python/petstore_api/model/client.py index da615c547731..6218de1e19e4 100644 --- a/samples/client/petstore/python/petstore_api/model/client.py +++ b/samples/client/petstore/python/petstore_api/model/client.py @@ -57,7 +57,13 @@ class Client(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/dog.py b/samples/client/petstore/python/petstore_api/model/dog.py index e9c201c983bb..3452f0d040a0 100644 --- a/samples/client/petstore/python/petstore_api/model/dog.py +++ b/samples/client/petstore/python/petstore_api/model/dog.py @@ -63,7 +63,14 @@ class Dog(ModelComposed): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -111,13 +118,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, class_name, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """Dog - a model defined in OpenAPI - Args: - class_name (str): - Keyword Args: + class_name (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -182,26 +187,18 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'class_name': class_name, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python/petstore_api/model/dog_all_of.py b/samples/client/petstore/python/petstore_api/model/dog_all_of.py index b7b2e7db66d9..962903d3a381 100644 --- a/samples/client/petstore/python/petstore_api/model/dog_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/dog_all_of.py @@ -57,7 +57,13 @@ class DogAllOf(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/enum_arrays.py b/samples/client/petstore/python/petstore_api/model/enum_arrays.py index 43ebac57de38..db56838d7e49 100644 --- a/samples/client/petstore/python/petstore_api/model/enum_arrays.py +++ b/samples/client/petstore/python/petstore_api/model/enum_arrays.py @@ -65,7 +65,13 @@ class EnumArrays(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/enum_class.py b/samples/client/petstore/python/petstore_api/model/enum_class.py index 14188ca31d28..63be703c38e9 100644 --- a/samples/client/petstore/python/petstore_api/model/enum_class.py +++ b/samples/client/petstore/python/petstore_api/model/enum_class.py @@ -58,7 +58,13 @@ class EnumClass(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/enum_test.py b/samples/client/petstore/python/petstore_api/model/enum_test.py index 79ba0f6a747c..ee14c70b46f2 100644 --- a/samples/client/petstore/python/petstore_api/model/enum_test.py +++ b/samples/client/petstore/python/petstore_api/model/enum_test.py @@ -79,7 +79,14 @@ class EnumTest(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/file.py b/samples/client/petstore/python/petstore_api/model/file.py index a38cccacc6ab..137d00263242 100644 --- a/samples/client/petstore/python/petstore_api/model/file.py +++ b/samples/client/petstore/python/petstore_api/model/file.py @@ -57,7 +57,13 @@ class File(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/file_schema_test_class.py b/samples/client/petstore/python/petstore_api/model/file_schema_test_class.py index b8c519ed9c7c..3722125ae485 100644 --- a/samples/client/petstore/python/petstore_api/model/file_schema_test_class.py +++ b/samples/client/petstore/python/petstore_api/model/file_schema_test_class.py @@ -61,7 +61,14 @@ class FileSchemaTestClass(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/format_test.py b/samples/client/petstore/python/petstore_api/model/format_test.py index 494ce2646da0..7b415af7ad2c 100644 --- a/samples/client/petstore/python/petstore_api/model/format_test.py +++ b/samples/client/petstore/python/petstore_api/model/format_test.py @@ -92,7 +92,13 @@ class FormatTest(ModelNormal): }, } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/grandparent.py b/samples/client/petstore/python/petstore_api/model/grandparent.py index a52744cc3e24..728b1e1d1297 100644 --- a/samples/client/petstore/python/petstore_api/model/grandparent.py +++ b/samples/client/petstore/python/petstore_api/model/grandparent.py @@ -57,7 +57,13 @@ class Grandparent(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/grandparent_animal.py b/samples/client/petstore/python/petstore_api/model/grandparent_animal.py index 48d3f6d9f0b3..089f5a4a07c6 100644 --- a/samples/client/petstore/python/petstore_api/model/grandparent_animal.py +++ b/samples/client/petstore/python/petstore_api/model/grandparent_animal.py @@ -67,7 +67,14 @@ class GrandparentAnimal(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/has_only_read_only.py b/samples/client/petstore/python/petstore_api/model/has_only_read_only.py index c94781ae2c46..4ea0bb087217 100644 --- a/samples/client/petstore/python/petstore_api/model/has_only_read_only.py +++ b/samples/client/petstore/python/petstore_api/model/has_only_read_only.py @@ -57,7 +57,13 @@ class HasOnlyReadOnly(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/list.py b/samples/client/petstore/python/petstore_api/model/list.py index 09c762d6a794..11b46f10b565 100644 --- a/samples/client/petstore/python/petstore_api/model/list.py +++ b/samples/client/petstore/python/petstore_api/model/list.py @@ -57,7 +57,13 @@ class List(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/map_test.py b/samples/client/petstore/python/petstore_api/model/map_test.py index 169fb9d88ee0..a5418b39e734 100644 --- a/samples/client/petstore/python/petstore_api/model/map_test.py +++ b/samples/client/petstore/python/petstore_api/model/map_test.py @@ -65,7 +65,14 @@ class MapTest(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py b/samples/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py index 01df80d9d62b..67b3f79d9e5f 100644 --- a/samples/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py +++ b/samples/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py @@ -61,7 +61,14 @@ class MixedPropertiesAndAdditionalPropertiesClass(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/model200_response.py b/samples/client/petstore/python/petstore_api/model/model200_response.py index 46b155b65239..056f4c56ad35 100644 --- a/samples/client/petstore/python/petstore_api/model/model200_response.py +++ b/samples/client/petstore/python/petstore_api/model/model200_response.py @@ -57,7 +57,13 @@ class Model200Response(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/model_return.py b/samples/client/petstore/python/petstore_api/model/model_return.py index 377b3507a8b3..5f34582cdb4a 100644 --- a/samples/client/petstore/python/petstore_api/model/model_return.py +++ b/samples/client/petstore/python/petstore_api/model/model_return.py @@ -57,7 +57,13 @@ class ModelReturn(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/name.py b/samples/client/petstore/python/petstore_api/model/name.py index 1432e185ad6b..06b387ce9bfe 100644 --- a/samples/client/petstore/python/petstore_api/model/name.py +++ b/samples/client/petstore/python/petstore_api/model/name.py @@ -57,7 +57,13 @@ class Name(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/number_only.py b/samples/client/petstore/python/petstore_api/model/number_only.py index d4892dbede5b..cb2c9e2ad526 100644 --- a/samples/client/petstore/python/petstore_api/model/number_only.py +++ b/samples/client/petstore/python/petstore_api/model/number_only.py @@ -57,7 +57,13 @@ class NumberOnly(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/number_with_validations.py b/samples/client/petstore/python/petstore_api/model/number_with_validations.py index 458a79459751..fb47d885bfd7 100644 --- a/samples/client/petstore/python/petstore_api/model/number_with_validations.py +++ b/samples/client/petstore/python/petstore_api/model/number_with_validations.py @@ -57,7 +57,13 @@ class NumberWithValidations(ModelSimple): }, } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/object_model_with_ref_props.py b/samples/client/petstore/python/petstore_api/model/object_model_with_ref_props.py index b1dc4bf82e2c..7256f67a8d6b 100644 --- a/samples/client/petstore/python/petstore_api/model/object_model_with_ref_props.py +++ b/samples/client/petstore/python/petstore_api/model/object_model_with_ref_props.py @@ -61,7 +61,14 @@ class ObjectModelWithRefProps(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/order.py b/samples/client/petstore/python/petstore_api/model/order.py index b42f066848ab..48207e4560eb 100644 --- a/samples/client/petstore/python/petstore_api/model/order.py +++ b/samples/client/petstore/python/petstore_api/model/order.py @@ -62,7 +62,13 @@ class Order(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/parent.py b/samples/client/petstore/python/petstore_api/model/parent.py index a5e5d878d844..063d5051747d 100644 --- a/samples/client/petstore/python/petstore_api/model/parent.py +++ b/samples/client/petstore/python/petstore_api/model/parent.py @@ -63,7 +63,14 @@ class Parent(ModelComposed): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -174,25 +181,18 @@ def __init__(self, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python/petstore_api/model/parent_all_of.py b/samples/client/petstore/python/petstore_api/model/parent_all_of.py index 0d109f25a4c2..2f7b8a791d29 100644 --- a/samples/client/petstore/python/petstore_api/model/parent_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/parent_all_of.py @@ -57,7 +57,13 @@ class ParentAllOf(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/parent_pet.py b/samples/client/petstore/python/petstore_api/model/parent_pet.py index aac0ff12e86b..b012d1558a79 100644 --- a/samples/client/petstore/python/petstore_api/model/parent_pet.py +++ b/samples/client/petstore/python/petstore_api/model/parent_pet.py @@ -67,7 +67,14 @@ class ParentPet(ModelComposed): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -115,13 +122,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, pet_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """ParentPet - a model defined in OpenAPI - Args: - pet_type (str): - Keyword Args: + pet_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -184,26 +189,18 @@ def __init__(self, pet_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'pet_type': pet_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python/petstore_api/model/pet.py b/samples/client/petstore/python/petstore_api/model/pet.py index e9f1e30a3196..b0c8b08607d1 100644 --- a/samples/client/petstore/python/petstore_api/model/pet.py +++ b/samples/client/petstore/python/petstore_api/model/pet.py @@ -68,7 +68,14 @@ class Pet(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/player.py b/samples/client/petstore/python/petstore_api/model/player.py index 6e4485fb6500..2c51f9b57af7 100644 --- a/samples/client/petstore/python/petstore_api/model/player.py +++ b/samples/client/petstore/python/petstore_api/model/player.py @@ -57,7 +57,13 @@ class Player(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/read_only_first.py b/samples/client/petstore/python/petstore_api/model/read_only_first.py index 5c68eab91ea3..0302bf96a7e5 100644 --- a/samples/client/petstore/python/petstore_api/model/read_only_first.py +++ b/samples/client/petstore/python/petstore_api/model/read_only_first.py @@ -57,7 +57,13 @@ class ReadOnlyFirst(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/special_model_name.py b/samples/client/petstore/python/petstore_api/model/special_model_name.py index 823e77596636..cfaedbc78815 100644 --- a/samples/client/petstore/python/petstore_api/model/special_model_name.py +++ b/samples/client/petstore/python/petstore_api/model/special_model_name.py @@ -57,7 +57,13 @@ class SpecialModelName(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/string_enum.py b/samples/client/petstore/python/petstore_api/model/string_enum.py index 37dc04332cac..4c92316cb7e0 100644 --- a/samples/client/petstore/python/petstore_api/model/string_enum.py +++ b/samples/client/petstore/python/petstore_api/model/string_enum.py @@ -58,7 +58,13 @@ class StringEnum(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/tag.py b/samples/client/petstore/python/petstore_api/model/tag.py index d3dcb78b7ea0..01c28233598b 100644 --- a/samples/client/petstore/python/petstore_api/model/tag.py +++ b/samples/client/petstore/python/petstore_api/model/tag.py @@ -57,7 +57,13 @@ class Tag(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/type_holder_default.py b/samples/client/petstore/python/petstore_api/model/type_holder_default.py index 324b131f3a2d..04a96f7e9060 100644 --- a/samples/client/petstore/python/petstore_api/model/type_holder_default.py +++ b/samples/client/petstore/python/petstore_api/model/type_holder_default.py @@ -57,7 +57,13 @@ class TypeHolderDefault(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/type_holder_example.py b/samples/client/petstore/python/petstore_api/model/type_holder_example.py index 30bbba178f4f..f6e5f44c389b 100644 --- a/samples/client/petstore/python/petstore_api/model/type_holder_example.py +++ b/samples/client/petstore/python/petstore_api/model/type_holder_example.py @@ -66,7 +66,13 @@ class TypeHolderExample(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/user.py b/samples/client/petstore/python/petstore_api/model/user.py index 9a3cd0814114..64bd69849330 100644 --- a/samples/client/petstore/python/petstore_api/model/user.py +++ b/samples/client/petstore/python/petstore_api/model/user.py @@ -57,7 +57,13 @@ class User(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model/xml_item.py b/samples/client/petstore/python/petstore_api/model/xml_item.py index 8401b3f40076..ba096779721b 100644 --- a/samples/client/petstore/python/petstore_api/model/xml_item.py +++ b/samples/client/petstore/python/petstore_api/model/xml_item.py @@ -57,7 +57,13 @@ class XmlItem(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/client/petstore/python/petstore_api/model_utils.py b/samples/client/petstore/python/petstore_api/model_utils.py index ae5547106703..b6d5934170a3 100644 --- a/samples/client/petstore/python/petstore_api/model_utils.py +++ b/samples/client/petstore/python/petstore_api/model_utils.py @@ -434,27 +434,43 @@ def __setitem__(self, name, value): self.__dict__[name] = value return - # set the attribute on the correct instance - model_instances = self._var_name_to_model_instances.get( - name, self._additional_properties_model_instances) - if model_instances: - for model_instance in model_instances: - if model_instance == self: - self.set_attribute(name, value) - else: - setattr(model_instance, name, value) - if name not in self._var_name_to_model_instances: - # we assigned an additional property - self.__dict__['_var_name_to_model_instances'][name] = ( - model_instance - ) - return None - - raise ApiAttributeError( - "{0} has no attribute '{1}'".format( - type(self).__name__, name), - [e for e in [self._path_to_item, name] if e] - ) + """ + Use cases: + 1. additional_properties_type is None (additionalProperties == False in spec) + Check for property presence in self.openapi_types + if not present then throw an error + if present set in self, set attribute + always set on composed schemas + 2. additional_properties_type exists + set attribute on self + always set on composed schemas + """ + if self.additional_properties_type is None: + """ + For an attribute to exist on a composed schema it must: + - fulfill schema_requirements in the self composed schema not considering oneOf/anyOf/allOf schemas AND + - fulfill schema_requirements in each oneOf/anyOf/allOf schemas + + schema_requirements: + For an attribute to exist on a schema it must: + - be present in properties at the schema OR + - have additionalProperties unset (defaults additionalProperties = any type) OR + - have additionalProperties set + """ + if name not in self.openapi_types: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + # attribute must be set on self and composed instances + self.set_attribute(name, value) + for model_instance in self._composed_instances: + setattr(model_instance, name, value) + if name not in self._var_name_to_model_instances: + # we assigned an additional property + self.__dict__['_var_name_to_model_instances'][name] = self._composed_instances + [self] + return None __unset_attribute_value__ = object() @@ -464,13 +480,12 @@ def get(self, name, default=None): return self.__dict__[name] # get the attribute from the correct instance - model_instances = self._var_name_to_model_instances.get( - name, self._additional_properties_model_instances) + model_instances = self._var_name_to_model_instances.get(name) values = [] - # A composed model stores child (oneof/anyOf/allOf) models under - # self._var_name_to_model_instances. A named property can exist in - # multiple child models. If the property is present in more than one - # child model, the value must be the same across all the child models. + # A composed model stores self and child (oneof/anyOf/allOf) models under + # self._var_name_to_model_instances. + # Any property must exist in self and all model instances + # The value stored in all model instances must be the same if model_instances: for model_instance in model_instances: if name in model_instance._data_store: @@ -1573,8 +1588,13 @@ def get_allof_instances(self, model_args, constant_args): self: the class we are handling model_args (dict): var_name to var_value used to make instances - constant_args (dict): var_name to var_value - used to make instances + constant_args (dict): + metadata arguments: + _check_type + _path_to_item + _spec_property_naming + _configuration + _visited_composed_classes Returns composed_instances (list) @@ -1582,20 +1602,8 @@ def get_allof_instances(self, model_args, constant_args): composed_instances = [] for allof_class in self._composed_schemas['allOf']: - # no need to handle changing js keys to python because - # for composed schemas, allof parameters are included in the - # composed schema and were changed to python keys in __new__ - # extract a dict of only required keys from fixed_model_args - kwargs = {} - var_names = set(allof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in model_args: - kwargs[var_name] = model_args[var_name] - - # and use it to make the instance - kwargs.update(constant_args) try: - allof_instance = allof_class(**kwargs) + allof_instance = allof_class(**model_args, **constant_args) composed_instances.append(allof_instance) except Exception as ex: raise ApiValueError( @@ -1655,31 +1663,9 @@ def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None): single_value_input = allows_single_value_input(oneof_class) - if not single_value_input: - # transform js keys from input data to python keys in fixed_model_args - fixed_model_args = change_keys_js_to_python( - model_kwargs, oneof_class) - - # Extract a dict with the properties that are declared in the oneOf schema. - # Undeclared properties (e.g. properties that are allowed because of the - # additionalProperties attribute in the OAS document) are not added to - # the dict. - kwargs = {} - var_names = set(oneof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in fixed_model_args: - kwargs[var_name] = fixed_model_args[var_name] - - # do not try to make a model with no input args - if len(kwargs) == 0: - continue - - # and use it to make the instance - kwargs.update(constant_kwargs) - try: if not single_value_input: - oneof_instance = oneof_class(**kwargs) + oneof_instance = oneof_class(**model_kwargs, **constant_kwargs) else: if issubclass(oneof_class, ModelSimple): oneof_instance = oneof_class(model_arg, **constant_kwargs) @@ -1736,24 +1722,8 @@ def get_anyof_instances(self, model_args, constant_args): # none_type deserialization is handled in the __new__ method continue - # transform js keys to python keys in fixed_model_args - fixed_model_args = change_keys_js_to_python(model_args, anyof_class) - - # extract a dict of only required keys from these_model_vars - kwargs = {} - var_names = set(anyof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in fixed_model_args: - kwargs[var_name] = fixed_model_args[var_name] - - # do not try to make a model with no input args - if len(kwargs) == 0: - continue - - # and use it to make the instance - kwargs.update(constant_args) try: - anyof_instance = anyof_class(**kwargs) + anyof_instance = anyof_class(**model_args, **constant_args) anyof_instances.append(anyof_instance) except Exception: pass @@ -1766,47 +1736,34 @@ def get_anyof_instances(self, model_args, constant_args): return anyof_instances -def get_additional_properties_model_instances( - composed_instances, self): - additional_properties_model_instances = [] - all_instances = [self] - all_instances.extend(composed_instances) - for instance in all_instances: - if instance.additional_properties_type is not None: - additional_properties_model_instances.append(instance) - return additional_properties_model_instances - - -def get_var_name_to_model_instances(self, composed_instances): - var_name_to_model_instances = {} - all_instances = [self] - all_instances.extend(composed_instances) - for instance in all_instances: - for var_name in instance.openapi_types: - if var_name not in var_name_to_model_instances: - var_name_to_model_instances[var_name] = [instance] - else: - var_name_to_model_instances[var_name].append(instance) - return var_name_to_model_instances - - -def get_unused_args(self, composed_instances, model_args): - unused_args = dict(model_args) - # arguments apssed to self were already converted to python names +def get_discarded_args(self, composed_instances, model_args): + """ + Gathers the args that were discarded by configuration.discard_unknown_keys + """ + model_arg_keys = model_args.keys() + discarded_args = set() + # arguments passed to self were already converted to python names # before __init__ was called - for var_name_py in self.attribute_map: - if var_name_py in unused_args: - del unused_args[var_name_py] for instance in composed_instances: if instance.__class__ in self._composed_schemas['allOf']: - for var_name_py in instance.attribute_map: - if var_name_py in unused_args: - del unused_args[var_name_py] + try: + keys = instance.to_dict().keys() + discarded_keys = model_args - keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass else: - for var_name_js in instance.attribute_map.values(): - if var_name_js in unused_args: - del unused_args[var_name_js] - return unused_args + try: + all_keys = set(model_to_dict(instance, serialize=False).keys()) + js_keys = model_to_dict(instance, serialize=True).keys() + all_keys.update(js_keys) + discarded_keys = model_arg_keys - all_keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass + return discarded_args def validate_get_composed_info(constant_args, model_args, self): @@ -1850,36 +1807,42 @@ def validate_get_composed_info(constant_args, model_args, self): composed_instances.append(oneof_instance) anyof_instances = get_anyof_instances(self, model_args, constant_args) composed_instances.extend(anyof_instances) + """ + set additional_properties_model_instances + additional properties must be evaluated at the schema level + so self's additional properties are most important + If self is a composed schema with: + - no properties defined in self + - additionalProperties: False + Then for object payloads every property is an additional property + and they are not allowed, so only empty dict is allowed + + Properties must be set on all matching schemas + so when a property is assigned toa composed instance, it must be set on all + composed instances regardless of additionalProperties presence + keeping it to prevent breaking changes in v5.0.1 + TODO remove cls._additional_properties_model_instances in 6.0.0 + """ + additional_properties_model_instances = [] + if self.additional_properties_type is not None: + additional_properties_model_instances = [self] - # map variable names to composed_instances - var_name_to_model_instances = get_var_name_to_model_instances( - self, composed_instances) - - # set additional_properties_model_instances - additional_properties_model_instances = ( - get_additional_properties_model_instances(composed_instances, self) - ) - - # set any remaining values - unused_args = get_unused_args(self, composed_instances, model_args) - if len(unused_args) > 0 and \ - len(additional_properties_model_instances) == 0 and \ - (self._configuration is None or - not self._configuration.discard_unknown_keys): - raise ApiValueError( - "Invalid input arguments input when making an instance of " - "class %s. Not all inputs were used. The unused input data " - "is %s" % (self.__class__.__name__, unused_args) - ) + """ + no need to set properties on self in here, they will be set in __init__ + By here all composed schema oneOf/anyOf/allOf instances have their properties set using + model_args + """ + discarded_args = get_discarded_args(self, composed_instances, model_args) - # no need to add additional_properties to var_name_to_model_instances here - # because additional_properties_model_instances will direct us to that - # instance when we use getattr or setattr - # and we update var_name_to_model_instances in setattr + # map variable names to composed_instances + var_name_to_model_instances = {} + for prop_name in model_args: + if prop_name not in discarded_args: + var_name_to_model_instances[prop_name] = [self] + composed_instances return [ composed_instances, var_name_to_model_instances, additional_properties_model_instances, - unused_args + discarded_args ] diff --git a/samples/client/petstore/python/pom.xml b/samples/client/petstore/python/pom.xml index 9dc399cc8089..f6178c5c09c8 100644 --- a/samples/client/petstore/python/pom.xml +++ b/samples/client/petstore/python/pom.xml @@ -1,10 +1,10 @@ 4.0.0 org.openapitools - PythonExperimentalPetstoreClientTests + PythonV2PetstoreClientTestsWithComposition pom 1.0-SNAPSHOT - Python Experimental OpenAPI Petstore Client + Python OpenAPI Petstore Client diff --git a/samples/client/petstore/python/test/test_child.py b/samples/client/petstore/python/test/test_child.py index 3b49febd9532..88e6b9ed4a8e 100644 --- a/samples/client/petstore/python/test/test_child.py +++ b/samples/client/petstore/python/test/test_child.py @@ -73,14 +73,6 @@ def testChild(self): } ) - # setting a value that doesn't exist raises an exception - # with a key - with self.assertRaises(petstore_api.ApiAttributeError): - child['invalid_variable'] = 'some value' - # with setattr - with self.assertRaises(petstore_api.ApiAttributeError): - setattr(child, 'invalid_variable', 'some value') - # with hasattr self.assertFalse(hasattr(child, 'invalid_variable')) @@ -123,17 +115,26 @@ def testChild(self): self.assertEqual( child._var_name_to_model_instances, { - 'radio_waves': [child, parent_instance], - 'tele_vision': [child, parent_instance], - 'inter_net': [child, child_allof_instance] + 'radio_waves': [child, child_allof_instance, parent_instance], + 'tele_vision': [child, child_allof_instance, parent_instance], + 'inter_net': [child, child_allof_instance, parent_instance] } ) # model._additional_properties_model_instances stores a list of # models which have the property additional_properties_type != None self.assertEqual( - child._additional_properties_model_instances, [] + child._additional_properties_model_instances, [child] ) + # setting a value that doesn't exist works + # with a key + child['invalid_variable'] = 'a' + assert child.invalid_variable == 'a' + # with setattr + setattr(child, 'invalid_variable', 'b') + assert child.invalid_variable == 'b' + + # if we modify one of the properties owned by multiple # model_instances we get an exception when we try to access that # property because the retrieved values are not all the same @@ -141,13 +142,13 @@ def testChild(self): with self.assertRaises(petstore_api.ApiValueError): inter_net = child.inter_net - # including extra parameters raises an exception - with self.assertRaises(petstore_api.ApiValueError): - child = Child( - radio_waves=radio_waves, - tele_vision=tele_vision, - inter_net=inter_net, - unknown_property='some value') + # including extra parameters works + child = Child( + radio_waves=radio_waves, + tele_vision=tele_vision, + inter_net=inter_net, + unknown_property='some value') + assert child.unknown_property == 'some value' if __name__ == '__main__': unittest.main() diff --git a/samples/client/petstore/python/test/test_dog.py b/samples/client/petstore/python/test/test_dog.py index 0b95c0a4c83a..0352d794c928 100644 --- a/samples/client/petstore/python/test/test_dog.py +++ b/samples/client/petstore/python/test/test_dog.py @@ -73,23 +73,15 @@ def testDog(self): } ) - # setting a value that doesn't exist raises an exception - # with a key - with self.assertRaises(AttributeError): - dog['invalid_variable'] = 'some value' - # with setattr - with self.assertRaises(AttributeError): - setattr(dog, 'invalid_variable', 'some value') - # getting a value that doesn't exist raises an exception # with a key with self.assertRaises(AttributeError): - invalid_variable = dog['invalid_variable'] + invalid_variable = dog['not_here_a'] # with getattr - self.assertEqual(getattr(dog, 'invalid_variable', 'some value'), 'some value') + self.assertEqual(getattr(dog, 'not_here_a', 'some value'), 'some value') with self.assertRaises(AttributeError): - invalid_variable = getattr(dog, 'invalid_variable') + invalid_variable = getattr(dog, 'not_here_a') # make sure that the ModelComposed class properties are correct # model.composed_schemas() stores the anyOf/allOf/oneOf info @@ -120,17 +112,25 @@ def testDog(self): self.assertEqual( dog._var_name_to_model_instances, { - 'breed': [dog, dog_allof_instance], - 'class_name': [dog, animal_instance], - 'color': [dog, animal_instance] + 'breed': [dog, animal_instance, dog_allof_instance], + 'class_name': [dog, animal_instance, dog_allof_instance], + 'color': [dog, animal_instance, dog_allof_instance] } ) # model._additional_properties_model_instances stores a list of # models which have the property additional_properties_type != None self.assertEqual( - dog._additional_properties_model_instances, [] + dog._additional_properties_model_instances, [dog] ) + # setting a value that doesn't exist works + dog['invalid_variable'] = 'a' + assert dog.invalid_variable == 'a' + + # with setattr + setattr(dog, 'invalid_variable', 'b') + assert dog.invalid_variable == 'b' + # if we modify one of the properties owned by multiple # model_instances we get an exception when we try to access that # property because the retrieved values are not all the same @@ -138,14 +138,14 @@ def testDog(self): with self.assertRaises(petstore_api.ApiValueError): breed = dog.breed - # including extra parameters raises an exception - with self.assertRaises(petstore_api.ApiValueError): - dog = Dog( - class_name=class_name, - color=color, - breed=breed, - unknown_property='some value' - ) + # including extra parameters works + dog = Dog( + class_name=class_name, + color=color, + breed=breed, + unknown_property='some value' + ) + assert dog.unknown_property == 'some value' if __name__ == '__main__': unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.gitignore b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.gitignore new file mode 100644 index 000000000000..43995bd42fa2 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.gitignore @@ -0,0 +1,66 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ +venv/ +.venv/ +.python-version +.pytest_cache + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +#Ipython Notebook +.ipynb_checkpoints diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.gitlab-ci.yml b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.gitlab-ci.yml new file mode 100644 index 000000000000..9e84f5176163 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.gitlab-ci.yml @@ -0,0 +1,24 @@ +# ref: https://docs.gitlab.com/ee/ci/README.html + +stages: + - test + +.tests: + stage: test + script: + - pip install -r requirements.txt + - pip install -r test-requirements.txt + - pytest --cov=petstore_api + +test-3.6: + extends: .tests + image: python:3.6-alpine +test-3.7: + extends: .tests + image: python:3.7-alpine +test-3.8: + extends: .tests + image: python:3.8-alpine +test-3.9: + extends: .tests + image: python:3.9-alpine diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator-ignore b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/FILES b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/FILES new file mode 100644 index 000000000000..94732e37243f --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/FILES @@ -0,0 +1,160 @@ +.gitignore +.gitlab-ci.yml +.travis.yml +README.md +docs/AdditionalPropertiesAnyType.md +docs/AdditionalPropertiesArray.md +docs/AdditionalPropertiesBoolean.md +docs/AdditionalPropertiesClass.md +docs/AdditionalPropertiesInteger.md +docs/AdditionalPropertiesNumber.md +docs/AdditionalPropertiesObject.md +docs/AdditionalPropertiesString.md +docs/Animal.md +docs/AnimalFarm.md +docs/AnotherFakeApi.md +docs/ApiResponse.md +docs/ArrayOfArrayOfNumberOnly.md +docs/ArrayOfNumberOnly.md +docs/ArrayTest.md +docs/Capitalization.md +docs/Cat.md +docs/CatAllOf.md +docs/Category.md +docs/Child.md +docs/ChildAllOf.md +docs/ChildCat.md +docs/ChildCatAllOf.md +docs/ChildDog.md +docs/ChildDogAllOf.md +docs/ChildLizard.md +docs/ChildLizardAllOf.md +docs/ClassModel.md +docs/Client.md +docs/Dog.md +docs/DogAllOf.md +docs/EnumArrays.md +docs/EnumClass.md +docs/EnumTest.md +docs/FakeApi.md +docs/FakeClassnameTags123Api.md +docs/File.md +docs/FileSchemaTestClass.md +docs/FormatTest.md +docs/Grandparent.md +docs/GrandparentAnimal.md +docs/HasOnlyReadOnly.md +docs/List.md +docs/MapTest.md +docs/MixedPropertiesAndAdditionalPropertiesClass.md +docs/Model200Response.md +docs/ModelReturn.md +docs/Name.md +docs/NumberOnly.md +docs/NumberWithValidations.md +docs/ObjectModelWithRefProps.md +docs/Order.md +docs/Parent.md +docs/ParentAllOf.md +docs/ParentPet.md +docs/Pet.md +docs/PetApi.md +docs/Player.md +docs/ReadOnlyFirst.md +docs/SpecialModelName.md +docs/StoreApi.md +docs/StringBooleanMap.md +docs/StringEnum.md +docs/Tag.md +docs/TypeHolderDefault.md +docs/TypeHolderExample.md +docs/User.md +docs/UserApi.md +docs/XmlItem.md +git_push.sh +petstore_api/__init__.py +petstore_api/api/__init__.py +petstore_api/api/another_fake_api.py +petstore_api/api/fake_api.py +petstore_api/api/fake_classname_tags_123_api.py +petstore_api/api/pet_api.py +petstore_api/api/store_api.py +petstore_api/api/user_api.py +petstore_api/api_client.py +petstore_api/apis/__init__.py +petstore_api/configuration.py +petstore_api/exceptions.py +petstore_api/model/__init__.py +petstore_api/model/additional_properties_any_type.py +petstore_api/model/additional_properties_array.py +petstore_api/model/additional_properties_boolean.py +petstore_api/model/additional_properties_class.py +petstore_api/model/additional_properties_integer.py +petstore_api/model/additional_properties_number.py +petstore_api/model/additional_properties_object.py +petstore_api/model/additional_properties_string.py +petstore_api/model/animal.py +petstore_api/model/animal_farm.py +petstore_api/model/api_response.py +petstore_api/model/array_of_array_of_number_only.py +petstore_api/model/array_of_number_only.py +petstore_api/model/array_test.py +petstore_api/model/capitalization.py +petstore_api/model/cat.py +petstore_api/model/cat_all_of.py +petstore_api/model/category.py +petstore_api/model/child.py +petstore_api/model/child_all_of.py +petstore_api/model/child_cat.py +petstore_api/model/child_cat_all_of.py +petstore_api/model/child_dog.py +petstore_api/model/child_dog_all_of.py +petstore_api/model/child_lizard.py +petstore_api/model/child_lizard_all_of.py +petstore_api/model/class_model.py +petstore_api/model/client.py +petstore_api/model/dog.py +petstore_api/model/dog_all_of.py +petstore_api/model/enum_arrays.py +petstore_api/model/enum_class.py +petstore_api/model/enum_test.py +petstore_api/model/file.py +petstore_api/model/file_schema_test_class.py +petstore_api/model/format_test.py +petstore_api/model/grandparent.py +petstore_api/model/grandparent_animal.py +petstore_api/model/has_only_read_only.py +petstore_api/model/list.py +petstore_api/model/map_test.py +petstore_api/model/mixed_properties_and_additional_properties_class.py +petstore_api/model/model200_response.py +petstore_api/model/model_return.py +petstore_api/model/name.py +petstore_api/model/number_only.py +petstore_api/model/number_with_validations.py +petstore_api/model/object_model_with_ref_props.py +petstore_api/model/order.py +petstore_api/model/parent.py +petstore_api/model/parent_all_of.py +petstore_api/model/parent_pet.py +petstore_api/model/pet.py +petstore_api/model/player.py +petstore_api/model/read_only_first.py +petstore_api/model/special_model_name.py +petstore_api/model/string_boolean_map.py +petstore_api/model/string_enum.py +petstore_api/model/tag.py +petstore_api/model/type_holder_default.py +petstore_api/model/type_holder_example.py +petstore_api/model/user.py +petstore_api/model/xml_item.py +petstore_api/model_utils.py +petstore_api/models/__init__.py +petstore_api/models/__init__.py +petstore_api/rest.py +requirements.txt +setup.cfg +setup.py +test-requirements.txt +test/__init__.py +tox.ini diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION new file mode 100644 index 000000000000..d509cc92aa80 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.travis.yml b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.travis.yml new file mode 100644 index 000000000000..1fcc4b155964 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.travis.yml @@ -0,0 +1,13 @@ +# ref: https://docs.travis-ci.com/user/languages/python +language: python +python: + - "3.6" + - "3.7" + - "3.8" + - "3.9" +# command to install dependencies +install: + - "pip install -r requirements.txt" + - "pip install -r test-requirements.txt" +# command to run tests +script: pytest --cov=petstore_api diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/Makefile b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/Makefile new file mode 100644 index 000000000000..a6bbba4a434f --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/Makefile @@ -0,0 +1,18 @@ + #!/bin/bash + +REQUIREMENTS_FILE=dev-requirements.txt +REQUIREMENTS_OUT=dev-requirements.txt.log +SETUP_OUT=*.egg-info +VENV=venv + +clean: + rm -rf $(REQUIREMENTS_OUT) + rm -rf $(SETUP_OUT) + rm -rf $(VENV) + rm -rf .tox + rm -rf .coverage + find . -name "*.py[oc]" -delete + find . -name "__pycache__" -delete + +test: clean + bash ./test_python.sh diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/README.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/README.md new file mode 100644 index 000000000000..5f53c0f64235 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/README.md @@ -0,0 +1,247 @@ +# petstore-api +This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + +This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: + +- API version: 1.0.0 +- Package version: 1.0.0 +- Build package: org.openapitools.codegen.languages.PythonClientCodegen + +## Requirements. + +Python >= 3.6 + +## Installation & Usage +### pip install + +If the python package is hosted on a repository, you can install directly using: + +```sh +pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git +``` +(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git`) + +Then import the package: +```python +import petstore_api +``` + +### Setuptools + +Install via [Setuptools](http://pypi.python.org/pypi/setuptools). + +```sh +python setup.py install --user +``` +(or `sudo python setup.py install` to install the package for all users) + +Then import the package: +```python +import petstore_api +``` + +## Getting Started + +Please follow the [installation procedure](#installation--usage) and then run the following: + +```python + +import time +import petstore_api +from pprint import pprint +from petstore_api.api import another_fake_api +from petstore_api.model.client import Client +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = another_fake_api.AnotherFakeApi(api_client) + body = Client( + client="client_example", + ) # Client | client model + + try: + # To test special tags + api_response = api_instance.call_123_test_special_tags(body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling AnotherFakeApi->call_123_test_special_tags: %s\n" % e) +``` + +## Documentation for API Endpoints + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*AnotherFakeApi* | [**call_123_test_special_tags**](docs/AnotherFakeApi.md#call_123_test_special_tags) | **PATCH** /another-fake/dummy | To test special tags +*FakeApi* | [**array_model**](docs/FakeApi.md#array_model) | **POST** /fake/refs/arraymodel | +*FakeApi* | [**boolean**](docs/FakeApi.md#boolean) | **POST** /fake/refs/boolean | +*FakeApi* | [**create_xml_item**](docs/FakeApi.md#create_xml_item) | **POST** /fake/create_xml_item | creates an XmlItem +*FakeApi* | [**number_with_validations**](docs/FakeApi.md#number_with_validations) | **POST** /fake/refs/number | +*FakeApi* | [**object_model_with_ref_props**](docs/FakeApi.md#object_model_with_ref_props) | **POST** /fake/refs/object_model_with_ref_props | +*FakeApi* | [**string**](docs/FakeApi.md#string) | **POST** /fake/refs/string | +*FakeApi* | [**string_enum**](docs/FakeApi.md#string_enum) | **POST** /fake/refs/enum | +*FakeApi* | [**test_body_with_file_schema**](docs/FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**test_body_with_query_params**](docs/FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**test_client_model**](docs/FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**test_endpoint_enums_length_one**](docs/FakeApi.md#test_endpoint_enums_length_one) | **PUT** /fake/enums-of-length-one/{path_string}/{path_integer} | +*FakeApi* | [**test_endpoint_parameters**](docs/FakeApi.md#test_endpoint_parameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**test_enum_parameters**](docs/FakeApi.md#test_enum_parameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**test_group_parameters**](docs/FakeApi.md#test_group_parameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**test_inline_additional_properties**](docs/FakeApi.md#test_inline_additional_properties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**test_json_form_data**](docs/FakeApi.md#test_json_form_data) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeClassnameTags123Api* | [**test_classname**](docs/FakeClassnameTags123Api.md#test_classname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**add_pet**](docs/PetApi.md#add_pet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**delete_pet**](docs/PetApi.md#delete_pet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**find_pets_by_status**](docs/PetApi.md#find_pets_by_status) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**find_pets_by_tags**](docs/PetApi.md#find_pets_by_tags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**get_pet_by_id**](docs/PetApi.md#get_pet_by_id) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**update_pet**](docs/PetApi.md#update_pet) | **PUT** /pet | Update an existing pet +*PetApi* | [**update_pet_with_form**](docs/PetApi.md#update_pet_with_form) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**upload_file**](docs/PetApi.md#upload_file) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**upload_file_with_required_file**](docs/PetApi.md#upload_file_with_required_file) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**delete_order**](docs/StoreApi.md#delete_order) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**get_inventory**](docs/StoreApi.md#get_inventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**get_order_by_id**](docs/StoreApi.md#get_order_by_id) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**place_order**](docs/StoreApi.md#place_order) | **POST** /store/order | Place an order for a pet +*UserApi* | [**create_user**](docs/UserApi.md#create_user) | **POST** /user | Create user +*UserApi* | [**create_users_with_array_input**](docs/UserApi.md#create_users_with_array_input) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**create_users_with_list_input**](docs/UserApi.md#create_users_with_list_input) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**delete_user**](docs/UserApi.md#delete_user) | **DELETE** /user/{username} | Delete user +*UserApi* | [**get_user_by_name**](docs/UserApi.md#get_user_by_name) | **GET** /user/{username} | Get user by user name +*UserApi* | [**login_user**](docs/UserApi.md#login_user) | **GET** /user/login | Logs user into the system +*UserApi* | [**logout_user**](docs/UserApi.md#logout_user) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**update_user**](docs/UserApi.md#update_user) | **PUT** /user/{username} | Updated user + + +## Documentation For Models + + - [AdditionalPropertiesAnyType](docs/AdditionalPropertiesAnyType.md) + - [AdditionalPropertiesArray](docs/AdditionalPropertiesArray.md) + - [AdditionalPropertiesBoolean](docs/AdditionalPropertiesBoolean.md) + - [AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md) + - [AdditionalPropertiesInteger](docs/AdditionalPropertiesInteger.md) + - [AdditionalPropertiesNumber](docs/AdditionalPropertiesNumber.md) + - [AdditionalPropertiesObject](docs/AdditionalPropertiesObject.md) + - [AdditionalPropertiesString](docs/AdditionalPropertiesString.md) + - [Animal](docs/Animal.md) + - [AnimalFarm](docs/AnimalFarm.md) + - [ApiResponse](docs/ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md) + - [ArrayTest](docs/ArrayTest.md) + - [Capitalization](docs/Capitalization.md) + - [Cat](docs/Cat.md) + - [CatAllOf](docs/CatAllOf.md) + - [Category](docs/Category.md) + - [Child](docs/Child.md) + - [ChildAllOf](docs/ChildAllOf.md) + - [ChildCat](docs/ChildCat.md) + - [ChildCatAllOf](docs/ChildCatAllOf.md) + - [ChildDog](docs/ChildDog.md) + - [ChildDogAllOf](docs/ChildDogAllOf.md) + - [ChildLizard](docs/ChildLizard.md) + - [ChildLizardAllOf](docs/ChildLizardAllOf.md) + - [ClassModel](docs/ClassModel.md) + - [Client](docs/Client.md) + - [Dog](docs/Dog.md) + - [DogAllOf](docs/DogAllOf.md) + - [EnumArrays](docs/EnumArrays.md) + - [EnumClass](docs/EnumClass.md) + - [EnumTest](docs/EnumTest.md) + - [File](docs/File.md) + - [FileSchemaTestClass](docs/FileSchemaTestClass.md) + - [FormatTest](docs/FormatTest.md) + - [Grandparent](docs/Grandparent.md) + - [GrandparentAnimal](docs/GrandparentAnimal.md) + - [HasOnlyReadOnly](docs/HasOnlyReadOnly.md) + - [List](docs/List.md) + - [MapTest](docs/MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](docs/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](docs/Model200Response.md) + - [ModelReturn](docs/ModelReturn.md) + - [Name](docs/Name.md) + - [NumberOnly](docs/NumberOnly.md) + - [NumberWithValidations](docs/NumberWithValidations.md) + - [ObjectModelWithRefProps](docs/ObjectModelWithRefProps.md) + - [Order](docs/Order.md) + - [Parent](docs/Parent.md) + - [ParentAllOf](docs/ParentAllOf.md) + - [ParentPet](docs/ParentPet.md) + - [Pet](docs/Pet.md) + - [Player](docs/Player.md) + - [ReadOnlyFirst](docs/ReadOnlyFirst.md) + - [SpecialModelName](docs/SpecialModelName.md) + - [StringBooleanMap](docs/StringBooleanMap.md) + - [StringEnum](docs/StringEnum.md) + - [Tag](docs/Tag.md) + - [TypeHolderDefault](docs/TypeHolderDefault.md) + - [TypeHolderExample](docs/TypeHolderExample.md) + - [User](docs/User.md) + - [XmlItem](docs/XmlItem.md) + + +## Documentation For Authorization + + +## api_key + +- **Type**: API key +- **API key parameter name**: api_key +- **Location**: HTTP header + + +## api_key_query + +- **Type**: API key +- **API key parameter name**: api_key_query +- **Location**: URL query string + + +## http_basic_test + +- **Type**: HTTP basic authentication + + +## petstore_auth + +- **Type**: OAuth +- **Flow**: implicit +- **Authorization URL**: http://petstore.swagger.io/api/oauth/dialog +- **Scopes**: + - **write:pets**: modify pets in your account + - **read:pets**: read your pets + + +## Author + + + + +## Notes for Large OpenAPI documents +If the OpenAPI document is large, imports in petstore_api.apis and petstore_api.models may fail with a +RecursionError indicating the maximum recursion limit has been exceeded. In that case, there are a couple of solutions: + +Solution 1: +Use specific imports for apis and models like: +- `from petstore_api.api.default_api import DefaultApi` +- `from petstore_api.model.pet import Pet` + +Solution 2: +Before importing the package, adjust the maximum recursion limit as shown below: +``` +import sys +sys.setrecursionlimit(1500) +import petstore_api +from petstore_api.apis import * +from petstore_api.models import * +``` + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/dev-requirements.txt b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/dev-requirements.txt new file mode 100644 index 000000000000..ccdfca629494 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/dev-requirements.txt @@ -0,0 +1,2 @@ +tox +flake8 diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesAnyType.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesAnyType.md new file mode 100644 index 000000000000..d31d12de0822 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesAnyType.md @@ -0,0 +1,12 @@ +# AdditionalPropertiesAnyType + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesArray.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesArray.md new file mode 100644 index 000000000000..40537cbf8384 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesArray.md @@ -0,0 +1,12 @@ +# AdditionalPropertiesArray + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**any string name** | **[bool, date, datetime, dict, float, int, list, str, none_type]** | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesBoolean.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesBoolean.md new file mode 100644 index 000000000000..bf7b5be4c13d --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesBoolean.md @@ -0,0 +1,12 @@ +# AdditionalPropertiesBoolean + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**any string name** | **bool** | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesClass.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesClass.md new file mode 100644 index 000000000000..fe54cef0539f --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesClass.md @@ -0,0 +1,21 @@ +# AdditionalPropertiesClass + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**map_string** | **{str: (str,)}** | | [optional] +**map_number** | **{str: (float,)}** | | [optional] +**map_integer** | **{str: (int,)}** | | [optional] +**map_boolean** | **{str: (bool,)}** | | [optional] +**map_array_integer** | **{str: ([int],)}** | | [optional] +**map_array_anytype** | **{str: ([bool, date, datetime, dict, float, int, list, str, none_type],)}** | | [optional] +**map_map_string** | **{str: ({str: (str,)},)}** | | [optional] +**map_map_anytype** | **{str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type,)},)}** | | [optional] +**anytype_1** | **bool, date, datetime, dict, float, int, list, str, none_type** | | [optional] +**anytype_2** | **bool, date, datetime, dict, float, int, list, str, none_type** | no type is set for this | [optional] +**anytype_3** | **bool, date, datetime, dict, float, int, list, str, none_type** | because of a bug in swagger-parser, this should have values {str: (str, int, float...)} but instead we get any type. See https://github.com/swagger-api/swagger-parser/issues/1378 | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesInteger.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesInteger.md new file mode 100644 index 000000000000..96345efd4cc8 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesInteger.md @@ -0,0 +1,12 @@ +# AdditionalPropertiesInteger + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**any string name** | **int** | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesNumber.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesNumber.md new file mode 100644 index 000000000000..9af52dc6dcfd --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesNumber.md @@ -0,0 +1,12 @@ +# AdditionalPropertiesNumber + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**any string name** | **float** | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesObject.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesObject.md new file mode 100644 index 000000000000..dc64a0d91c24 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesObject.md @@ -0,0 +1,12 @@ +# AdditionalPropertiesObject + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**any string name** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type,)}** | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesString.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesString.md new file mode 100644 index 000000000000..fe3993d02265 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AdditionalPropertiesString.md @@ -0,0 +1,12 @@ +# AdditionalPropertiesString + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**any string name** | **str** | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Animal.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Animal.md new file mode 100644 index 000000000000..1d1c77c01abc --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Animal.md @@ -0,0 +1,12 @@ +# Animal + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**class_name** | **str** | | +**color** | **str** | | [optional] if omitted the server will use the default value of "red" + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AnimalFarm.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AnimalFarm.md new file mode 100644 index 000000000000..fc299cf27d34 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AnimalFarm.md @@ -0,0 +1,11 @@ +# AnimalFarm + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | [**[Animal]**](Animal.md) | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AnotherFakeApi.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AnotherFakeApi.md new file mode 100644 index 000000000000..470caed72cc5 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/AnotherFakeApi.md @@ -0,0 +1,76 @@ +# petstore_api.AnotherFakeApi + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**call_123_test_special_tags**](AnotherFakeApi.md#call_123_test_special_tags) | **PATCH** /another-fake/dummy | To test special tags + + +# **call_123_test_special_tags** +> Client call_123_test_special_tags(body) + +To test special tags + +To test special tags and operation ID starting with number + +### Example + +```python +import time +import petstore_api +from petstore_api.api import another_fake_api +from petstore_api.model.client import Client +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = another_fake_api.AnotherFakeApi(api_client) + body = Client( + client="client_example", + ) # Client | client model + + # example passing only required values which don't have defaults set + try: + # To test special tags + api_response = api_instance.call_123_test_special_tags(body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling AnotherFakeApi->call_123_test_special_tags: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Client**](Client.md)| client model | + +### Return type + +[**Client**](Client.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ApiResponse.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ApiResponse.md new file mode 100644 index 000000000000..81a7d0d85227 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ApiResponse.md @@ -0,0 +1,13 @@ +# ApiResponse + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**code** | **int** | | [optional] +**type** | **str** | | [optional] +**message** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayOfArrayOfNumberOnly.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayOfArrayOfNumberOnly.md new file mode 100644 index 000000000000..6ab77963788b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayOfArrayOfNumberOnly.md @@ -0,0 +1,11 @@ +# ArrayOfArrayOfNumberOnly + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**array_array_number** | **[[float]]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayOfNumberOnly.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayOfNumberOnly.md new file mode 100644 index 000000000000..ebc65a54ba7e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayOfNumberOnly.md @@ -0,0 +1,11 @@ +# ArrayOfNumberOnly + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**array_number** | **[float]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayTest.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayTest.md new file mode 100644 index 000000000000..4e1bda8fc3af --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ArrayTest.md @@ -0,0 +1,13 @@ +# ArrayTest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**array_of_string** | **[str]** | | [optional] +**array_array_of_integer** | **[[int]]** | | [optional] +**array_array_of_model** | [**[[ReadOnlyFirst]]**](ReadOnlyFirst.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Capitalization.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Capitalization.md new file mode 100644 index 000000000000..1ddeadeb3f46 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Capitalization.md @@ -0,0 +1,16 @@ +# Capitalization + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**small_camel** | **str** | | [optional] +**capital_camel** | **str** | | [optional] +**small_snake** | **str** | | [optional] +**capital_snake** | **str** | | [optional] +**sca_eth_flow_points** | **str** | | [optional] +**att_name** | **str** | Name of the pet | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Cat.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Cat.md new file mode 100644 index 000000000000..e9ce235cd632 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Cat.md @@ -0,0 +1,13 @@ +# Cat + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**class_name** | **str** | | +**declawed** | **bool** | | [optional] +**color** | **str** | | [optional] if omitted the server will use the default value of "red" + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/CatAllOf.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/CatAllOf.md new file mode 100644 index 000000000000..0ff7809a99ac --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/CatAllOf.md @@ -0,0 +1,11 @@ +# CatAllOf + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**declawed** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Category.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Category.md new file mode 100644 index 000000000000..940f6a45e641 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Category.md @@ -0,0 +1,12 @@ +# Category + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | defaults to "default-name" +**id** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Child.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Child.md new file mode 100644 index 000000000000..eb4392445710 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Child.md @@ -0,0 +1,13 @@ +# Child + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**radio_waves** | **bool** | | [optional] +**tele_vision** | **bool** | | [optional] +**inter_net** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildAllOf.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildAllOf.md new file mode 100644 index 000000000000..f9ae99c7c157 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildAllOf.md @@ -0,0 +1,11 @@ +# ChildAllOf + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**inter_net** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildCat.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildCat.md new file mode 100644 index 000000000000..9e3a0fb4b51a --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildCat.md @@ -0,0 +1,12 @@ +# ChildCat + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**pet_type** | **str** | | +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildCatAllOf.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildCatAllOf.md new file mode 100644 index 000000000000..c5883b9a87c8 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildCatAllOf.md @@ -0,0 +1,11 @@ +# ChildCatAllOf + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildDog.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildDog.md new file mode 100644 index 000000000000..9a6e5b372664 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildDog.md @@ -0,0 +1,12 @@ +# ChildDog + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**pet_type** | **str** | | +**bark** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildDogAllOf.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildDogAllOf.md new file mode 100644 index 000000000000..673050667cb3 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildDogAllOf.md @@ -0,0 +1,11 @@ +# ChildDogAllOf + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bark** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildLizard.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildLizard.md new file mode 100644 index 000000000000..e881ee0a1d1b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildLizard.md @@ -0,0 +1,12 @@ +# ChildLizard + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**pet_type** | **str** | | +**loves_rocks** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildLizardAllOf.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildLizardAllOf.md new file mode 100644 index 000000000000..6e2b70c01505 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ChildLizardAllOf.md @@ -0,0 +1,11 @@ +# ChildLizardAllOf + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**loves_rocks** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ClassModel.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ClassModel.md new file mode 100644 index 000000000000..48ed7cbf2ff0 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ClassModel.md @@ -0,0 +1,12 @@ +# ClassModel + +Model for testing model with \"_class\" property + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**_class** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Client.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Client.md new file mode 100644 index 000000000000..c3986008d6c3 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Client.md @@ -0,0 +1,11 @@ +# Client + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**client** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Dog.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Dog.md new file mode 100644 index 000000000000..7065c4c983d9 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Dog.md @@ -0,0 +1,13 @@ +# Dog + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**class_name** | **str** | | +**breed** | **str** | | [optional] +**color** | **str** | | [optional] if omitted the server will use the default value of "red" + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/DogAllOf.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/DogAllOf.md new file mode 100644 index 000000000000..6382bbd80671 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/DogAllOf.md @@ -0,0 +1,11 @@ +# DogAllOf + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**breed** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumArrays.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumArrays.md new file mode 100644 index 000000000000..9be5c645a809 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumArrays.md @@ -0,0 +1,12 @@ +# EnumArrays + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**just_symbol** | **str** | | [optional] +**array_enum** | **[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumClass.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumClass.md new file mode 100644 index 000000000000..a1f9aae58190 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumClass.md @@ -0,0 +1,11 @@ +# EnumClass + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | **str** | | defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumTest.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumTest.md new file mode 100644 index 000000000000..eb8842241390 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/EnumTest.md @@ -0,0 +1,15 @@ +# EnumTest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**enum_string_required** | **str** | | +**enum_string** | **str** | | [optional] +**enum_integer** | **int** | | [optional] +**enum_number** | **float** | | [optional] +**string_enum** | [**StringEnum**](StringEnum.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeApi.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeApi.md new file mode 100644 index 000000000000..a107342b75c0 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeApi.md @@ -0,0 +1,1205 @@ +# petstore_api.FakeApi + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**array_model**](FakeApi.md#array_model) | **POST** /fake/refs/arraymodel | +[**boolean**](FakeApi.md#boolean) | **POST** /fake/refs/boolean | +[**create_xml_item**](FakeApi.md#create_xml_item) | **POST** /fake/create_xml_item | creates an XmlItem +[**number_with_validations**](FakeApi.md#number_with_validations) | **POST** /fake/refs/number | +[**object_model_with_ref_props**](FakeApi.md#object_model_with_ref_props) | **POST** /fake/refs/object_model_with_ref_props | +[**string**](FakeApi.md#string) | **POST** /fake/refs/string | +[**string_enum**](FakeApi.md#string_enum) | **POST** /fake/refs/enum | +[**test_body_with_file_schema**](FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | +[**test_body_with_query_params**](FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params | +[**test_client_model**](FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model +[**test_endpoint_enums_length_one**](FakeApi.md#test_endpoint_enums_length_one) | **PUT** /fake/enums-of-length-one/{path_string}/{path_integer} | +[**test_endpoint_parameters**](FakeApi.md#test_endpoint_parameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +[**test_enum_parameters**](FakeApi.md#test_enum_parameters) | **GET** /fake | To test enum parameters +[**test_group_parameters**](FakeApi.md#test_group_parameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +[**test_inline_additional_properties**](FakeApi.md#test_inline_additional_properties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +[**test_json_form_data**](FakeApi.md#test_json_form_data) | **GET** /fake/jsonFormData | test json serialization of form data + + +# **array_model** +> AnimalFarm array_model() + + + +Test serialization of ArrayModel + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from petstore_api.model.animal_farm import AnimalFarm +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + body = AnimalFarm([ + Animal(), + ]) # AnimalFarm | Input model (optional) + + # example passing only required values which don't have defaults set + # and optional values + try: + api_response = api_instance.array_model(body=body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->array_model: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**AnimalFarm**](AnimalFarm.md)| Input model | [optional] + +### Return type + +[**AnimalFarm**](AnimalFarm.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: */* + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Output model | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **boolean** +> bool boolean() + + + +Test serialization of outer boolean types + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + body = True # bool | Input boolean as post body (optional) + + # example passing only required values which don't have defaults set + # and optional values + try: + api_response = api_instance.boolean(body=body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->boolean: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **bool**| Input boolean as post body | [optional] + +### Return type + +**bool** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: */* + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Output boolean | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_xml_item** +> create_xml_item(xml_item) + +creates an XmlItem + +this route creates an XmlItem + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from petstore_api.model.xml_item import XmlItem +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + xml_item = XmlItem( + attribute_string="string", + attribute_number=1.234, + attribute_integer=-2, + attribute_boolean=True, + wrapped_array=[ + 1, + ], + name_string="string", + name_number=1.234, + name_integer=-2, + name_boolean=True, + name_array=[ + 1, + ], + name_wrapped_array=[ + 1, + ], + prefix_string="string", + prefix_number=1.234, + prefix_integer=-2, + prefix_boolean=True, + prefix_array=[ + 1, + ], + prefix_wrapped_array=[ + 1, + ], + namespace_string="string", + namespace_number=1.234, + namespace_integer=-2, + namespace_boolean=True, + namespace_array=[ + 1, + ], + namespace_wrapped_array=[ + 1, + ], + prefix_ns_string="string", + prefix_ns_number=1.234, + prefix_ns_integer=-2, + prefix_ns_boolean=True, + prefix_ns_array=[ + 1, + ], + prefix_ns_wrapped_array=[ + 1, + ], + ) # XmlItem | XmlItem Body + + # example passing only required values which don't have defaults set + try: + # creates an XmlItem + api_instance.create_xml_item(xml_item) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->create_xml_item: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **xml_item** | [**XmlItem**](XmlItem.md)| XmlItem Body | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/xml, application/xml; charset=utf-8, application/xml; charset=utf-16, text/xml, text/xml; charset=utf-8, text/xml; charset=utf-16 + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **number_with_validations** +> NumberWithValidations number_with_validations() + + + +Test serialization of outer number types + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from petstore_api.model.number_with_validations import NumberWithValidations +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + body = NumberWithValidations(1E+1) # NumberWithValidations | Input number as post body (optional) + + # example passing only required values which don't have defaults set + # and optional values + try: + api_response = api_instance.number_with_validations(body=body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->number_with_validations: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**NumberWithValidations**](NumberWithValidations.md)| Input number as post body | [optional] + +### Return type + +[**NumberWithValidations**](NumberWithValidations.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: */* + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Output number | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **object_model_with_ref_props** +> ObjectModelWithRefProps object_model_with_ref_props() + + + +Test serialization of object with $refed properties + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from petstore_api.model.object_model_with_ref_props import ObjectModelWithRefProps +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + body = ObjectModelWithRefProps( + my_number=NumberWithValidations(1E+1), + my_string="my_string_example", + my_boolean=True, + ) # ObjectModelWithRefProps | Input model (optional) + + # example passing only required values which don't have defaults set + # and optional values + try: + api_response = api_instance.object_model_with_ref_props(body=body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->object_model_with_ref_props: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**ObjectModelWithRefProps**](ObjectModelWithRefProps.md)| Input model | [optional] + +### Return type + +[**ObjectModelWithRefProps**](ObjectModelWithRefProps.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: */* + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Output model | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **string** +> str string() + + + +Test serialization of outer string types + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + body = "body_example" # str | Input string as post body (optional) + + # example passing only required values which don't have defaults set + # and optional values + try: + api_response = api_instance.string(body=body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->string: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **str**| Input string as post body | [optional] + +### Return type + +**str** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: */* + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Output string | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **string_enum** +> StringEnum string_enum() + + + +Test serialization of outer enum + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from petstore_api.model.string_enum import StringEnum +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + body = StringEnum("placed") # StringEnum | Input enum (optional) + + # example passing only required values which don't have defaults set + # and optional values + try: + api_response = api_instance.string_enum(body=body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->string_enum: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**StringEnum**](StringEnum.md)| Input enum | [optional] + +### Return type + +[**StringEnum**](StringEnum.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: */* + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Output enum | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **test_body_with_file_schema** +> test_body_with_file_schema(body) + + + +For this test, the body for this request much reference a schema named `File`. + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from petstore_api.model.file_schema_test_class import FileSchemaTestClass +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + body = FileSchemaTestClass( + file=File( + source_uri="source_uri_example", + ), + files=[ + File( + source_uri="source_uri_example", + ), + ], + ) # FileSchemaTestClass | + + # example passing only required values which don't have defaults set + try: + api_instance.test_body_with_file_schema(body) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_body_with_file_schema: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**FileSchemaTestClass**](FileSchemaTestClass.md)| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **test_body_with_query_params** +> test_body_with_query_params(query, body) + + + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from petstore_api.model.user import User +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + query = "query_example" # str | + body = User( + id=1, + username="username_example", + first_name="first_name_example", + last_name="last_name_example", + email="email_example", + password="password_example", + phone="phone_example", + user_status=1, + ) # User | + + # example passing only required values which don't have defaults set + try: + api_instance.test_body_with_query_params(query, body) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_body_with_query_params: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **query** | **str**| | + **body** | [**User**](User.md)| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **test_client_model** +> Client test_client_model(body) + +To test \"client\" model + +To test \"client\" model + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from petstore_api.model.client import Client +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + body = Client( + client="client_example", + ) # Client | client model + + # example passing only required values which don't have defaults set + try: + # To test \"client\" model + api_response = api_instance.test_client_model(body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_client_model: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Client**](Client.md)| client model | + +### Return type + +[**Client**](Client.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **test_endpoint_enums_length_one** +> test_endpoint_enums_length_one() + + + +This route has required values with enums of 1 + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + + # example passing only required values which don't have defaults set + try: + api_instance.test_endpoint_enums_length_one() + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_endpoint_enums_length_one: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **query_integer** | **int**| | defaults to 3 + **query_string** | **str**| | defaults to "brillig" + **path_string** | **str**| | defaults to "hello" + **path_integer** | **int**| | defaults to 34 + **header_number** | **float**| | defaults to 1.234 + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **test_endpoint_parameters** +> test_endpoint_parameters(number, double, pattern_without_delimiter, byte) + +Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + +Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + +### Example + +* Basic Authentication (http_basic_test): +```python +import time +import petstore_api +from petstore_api.api import fake_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure HTTP basic authorization: http_basic_test +configuration = petstore_api.Configuration( + username = 'YOUR_USERNAME', + password = 'YOUR_PASSWORD' +) + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + number = 32.1 # float | None + double = 67.8 # float | None + pattern_without_delimiter = "AUR,rZ#UM/?R,Fp^l6$ARjbhJk C" # str | None + byte = 'YQ==' # str | None + integer = 10 # int | None (optional) + int32 = 20 # int | None (optional) + int64 = 1 # int | None (optional) + float = 3.14 # float | None (optional) + string = "a" # str | None (optional) + binary = open('/path/to/file', 'rb') # file_type | None (optional) + date = dateutil_parser('1970-01-01').date() # date | None (optional) + date_time = dateutil_parser('1970-01-01T00:00:00.00Z') # datetime | None (optional) + password = "password_example" # str | None (optional) + param_callback = "param_callback_example" # str | None (optional) + + # example passing only required values which don't have defaults set + try: + # Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + api_instance.test_endpoint_parameters(number, double, pattern_without_delimiter, byte) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_endpoint_parameters: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + api_instance.test_endpoint_parameters(number, double, pattern_without_delimiter, byte, integer=integer, int32=int32, int64=int64, float=float, string=string, binary=binary, date=date, date_time=date_time, password=password, param_callback=param_callback) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_endpoint_parameters: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **number** | **float**| None | + **double** | **float**| None | + **pattern_without_delimiter** | **str**| None | + **byte** | **str**| None | + **integer** | **int**| None | [optional] + **int32** | **int**| None | [optional] + **int64** | **int**| None | [optional] + **float** | **float**| None | [optional] + **string** | **str**| None | [optional] + **binary** | **file_type**| None | [optional] + **date** | **date**| None | [optional] + **date_time** | **datetime**| None | [optional] + **password** | **str**| None | [optional] + **param_callback** | **str**| None | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[http_basic_test](../README.md#http_basic_test) + +### HTTP request headers + + - **Content-Type**: application/x-www-form-urlencoded + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**400** | Invalid username supplied | - | +**404** | User not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **test_enum_parameters** +> test_enum_parameters() + +To test enum parameters + +To test enum parameters + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + enum_header_string_array = [ + "$", + ] # [str] | Header parameter enum test (string array) (optional) + enum_header_string = "-efg" # str | Header parameter enum test (string) (optional) if omitted the server will use the default value of "-efg" + enum_query_string_array = [ + "$", + ] # [str] | Query parameter enum test (string array) (optional) + enum_query_string = "-efg" # str | Query parameter enum test (string) (optional) if omitted the server will use the default value of "-efg" + enum_query_integer = 1 # int | Query parameter enum test (double) (optional) + enum_query_double = 1.1 # float | Query parameter enum test (double) (optional) + enum_form_string_array = "$" # [str] | Form parameter enum test (string array) (optional) if omitted the server will use the default value of "$" + enum_form_string = "-efg" # str | Form parameter enum test (string) (optional) if omitted the server will use the default value of "-efg" + + # example passing only required values which don't have defaults set + # and optional values + try: + # To test enum parameters + api_instance.test_enum_parameters(enum_header_string_array=enum_header_string_array, enum_header_string=enum_header_string, enum_query_string_array=enum_query_string_array, enum_query_string=enum_query_string, enum_query_integer=enum_query_integer, enum_query_double=enum_query_double, enum_form_string_array=enum_form_string_array, enum_form_string=enum_form_string) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_enum_parameters: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **enum_header_string_array** | **[str]**| Header parameter enum test (string array) | [optional] + **enum_header_string** | **str**| Header parameter enum test (string) | [optional] if omitted the server will use the default value of "-efg" + **enum_query_string_array** | **[str]**| Query parameter enum test (string array) | [optional] + **enum_query_string** | **str**| Query parameter enum test (string) | [optional] if omitted the server will use the default value of "-efg" + **enum_query_integer** | **int**| Query parameter enum test (double) | [optional] + **enum_query_double** | **float**| Query parameter enum test (double) | [optional] + **enum_form_string_array** | **[str]**| Form parameter enum test (string array) | [optional] if omitted the server will use the default value of "$" + **enum_form_string** | **str**| Form parameter enum test (string) | [optional] if omitted the server will use the default value of "-efg" + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/x-www-form-urlencoded + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**400** | Invalid request | - | +**404** | Not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **test_group_parameters** +> test_group_parameters(required_string_group, required_boolean_group, required_int64_group) + +Fake endpoint to test group parameters (optional) + +Fake endpoint to test group parameters (optional) + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + required_string_group = 1 # int | Required String in group parameters + required_boolean_group = True # bool | Required Boolean in group parameters + required_int64_group = 1 # int | Required Integer in group parameters + string_group = 1 # int | String in group parameters (optional) + boolean_group = True # bool | Boolean in group parameters (optional) + int64_group = 1 # int | Integer in group parameters (optional) + + # example passing only required values which don't have defaults set + try: + # Fake endpoint to test group parameters (optional) + api_instance.test_group_parameters(required_string_group, required_boolean_group, required_int64_group) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_group_parameters: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # Fake endpoint to test group parameters (optional) + api_instance.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, string_group=string_group, boolean_group=boolean_group, int64_group=int64_group) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_group_parameters: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **required_string_group** | **int**| Required String in group parameters | + **required_boolean_group** | **bool**| Required Boolean in group parameters | + **required_int64_group** | **int**| Required Integer in group parameters | + **string_group** | **int**| String in group parameters | [optional] + **boolean_group** | **bool**| Boolean in group parameters | [optional] + **int64_group** | **int**| Integer in group parameters | [optional] + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**400** | Someting wrong | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **test_inline_additional_properties** +> test_inline_additional_properties(param) + +test inline additionalProperties + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + param = { + "key": "key_example", + } # {str: (str,)} | request body + + # example passing only required values which don't have defaults set + try: + # test inline additionalProperties + api_instance.test_inline_additional_properties(param) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_inline_additional_properties: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **param** | **{str: (str,)}**| request body | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **test_json_form_data** +> test_json_form_data(param, param2) + +test json serialization of form data + +### Example + +```python +import time +import petstore_api +from petstore_api.api import fake_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = fake_api.FakeApi(api_client) + param = "param_example" # str | field1 + param2 = "param2_example" # str | field2 + + # example passing only required values which don't have defaults set + try: + # test json serialization of form data + api_instance.test_json_form_data(param, param2) + except petstore_api.ApiException as e: + print("Exception when calling FakeApi->test_json_form_data: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **param** | **str**| field1 | + **param2** | **str**| field2 | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/x-www-form-urlencoded + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeClassnameTags123Api.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeClassnameTags123Api.md new file mode 100644 index 000000000000..3452fd6ddff4 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeClassnameTags123Api.md @@ -0,0 +1,87 @@ +# petstore_api.FakeClassnameTags123Api + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**test_classname**](FakeClassnameTags123Api.md#test_classname) | **PATCH** /fake_classname_test | To test class name in snake case + + +# **test_classname** +> Client test_classname(body) + +To test class name in snake case + +To test class name in snake case + +### Example + +* Api Key Authentication (api_key_query): +```python +import time +import petstore_api +from petstore_api.api import fake_classname_tags_123_api +from petstore_api.model.client import Client +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: api_key_query +configuration.api_key['api_key_query'] = 'YOUR_API_KEY' + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['api_key_query'] = 'Bearer' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = fake_classname_tags_123_api.FakeClassnameTags123Api(api_client) + body = Client( + client="client_example", + ) # Client | client model + + # example passing only required values which don't have defaults set + try: + # To test class name in snake case + api_response = api_instance.test_classname(body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling FakeClassnameTags123Api->test_classname: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Client**](Client.md)| client model | + +### Return type + +[**Client**](Client.md) + +### Authorization + +[api_key_query](../README.md#api_key_query) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/File.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/File.md new file mode 100644 index 000000000000..63b1d1a65186 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/File.md @@ -0,0 +1,12 @@ +# File + +Must be named `File` for test. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**source_uri** | **str** | Test capitalization | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FileSchemaTestClass.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FileSchemaTestClass.md new file mode 100644 index 000000000000..caf2440821da --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FileSchemaTestClass.md @@ -0,0 +1,12 @@ +# FileSchemaTestClass + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**file** | [**File**](File.md) | | [optional] +**files** | [**[File]**](File.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FormatTest.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FormatTest.md new file mode 100644 index 000000000000..aef09bfcc83e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FormatTest.md @@ -0,0 +1,23 @@ +# FormatTest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**number** | **float** | | +**byte** | **str** | | +**date** | **date** | | +**password** | **str** | | +**integer** | **int** | | [optional] +**int32** | **int** | | [optional] +**int64** | **int** | | [optional] +**float** | **float** | | [optional] +**double** | **float** | | [optional] +**string** | **str** | | [optional] +**binary** | **file_type** | | [optional] +**date_time** | **datetime** | | [optional] +**uuid** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Grandparent.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Grandparent.md new file mode 100644 index 000000000000..b6d80a719457 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Grandparent.md @@ -0,0 +1,11 @@ +# Grandparent + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**radio_waves** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/GrandparentAnimal.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/GrandparentAnimal.md new file mode 100644 index 000000000000..15db0708bb1a --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/GrandparentAnimal.md @@ -0,0 +1,11 @@ +# GrandparentAnimal + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**pet_type** | **str** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/HasOnlyReadOnly.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/HasOnlyReadOnly.md new file mode 100644 index 000000000000..0e1334519a8b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/HasOnlyReadOnly.md @@ -0,0 +1,12 @@ +# HasOnlyReadOnly + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bar** | **str** | | [optional] [readonly] +**foo** | **str** | | [optional] [readonly] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/List.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/List.md new file mode 100644 index 000000000000..4b60956971aa --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/List.md @@ -0,0 +1,11 @@ +# List + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**_123_list** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/MapTest.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/MapTest.md new file mode 100644 index 000000000000..15228ee1f282 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/MapTest.md @@ -0,0 +1,14 @@ +# MapTest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**map_map_of_string** | **{str: ({str: (str,)},)}** | | [optional] +**map_of_enum_string** | **{str: (str,)}** | | [optional] +**direct_map** | **{str: (bool,)}** | | [optional] +**indirect_map** | [**StringBooleanMap**](StringBooleanMap.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/MixedPropertiesAndAdditionalPropertiesClass.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/MixedPropertiesAndAdditionalPropertiesClass.md new file mode 100644 index 000000000000..f489944a20af --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/MixedPropertiesAndAdditionalPropertiesClass.md @@ -0,0 +1,13 @@ +# MixedPropertiesAndAdditionalPropertiesClass + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**uuid** | **str** | | [optional] +**date_time** | **datetime** | | [optional] +**map** | [**{str: (Animal,)}**](Animal.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Model200Response.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Model200Response.md new file mode 100644 index 000000000000..c958bd4b33f8 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Model200Response.md @@ -0,0 +1,13 @@ +# Model200Response + +Model for testing model name starting with number + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **int** | | [optional] +**_class** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ModelReturn.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ModelReturn.md new file mode 100644 index 000000000000..043e9d466fab --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ModelReturn.md @@ -0,0 +1,12 @@ +# ModelReturn + +Model for testing reserved words + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**_return** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Name.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Name.md new file mode 100644 index 000000000000..3be719cdbfba --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Name.md @@ -0,0 +1,15 @@ +# Name + +Model for testing model name same as property name + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **int** | | +**snake_case** | **int** | | [optional] [readonly] +**_property** | **str** | | [optional] +**_123_number** | **int** | | [optional] [readonly] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/NumberOnly.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/NumberOnly.md new file mode 100644 index 000000000000..37195c5d8994 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/NumberOnly.md @@ -0,0 +1,11 @@ +# NumberOnly + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**just_number** | **float** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/NumberWithValidations.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/NumberWithValidations.md new file mode 100644 index 000000000000..119e0f678239 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/NumberWithValidations.md @@ -0,0 +1,11 @@ +# NumberWithValidations + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | **float** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ObjectModelWithRefProps.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ObjectModelWithRefProps.md new file mode 100644 index 000000000000..5ff4e52033d6 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ObjectModelWithRefProps.md @@ -0,0 +1,14 @@ +# ObjectModelWithRefProps + +a model that includes properties which should stay primitive (String + Boolean) and one which is defined as a class, NumberWithValidations + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**my_number** | [**NumberWithValidations**](NumberWithValidations.md) | | [optional] +**my_string** | **str** | | [optional] +**my_boolean** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Order.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Order.md new file mode 100644 index 000000000000..d29e1a381de8 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Order.md @@ -0,0 +1,16 @@ +# Order + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | | [optional] +**pet_id** | **int** | | [optional] +**quantity** | **int** | | [optional] +**ship_date** | **datetime** | | [optional] +**status** | **str** | Order Status | [optional] +**complete** | **bool** | | [optional] if omitted the server will use the default value of False + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Parent.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Parent.md new file mode 100644 index 000000000000..9d3f02d68b31 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Parent.md @@ -0,0 +1,12 @@ +# Parent + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**radio_waves** | **bool** | | [optional] +**tele_vision** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ParentAllOf.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ParentAllOf.md new file mode 100644 index 000000000000..569a5e4af14f --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ParentAllOf.md @@ -0,0 +1,11 @@ +# ParentAllOf + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**tele_vision** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ParentPet.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ParentPet.md new file mode 100644 index 000000000000..09e409c8fcf1 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ParentPet.md @@ -0,0 +1,11 @@ +# ParentPet + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**pet_type** | **str** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Pet.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Pet.md new file mode 100644 index 000000000000..6e78495272e4 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Pet.md @@ -0,0 +1,16 @@ +# Pet + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | +**photo_urls** | **[str]** | | +**id** | **int** | | [optional] +**category** | [**Category**](Category.md) | | [optional] +**tags** | [**[Tag]**](Tag.md) | | [optional] +**status** | **str** | pet status in the store | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/PetApi.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/PetApi.md new file mode 100644 index 000000000000..dcff2fcd0727 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/PetApi.md @@ -0,0 +1,782 @@ +# petstore_api.PetApi + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**add_pet**](PetApi.md#add_pet) | **POST** /pet | Add a new pet to the store +[**delete_pet**](PetApi.md#delete_pet) | **DELETE** /pet/{petId} | Deletes a pet +[**find_pets_by_status**](PetApi.md#find_pets_by_status) | **GET** /pet/findByStatus | Finds Pets by status +[**find_pets_by_tags**](PetApi.md#find_pets_by_tags) | **GET** /pet/findByTags | Finds Pets by tags +[**get_pet_by_id**](PetApi.md#get_pet_by_id) | **GET** /pet/{petId} | Find pet by ID +[**update_pet**](PetApi.md#update_pet) | **PUT** /pet | Update an existing pet +[**update_pet_with_form**](PetApi.md#update_pet_with_form) | **POST** /pet/{petId} | Updates a pet in the store with form data +[**upload_file**](PetApi.md#upload_file) | **POST** /pet/{petId}/uploadImage | uploads an image +[**upload_file_with_required_file**](PetApi.md#upload_file_with_required_file) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) + + +# **add_pet** +> add_pet(body) + +Add a new pet to the store + +### Example + +* OAuth Authentication (petstore_auth): +```python +import time +import petstore_api +from petstore_api.api import pet_api +from petstore_api.model.pet import Pet +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure OAuth2 access token for authorization: petstore_auth +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) +configuration.access_token = 'YOUR_ACCESS_TOKEN' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pet_api.PetApi(api_client) + body = Pet( + id=1, + category=Category( + id=1, + name="default-name", + ), + name="doggie", + photo_urls=[ + "photo_urls_example", + ], + tags=[ + Tag( + id=1, + name="name_example", + full_name="full_name_example", + ), + ], + status="available", + ) # Pet | Pet object that needs to be added to the store + + # example passing only required values which don't have defaults set + try: + # Add a new pet to the store + api_instance.add_pet(body) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->add_pet: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | + +### Return type + +void (empty response body) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: application/json, application/xml + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | +**405** | Invalid input | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_pet** +> delete_pet(pet_id) + +Deletes a pet + +### Example + +* OAuth Authentication (petstore_auth): +```python +import time +import petstore_api +from petstore_api.api import pet_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure OAuth2 access token for authorization: petstore_auth +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) +configuration.access_token = 'YOUR_ACCESS_TOKEN' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pet_api.PetApi(api_client) + pet_id = 1 # int | Pet id to delete + api_key = "api_key_example" # str | (optional) + + # example passing only required values which don't have defaults set + try: + # Deletes a pet + api_instance.delete_pet(pet_id) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->delete_pet: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # Deletes a pet + api_instance.delete_pet(pet_id, api_key=api_key) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->delete_pet: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **pet_id** | **int**| Pet id to delete | + **api_key** | **str**| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | +**400** | Invalid pet value | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **find_pets_by_status** +> [Pet] find_pets_by_status(status) + +Finds Pets by status + +Multiple status values can be provided with comma separated strings + +### Example + +* OAuth Authentication (petstore_auth): +```python +import time +import petstore_api +from petstore_api.api import pet_api +from petstore_api.model.pet import Pet +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure OAuth2 access token for authorization: petstore_auth +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) +configuration.access_token = 'YOUR_ACCESS_TOKEN' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pet_api.PetApi(api_client) + status = [ + "available", + ] # [str] | Status values that need to be considered for filter + + # example passing only required values which don't have defaults set + try: + # Finds Pets by status + api_response = api_instance.find_pets_by_status(status) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->find_pets_by_status: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **status** | **[str]**| Status values that need to be considered for filter | + +### Return type + +[**[Pet]**](Pet.md) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | +**400** | Invalid status value | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **find_pets_by_tags** +> [Pet] find_pets_by_tags(tags) + +Finds Pets by tags + +Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + +### Example + +* OAuth Authentication (petstore_auth): +```python +import time +import petstore_api +from petstore_api.api import pet_api +from petstore_api.model.pet import Pet +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure OAuth2 access token for authorization: petstore_auth +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) +configuration.access_token = 'YOUR_ACCESS_TOKEN' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pet_api.PetApi(api_client) + tags = [ + "tags_example", + ] # [str] | Tags to filter by + + # example passing only required values which don't have defaults set + try: + # Finds Pets by tags + api_response = api_instance.find_pets_by_tags(tags) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->find_pets_by_tags: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **tags** | **[str]**| Tags to filter by | + +### Return type + +[**[Pet]**](Pet.md) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | +**400** | Invalid tag value | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_pet_by_id** +> Pet get_pet_by_id(pet_id) + +Find pet by ID + +Returns a single pet + +### Example + +* Api Key Authentication (api_key): +```python +import time +import petstore_api +from petstore_api.api import pet_api +from petstore_api.model.pet import Pet +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: api_key +configuration.api_key['api_key'] = 'YOUR_API_KEY' + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['api_key'] = 'Bearer' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pet_api.PetApi(api_client) + pet_id = 1 # int | ID of pet to return + + # example passing only required values which don't have defaults set + try: + # Find pet by ID + api_response = api_instance.get_pet_by_id(pet_id) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->get_pet_by_id: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **pet_id** | **int**| ID of pet to return | + +### Return type + +[**Pet**](Pet.md) + +### Authorization + +[api_key](../README.md#api_key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | +**400** | Invalid ID supplied | - | +**404** | Pet not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_pet** +> update_pet(body) + +Update an existing pet + +### Example + +* OAuth Authentication (petstore_auth): +```python +import time +import petstore_api +from petstore_api.api import pet_api +from petstore_api.model.pet import Pet +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure OAuth2 access token for authorization: petstore_auth +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) +configuration.access_token = 'YOUR_ACCESS_TOKEN' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pet_api.PetApi(api_client) + body = Pet( + id=1, + category=Category( + id=1, + name="default-name", + ), + name="doggie", + photo_urls=[ + "photo_urls_example", + ], + tags=[ + Tag( + id=1, + name="name_example", + full_name="full_name_example", + ), + ], + status="available", + ) # Pet | Pet object that needs to be added to the store + + # example passing only required values which don't have defaults set + try: + # Update an existing pet + api_instance.update_pet(body) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->update_pet: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | + +### Return type + +void (empty response body) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: application/json, application/xml + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | +**400** | Invalid ID supplied | - | +**404** | Pet not found | - | +**405** | Validation exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_pet_with_form** +> update_pet_with_form(pet_id) + +Updates a pet in the store with form data + +### Example + +* OAuth Authentication (petstore_auth): +```python +import time +import petstore_api +from petstore_api.api import pet_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure OAuth2 access token for authorization: petstore_auth +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) +configuration.access_token = 'YOUR_ACCESS_TOKEN' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pet_api.PetApi(api_client) + pet_id = 1 # int | ID of pet that needs to be updated + name = "name_example" # str | Updated name of the pet (optional) + status = "status_example" # str | Updated status of the pet (optional) + + # example passing only required values which don't have defaults set + try: + # Updates a pet in the store with form data + api_instance.update_pet_with_form(pet_id) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->update_pet_with_form: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # Updates a pet in the store with form data + api_instance.update_pet_with_form(pet_id, name=name, status=status) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->update_pet_with_form: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **pet_id** | **int**| ID of pet that needs to be updated | + **name** | **str**| Updated name of the pet | [optional] + **status** | **str**| Updated status of the pet | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: application/x-www-form-urlencoded + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**405** | Invalid input | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **upload_file** +> ApiResponse upload_file(pet_id) + +uploads an image + +### Example + +* OAuth Authentication (petstore_auth): +```python +import time +import petstore_api +from petstore_api.api import pet_api +from petstore_api.model.api_response import ApiResponse +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure OAuth2 access token for authorization: petstore_auth +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) +configuration.access_token = 'YOUR_ACCESS_TOKEN' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pet_api.PetApi(api_client) + pet_id = 1 # int | ID of pet to update + additional_metadata = "additional_metadata_example" # str | Additional data to pass to server (optional) + file = open('/path/to/file', 'rb') # file_type | file to upload (optional) + files = # [file_type] | files to upload (optional) + + # example passing only required values which don't have defaults set + try: + # uploads an image + api_response = api_instance.upload_file(pet_id) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->upload_file: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # uploads an image + api_response = api_instance.upload_file(pet_id, additional_metadata=additional_metadata, file=file, files=files) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->upload_file: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **pet_id** | **int**| ID of pet to update | + **additional_metadata** | **str**| Additional data to pass to server | [optional] + **file** | **file_type**| file to upload | [optional] + **files** | **[file_type]**| files to upload | [optional] + +### Return type + +[**ApiResponse**](ApiResponse.md) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **upload_file_with_required_file** +> ApiResponse upload_file_with_required_file(pet_id, required_file) + +uploads an image (required) + +### Example + +* OAuth Authentication (petstore_auth): +```python +import time +import petstore_api +from petstore_api.api import pet_api +from petstore_api.model.api_response import ApiResponse +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure OAuth2 access token for authorization: petstore_auth +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) +configuration.access_token = 'YOUR_ACCESS_TOKEN' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pet_api.PetApi(api_client) + pet_id = 1 # int | ID of pet to update + required_file = open('/path/to/file', 'rb') # file_type | file to upload + additional_metadata = "additional_metadata_example" # str | Additional data to pass to server (optional) + + # example passing only required values which don't have defaults set + try: + # uploads an image (required) + api_response = api_instance.upload_file_with_required_file(pet_id, required_file) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->upload_file_with_required_file: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # uploads an image (required) + api_response = api_instance.upload_file_with_required_file(pet_id, required_file, additional_metadata=additional_metadata) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling PetApi->upload_file_with_required_file: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **pet_id** | **int**| ID of pet to update | + **required_file** | **file_type**| file to upload | + **additional_metadata** | **str**| Additional data to pass to server | [optional] + +### Return type + +[**ApiResponse**](ApiResponse.md) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Player.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Player.md new file mode 100644 index 000000000000..2014198aa1bd --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Player.md @@ -0,0 +1,12 @@ +# Player + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | +**enemy_player** | [**Player**](Player.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ReadOnlyFirst.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ReadOnlyFirst.md new file mode 100644 index 000000000000..53b4c61d8445 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/ReadOnlyFirst.md @@ -0,0 +1,12 @@ +# ReadOnlyFirst + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bar** | **str** | | [optional] [readonly] +**baz** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/SpecialModelName.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/SpecialModelName.md new file mode 100644 index 000000000000..268e1134192d --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/SpecialModelName.md @@ -0,0 +1,11 @@ +# SpecialModelName + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**special_property_name** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StoreApi.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StoreApi.md new file mode 100644 index 000000000000..b5df4fc1feea --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StoreApi.md @@ -0,0 +1,285 @@ +# petstore_api.StoreApi + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**delete_order**](StoreApi.md#delete_order) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +[**get_inventory**](StoreApi.md#get_inventory) | **GET** /store/inventory | Returns pet inventories by status +[**get_order_by_id**](StoreApi.md#get_order_by_id) | **GET** /store/order/{order_id} | Find purchase order by ID +[**place_order**](StoreApi.md#place_order) | **POST** /store/order | Place an order for a pet + + +# **delete_order** +> delete_order(order_id) + +Delete purchase order by ID + +For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + +### Example + +```python +import time +import petstore_api +from petstore_api.api import store_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = store_api.StoreApi(api_client) + order_id = "order_id_example" # str | ID of the order that needs to be deleted + + # example passing only required values which don't have defaults set + try: + # Delete purchase order by ID + api_instance.delete_order(order_id) + except petstore_api.ApiException as e: + print("Exception when calling StoreApi->delete_order: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **order_id** | **str**| ID of the order that needs to be deleted | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**400** | Invalid ID supplied | - | +**404** | Order not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_inventory** +> {str: (int,)} get_inventory() + +Returns pet inventories by status + +Returns a map of status codes to quantities + +### Example + +* Api Key Authentication (api_key): +```python +import time +import petstore_api +from petstore_api.api import store_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure API key authorization: api_key +configuration.api_key['api_key'] = 'YOUR_API_KEY' + +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['api_key'] = 'Bearer' + +# Enter a context with an instance of the API client +with petstore_api.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = store_api.StoreApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Returns pet inventories by status + api_response = api_instance.get_inventory() + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling StoreApi->get_inventory: %s\n" % e) +``` + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +**{str: (int,)}** + +### Authorization + +[api_key](../README.md#api_key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_order_by_id** +> Order get_order_by_id(order_id) + +Find purchase order by ID + +For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + +### Example + +```python +import time +import petstore_api +from petstore_api.api import store_api +from petstore_api.model.order import Order +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = store_api.StoreApi(api_client) + order_id = 1 # int | ID of pet that needs to be fetched + + # example passing only required values which don't have defaults set + try: + # Find purchase order by ID + api_response = api_instance.get_order_by_id(order_id) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling StoreApi->get_order_by_id: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **order_id** | **int**| ID of pet that needs to be fetched | + +### Return type + +[**Order**](Order.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | +**400** | Invalid ID supplied | - | +**404** | Order not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **place_order** +> Order place_order(body) + +Place an order for a pet + +### Example + +```python +import time +import petstore_api +from petstore_api.api import store_api +from petstore_api.model.order import Order +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = store_api.StoreApi(api_client) + body = Order( + id=1, + pet_id=1, + quantity=1, + ship_date=dateutil_parser('1970-01-01T00:00:00.00Z'), + status="placed", + complete=False, + ) # Order | order placed for purchasing the pet + + # example passing only required values which don't have defaults set + try: + # Place an order for a pet + api_response = api_instance.place_order(body) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling StoreApi->place_order: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Order**](Order.md)| order placed for purchasing the pet | + +### Return type + +[**Order**](Order.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | +**400** | Invalid Order | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StringBooleanMap.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StringBooleanMap.md new file mode 100644 index 000000000000..217c79704081 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StringBooleanMap.md @@ -0,0 +1,11 @@ +# StringBooleanMap + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**any string name** | **bool** | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StringEnum.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StringEnum.md new file mode 100644 index 000000000000..bb195ec0e453 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/StringEnum.md @@ -0,0 +1,11 @@ +# StringEnum + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | **str** | | must be one of ["placed", "approved", "delivered", ] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Tag.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Tag.md new file mode 100644 index 000000000000..b9fe1e0944c4 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/Tag.md @@ -0,0 +1,13 @@ +# Tag + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | | [optional] +**name** | **str** | | [optional] +**full_name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/TypeHolderDefault.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/TypeHolderDefault.md new file mode 100644 index 000000000000..904915aec010 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/TypeHolderDefault.md @@ -0,0 +1,18 @@ +# TypeHolderDefault + +a model to test optional properties with server defaults + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**array_item** | **[int]** | | +**string_item** | **str** | | defaults to "what" +**number_item** | **float** | | defaults to 1.234 +**integer_item** | **int** | | defaults to -2 +**bool_item** | **bool** | | defaults to True +**date_item** | **date** | | [optional] +**datetime_item** | **datetime** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/TypeHolderExample.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/TypeHolderExample.md new file mode 100644 index 000000000000..d2954c64dcef --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/TypeHolderExample.md @@ -0,0 +1,16 @@ +# TypeHolderExample + +a model to test required properties with an example and length one enum + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bool_item** | **bool** | | +**array_item** | **[int]** | | +**string_item** | **str** | | defaults to "what" +**number_item** | **float** | | defaults to 1.234 +**integer_item** | **int** | | defaults to -2 + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/User.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/User.md new file mode 100644 index 000000000000..b0079f591b6e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/User.md @@ -0,0 +1,18 @@ +# User + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | | [optional] +**username** | **str** | | [optional] +**first_name** | **str** | | [optional] +**last_name** | **str** | | [optional] +**email** | **str** | | [optional] +**password** | **str** | | [optional] +**phone** | **str** | | [optional] +**user_status** | **int** | User Status | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/UserApi.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/UserApi.md new file mode 100644 index 000000000000..3c04b81d1967 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/UserApi.md @@ -0,0 +1,562 @@ +# petstore_api.UserApi + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_user**](UserApi.md#create_user) | **POST** /user | Create user +[**create_users_with_array_input**](UserApi.md#create_users_with_array_input) | **POST** /user/createWithArray | Creates list of users with given input array +[**create_users_with_list_input**](UserApi.md#create_users_with_list_input) | **POST** /user/createWithList | Creates list of users with given input array +[**delete_user**](UserApi.md#delete_user) | **DELETE** /user/{username} | Delete user +[**get_user_by_name**](UserApi.md#get_user_by_name) | **GET** /user/{username} | Get user by user name +[**login_user**](UserApi.md#login_user) | **GET** /user/login | Logs user into the system +[**logout_user**](UserApi.md#logout_user) | **GET** /user/logout | Logs out current logged in user session +[**update_user**](UserApi.md#update_user) | **PUT** /user/{username} | Updated user + + +# **create_user** +> create_user(body) + +Create user + +This can only be done by the logged in user. + +### Example + +```python +import time +import petstore_api +from petstore_api.api import user_api +from petstore_api.model.user import User +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + body = User( + id=1, + username="username_example", + first_name="first_name_example", + last_name="last_name_example", + email="email_example", + password="password_example", + phone="phone_example", + user_status=1, + ) # User | Created user object + + # example passing only required values which don't have defaults set + try: + # Create user + api_instance.create_user(body) + except petstore_api.ApiException as e: + print("Exception when calling UserApi->create_user: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**User**](User.md)| Created user object | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**0** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_users_with_array_input** +> create_users_with_array_input(body) + +Creates list of users with given input array + +### Example + +```python +import time +import petstore_api +from petstore_api.api import user_api +from petstore_api.model.user import User +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + body = [ + User( + id=1, + username="username_example", + first_name="first_name_example", + last_name="last_name_example", + email="email_example", + password="password_example", + phone="phone_example", + user_status=1, + ), + ] # [User] | List of user object + + # example passing only required values which don't have defaults set + try: + # Creates list of users with given input array + api_instance.create_users_with_array_input(body) + except petstore_api.ApiException as e: + print("Exception when calling UserApi->create_users_with_array_input: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**[User]**](User.md)| List of user object | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**0** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_users_with_list_input** +> create_users_with_list_input(body) + +Creates list of users with given input array + +### Example + +```python +import time +import petstore_api +from petstore_api.api import user_api +from petstore_api.model.user import User +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + body = [ + User( + id=1, + username="username_example", + first_name="first_name_example", + last_name="last_name_example", + email="email_example", + password="password_example", + phone="phone_example", + user_status=1, + ), + ] # [User] | List of user object + + # example passing only required values which don't have defaults set + try: + # Creates list of users with given input array + api_instance.create_users_with_list_input(body) + except petstore_api.ApiException as e: + print("Exception when calling UserApi->create_users_with_list_input: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**[User]**](User.md)| List of user object | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**0** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_user** +> delete_user(username) + +Delete user + +This can only be done by the logged in user. + +### Example + +```python +import time +import petstore_api +from petstore_api.api import user_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + username = "username_example" # str | The name that needs to be deleted + + # example passing only required values which don't have defaults set + try: + # Delete user + api_instance.delete_user(username) + except petstore_api.ApiException as e: + print("Exception when calling UserApi->delete_user: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **username** | **str**| The name that needs to be deleted | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**400** | Invalid username supplied | - | +**404** | User not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_user_by_name** +> User get_user_by_name(username) + +Get user by user name + +### Example + +```python +import time +import petstore_api +from petstore_api.api import user_api +from petstore_api.model.user import User +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + username = "username_example" # str | The name that needs to be fetched. Use user1 for testing. + + # example passing only required values which don't have defaults set + try: + # Get user by user name + api_response = api_instance.get_user_by_name(username) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling UserApi->get_user_by_name: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **username** | **str**| The name that needs to be fetched. Use user1 for testing. | + +### Return type + +[**User**](User.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | - | +**400** | Invalid username supplied | - | +**404** | User not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **login_user** +> str login_user(username, password) + +Logs user into the system + +### Example + +```python +import time +import petstore_api +from petstore_api.api import user_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + username = "username_example" # str | The user name for login + password = "password_example" # str | The password for login in clear text + + # example passing only required values which don't have defaults set + try: + # Logs user into the system + api_response = api_instance.login_user(username, password) + pprint(api_response) + except petstore_api.ApiException as e: + print("Exception when calling UserApi->login_user: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **username** | **str**| The user name for login | + **password** | **str**| The password for login in clear text | + +### Return type + +**str** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | successful operation | * X-Rate-Limit - calls per hour allowed by the user
* X-Expires-After - date in UTC when token expires
| +**400** | Invalid username/password supplied | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **logout_user** +> logout_user() + +Logs out current logged in user session + +### Example + +```python +import time +import petstore_api +from petstore_api.api import user_api +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Logs out current logged in user session + api_instance.logout_user() + except petstore_api.ApiException as e: + print("Exception when calling UserApi->logout_user: %s\n" % e) +``` + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**0** | successful operation | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_user** +> update_user(username, body) + +Updated user + +This can only be done by the logged in user. + +### Example + +```python +import time +import petstore_api +from petstore_api.api import user_api +from petstore_api.model.user import User +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = user_api.UserApi(api_client) + username = "username_example" # str | name that need to be deleted + body = User( + id=1, + username="username_example", + first_name="first_name_example", + last_name="last_name_example", + email="email_example", + password="password_example", + phone="phone_example", + user_status=1, + ) # User | Updated user object + + # example passing only required values which don't have defaults set + try: + # Updated user + api_instance.update_user(username, body) + except petstore_api.ApiException as e: + print("Exception when calling UserApi->update_user: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **username** | **str**| name that need to be deleted | + **body** | [**User**](User.md)| Updated user object | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**400** | Invalid user supplied | - | +**404** | User not found | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/XmlItem.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/XmlItem.md new file mode 100644 index 000000000000..ea3d7f92804b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/XmlItem.md @@ -0,0 +1,39 @@ +# XmlItem + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**attribute_string** | **str** | | [optional] +**attribute_number** | **float** | | [optional] +**attribute_integer** | **int** | | [optional] +**attribute_boolean** | **bool** | | [optional] +**wrapped_array** | **[int]** | | [optional] +**name_string** | **str** | | [optional] +**name_number** | **float** | | [optional] +**name_integer** | **int** | | [optional] +**name_boolean** | **bool** | | [optional] +**name_array** | **[int]** | | [optional] +**name_wrapped_array** | **[int]** | | [optional] +**prefix_string** | **str** | | [optional] +**prefix_number** | **float** | | [optional] +**prefix_integer** | **int** | | [optional] +**prefix_boolean** | **bool** | | [optional] +**prefix_array** | **[int]** | | [optional] +**prefix_wrapped_array** | **[int]** | | [optional] +**namespace_string** | **str** | | [optional] +**namespace_number** | **float** | | [optional] +**namespace_integer** | **int** | | [optional] +**namespace_boolean** | **bool** | | [optional] +**namespace_array** | **[int]** | | [optional] +**namespace_wrapped_array** | **[int]** | | [optional] +**prefix_ns_string** | **str** | | [optional] +**prefix_ns_number** | **float** | | [optional] +**prefix_ns_integer** | **int** | | [optional] +**prefix_ns_boolean** | **bool** | | [optional] +**prefix_ns_array** | **[int]** | | [optional] +**prefix_ns_wrapped_array** | **[int]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/git_push.sh b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/git_push.sh new file mode 100644 index 000000000000..ced3be2b0c7b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/git_push.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-pestore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=`git remote` +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/__init__.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/__init__.py new file mode 100644 index 000000000000..26dd6f84e215 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/__init__.py @@ -0,0 +1,27 @@ +# flake8: noqa + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +__version__ = "1.0.0" + +# import ApiClient +from petstore_api.api_client import ApiClient + +# import Configuration +from petstore_api.configuration import Configuration + +# import exceptions +from petstore_api.exceptions import OpenApiException +from petstore_api.exceptions import ApiAttributeError +from petstore_api.exceptions import ApiTypeError +from petstore_api.exceptions import ApiValueError +from petstore_api.exceptions import ApiKeyError +from petstore_api.exceptions import ApiException diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/__init__.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/__init__.py new file mode 100644 index 000000000000..840e9f0cd908 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/__init__.py @@ -0,0 +1,3 @@ +# do not import all apis into this module because that uses a lot of memory and stack frames +# if you need the ability to import all apis from one package, import them with +# from petstore_api.apis import AnotherFakeApi diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/another_fake_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/another_fake_api.py new file mode 100644 index 000000000000..9c75f7d5a83e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/another_fake_api.py @@ -0,0 +1,155 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.api_client import ApiClient, Endpoint as _Endpoint +from petstore_api.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types +) +from petstore_api.model.client import Client + + +class AnotherFakeApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __call_123_test_special_tags( + self, + body, + **kwargs + ): + """To test special tags # noqa: E501 + + To test special tags and operation ID starting with number # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.call_123_test_special_tags(body, async_req=True) + >>> result = thread.get() + + Args: + body (Client): client model + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Client + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.call_123_test_special_tags = _Endpoint( + settings={ + 'response_type': (Client,), + 'auth': [], + 'endpoint_path': '/another-fake/dummy', + 'operation_id': 'call_123_test_special_tags', + 'http_method': 'PATCH', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [ + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (Client,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client, + callable=__call_123_test_special_tags + ) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/fake_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/fake_api.py new file mode 100644 index 000000000000..aaf44e6f64c8 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/fake_api.py @@ -0,0 +1,2223 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.api_client import ApiClient, Endpoint as _Endpoint +from petstore_api.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types +) +from petstore_api.model.animal_farm import AnimalFarm +from petstore_api.model.client import Client +from petstore_api.model.file_schema_test_class import FileSchemaTestClass +from petstore_api.model.number_with_validations import NumberWithValidations +from petstore_api.model.object_model_with_ref_props import ObjectModelWithRefProps +from petstore_api.model.string_enum import StringEnum +from petstore_api.model.user import User +from petstore_api.model.xml_item import XmlItem + + +class FakeApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __array_model( + self, + **kwargs + ): + """array_model # noqa: E501 + + Test serialization of ArrayModel # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.array_model(async_req=True) + >>> result = thread.get() + + + Keyword Args: + body (AnimalFarm): Input model. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + AnimalFarm + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + return self.call_with_http_info(**kwargs) + + self.array_model = _Endpoint( + settings={ + 'response_type': (AnimalFarm,), + 'auth': [], + 'endpoint_path': '/fake/refs/arraymodel', + 'operation_id': 'array_model', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (AnimalFarm,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + '*/*' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__array_model + ) + + def __boolean( + self, + **kwargs + ): + """boolean # noqa: E501 + + Test serialization of outer boolean types # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.boolean(async_req=True) + >>> result = thread.get() + + + Keyword Args: + body (bool): Input boolean as post body. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + bool + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + return self.call_with_http_info(**kwargs) + + self.boolean = _Endpoint( + settings={ + 'response_type': (bool,), + 'auth': [], + 'endpoint_path': '/fake/refs/boolean', + 'operation_id': 'boolean', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (bool,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + '*/*' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__boolean + ) + + def __create_xml_item( + self, + xml_item, + **kwargs + ): + """creates an XmlItem # noqa: E501 + + this route creates an XmlItem # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_xml_item(xml_item, async_req=True) + >>> result = thread.get() + + Args: + xml_item (XmlItem): XmlItem Body + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['xml_item'] = \ + xml_item + return self.call_with_http_info(**kwargs) + + self.create_xml_item = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/fake/create_xml_item', + 'operation_id': 'create_xml_item', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'xml_item', + ], + 'required': [ + 'xml_item', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'xml_item': + (XmlItem,), + }, + 'attribute_map': { + }, + 'location_map': { + 'xml_item': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/xml', + 'application/xml; charset=utf-8', + 'application/xml; charset=utf-16', + 'text/xml', + 'text/xml; charset=utf-8', + 'text/xml; charset=utf-16' + ] + }, + api_client=api_client, + callable=__create_xml_item + ) + + def __number_with_validations( + self, + **kwargs + ): + """number_with_validations # noqa: E501 + + Test serialization of outer number types # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.number_with_validations(async_req=True) + >>> result = thread.get() + + + Keyword Args: + body (NumberWithValidations): Input number as post body. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + NumberWithValidations + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + return self.call_with_http_info(**kwargs) + + self.number_with_validations = _Endpoint( + settings={ + 'response_type': (NumberWithValidations,), + 'auth': [], + 'endpoint_path': '/fake/refs/number', + 'operation_id': 'number_with_validations', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (NumberWithValidations,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + '*/*' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__number_with_validations + ) + + def __object_model_with_ref_props( + self, + **kwargs + ): + """object_model_with_ref_props # noqa: E501 + + Test serialization of object with $refed properties # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.object_model_with_ref_props(async_req=True) + >>> result = thread.get() + + + Keyword Args: + body (ObjectModelWithRefProps): Input model. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + ObjectModelWithRefProps + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + return self.call_with_http_info(**kwargs) + + self.object_model_with_ref_props = _Endpoint( + settings={ + 'response_type': (ObjectModelWithRefProps,), + 'auth': [], + 'endpoint_path': '/fake/refs/object_model_with_ref_props', + 'operation_id': 'object_model_with_ref_props', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (ObjectModelWithRefProps,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + '*/*' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__object_model_with_ref_props + ) + + def __string( + self, + **kwargs + ): + """string # noqa: E501 + + Test serialization of outer string types # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.string(async_req=True) + >>> result = thread.get() + + + Keyword Args: + body (str): Input string as post body. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + str + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + return self.call_with_http_info(**kwargs) + + self.string = _Endpoint( + settings={ + 'response_type': (str,), + 'auth': [], + 'endpoint_path': '/fake/refs/string', + 'operation_id': 'string', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (str,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + '*/*' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__string + ) + + def __string_enum( + self, + **kwargs + ): + """string_enum # noqa: E501 + + Test serialization of outer enum # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.string_enum(async_req=True) + >>> result = thread.get() + + + Keyword Args: + body (StringEnum): Input enum. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + StringEnum + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + return self.call_with_http_info(**kwargs) + + self.string_enum = _Endpoint( + settings={ + 'response_type': (StringEnum,), + 'auth': [], + 'endpoint_path': '/fake/refs/enum', + 'operation_id': 'string_enum', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (StringEnum,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + '*/*' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__string_enum + ) + + def __test_body_with_file_schema( + self, + body, + **kwargs + ): + """test_body_with_file_schema # noqa: E501 + + For this test, the body for this request much reference a schema named `File`. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_body_with_file_schema(body, async_req=True) + >>> result = thread.get() + + Args: + body (FileSchemaTestClass): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.test_body_with_file_schema = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/fake/body-with-file-schema', + 'operation_id': 'test_body_with_file_schema', + 'http_method': 'PUT', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [ + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (FileSchemaTestClass,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client, + callable=__test_body_with_file_schema + ) + + def __test_body_with_query_params( + self, + query, + body, + **kwargs + ): + """test_body_with_query_params # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_body_with_query_params(query, body, async_req=True) + >>> result = thread.get() + + Args: + query (str): + body (User): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['query'] = \ + query + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.test_body_with_query_params = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/fake/body-with-query-params', + 'operation_id': 'test_body_with_query_params', + 'http_method': 'PUT', + 'servers': None, + }, + params_map={ + 'all': [ + 'query', + 'body', + ], + 'required': [ + 'query', + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'query': + (str,), + 'body': + (User,), + }, + 'attribute_map': { + 'query': 'query', + }, + 'location_map': { + 'query': 'query', + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client, + callable=__test_body_with_query_params + ) + + def __test_client_model( + self, + body, + **kwargs + ): + """To test \"client\" model # noqa: E501 + + To test \"client\" model # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_client_model(body, async_req=True) + >>> result = thread.get() + + Args: + body (Client): client model + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Client + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.test_client_model = _Endpoint( + settings={ + 'response_type': (Client,), + 'auth': [], + 'endpoint_path': '/fake', + 'operation_id': 'test_client_model', + 'http_method': 'PATCH', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [ + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (Client,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client, + callable=__test_client_model + ) + + def __test_endpoint_enums_length_one( + self, + query_integer=3, + query_string="brillig", + path_string="hello", + path_integer=34, + header_number=1.234, + **kwargs + ): + """test_endpoint_enums_length_one # noqa: E501 + + This route has required values with enums of 1 # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_endpoint_enums_length_one(query_integer=3, query_string="brillig", path_string="hello", path_integer=34, header_number=1.234, async_req=True) + >>> result = thread.get() + + Args: + query_integer (int): defaults to 3, must be one of [3] + query_string (str): defaults to "brillig", must be one of ["brillig"] + path_string (str): defaults to "hello", must be one of ["hello"] + path_integer (int): defaults to 34, must be one of [34] + header_number (float): defaults to 1.234, must be one of [1.234] + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['query_integer'] = \ + query_integer + kwargs['query_string'] = \ + query_string + kwargs['path_string'] = \ + path_string + kwargs['path_integer'] = \ + path_integer + kwargs['header_number'] = \ + header_number + return self.call_with_http_info(**kwargs) + + self.test_endpoint_enums_length_one = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/fake/enums-of-length-one/{path_string}/{path_integer}', + 'operation_id': 'test_endpoint_enums_length_one', + 'http_method': 'PUT', + 'servers': None, + }, + params_map={ + 'all': [ + 'query_integer', + 'query_string', + 'path_string', + 'path_integer', + 'header_number', + ], + 'required': [ + 'query_integer', + 'query_string', + 'path_string', + 'path_integer', + 'header_number', + ], + 'nullable': [ + ], + 'enum': [ + 'query_integer', + 'query_string', + 'path_string', + 'path_integer', + 'header_number', + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + ('query_integer',): { + + "3": 3 + }, + ('query_string',): { + + "BRILLIG": "brillig" + }, + ('path_string',): { + + "HELLO": "hello" + }, + ('path_integer',): { + + "34": 34 + }, + ('header_number',): { + + "1.234": 1.234 + }, + }, + 'openapi_types': { + 'query_integer': + (int,), + 'query_string': + (str,), + 'path_string': + (str,), + 'path_integer': + (int,), + 'header_number': + (float,), + }, + 'attribute_map': { + 'query_integer': 'query_integer', + 'query_string': 'query_string', + 'path_string': 'path_string', + 'path_integer': 'path_integer', + 'header_number': 'header_number', + }, + 'location_map': { + 'query_integer': 'query', + 'query_string': 'query', + 'path_string': 'path', + 'path_integer': 'path', + 'header_number': 'header', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [], + }, + api_client=api_client, + callable=__test_endpoint_enums_length_one + ) + + def __test_endpoint_parameters( + self, + number, + double, + pattern_without_delimiter, + byte, + **kwargs + ): + """Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 # noqa: E501 + + Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_endpoint_parameters(number, double, pattern_without_delimiter, byte, async_req=True) + >>> result = thread.get() + + Args: + number (float): None + double (float): None + pattern_without_delimiter (str): None + byte (str): None + + Keyword Args: + integer (int): None. [optional] + int32 (int): None. [optional] + int64 (int): None. [optional] + float (float): None. [optional] + string (str): None. [optional] + binary (file_type): None. [optional] + date (date): None. [optional] + date_time (datetime): None. [optional] + password (str): None. [optional] + param_callback (str): None. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['number'] = \ + number + kwargs['double'] = \ + double + kwargs['pattern_without_delimiter'] = \ + pattern_without_delimiter + kwargs['byte'] = \ + byte + return self.call_with_http_info(**kwargs) + + self.test_endpoint_parameters = _Endpoint( + settings={ + 'response_type': None, + 'auth': [ + 'http_basic_test' + ], + 'endpoint_path': '/fake', + 'operation_id': 'test_endpoint_parameters', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'number', + 'double', + 'pattern_without_delimiter', + 'byte', + 'integer', + 'int32', + 'int64', + 'float', + 'string', + 'binary', + 'date', + 'date_time', + 'password', + 'param_callback', + ], + 'required': [ + 'number', + 'double', + 'pattern_without_delimiter', + 'byte', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + 'number', + 'double', + 'pattern_without_delimiter', + 'integer', + 'int32', + 'float', + 'string', + 'password', + ] + }, + root_map={ + 'validations': { + ('number',): { + + 'inclusive_maximum': 543.2, + 'inclusive_minimum': 32.1, + }, + ('double',): { + + 'inclusive_maximum': 123.4, + 'inclusive_minimum': 67.8, + }, + ('pattern_without_delimiter',): { + + 'regex': { + 'pattern': r'^[A-Z].*', # noqa: E501 + }, + }, + ('integer',): { + + 'inclusive_maximum': 100, + 'inclusive_minimum': 10, + }, + ('int32',): { + + 'inclusive_maximum': 200, + 'inclusive_minimum': 20, + }, + ('float',): { + + 'inclusive_maximum': 987.6, + }, + ('string',): { + + 'regex': { + 'pattern': r'[a-z]', # noqa: E501 + 'flags': (re.IGNORECASE) + }, + }, + ('password',): { + 'max_length': 64, + 'min_length': 10, + }, + }, + 'allowed_values': { + }, + 'openapi_types': { + 'number': + (float,), + 'double': + (float,), + 'pattern_without_delimiter': + (str,), + 'byte': + (str,), + 'integer': + (int,), + 'int32': + (int,), + 'int64': + (int,), + 'float': + (float,), + 'string': + (str,), + 'binary': + (file_type,), + 'date': + (date,), + 'date_time': + (datetime,), + 'password': + (str,), + 'param_callback': + (str,), + }, + 'attribute_map': { + 'number': 'number', + 'double': 'double', + 'pattern_without_delimiter': 'pattern_without_delimiter', + 'byte': 'byte', + 'integer': 'integer', + 'int32': 'int32', + 'int64': 'int64', + 'float': 'float', + 'string': 'string', + 'binary': 'binary', + 'date': 'date', + 'date_time': 'dateTime', + 'password': 'password', + 'param_callback': 'callback', + }, + 'location_map': { + 'number': 'form', + 'double': 'form', + 'pattern_without_delimiter': 'form', + 'byte': 'form', + 'integer': 'form', + 'int32': 'form', + 'int64': 'form', + 'float': 'form', + 'string': 'form', + 'binary': 'form', + 'date': 'form', + 'date_time': 'form', + 'password': 'form', + 'param_callback': 'form', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/x-www-form-urlencoded' + ] + }, + api_client=api_client, + callable=__test_endpoint_parameters + ) + + def __test_enum_parameters( + self, + **kwargs + ): + """To test enum parameters # noqa: E501 + + To test enum parameters # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_enum_parameters(async_req=True) + >>> result = thread.get() + + + Keyword Args: + enum_header_string_array ([str]): Header parameter enum test (string array). [optional] + enum_header_string (str): Header parameter enum test (string). [optional] if omitted the server will use the default value of "-efg" + enum_query_string_array ([str]): Query parameter enum test (string array). [optional] + enum_query_string (str): Query parameter enum test (string). [optional] if omitted the server will use the default value of "-efg" + enum_query_integer (int): Query parameter enum test (double). [optional] + enum_query_double (float): Query parameter enum test (double). [optional] + enum_form_string_array ([str]): Form parameter enum test (string array). [optional] if omitted the server will use the default value of "$" + enum_form_string (str): Form parameter enum test (string). [optional] if omitted the server will use the default value of "-efg" + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + return self.call_with_http_info(**kwargs) + + self.test_enum_parameters = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/fake', + 'operation_id': 'test_enum_parameters', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'enum_header_string_array', + 'enum_header_string', + 'enum_query_string_array', + 'enum_query_string', + 'enum_query_integer', + 'enum_query_double', + 'enum_form_string_array', + 'enum_form_string', + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + 'enum_header_string_array', + 'enum_header_string', + 'enum_query_string_array', + 'enum_query_string', + 'enum_query_integer', + 'enum_query_double', + 'enum_form_string_array', + 'enum_form_string', + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + ('enum_header_string_array',): { + + ">": ">", + "$": "$" + }, + ('enum_header_string',): { + + "_ABC": "_abc", + "-EFG": "-efg", + "(XYZ)": "(xyz)" + }, + ('enum_query_string_array',): { + + ">": ">", + "$": "$" + }, + ('enum_query_string',): { + + "_ABC": "_abc", + "-EFG": "-efg", + "(XYZ)": "(xyz)" + }, + ('enum_query_integer',): { + + "1": 1, + "-2": -2 + }, + ('enum_query_double',): { + + "1.1": 1.1, + "-1.2": -1.2 + }, + ('enum_form_string_array',): { + + ">": ">", + "$": "$" + }, + ('enum_form_string',): { + + "_ABC": "_abc", + "-EFG": "-efg", + "(XYZ)": "(xyz)" + }, + }, + 'openapi_types': { + 'enum_header_string_array': + ([str],), + 'enum_header_string': + (str,), + 'enum_query_string_array': + ([str],), + 'enum_query_string': + (str,), + 'enum_query_integer': + (int,), + 'enum_query_double': + (float,), + 'enum_form_string_array': + ([str],), + 'enum_form_string': + (str,), + }, + 'attribute_map': { + 'enum_header_string_array': 'enum_header_string_array', + 'enum_header_string': 'enum_header_string', + 'enum_query_string_array': 'enum_query_string_array', + 'enum_query_string': 'enum_query_string', + 'enum_query_integer': 'enum_query_integer', + 'enum_query_double': 'enum_query_double', + 'enum_form_string_array': 'enum_form_string_array', + 'enum_form_string': 'enum_form_string', + }, + 'location_map': { + 'enum_header_string_array': 'header', + 'enum_header_string': 'header', + 'enum_query_string_array': 'query', + 'enum_query_string': 'query', + 'enum_query_integer': 'query', + 'enum_query_double': 'query', + 'enum_form_string_array': 'form', + 'enum_form_string': 'form', + }, + 'collection_format_map': { + 'enum_header_string_array': 'csv', + 'enum_query_string_array': 'csv', + 'enum_form_string_array': 'csv', + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/x-www-form-urlencoded' + ] + }, + api_client=api_client, + callable=__test_enum_parameters + ) + + def __test_group_parameters( + self, + required_string_group, + required_boolean_group, + required_int64_group, + **kwargs + ): + """Fake endpoint to test group parameters (optional) # noqa: E501 + + Fake endpoint to test group parameters (optional) # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_group_parameters(required_string_group, required_boolean_group, required_int64_group, async_req=True) + >>> result = thread.get() + + Args: + required_string_group (int): Required String in group parameters + required_boolean_group (bool): Required Boolean in group parameters + required_int64_group (int): Required Integer in group parameters + + Keyword Args: + string_group (int): String in group parameters. [optional] + boolean_group (bool): Boolean in group parameters. [optional] + int64_group (int): Integer in group parameters. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['required_string_group'] = \ + required_string_group + kwargs['required_boolean_group'] = \ + required_boolean_group + kwargs['required_int64_group'] = \ + required_int64_group + return self.call_with_http_info(**kwargs) + + self.test_group_parameters = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/fake', + 'operation_id': 'test_group_parameters', + 'http_method': 'DELETE', + 'servers': None, + }, + params_map={ + 'all': [ + 'required_string_group', + 'required_boolean_group', + 'required_int64_group', + 'string_group', + 'boolean_group', + 'int64_group', + ], + 'required': [ + 'required_string_group', + 'required_boolean_group', + 'required_int64_group', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'required_string_group': + (int,), + 'required_boolean_group': + (bool,), + 'required_int64_group': + (int,), + 'string_group': + (int,), + 'boolean_group': + (bool,), + 'int64_group': + (int,), + }, + 'attribute_map': { + 'required_string_group': 'required_string_group', + 'required_boolean_group': 'required_boolean_group', + 'required_int64_group': 'required_int64_group', + 'string_group': 'string_group', + 'boolean_group': 'boolean_group', + 'int64_group': 'int64_group', + }, + 'location_map': { + 'required_string_group': 'query', + 'required_boolean_group': 'header', + 'required_int64_group': 'query', + 'string_group': 'query', + 'boolean_group': 'header', + 'int64_group': 'query', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [], + }, + api_client=api_client, + callable=__test_group_parameters + ) + + def __test_inline_additional_properties( + self, + param, + **kwargs + ): + """test inline additionalProperties # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_inline_additional_properties(param, async_req=True) + >>> result = thread.get() + + Args: + param ({str: (str,)}): request body + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['param'] = \ + param + return self.call_with_http_info(**kwargs) + + self.test_inline_additional_properties = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/fake/inline-additionalProperties', + 'operation_id': 'test_inline_additional_properties', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'param', + ], + 'required': [ + 'param', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'param': + ({str: (str,)},), + }, + 'attribute_map': { + }, + 'location_map': { + 'param': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client, + callable=__test_inline_additional_properties + ) + + def __test_json_form_data( + self, + param, + param2, + **kwargs + ): + """test json serialization of form data # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_json_form_data(param, param2, async_req=True) + >>> result = thread.get() + + Args: + param (str): field1 + param2 (str): field2 + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['param'] = \ + param + kwargs['param2'] = \ + param2 + return self.call_with_http_info(**kwargs) + + self.test_json_form_data = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/fake/jsonFormData', + 'operation_id': 'test_json_form_data', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'param', + 'param2', + ], + 'required': [ + 'param', + 'param2', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'param': + (str,), + 'param2': + (str,), + }, + 'attribute_map': { + 'param': 'param', + 'param2': 'param2', + }, + 'location_map': { + 'param': 'form', + 'param2': 'form', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/x-www-form-urlencoded' + ] + }, + api_client=api_client, + callable=__test_json_form_data + ) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/fake_classname_tags_123_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/fake_classname_tags_123_api.py new file mode 100644 index 000000000000..1d1afc214c14 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/fake_classname_tags_123_api.py @@ -0,0 +1,157 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.api_client import ApiClient, Endpoint as _Endpoint +from petstore_api.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types +) +from petstore_api.model.client import Client + + +class FakeClassnameTags123Api(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __test_classname( + self, + body, + **kwargs + ): + """To test class name in snake case # noqa: E501 + + To test class name in snake case # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_classname(body, async_req=True) + >>> result = thread.get() + + Args: + body (Client): client model + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Client + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.test_classname = _Endpoint( + settings={ + 'response_type': (Client,), + 'auth': [ + 'api_key_query' + ], + 'endpoint_path': '/fake_classname_test', + 'operation_id': 'test_classname', + 'http_method': 'PATCH', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [ + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (Client,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client, + callable=__test_classname + ) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/pet_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/pet_api.py new file mode 100644 index 000000000000..2989ca8d4ab7 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/pet_api.py @@ -0,0 +1,1170 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.api_client import ApiClient, Endpoint as _Endpoint +from petstore_api.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types +) +from petstore_api.model.api_response import ApiResponse +from petstore_api.model.pet import Pet + + +class PetApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __add_pet( + self, + body, + **kwargs + ): + """Add a new pet to the store # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.add_pet(body, async_req=True) + >>> result = thread.get() + + Args: + body (Pet): Pet object that needs to be added to the store + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.add_pet = _Endpoint( + settings={ + 'response_type': None, + 'auth': [ + 'petstore_auth' + ], + 'endpoint_path': '/pet', + 'operation_id': 'add_pet', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [ + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (Pet,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/json', + 'application/xml' + ] + }, + api_client=api_client, + callable=__add_pet + ) + + def __delete_pet( + self, + pet_id, + **kwargs + ): + """Deletes a pet # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_pet(pet_id, async_req=True) + >>> result = thread.get() + + Args: + pet_id (int): Pet id to delete + + Keyword Args: + api_key (str): [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['pet_id'] = \ + pet_id + return self.call_with_http_info(**kwargs) + + self.delete_pet = _Endpoint( + settings={ + 'response_type': None, + 'auth': [ + 'petstore_auth' + ], + 'endpoint_path': '/pet/{petId}', + 'operation_id': 'delete_pet', + 'http_method': 'DELETE', + 'servers': None, + }, + params_map={ + 'all': [ + 'pet_id', + 'api_key', + ], + 'required': [ + 'pet_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'pet_id': + (int,), + 'api_key': + (str,), + }, + 'attribute_map': { + 'pet_id': 'petId', + 'api_key': 'api_key', + }, + 'location_map': { + 'pet_id': 'path', + 'api_key': 'header', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [], + }, + api_client=api_client, + callable=__delete_pet + ) + + def __find_pets_by_status( + self, + status, + **kwargs + ): + """Finds Pets by status # noqa: E501 + + Multiple status values can be provided with comma separated strings # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.find_pets_by_status(status, async_req=True) + >>> result = thread.get() + + Args: + status ([str]): Status values that need to be considered for filter + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + [Pet] + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['status'] = \ + status + return self.call_with_http_info(**kwargs) + + self.find_pets_by_status = _Endpoint( + settings={ + 'response_type': ([Pet],), + 'auth': [ + 'petstore_auth' + ], + 'endpoint_path': '/pet/findByStatus', + 'operation_id': 'find_pets_by_status', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'status', + ], + 'required': [ + 'status', + ], + 'nullable': [ + ], + 'enum': [ + 'status', + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + ('status',): { + + "AVAILABLE": "available", + "PENDING": "pending", + "SOLD": "sold" + }, + }, + 'openapi_types': { + 'status': + ([str],), + }, + 'attribute_map': { + 'status': 'status', + }, + 'location_map': { + 'status': 'query', + }, + 'collection_format_map': { + 'status': 'csv', + } + }, + headers_map={ + 'accept': [ + 'application/xml', + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__find_pets_by_status + ) + + def __find_pets_by_tags( + self, + tags, + **kwargs + ): + """Finds Pets by tags # noqa: E501 + + Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.find_pets_by_tags(tags, async_req=True) + >>> result = thread.get() + + Args: + tags ([str]): Tags to filter by + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + [Pet] + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['tags'] = \ + tags + return self.call_with_http_info(**kwargs) + + self.find_pets_by_tags = _Endpoint( + settings={ + 'response_type': ([Pet],), + 'auth': [ + 'petstore_auth' + ], + 'endpoint_path': '/pet/findByTags', + 'operation_id': 'find_pets_by_tags', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'tags', + ], + 'required': [ + 'tags', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'tags': + ([str],), + }, + 'attribute_map': { + 'tags': 'tags', + }, + 'location_map': { + 'tags': 'query', + }, + 'collection_format_map': { + 'tags': 'csv', + } + }, + headers_map={ + 'accept': [ + 'application/xml', + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__find_pets_by_tags + ) + + def __get_pet_by_id( + self, + pet_id, + **kwargs + ): + """Find pet by ID # noqa: E501 + + Returns a single pet # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_pet_by_id(pet_id, async_req=True) + >>> result = thread.get() + + Args: + pet_id (int): ID of pet to return + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Pet + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['pet_id'] = \ + pet_id + return self.call_with_http_info(**kwargs) + + self.get_pet_by_id = _Endpoint( + settings={ + 'response_type': (Pet,), + 'auth': [ + 'api_key' + ], + 'endpoint_path': '/pet/{petId}', + 'operation_id': 'get_pet_by_id', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'pet_id', + ], + 'required': [ + 'pet_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'pet_id': + (int,), + }, + 'attribute_map': { + 'pet_id': 'petId', + }, + 'location_map': { + 'pet_id': 'path', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/xml', + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__get_pet_by_id + ) + + def __update_pet( + self, + body, + **kwargs + ): + """Update an existing pet # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_pet(body, async_req=True) + >>> result = thread.get() + + Args: + body (Pet): Pet object that needs to be added to the store + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.update_pet = _Endpoint( + settings={ + 'response_type': None, + 'auth': [ + 'petstore_auth' + ], + 'endpoint_path': '/pet', + 'operation_id': 'update_pet', + 'http_method': 'PUT', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [ + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (Pet,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/json', + 'application/xml' + ] + }, + api_client=api_client, + callable=__update_pet + ) + + def __update_pet_with_form( + self, + pet_id, + **kwargs + ): + """Updates a pet in the store with form data # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_pet_with_form(pet_id, async_req=True) + >>> result = thread.get() + + Args: + pet_id (int): ID of pet that needs to be updated + + Keyword Args: + name (str): Updated name of the pet. [optional] + status (str): Updated status of the pet. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['pet_id'] = \ + pet_id + return self.call_with_http_info(**kwargs) + + self.update_pet_with_form = _Endpoint( + settings={ + 'response_type': None, + 'auth': [ + 'petstore_auth' + ], + 'endpoint_path': '/pet/{petId}', + 'operation_id': 'update_pet_with_form', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'pet_id', + 'name', + 'status', + ], + 'required': [ + 'pet_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'pet_id': + (int,), + 'name': + (str,), + 'status': + (str,), + }, + 'attribute_map': { + 'pet_id': 'petId', + 'name': 'name', + 'status': 'status', + }, + 'location_map': { + 'pet_id': 'path', + 'name': 'form', + 'status': 'form', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/x-www-form-urlencoded' + ] + }, + api_client=api_client, + callable=__update_pet_with_form + ) + + def __upload_file( + self, + pet_id, + **kwargs + ): + """uploads an image # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.upload_file(pet_id, async_req=True) + >>> result = thread.get() + + Args: + pet_id (int): ID of pet to update + + Keyword Args: + additional_metadata (str): Additional data to pass to server. [optional] + file (file_type): file to upload. [optional] + files ([file_type]): files to upload. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + ApiResponse + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['pet_id'] = \ + pet_id + return self.call_with_http_info(**kwargs) + + self.upload_file = _Endpoint( + settings={ + 'response_type': (ApiResponse,), + 'auth': [ + 'petstore_auth' + ], + 'endpoint_path': '/pet/{petId}/uploadImage', + 'operation_id': 'upload_file', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'pet_id', + 'additional_metadata', + 'file', + 'files', + ], + 'required': [ + 'pet_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'pet_id': + (int,), + 'additional_metadata': + (str,), + 'file': + (file_type,), + 'files': + ([file_type],), + }, + 'attribute_map': { + 'pet_id': 'petId', + 'additional_metadata': 'additionalMetadata', + 'file': 'file', + 'files': 'files', + }, + 'location_map': { + 'pet_id': 'path', + 'additional_metadata': 'form', + 'file': 'form', + 'files': 'form', + }, + 'collection_format_map': { + 'files': 'csv', + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'multipart/form-data' + ] + }, + api_client=api_client, + callable=__upload_file + ) + + def __upload_file_with_required_file( + self, + pet_id, + required_file, + **kwargs + ): + """uploads an image (required) # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.upload_file_with_required_file(pet_id, required_file, async_req=True) + >>> result = thread.get() + + Args: + pet_id (int): ID of pet to update + required_file (file_type): file to upload + + Keyword Args: + additional_metadata (str): Additional data to pass to server. [optional] + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + ApiResponse + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['pet_id'] = \ + pet_id + kwargs['required_file'] = \ + required_file + return self.call_with_http_info(**kwargs) + + self.upload_file_with_required_file = _Endpoint( + settings={ + 'response_type': (ApiResponse,), + 'auth': [ + 'petstore_auth' + ], + 'endpoint_path': '/fake/{petId}/uploadImageWithRequiredFile', + 'operation_id': 'upload_file_with_required_file', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'pet_id', + 'required_file', + 'additional_metadata', + ], + 'required': [ + 'pet_id', + 'required_file', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'pet_id': + (int,), + 'required_file': + (file_type,), + 'additional_metadata': + (str,), + }, + 'attribute_map': { + 'pet_id': 'petId', + 'required_file': 'requiredFile', + 'additional_metadata': 'additionalMetadata', + }, + 'location_map': { + 'pet_id': 'path', + 'required_file': 'form', + 'additional_metadata': 'form', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'multipart/form-data' + ] + }, + api_client=api_client, + callable=__upload_file_with_required_file + ) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/store_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/store_api.py new file mode 100644 index 000000000000..c30ca943b2dc --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/store_api.py @@ -0,0 +1,499 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.api_client import ApiClient, Endpoint as _Endpoint +from petstore_api.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types +) +from petstore_api.model.order import Order + + +class StoreApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __delete_order( + self, + order_id, + **kwargs + ): + """Delete purchase order by ID # noqa: E501 + + For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_order(order_id, async_req=True) + >>> result = thread.get() + + Args: + order_id (str): ID of the order that needs to be deleted + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['order_id'] = \ + order_id + return self.call_with_http_info(**kwargs) + + self.delete_order = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/store/order/{order_id}', + 'operation_id': 'delete_order', + 'http_method': 'DELETE', + 'servers': None, + }, + params_map={ + 'all': [ + 'order_id', + ], + 'required': [ + 'order_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'order_id': + (str,), + }, + 'attribute_map': { + 'order_id': 'order_id', + }, + 'location_map': { + 'order_id': 'path', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [], + }, + api_client=api_client, + callable=__delete_order + ) + + def __get_inventory( + self, + **kwargs + ): + """Returns pet inventories by status # noqa: E501 + + Returns a map of status codes to quantities # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_inventory(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + {str: (int,)} + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + return self.call_with_http_info(**kwargs) + + self.get_inventory = _Endpoint( + settings={ + 'response_type': ({str: (int,)},), + 'auth': [ + 'api_key' + ], + 'endpoint_path': '/store/inventory', + 'operation_id': 'get_inventory', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + }, + 'attribute_map': { + }, + 'location_map': { + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__get_inventory + ) + + def __get_order_by_id( + self, + order_id, + **kwargs + ): + """Find purchase order by ID # noqa: E501 + + For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_order_by_id(order_id, async_req=True) + >>> result = thread.get() + + Args: + order_id (int): ID of pet that needs to be fetched + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Order + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['order_id'] = \ + order_id + return self.call_with_http_info(**kwargs) + + self.get_order_by_id = _Endpoint( + settings={ + 'response_type': (Order,), + 'auth': [], + 'endpoint_path': '/store/order/{order_id}', + 'operation_id': 'get_order_by_id', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'order_id', + ], + 'required': [ + 'order_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + 'order_id', + ] + }, + root_map={ + 'validations': { + ('order_id',): { + + 'inclusive_maximum': 5, + 'inclusive_minimum': 1, + }, + }, + 'allowed_values': { + }, + 'openapi_types': { + 'order_id': + (int,), + }, + 'attribute_map': { + 'order_id': 'order_id', + }, + 'location_map': { + 'order_id': 'path', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/xml', + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__get_order_by_id + ) + + def __place_order( + self, + body, + **kwargs + ): + """Place an order for a pet # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.place_order(body, async_req=True) + >>> result = thread.get() + + Args: + body (Order): order placed for purchasing the pet + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Order + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.place_order = _Endpoint( + settings={ + 'response_type': (Order,), + 'auth': [], + 'endpoint_path': '/store/order', + 'operation_id': 'place_order', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [ + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (Order,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/xml', + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__place_order + ) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/user_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/user_api.py new file mode 100644 index 000000000000..a5ef0d5c3092 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api/user_api.py @@ -0,0 +1,962 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.api_client import ApiClient, Endpoint as _Endpoint +from petstore_api.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types +) +from petstore_api.model.user import User + + +class UserApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def __create_user( + self, + body, + **kwargs + ): + """Create user # noqa: E501 + + This can only be done by the logged in user. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_user(body, async_req=True) + >>> result = thread.get() + + Args: + body (User): Created user object + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.create_user = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/user', + 'operation_id': 'create_user', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [ + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + (User,), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [], + }, + api_client=api_client, + callable=__create_user + ) + + def __create_users_with_array_input( + self, + body, + **kwargs + ): + """Creates list of users with given input array # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_users_with_array_input(body, async_req=True) + >>> result = thread.get() + + Args: + body ([User]): List of user object + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.create_users_with_array_input = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/user/createWithArray', + 'operation_id': 'create_users_with_array_input', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [ + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + ([User],), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [], + }, + api_client=api_client, + callable=__create_users_with_array_input + ) + + def __create_users_with_list_input( + self, + body, + **kwargs + ): + """Creates list of users with given input array # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_users_with_list_input(body, async_req=True) + >>> result = thread.get() + + Args: + body ([User]): List of user object + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.create_users_with_list_input = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/user/createWithList', + 'operation_id': 'create_users_with_list_input', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'body', + ], + 'required': [ + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'body': + ([User],), + }, + 'attribute_map': { + }, + 'location_map': { + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [], + }, + api_client=api_client, + callable=__create_users_with_list_input + ) + + def __delete_user( + self, + username, + **kwargs + ): + """Delete user # noqa: E501 + + This can only be done by the logged in user. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_user(username, async_req=True) + >>> result = thread.get() + + Args: + username (str): The name that needs to be deleted + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['username'] = \ + username + return self.call_with_http_info(**kwargs) + + self.delete_user = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/user/{username}', + 'operation_id': 'delete_user', + 'http_method': 'DELETE', + 'servers': None, + }, + params_map={ + 'all': [ + 'username', + ], + 'required': [ + 'username', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'username': + (str,), + }, + 'attribute_map': { + 'username': 'username', + }, + 'location_map': { + 'username': 'path', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [], + }, + api_client=api_client, + callable=__delete_user + ) + + def __get_user_by_name( + self, + username, + **kwargs + ): + """Get user by user name # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_user_by_name(username, async_req=True) + >>> result = thread.get() + + Args: + username (str): The name that needs to be fetched. Use user1 for testing. + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + User + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['username'] = \ + username + return self.call_with_http_info(**kwargs) + + self.get_user_by_name = _Endpoint( + settings={ + 'response_type': (User,), + 'auth': [], + 'endpoint_path': '/user/{username}', + 'operation_id': 'get_user_by_name', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'username', + ], + 'required': [ + 'username', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'username': + (str,), + }, + 'attribute_map': { + 'username': 'username', + }, + 'location_map': { + 'username': 'path', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/xml', + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__get_user_by_name + ) + + def __login_user( + self, + username, + password, + **kwargs + ): + """Logs user into the system # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.login_user(username, password, async_req=True) + >>> result = thread.get() + + Args: + username (str): The user name for login + password (str): The password for login in clear text + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + str + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['username'] = \ + username + kwargs['password'] = \ + password + return self.call_with_http_info(**kwargs) + + self.login_user = _Endpoint( + settings={ + 'response_type': (str,), + 'auth': [], + 'endpoint_path': '/user/login', + 'operation_id': 'login_user', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'username', + 'password', + ], + 'required': [ + 'username', + 'password', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'username': + (str,), + 'password': + (str,), + }, + 'attribute_map': { + 'username': 'username', + 'password': 'password', + }, + 'location_map': { + 'username': 'query', + 'password': 'query', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/xml', + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client, + callable=__login_user + ) + + def __logout_user( + self, + **kwargs + ): + """Logs out current logged in user session # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.logout_user(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + return self.call_with_http_info(**kwargs) + + self.logout_user = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/user/logout', + 'operation_id': 'logout_user', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + }, + 'attribute_map': { + }, + 'location_map': { + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [], + }, + api_client=api_client, + callable=__logout_user + ) + + def __update_user( + self, + username, + body, + **kwargs + ): + """Updated user # noqa: E501 + + This can only be done by the logged in user. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user(username, body, async_req=True) + >>> result = thread.get() + + Args: + username (str): name that need to be deleted + body (User): Updated user object + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (float/tuple): timeout setting for this request. If one + number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['username'] = \ + username + kwargs['body'] = \ + body + return self.call_with_http_info(**kwargs) + + self.update_user = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/user/{username}', + 'operation_id': 'update_user', + 'http_method': 'PUT', + 'servers': None, + }, + params_map={ + 'all': [ + 'username', + 'body', + ], + 'required': [ + 'username', + 'body', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'username': + (str,), + 'body': + (User,), + }, + 'attribute_map': { + 'username': 'username', + }, + 'location_map': { + 'username': 'path', + 'body': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [], + }, + api_client=api_client, + callable=__update_user + ) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api_client.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api_client.py new file mode 100644 index 000000000000..a43e4ace2427 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/api_client.py @@ -0,0 +1,849 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import json +import atexit +import mimetypes +from multiprocessing.pool import ThreadPool +import io +import os +import re +import typing +from urllib.parse import quote +from urllib3.fields import RequestField + + +from petstore_api import rest +from petstore_api.configuration import Configuration +from petstore_api.exceptions import ApiTypeError, ApiValueError, ApiException +from petstore_api.model_utils import ( + ModelNormal, + ModelSimple, + ModelComposed, + check_allowed_values, + check_validations, + date, + datetime, + deserialize_file, + file_type, + model_to_dict, + none_type, + validate_and_convert_types +) + + +class ApiClient(object): + """Generic API client for OpenAPI client library builds. + + OpenAPI generic API client. This client handles the client- + server communication, and is invariant across implementations. Specifics of + the methods and models for each application are generated from the OpenAPI + templates. + + NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + Do not edit the class manually. + + :param configuration: .Configuration object for this client + :param header_name: a header to pass when making calls to the API. + :param header_value: a header value to pass when making calls to + the API. + :param cookie: a cookie to include in the header when making calls + to the API + :param pool_threads: The number of threads to use for async requests + to the API. More threads means more concurrent API requests. + """ + + _pool = None + + def __init__(self, configuration=None, header_name=None, header_value=None, + cookie=None, pool_threads=1): + if configuration is None: + configuration = Configuration.get_default_copy() + self.configuration = configuration + self.pool_threads = pool_threads + + self.rest_client = rest.RESTClientObject(configuration) + self.default_headers = {} + if header_name is not None: + self.default_headers[header_name] = header_value + self.cookie = cookie + # Set default User-Agent. + self.user_agent = 'OpenAPI-Generator/1.0.0/python' + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + def close(self): + if self._pool: + self._pool.close() + self._pool.join() + self._pool = None + if hasattr(atexit, 'unregister'): + atexit.unregister(self.close) + + @property + def pool(self): + """Create thread pool on first request + avoids instantiating unused threadpool for blocking clients. + """ + if self._pool is None: + atexit.register(self.close) + self._pool = ThreadPool(self.pool_threads) + return self._pool + + @property + def user_agent(self): + """User agent for this API client""" + return self.default_headers['User-Agent'] + + @user_agent.setter + def user_agent(self, value): + self.default_headers['User-Agent'] = value + + def set_default_header(self, header_name, header_value): + self.default_headers[header_name] = header_value + + def __call_api( + self, + resource_path: str, + method: str, + path_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + query_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + header_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + body: typing.Optional[typing.Any] = None, + post_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None, + response_type: typing.Optional[typing.Tuple[typing.Any]] = None, + auth_settings: typing.Optional[typing.List[str]] = None, + _return_http_data_only: typing.Optional[bool] = None, + collection_formats: typing.Optional[typing.Dict[str, str]] = None, + _preload_content: bool = True, + _request_timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + _host: typing.Optional[str] = None, + _check_type: typing.Optional[bool] = None + ): + + config = self.configuration + + # header parameters + header_params = header_params or {} + header_params.update(self.default_headers) + if self.cookie: + header_params['Cookie'] = self.cookie + if header_params: + header_params = self.sanitize_for_serialization(header_params) + header_params = dict(self.parameters_to_tuples(header_params, + collection_formats)) + + # path parameters + if path_params: + path_params = self.sanitize_for_serialization(path_params) + path_params = self.parameters_to_tuples(path_params, + collection_formats) + for k, v in path_params: + # specified safe chars, encode everything + resource_path = resource_path.replace( + '{%s}' % k, + quote(str(v), safe=config.safe_chars_for_path_param) + ) + + # query parameters + if query_params: + query_params = self.sanitize_for_serialization(query_params) + query_params = self.parameters_to_tuples(query_params, + collection_formats) + + # post parameters + if post_params or files: + post_params = post_params if post_params else [] + post_params = self.sanitize_for_serialization(post_params) + post_params = self.parameters_to_tuples(post_params, + collection_formats) + post_params.extend(self.files_parameters(files)) + if header_params['Content-Type'].startswith("multipart"): + post_params = self.parameters_to_multipart(post_params, + (dict) ) + + # body + if body: + body = self.sanitize_for_serialization(body) + + # auth setting + self.update_params_for_auth(header_params, query_params, + auth_settings, resource_path, method, body) + + # request url + if _host is None: + url = self.configuration.host + resource_path + else: + # use server/host defined in path or operation instead + url = _host + resource_path + + try: + # perform request and return response + response_data = self.request( + method, url, query_params=query_params, headers=header_params, + post_params=post_params, body=body, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + except ApiException as e: + e.body = e.body.decode('utf-8') + raise e + + self.last_response = response_data + + return_data = response_data + + if not _preload_content: + return (return_data) + return return_data + + # deserialize response data + if response_type: + if response_type != (file_type,): + encoding = "utf-8" + content_type = response_data.getheader('content-type') + if content_type is not None: + match = re.search(r"charset=([a-zA-Z\-\d]+)[\s\;]?", content_type) + if match: + encoding = match.group(1) + response_data.data = response_data.data.decode(encoding) + + return_data = self.deserialize( + response_data, + response_type, + _check_type + ) + else: + return_data = None + + if _return_http_data_only: + return (return_data) + else: + return (return_data, response_data.status, + response_data.getheaders()) + + def parameters_to_multipart(self, params, collection_types): + """Get parameters as list of tuples, formatting as json if value is collection_types + + :param params: Parameters as list of two-tuples + :param dict collection_types: Parameter collection types + :return: Parameters as list of tuple or urllib3.fields.RequestField + """ + new_params = [] + if collection_types is None: + collection_types = (dict) + for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501 + if isinstance(v, collection_types): # v is instance of collection_type, formatting as application/json + v = json.dumps(v, ensure_ascii=False).encode("utf-8") + field = RequestField(k, v) + field.make_multipart(content_type="application/json; charset=utf-8") + new_params.append(field) + else: + new_params.append((k, v)) + return new_params + + @classmethod + def sanitize_for_serialization(cls, obj): + """Prepares data for transmission before it is sent with the rest client + If obj is None, return None. + If obj is str, int, long, float, bool, return directly. + If obj is datetime.datetime, datetime.date + convert to string in iso8601 format. + If obj is list, sanitize each element in the list. + If obj is dict, return the dict. + If obj is OpenAPI model, return the properties dict. + If obj is io.IOBase, return the bytes + :param obj: The data to serialize. + :return: The serialized form of data. + """ + if isinstance(obj, (ModelNormal, ModelComposed)): + return { + key: cls.sanitize_for_serialization(val) for key, val in model_to_dict(obj, serialize=True).items() + } + elif isinstance(obj, io.IOBase): + return cls.get_file_data_and_close_file(obj) + elif isinstance(obj, (str, int, float, none_type, bool)): + return obj + elif isinstance(obj, (datetime, date)): + return obj.isoformat() + elif isinstance(obj, ModelSimple): + return cls.sanitize_for_serialization(obj.value) + elif isinstance(obj, (list, tuple)): + return [cls.sanitize_for_serialization(item) for item in obj] + if isinstance(obj, dict): + return {key: cls.sanitize_for_serialization(val) for key, val in obj.items()} + raise ApiValueError('Unable to prepare type {} for serialization'.format(obj.__class__.__name__)) + + def deserialize(self, response, response_type, _check_type): + """Deserializes response into an object. + + :param response: RESTResponse object to be deserialized. + :param response_type: For the response, a tuple containing: + valid classes + a list containing valid classes (for list schemas) + a dict containing a tuple of valid classes as the value + Example values: + (str,) + (Pet,) + (float, none_type) + ([int, none_type],) + ({str: (bool, str, int, float, date, datetime, str, none_type)},) + :param _check_type: boolean, whether to check the types of the data + received from the server + :type _check_type: bool + + :return: deserialized object. + """ + # handle file downloading + # save response body into a tmp file and return the instance + if response_type == (file_type,): + content_disposition = response.getheader("Content-Disposition") + return deserialize_file(response.data, self.configuration, + content_disposition=content_disposition) + + # fetch data from response object + try: + received_data = json.loads(response.data) + except ValueError: + received_data = response.data + + # store our data under the key of 'received_data' so users have some + # context if they are deserializing a string and the data type is wrong + deserialized_data = validate_and_convert_types( + received_data, + response_type, + ['received_data'], + True, + _check_type, + configuration=self.configuration + ) + return deserialized_data + + def call_api( + self, + resource_path: str, + method: str, + path_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + query_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + header_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + body: typing.Optional[typing.Any] = None, + post_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None, + response_type: typing.Optional[typing.Tuple[typing.Any]] = None, + auth_settings: typing.Optional[typing.List[str]] = None, + async_req: typing.Optional[bool] = None, + _return_http_data_only: typing.Optional[bool] = None, + collection_formats: typing.Optional[typing.Dict[str, str]] = None, + _preload_content: bool = True, + _request_timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + _host: typing.Optional[str] = None, + _check_type: typing.Optional[bool] = None + ): + """Makes the HTTP request (synchronous) and returns deserialized data. + + To make an async_req request, set the async_req parameter. + + :param resource_path: Path to method endpoint. + :param method: Method to call. + :param path_params: Path parameters in the url. + :param query_params: Query parameters in the url. + :param header_params: Header parameters to be + placed in the request header. + :param body: Request body. + :param post_params dict: Request post form parameters, + for `application/x-www-form-urlencoded`, `multipart/form-data`. + :param auth_settings list: Auth Settings names for the request. + :param response_type: For the response, a tuple containing: + valid classes + a list containing valid classes (for list schemas) + a dict containing a tuple of valid classes as the value + Example values: + (str,) + (Pet,) + (float, none_type) + ([int, none_type],) + ({str: (bool, str, int, float, date, datetime, str, none_type)},) + :param files: key -> field name, value -> a list of open file + objects for `multipart/form-data`. + :type files: dict + :param async_req bool: execute request asynchronously + :type async_req: bool, optional + :param _return_http_data_only: response data without head status code + and headers + :type _return_http_data_only: bool, optional + :param collection_formats: dict of collection formats for path, query, + header, and post parameters. + :type collection_formats: dict, optional + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :type _preload_content: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _check_type: boolean describing if the data back from the server + should have its type checked. + :type _check_type: bool, optional + :return: + If async_req parameter is True, + the request will be called asynchronously. + The method will return the request thread. + If parameter async_req is False or missing, + then the method will return the response directly. + """ + if not async_req: + return self.__call_api(resource_path, method, + path_params, query_params, header_params, + body, post_params, files, + response_type, auth_settings, + _return_http_data_only, collection_formats, + _preload_content, _request_timeout, _host, + _check_type) + + return self.pool.apply_async(self.__call_api, (resource_path, + method, path_params, + query_params, + header_params, body, + post_params, files, + response_type, + auth_settings, + _return_http_data_only, + collection_formats, + _preload_content, + _request_timeout, + _host, _check_type)) + + def request(self, method, url, query_params=None, headers=None, + post_params=None, body=None, _preload_content=True, + _request_timeout=None): + """Makes the HTTP request using RESTClient.""" + if method == "GET": + return self.rest_client.GET(url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "HEAD": + return self.rest_client.HEAD(url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "OPTIONS": + return self.rest_client.OPTIONS(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "POST": + return self.rest_client.POST(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PUT": + return self.rest_client.PUT(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PATCH": + return self.rest_client.PATCH(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "DELETE": + return self.rest_client.DELETE(url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + else: + raise ApiValueError( + "http method must be `GET`, `HEAD`, `OPTIONS`," + " `POST`, `PATCH`, `PUT` or `DELETE`." + ) + + def parameters_to_tuples(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: Parameters as list of tuples, collections formatted + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501 + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, value) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(str(value) for value in v))) + else: + new_params.append((k, v)) + return new_params + + @staticmethod + def get_file_data_and_close_file(file_instance: io.IOBase) -> bytes: + file_data = file_instance.read() + file_instance.close() + return file_data + + def files_parameters(self, files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None): + """Builds form parameters. + + :param files: None or a dict with key=param_name and + value is a list of open file objects + :return: List of tuples of form parameters with file data + """ + if files is None: + return [] + + params = [] + for param_name, file_instances in files.items(): + if file_instances is None: + # if the file field is nullable, skip None values + continue + for file_instance in file_instances: + if file_instance is None: + # if the file field is nullable, skip None values + continue + if file_instance.closed is True: + raise ApiValueError( + "Cannot read a closed file. The passed in file_type " + "for %s must be open." % param_name + ) + filename = os.path.basename(file_instance.name) + filedata = self.get_file_data_and_close_file(file_instance) + mimetype = (mimetypes.guess_type(filename)[0] or + 'application/octet-stream') + params.append( + tuple([param_name, tuple([filename, filedata, mimetype])])) + + return params + + def select_header_accept(self, accepts): + """Returns `Accept` based on an array of accepts provided. + + :param accepts: List of headers. + :return: Accept (e.g. application/json). + """ + if not accepts: + return + + accepts = [x.lower() for x in accepts] + + if 'application/json' in accepts: + return 'application/json' + else: + return ', '.join(accepts) + + def select_header_content_type(self, content_types): + """Returns `Content-Type` based on an array of content_types provided. + + :param content_types: List of content-types. + :return: Content-Type (e.g. application/json). + """ + if not content_types: + return 'application/json' + + content_types = [x.lower() for x in content_types] + + if 'application/json' in content_types or '*/*' in content_types: + return 'application/json' + else: + return content_types[0] + + def update_params_for_auth(self, headers, querys, auth_settings, + resource_path, method, body): + """Updates header and query params based on authentication setting. + + :param headers: Header parameters dict to be updated. + :param querys: Query parameters tuple list to be updated. + :param auth_settings: Authentication setting identifiers list. + :param resource_path: A string representation of the HTTP request resource path. + :param method: A string representation of the HTTP request method. + :param body: A object representing the body of the HTTP request. + The object type is the return value of _encoder.default(). + """ + if not auth_settings: + return + + for auth in auth_settings: + auth_setting = self.configuration.auth_settings().get(auth) + if auth_setting: + if auth_setting['in'] == 'cookie': + headers['Cookie'] = auth_setting['value'] + elif auth_setting['in'] == 'header': + if auth_setting['type'] != 'http-signature': + headers[auth_setting['key']] = auth_setting['value'] + elif auth_setting['in'] == 'query': + querys.append((auth_setting['key'], auth_setting['value'])) + else: + raise ApiValueError( + 'Authentication token must be in `query` or `header`' + ) + + +class Endpoint(object): + def __init__(self, settings=None, params_map=None, root_map=None, + headers_map=None, api_client=None, callable=None): + """Creates an endpoint + + Args: + settings (dict): see below key value pairs + 'response_type' (tuple/None): response type + 'auth' (list): a list of auth type keys + 'endpoint_path' (str): the endpoint path + 'operation_id' (str): endpoint string identifier + 'http_method' (str): POST/PUT/PATCH/GET etc + 'servers' (list): list of str servers that this endpoint is at + params_map (dict): see below key value pairs + 'all' (list): list of str endpoint parameter names + 'required' (list): list of required parameter names + 'nullable' (list): list of nullable parameter names + 'enum' (list): list of parameters with enum values + 'validation' (list): list of parameters with validations + root_map + 'validations' (dict): the dict mapping endpoint parameter tuple + paths to their validation dictionaries + 'allowed_values' (dict): the dict mapping endpoint parameter + tuple paths to their allowed_values (enum) dictionaries + 'openapi_types' (dict): param_name to openapi type + 'attribute_map' (dict): param_name to camelCase name + 'location_map' (dict): param_name to 'body', 'file', 'form', + 'header', 'path', 'query' + collection_format_map (dict): param_name to `csv` etc. + headers_map (dict): see below key value pairs + 'accept' (list): list of Accept header strings + 'content_type' (list): list of Content-Type header strings + api_client (ApiClient) api client instance + callable (function): the function which is invoked when the + Endpoint is called + """ + self.settings = settings + self.params_map = params_map + self.params_map['all'].extend([ + 'async_req', + '_host_index', + '_preload_content', + '_request_timeout', + '_return_http_data_only', + '_check_input_type', + '_check_return_type' + ]) + self.params_map['nullable'].extend(['_request_timeout']) + self.validations = root_map['validations'] + self.allowed_values = root_map['allowed_values'] + self.openapi_types = root_map['openapi_types'] + extra_types = { + 'async_req': (bool,), + '_host_index': (none_type, int), + '_preload_content': (bool,), + '_request_timeout': (none_type, int, (int,), [int]), + '_return_http_data_only': (bool,), + '_check_input_type': (bool,), + '_check_return_type': (bool,) + } + self.openapi_types.update(extra_types) + self.attribute_map = root_map['attribute_map'] + self.location_map = root_map['location_map'] + self.collection_format_map = root_map['collection_format_map'] + self.headers_map = headers_map + self.api_client = api_client + self.callable = callable + + def __validate_inputs(self, kwargs): + for param in self.params_map['enum']: + if param in kwargs: + check_allowed_values( + self.allowed_values, + (param,), + kwargs[param] + ) + + for param in self.params_map['validation']: + if param in kwargs: + check_validations( + self.validations, + (param,), + kwargs[param], + configuration=self.api_client.configuration + ) + + if kwargs['_check_input_type'] is False: + return + + for key, value in kwargs.items(): + fixed_val = validate_and_convert_types( + value, + self.openapi_types[key], + [key], + False, + kwargs['_check_input_type'], + configuration=self.api_client.configuration + ) + kwargs[key] = fixed_val + + def __gather_params(self, kwargs): + params = { + 'body': None, + 'collection_format': {}, + 'file': {}, + 'form': [], + 'header': {}, + 'path': {}, + 'query': [] + } + + for param_name, param_value in kwargs.items(): + param_location = self.location_map.get(param_name) + if param_location is None: + continue + if param_location: + if param_location == 'body': + params['body'] = param_value + continue + base_name = self.attribute_map[param_name] + if (param_location == 'form' and + self.openapi_types[param_name] == (file_type,)): + params['file'][param_name] = [param_value] + elif (param_location == 'form' and + self.openapi_types[param_name] == ([file_type],)): + # param_value is already a list + params['file'][param_name] = param_value + elif param_location in {'form', 'query'}: + param_value_full = (base_name, param_value) + params[param_location].append(param_value_full) + if param_location not in {'form', 'query'}: + params[param_location][base_name] = param_value + collection_format = self.collection_format_map.get(param_name) + if collection_format: + params['collection_format'][base_name] = collection_format + + return params + + def __call__(self, *args, **kwargs): + """ This method is invoked when endpoints are called + Example: + + api_instance = AnotherFakeApi() + api_instance.call_123_test_special_tags # this is an instance of the class Endpoint + api_instance.call_123_test_special_tags() # this invokes api_instance.call_123_test_special_tags.__call__() + which then invokes the callable functions stored in that endpoint at + api_instance.call_123_test_special_tags.callable or self.callable in this class + + """ + return self.callable(self, *args, **kwargs) + + def call_with_http_info(self, **kwargs): + + try: + index = self.api_client.configuration.server_operation_index.get( + self.settings['operation_id'], self.api_client.configuration.server_index + ) if kwargs['_host_index'] is None else kwargs['_host_index'] + server_variables = self.api_client.configuration.server_operation_variables.get( + self.settings['operation_id'], self.api_client.configuration.server_variables + ) + _host = self.api_client.configuration.get_host_from_settings( + index, variables=server_variables, servers=self.settings['servers'] + ) + except IndexError: + if self.settings['servers']: + raise ApiValueError( + "Invalid host index. Must be 0 <= index < %s" % + len(self.settings['servers']) + ) + _host = None + + for key, value in kwargs.items(): + if key not in self.params_map['all']: + raise ApiTypeError( + "Got an unexpected parameter '%s'" + " to method `%s`" % + (key, self.settings['operation_id']) + ) + # only throw this nullable ApiValueError if _check_input_type + # is False, if _check_input_type==True we catch this case + # in self.__validate_inputs + if (key not in self.params_map['nullable'] and value is None + and kwargs['_check_input_type'] is False): + raise ApiValueError( + "Value may not be None for non-nullable parameter `%s`" + " when calling `%s`" % + (key, self.settings['operation_id']) + ) + + for key in self.params_map['required']: + if key not in kwargs.keys(): + raise ApiValueError( + "Missing the required parameter `%s` when calling " + "`%s`" % (key, self.settings['operation_id']) + ) + + self.__validate_inputs(kwargs) + + params = self.__gather_params(kwargs) + + accept_headers_list = self.headers_map['accept'] + if accept_headers_list: + params['header']['Accept'] = self.api_client.select_header_accept( + accept_headers_list) + + content_type_headers_list = self.headers_map['content_type'] + if content_type_headers_list: + header_list = self.api_client.select_header_content_type( + content_type_headers_list) + params['header']['Content-Type'] = header_list + + return self.api_client.call_api( + self.settings['endpoint_path'], self.settings['http_method'], + params['path'], + params['query'], + params['header'], + body=params['body'], + post_params=params['form'], + files=params['file'], + response_type=self.settings['response_type'], + auth_settings=self.settings['auth'], + async_req=kwargs['async_req'], + _check_type=kwargs['_check_return_type'], + _return_http_data_only=kwargs['_return_http_data_only'], + _preload_content=kwargs['_preload_content'], + _request_timeout=kwargs['_request_timeout'], + _host=_host, + collection_formats=params['collection_format']) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/apis/__init__.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/apis/__init__.py new file mode 100644 index 000000000000..e4c52458a0c2 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/apis/__init__.py @@ -0,0 +1,22 @@ + +# flake8: noqa + +# Import all APIs into this package. +# If you have many APIs here with many many models used in each API this may +# raise a `RecursionError`. +# In order to avoid this, import only the API that you directly need like: +# +# from .api.another_fake_api import AnotherFakeApi +# +# or import this package, but before doing it, use: +# +# import sys +# sys.setrecursionlimit(n) + +# Import APIs into API package: +from petstore_api.api.another_fake_api import AnotherFakeApi +from petstore_api.api.fake_api import FakeApi +from petstore_api.api.fake_classname_tags_123_api import FakeClassnameTags123Api +from petstore_api.api.pet_api import PetApi +from petstore_api.api.store_api import StoreApi +from petstore_api.api.user_api import UserApi diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/configuration.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/configuration.py new file mode 100644 index 000000000000..ccd984b7f5f8 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/configuration.py @@ -0,0 +1,511 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import copy +import logging +import multiprocessing +import sys +import urllib3 + +from http import client as http_client +from petstore_api.exceptions import ApiValueError + + +JSON_SCHEMA_VALIDATION_KEYWORDS = { + 'multipleOf', 'maximum', 'exclusiveMaximum', + 'minimum', 'exclusiveMinimum', 'maxLength', + 'minLength', 'pattern', 'maxItems', 'minItems' +} + +class Configuration(object): + """NOTE: This class is auto generated by OpenAPI Generator + + Ref: https://openapi-generator.tech + Do not edit the class manually. + + :param host: Base url + :param api_key: Dict to store API key(s). + Each entry in the dict specifies an API key. + The dict key is the name of the security scheme in the OAS specification. + The dict value is the API key secret. + :param api_key_prefix: Dict to store API prefix (e.g. Bearer) + The dict key is the name of the security scheme in the OAS specification. + The dict value is an API key prefix when generating the auth data. + :param username: Username for HTTP basic authentication + :param password: Password for HTTP basic authentication + :param discard_unknown_keys: Boolean value indicating whether to discard + unknown properties. A server may send a response that includes additional + properties that are not known by the client in the following scenarios: + 1. The OpenAPI document is incomplete, i.e. it does not match the server + implementation. + 2. The client was generated using an older version of the OpenAPI document + and the server has been upgraded since then. + If a schema in the OpenAPI document defines the additionalProperties attribute, + then all undeclared properties received by the server are injected into the + additional properties map. In that case, there are undeclared properties, and + nothing to discard. + :param disabled_client_side_validations (string): Comma-separated list of + JSON schema validation keywords to disable JSON schema structural validation + rules. The following keywords may be specified: multipleOf, maximum, + exclusiveMaximum, minimum, exclusiveMinimum, maxLength, minLength, pattern, + maxItems, minItems. + By default, the validation is performed for data generated locally by the client + and data received from the server, independent of any validation performed by + the server side. If the input data does not satisfy the JSON schema validation + rules specified in the OpenAPI document, an exception is raised. + If disabled_client_side_validations is set, structural validation is + disabled. This can be useful to troubleshoot data validation problem, such as + when the OpenAPI document validation rules do not match the actual API data + received by the server. + :param server_index: Index to servers configuration. + :param server_variables: Mapping with string values to replace variables in + templated server configuration. The validation of enums is performed for + variables with defined enum values before. + :param server_operation_index: Mapping from operation ID to an index to server + configuration. + :param server_operation_variables: Mapping from operation ID to a mapping with + string values to replace variables in templated server configuration. + The validation of enums is performed for variables with defined enum values before. + :param ssl_ca_cert: str - the path to a file of concatenated CA certificates + in PEM format + + :Example: + + API Key Authentication Example. + Given the following security scheme in the OpenAPI specification: + components: + securitySchemes: + cookieAuth: # name for the security scheme + type: apiKey + in: cookie + name: JSESSIONID # cookie name + + You can programmatically set the cookie: + +conf = petstore_api.Configuration( + api_key={'cookieAuth': 'abc123'} + api_key_prefix={'cookieAuth': 'JSESSIONID'} +) + + The following cookie will be added to the HTTP request: + Cookie: JSESSIONID abc123 + + HTTP Basic Authentication Example. + Given the following security scheme in the OpenAPI specification: + components: + securitySchemes: + http_basic_auth: + type: http + scheme: basic + + Configure API client with HTTP basic authentication: + +conf = petstore_api.Configuration( + username='the-user', + password='the-password', +) + + """ + + _default = None + + def __init__(self, host=None, + api_key=None, api_key_prefix=None, + access_token=None, + username=None, password=None, + discard_unknown_keys=False, + disabled_client_side_validations="", + server_index=None, server_variables=None, + server_operation_index=None, server_operation_variables=None, + ssl_ca_cert=None, + ): + """Constructor + """ + self._base_path = "http://petstore.swagger.io:80/v2" if host is None else host + """Default Base url + """ + self.server_index = 0 if server_index is None and host is None else server_index + self.server_operation_index = server_operation_index or {} + """Default server index + """ + self.server_variables = server_variables or {} + self.server_operation_variables = server_operation_variables or {} + """Default server variables + """ + self.temp_folder_path = None + """Temp file folder for downloading files + """ + # Authentication Settings + self.access_token = access_token + self.api_key = {} + if api_key: + self.api_key = api_key + """dict to store API key(s) + """ + self.api_key_prefix = {} + if api_key_prefix: + self.api_key_prefix = api_key_prefix + """dict to store API prefix (e.g. Bearer) + """ + self.refresh_api_key_hook = None + """function hook to refresh API key if expired + """ + self.username = username + """Username for HTTP basic authentication + """ + self.password = password + """Password for HTTP basic authentication + """ + self.discard_unknown_keys = discard_unknown_keys + self.disabled_client_side_validations = disabled_client_side_validations + self.logger = {} + """Logging Settings + """ + self.logger["package_logger"] = logging.getLogger("petstore_api") + self.logger["urllib3_logger"] = logging.getLogger("urllib3") + self.logger_format = '%(asctime)s %(levelname)s %(message)s' + """Log format + """ + self.logger_stream_handler = None + """Log stream handler + """ + self.logger_file_handler = None + """Log file handler + """ + self.logger_file = None + """Debug file location + """ + self.debug = False + """Debug switch + """ + + self.verify_ssl = True + """SSL/TLS verification + Set this to false to skip verifying SSL certificate when calling API + from https server. + """ + self.ssl_ca_cert = ssl_ca_cert + """Set this to customize the certificate file to verify the peer. + """ + self.cert_file = None + """client certificate file + """ + self.key_file = None + """client key file + """ + self.assert_hostname = None + """Set this to True/False to enable/disable SSL hostname verification. + """ + + self.connection_pool_maxsize = multiprocessing.cpu_count() * 5 + """urllib3 connection pool's maximum number of connections saved + per pool. urllib3 uses 1 connection as default value, but this is + not the best value when you are making a lot of possibly parallel + requests to the same host, which is often the case here. + cpu_count * 5 is used as default value to increase performance. + """ + + self.proxy = None + """Proxy URL + """ + self.proxy_headers = None + """Proxy headers + """ + self.safe_chars_for_path_param = '' + """Safe chars for path_param + """ + self.retries = None + """Adding retries to override urllib3 default value 3 + """ + # Enable client side validation + self.client_side_validation = True + + # Options to pass down to the underlying urllib3 socket + self.socket_options = None + + def __deepcopy__(self, memo): + cls = self.__class__ + result = cls.__new__(cls) + memo[id(self)] = result + for k, v in self.__dict__.items(): + if k not in ('logger', 'logger_file_handler'): + setattr(result, k, copy.deepcopy(v, memo)) + # shallow copy of loggers + result.logger = copy.copy(self.logger) + # use setters to configure loggers + result.logger_file = self.logger_file + result.debug = self.debug + return result + + def __setattr__(self, name, value): + object.__setattr__(self, name, value) + if name == 'disabled_client_side_validations': + s = set(filter(None, value.split(','))) + for v in s: + if v not in JSON_SCHEMA_VALIDATION_KEYWORDS: + raise ApiValueError( + "Invalid keyword: '{0}''".format(v)) + self._disabled_client_side_validations = s + + @classmethod + def set_default(cls, default): + """Set default instance of configuration. + + It stores default configuration, which can be + returned by get_default_copy method. + + :param default: object of Configuration + """ + cls._default = copy.deepcopy(default) + + @classmethod + def get_default_copy(cls): + """Return new instance of configuration. + + This method returns newly created, based on default constructor, + object of Configuration class or returns a copy of default + configuration passed by the set_default method. + + :return: The configuration object. + """ + if cls._default is not None: + return copy.deepcopy(cls._default) + return Configuration() + + @property + def logger_file(self): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + return self.__logger_file + + @logger_file.setter + def logger_file(self, value): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + self.__logger_file = value + if self.__logger_file: + # If set logging file, + # then add file handler and remove stream handler. + self.logger_file_handler = logging.FileHandler(self.__logger_file) + self.logger_file_handler.setFormatter(self.logger_formatter) + for _, logger in self.logger.items(): + logger.addHandler(self.logger_file_handler) + + @property + def debug(self): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + return self.__debug + + @debug.setter + def debug(self, value): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + self.__debug = value + if self.__debug: + # if debug status is True, turn on debug logging + for _, logger in self.logger.items(): + logger.setLevel(logging.DEBUG) + # turn on http_client debug + http_client.HTTPConnection.debuglevel = 1 + else: + # if debug status is False, turn off debug logging, + # setting log level to default `logging.WARNING` + for _, logger in self.logger.items(): + logger.setLevel(logging.WARNING) + # turn off http_client debug + http_client.HTTPConnection.debuglevel = 0 + + @property + def logger_format(self): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + return self.__logger_format + + @logger_format.setter + def logger_format(self, value): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + self.__logger_format = value + self.logger_formatter = logging.Formatter(self.__logger_format) + + def get_api_key_with_prefix(self, identifier, alias=None): + """Gets API key (with prefix if set). + + :param identifier: The identifier of apiKey. + :param alias: The alternative identifier of apiKey. + :return: The token for api key authentication. + """ + if self.refresh_api_key_hook is not None: + self.refresh_api_key_hook(self) + key = self.api_key.get(identifier, self.api_key.get(alias) if alias is not None else None) + if key: + prefix = self.api_key_prefix.get(identifier) + if prefix: + return "%s %s" % (prefix, key) + else: + return key + + def get_basic_auth_token(self): + """Gets HTTP basic authentication header (string). + + :return: The token for basic HTTP authentication. + """ + username = "" + if self.username is not None: + username = self.username + password = "" + if self.password is not None: + password = self.password + return urllib3.util.make_headers( + basic_auth=username + ':' + password + ).get('authorization') + + def auth_settings(self): + """Gets Auth Settings dict for api client. + + :return: The Auth Settings information dict. + """ + auth = {} + if 'api_key' in self.api_key: + auth['api_key'] = { + 'type': 'api_key', + 'in': 'header', + 'key': 'api_key', + 'value': self.get_api_key_with_prefix( + 'api_key', + ), + } + if 'api_key_query' in self.api_key: + auth['api_key_query'] = { + 'type': 'api_key', + 'in': 'query', + 'key': 'api_key_query', + 'value': self.get_api_key_with_prefix( + 'api_key_query', + ), + } + if self.username is not None and self.password is not None: + auth['http_basic_test'] = { + 'type': 'basic', + 'in': 'header', + 'key': 'Authorization', + 'value': self.get_basic_auth_token() + } + if self.access_token is not None: + auth['petstore_auth'] = { + 'type': 'oauth2', + 'in': 'header', + 'key': 'Authorization', + 'value': 'Bearer ' + self.access_token + } + return auth + + def to_debug_report(self): + """Gets the essential information for debugging. + + :return: The report for debugging. + """ + return "Python SDK Debug Report:\n"\ + "OS: {env}\n"\ + "Python Version: {pyversion}\n"\ + "Version of the API: 1.0.0\n"\ + "SDK Package Version: 1.0.0".\ + format(env=sys.platform, pyversion=sys.version) + + def get_host_settings(self): + """Gets an array of host settings + + :return: An array of host settings + """ + return [ + { + 'url': "http://petstore.swagger.io:80/v2", + 'description': "No description provided", + } + ] + + def get_host_from_settings(self, index, variables=None, servers=None): + """Gets host URL based on the index and variables + :param index: array index of the host settings + :param variables: hash of variable and the corresponding value + :param servers: an array of host settings or None + :return: URL based on host settings + """ + if index is None: + return self._base_path + + variables = {} if variables is None else variables + servers = self.get_host_settings() if servers is None else servers + + try: + server = servers[index] + except IndexError: + raise ValueError( + "Invalid index {0} when selecting the host settings. " + "Must be less than {1}".format(index, len(servers))) + + url = server['url'] + + # go through variables and replace placeholders + for variable_name, variable in server.get('variables', {}).items(): + used_value = variables.get( + variable_name, variable['default_value']) + + if 'enum_values' in variable \ + and used_value not in variable['enum_values']: + raise ValueError( + "The variable `{0}` in the host URL has invalid value " + "{1}. Must be {2}.".format( + variable_name, variables[variable_name], + variable['enum_values'])) + + url = url.replace("{" + variable_name + "}", used_value) + + return url + + @property + def host(self): + """Return generated host.""" + return self.get_host_from_settings(self.server_index, variables=self.server_variables) + + @host.setter + def host(self, value): + """Fix base path.""" + self._base_path = value + self.server_index = None diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/exceptions.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/exceptions.py new file mode 100644 index 000000000000..51527f606112 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/exceptions.py @@ -0,0 +1,159 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + + +class OpenApiException(Exception): + """The base exception class for all OpenAPIExceptions""" + + +class ApiTypeError(OpenApiException, TypeError): + def __init__(self, msg, path_to_item=None, valid_classes=None, + key_type=None): + """ Raises an exception for TypeErrors + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list): a list of keys an indices to get to the + current_item + None if unset + valid_classes (tuple): the primitive classes that current item + should be an instance of + None if unset + key_type (bool): False if our value is a value in a dict + True if it is a key in a dict + False if our item is an item in a list + None if unset + """ + self.path_to_item = path_to_item + self.valid_classes = valid_classes + self.key_type = key_type + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiTypeError, self).__init__(full_msg) + + +class ApiValueError(OpenApiException, ValueError): + def __init__(self, msg, path_to_item=None): + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list) the path to the exception in the + received_data dict. None if unset + """ + + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiValueError, self).__init__(full_msg) + + +class ApiAttributeError(OpenApiException, AttributeError): + def __init__(self, msg, path_to_item=None): + """ + Raised when an attribute reference or assignment fails. + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiAttributeError, self).__init__(full_msg) + + +class ApiKeyError(OpenApiException, KeyError): + def __init__(self, msg, path_to_item=None): + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiKeyError, self).__init__(full_msg) + + +class ApiException(OpenApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + if http_resp: + self.status = http_resp.status + self.reason = http_resp.reason + self.body = http_resp.data + self.headers = http_resp.getheaders() + else: + self.status = status + self.reason = reason + self.body = None + self.headers = None + + def __str__(self): + """Custom error messages for exception""" + error_message = "({0})\n"\ + "Reason: {1}\n".format(self.status, self.reason) + if self.headers: + error_message += "HTTP response headers: {0}\n".format( + self.headers) + + if self.body: + error_message += "HTTP response body: {0}\n".format(self.body) + + return error_message + + +class NotFoundException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(NotFoundException, self).__init__(status, reason, http_resp) + + +class UnauthorizedException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(UnauthorizedException, self).__init__(status, reason, http_resp) + + +class ForbiddenException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(ForbiddenException, self).__init__(status, reason, http_resp) + + +class ServiceException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(ServiceException, self).__init__(status, reason, http_resp) + + +def render_path(path_to_item): + """Returns a string representation of a path""" + result = "" + for pth in path_to_item: + if isinstance(pth, int): + result += "[{0}]".format(pth) + else: + result += "['{0}']".format(pth) + return result diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/__init__.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/__init__.py new file mode 100644 index 000000000000..cfe32b784926 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/__init__.py @@ -0,0 +1,5 @@ +# we can not import model classes here because that would create a circular +# reference which would not work in python2 +# do not import all models into this module because that uses a lot of memory and stack frames +# if you need the ability to import all models from one package, import them with +# from {{packageName}.models import ModelA, ModelB diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_any_type.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_any_type.py new file mode 100644 index 000000000000..7239795cf4af --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_any_type.py @@ -0,0 +1,172 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AdditionalPropertiesAnyType(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesAnyType - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_array.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_array.py new file mode 100644 index 000000000000..7d9403758a0d --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_array.py @@ -0,0 +1,172 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AdditionalPropertiesArray(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return ([bool, date, datetime, dict, float, int, list, str, none_type],) # noqa: E501 + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesArray - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_boolean.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_boolean.py new file mode 100644 index 000000000000..ca129b766ec5 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_boolean.py @@ -0,0 +1,172 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AdditionalPropertiesBoolean(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool,) # noqa: E501 + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesBoolean - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_class.py new file mode 100644 index 000000000000..292f467aaa8a --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_class.py @@ -0,0 +1,196 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AdditionalPropertiesClass(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'map_string': ({str: (str,)},), # noqa: E501 + 'map_number': ({str: (float,)},), # noqa: E501 + 'map_integer': ({str: (int,)},), # noqa: E501 + 'map_boolean': ({str: (bool,)},), # noqa: E501 + 'map_array_integer': ({str: ([int],)},), # noqa: E501 + 'map_array_anytype': ({str: ([bool, date, datetime, dict, float, int, list, str, none_type],)},), # noqa: E501 + 'map_map_string': ({str: ({str: (str,)},)},), # noqa: E501 + 'map_map_anytype': ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type,)},)},), # noqa: E501 + 'anytype_1': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501 + 'anytype_2': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501 + 'anytype_3': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'map_string': 'map_string', # noqa: E501 + 'map_number': 'map_number', # noqa: E501 + 'map_integer': 'map_integer', # noqa: E501 + 'map_boolean': 'map_boolean', # noqa: E501 + 'map_array_integer': 'map_array_integer', # noqa: E501 + 'map_array_anytype': 'map_array_anytype', # noqa: E501 + 'map_map_string': 'map_map_string', # noqa: E501 + 'map_map_anytype': 'map_map_anytype', # noqa: E501 + 'anytype_1': 'anytype_1', # noqa: E501 + 'anytype_2': 'anytype_2', # noqa: E501 + 'anytype_3': 'anytype_3', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + map_string ({str: (str,)}): [optional] # noqa: E501 + map_number ({str: (float,)}): [optional] # noqa: E501 + map_integer ({str: (int,)}): [optional] # noqa: E501 + map_boolean ({str: (bool,)}): [optional] # noqa: E501 + map_array_integer ({str: ([int],)}): [optional] # noqa: E501 + map_array_anytype ({str: ([bool, date, datetime, dict, float, int, list, str, none_type],)}): [optional] # noqa: E501 + map_map_string ({str: ({str: (str,)},)}): [optional] # noqa: E501 + map_map_anytype ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type,)},)}): [optional] # noqa: E501 + anytype_1 (bool, date, datetime, dict, float, int, list, str, none_type): [optional] # noqa: E501 + anytype_2 (bool, date, datetime, dict, float, int, list, str, none_type): no type is set for this. [optional] # noqa: E501 + anytype_3 (bool, date, datetime, dict, float, int, list, str, none_type): because of a bug in swagger-parser, this should have values {str: (str, int, float...)} but instead we get any type. See https://github.com/swagger-api/swagger-parser/issues/1378. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_integer.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_integer.py new file mode 100644 index 000000000000..87d78bf36005 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_integer.py @@ -0,0 +1,172 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AdditionalPropertiesInteger(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (int,) # noqa: E501 + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesInteger - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_number.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_number.py new file mode 100644 index 000000000000..b10bd036ff3f --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_number.py @@ -0,0 +1,172 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AdditionalPropertiesNumber(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (float,) # noqa: E501 + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesNumber - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_object.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_object.py new file mode 100644 index 000000000000..000653f13a73 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_object.py @@ -0,0 +1,172 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AdditionalPropertiesObject(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return ({str: (bool, date, datetime, dict, float, int, list, str, none_type,)},) # noqa: E501 + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesObject - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_string.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_string.py new file mode 100644 index 000000000000..7f1f94aa6b6b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_string.py @@ -0,0 +1,172 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class AdditionalPropertiesString(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (str,) # noqa: E501 + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesString - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal.py new file mode 100644 index 000000000000..a3d48b6ea975 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal.py @@ -0,0 +1,185 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.cat import Cat + from petstore_api.model.dog import Dog + globals()['Cat'] = Cat + globals()['Dog'] = Dog + + +class Animal(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'class_name': (str,), # noqa: E501 + 'color': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + lazy_import() + val = { + 'Cat': Cat, + 'Dog': Dog, + } + if not val: + return None + return {'class_name': val} + + attribute_map = { + 'class_name': 'className', # noqa: E501 + 'color': 'color', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, class_name, *args, **kwargs): # noqa: E501 + """Animal - a model defined in OpenAPI + + Args: + class_name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.class_name = class_name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal_farm.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal_farm.py new file mode 100644 index 000000000000..838b18a12970 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal_farm.py @@ -0,0 +1,184 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.animal import Animal + globals()['Animal'] = Animal + + +class AnimalFarm(ModelSimple): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'value': ([Animal],), + } + + @cached_property + def discriminator(): + return None + + + attribute_map = {} + + _composed_schemas = None + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): + """AnimalFarm - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] ([Animal]): # noqa: E501 + + Keyword Args: + value ([Animal]): # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/api_response.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/api_response.py new file mode 100644 index 000000000000..01e2175b8004 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/api_response.py @@ -0,0 +1,172 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ApiResponse(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'code': (int,), # noqa: E501 + 'type': (str,), # noqa: E501 + 'message': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'code': 'code', # noqa: E501 + 'type': 'type', # noqa: E501 + 'message': 'message', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ApiResponse - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + code (int): [optional] # noqa: E501 + type (str): [optional] # noqa: E501 + message (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_array_of_number_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_array_of_number_only.py new file mode 100644 index 000000000000..008b74dd42a3 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_array_of_number_only.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ArrayOfArrayOfNumberOnly(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'array_array_number': ([[float]],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'array_array_number': 'ArrayArrayNumber', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ArrayOfArrayOfNumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_array_number ([[float]]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_number_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_number_only.py new file mode 100644 index 000000000000..f2e080bc258e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_number_only.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ArrayOfNumberOnly(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'array_number': ([float],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'array_number': 'ArrayNumber', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ArrayOfNumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_number ([float]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_test.py new file mode 100644 index 000000000000..ac42b07b93c9 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_test.py @@ -0,0 +1,177 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.read_only_first import ReadOnlyFirst + globals()['ReadOnlyFirst'] = ReadOnlyFirst + + +class ArrayTest(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'array_of_string': ([str],), # noqa: E501 + 'array_array_of_integer': ([[int]],), # noqa: E501 + 'array_array_of_model': ([[ReadOnlyFirst]],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'array_of_string': 'array_of_string', # noqa: E501 + 'array_array_of_integer': 'array_array_of_integer', # noqa: E501 + 'array_array_of_model': 'array_array_of_model', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ArrayTest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_of_string ([str]): [optional] # noqa: E501 + array_array_of_integer ([[int]]): [optional] # noqa: E501 + array_array_of_model ([[ReadOnlyFirst]]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/capitalization.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/capitalization.py new file mode 100644 index 000000000000..710c17e51a56 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/capitalization.py @@ -0,0 +1,181 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Capitalization(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'small_camel': (str,), # noqa: E501 + 'capital_camel': (str,), # noqa: E501 + 'small_snake': (str,), # noqa: E501 + 'capital_snake': (str,), # noqa: E501 + 'sca_eth_flow_points': (str,), # noqa: E501 + 'att_name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'small_camel': 'smallCamel', # noqa: E501 + 'capital_camel': 'CapitalCamel', # noqa: E501 + 'small_snake': 'small_Snake', # noqa: E501 + 'capital_snake': 'Capital_Snake', # noqa: E501 + 'sca_eth_flow_points': 'SCA_ETH_Flow_Points', # noqa: E501 + 'att_name': 'ATT_NAME', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Capitalization - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + small_camel (str): [optional] # noqa: E501 + capital_camel (str): [optional] # noqa: E501 + small_snake (str): [optional] # noqa: E501 + capital_snake (str): [optional] # noqa: E501 + sca_eth_flow_points (str): [optional] # noqa: E501 + att_name (str): Name of the pet . [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat.py new file mode 100644 index 000000000000..fd8d4bc7179c --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat.py @@ -0,0 +1,218 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.animal import Animal + from petstore_api.model.cat_all_of import CatAllOf + globals()['Animal'] = Animal + globals()['CatAllOf'] = CatAllOf + + +class Cat(ModelComposed): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'class_name': (str,), # noqa: E501 + 'declawed': (bool,), # noqa: E501 + 'color': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + val = { + } + if not val: + return None + return {'class_name': val} + + attribute_map = { + 'class_name': 'className', # noqa: E501 + 'declawed': 'declawed', # noqa: E501 + 'color': 'color', # noqa: E501 + } + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Cat - a model defined in OpenAPI + + Keyword Args: + class_name (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + declawed (bool): [optional] # noqa: E501 + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error beause the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + Animal, + CatAllOf, + ], + 'oneOf': [ + ], + } diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat_all_of.py new file mode 100644 index 000000000000..50b046510dfa --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat_all_of.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class CatAllOf(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'declawed': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'declawed': 'declawed', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """CatAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + declawed (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/category.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/category.py new file mode 100644 index 000000000000..ed167471d356 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/category.py @@ -0,0 +1,173 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Category(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + 'id': (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + 'id': 'id', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Category - a model defined in OpenAPI + + Args: + + Keyword Args: + name (str): defaults to "default-name" # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + """ + + name = kwargs.get('name', "default-name") + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child.py new file mode 100644 index 000000000000..d36723dd6250 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child.py @@ -0,0 +1,215 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.child_all_of import ChildAllOf + from petstore_api.model.parent import Parent + globals()['ChildAllOf'] = ChildAllOf + globals()['Parent'] = Parent + + +class Child(ModelComposed): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'radio_waves': (bool,), # noqa: E501 + 'tele_vision': (bool,), # noqa: E501 + 'inter_net': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'radio_waves': 'radioWaves', # noqa: E501 + 'tele_vision': 'teleVision', # noqa: E501 + 'inter_net': 'interNet', # noqa: E501 + } + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Child - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + radio_waves (bool): [optional] # noqa: E501 + tele_vision (bool): [optional] # noqa: E501 + inter_net (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error beause the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + ChildAllOf, + Parent, + ], + 'oneOf': [ + ], + } diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_all_of.py new file mode 100644 index 000000000000..2339e520bd65 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_all_of.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ChildAllOf(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'inter_net': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'inter_net': 'interNet', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ChildAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + inter_net (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat.py new file mode 100644 index 000000000000..70438f3441ff --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat.py @@ -0,0 +1,215 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.child_cat_all_of import ChildCatAllOf + from petstore_api.model.parent_pet import ParentPet + globals()['ChildCatAllOf'] = ChildCatAllOf + globals()['ParentPet'] = ParentPet + + +class ChildCat(ModelComposed): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'pet_type': (str,), # noqa: E501 + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + val = { + } + if not val: + return None + return {'pet_type': val} + + attribute_map = { + 'pet_type': 'pet_type', # noqa: E501 + 'name': 'name', # noqa: E501 + } + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ChildCat - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error beause the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + ChildCatAllOf, + ParentPet, + ], + 'oneOf': [ + ], + } diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat_all_of.py new file mode 100644 index 000000000000..f0f1a1ae6bd4 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat_all_of.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ChildCatAllOf(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ChildCatAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog.py new file mode 100644 index 000000000000..df4956266ae6 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog.py @@ -0,0 +1,215 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.child_dog_all_of import ChildDogAllOf + from petstore_api.model.parent_pet import ParentPet + globals()['ChildDogAllOf'] = ChildDogAllOf + globals()['ParentPet'] = ParentPet + + +class ChildDog(ModelComposed): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'pet_type': (str,), # noqa: E501 + 'bark': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + val = { + } + if not val: + return None + return {'pet_type': val} + + attribute_map = { + 'pet_type': 'pet_type', # noqa: E501 + 'bark': 'bark', # noqa: E501 + } + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ChildDog - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bark (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error beause the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + ChildDogAllOf, + ParentPet, + ], + 'oneOf': [ + ], + } diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog_all_of.py new file mode 100644 index 000000000000..d460b68b3d3a --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog_all_of.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ChildDogAllOf(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'bark': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'bark': 'bark', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ChildDogAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bark (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard.py new file mode 100644 index 000000000000..1f50ba403ed1 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard.py @@ -0,0 +1,215 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.child_lizard_all_of import ChildLizardAllOf + from petstore_api.model.parent_pet import ParentPet + globals()['ChildLizardAllOf'] = ChildLizardAllOf + globals()['ParentPet'] = ParentPet + + +class ChildLizard(ModelComposed): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'pet_type': (str,), # noqa: E501 + 'loves_rocks': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + val = { + } + if not val: + return None + return {'pet_type': val} + + attribute_map = { + 'pet_type': 'pet_type', # noqa: E501 + 'loves_rocks': 'lovesRocks', # noqa: E501 + } + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ChildLizard - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + loves_rocks (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error beause the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + ChildLizardAllOf, + ParentPet, + ], + 'oneOf': [ + ], + } diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard_all_of.py new file mode 100644 index 000000000000..669b9338d796 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard_all_of.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ChildLizardAllOf(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'loves_rocks': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'loves_rocks': 'lovesRocks', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ChildLizardAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + loves_rocks (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/class_model.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/class_model.py new file mode 100644 index 000000000000..18c16f89f908 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/class_model.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ClassModel(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + '_class': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + '_class': '_class', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ClassModel - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _class (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/client.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/client.py new file mode 100644 index 000000000000..da615c547731 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/client.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Client(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'client': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'client': 'client', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Client - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + client (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog.py new file mode 100644 index 000000000000..e29ffa336029 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog.py @@ -0,0 +1,218 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.animal import Animal + from petstore_api.model.dog_all_of import DogAllOf + globals()['Animal'] = Animal + globals()['DogAllOf'] = DogAllOf + + +class Dog(ModelComposed): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'class_name': (str,), # noqa: E501 + 'breed': (str,), # noqa: E501 + 'color': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + val = { + } + if not val: + return None + return {'class_name': val} + + attribute_map = { + 'class_name': 'className', # noqa: E501 + 'breed': 'breed', # noqa: E501 + 'color': 'color', # noqa: E501 + } + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Dog - a model defined in OpenAPI + + Keyword Args: + class_name (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + breed (str): [optional] # noqa: E501 + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error beause the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + Animal, + DogAllOf, + ], + 'oneOf': [ + ], + } diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog_all_of.py new file mode 100644 index 000000000000..b7b2e7db66d9 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog_all_of.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class DogAllOf(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'breed': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'breed': 'breed', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """DogAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + breed (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_arrays.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_arrays.py new file mode 100644 index 000000000000..43ebac57de38 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_arrays.py @@ -0,0 +1,177 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class EnumArrays(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ('just_symbol',): { + '>=': ">=", + '$': "$", + }, + ('array_enum',): { + 'FISH': "fish", + 'CRAB': "crab", + }, + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'just_symbol': (str,), # noqa: E501 + 'array_enum': ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'just_symbol': 'just_symbol', # noqa: E501 + 'array_enum': 'array_enum', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """EnumArrays - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + just_symbol (str): [optional] # noqa: E501 + array_enum ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_class.py new file mode 100644 index 000000000000..14188ca31d28 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_class.py @@ -0,0 +1,180 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class EnumClass(ModelSimple): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ('value',): { + '_ABC': "_abc", + '-EFG': "-efg", + '(XYZ)': "(xyz)", + }, + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'value': (str,), + } + + @cached_property + def discriminator(): + return None + + + attribute_map = {} + + _composed_schemas = None + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): + """EnumClass - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str): if omitted defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] # noqa: E501 + + Keyword Args: + value (str): if omitted defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + value = "-efg" + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_test.py new file mode 100644 index 000000000000..79ba0f6a747c --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_test.py @@ -0,0 +1,204 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.string_enum import StringEnum + globals()['StringEnum'] = StringEnum + + +class EnumTest(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ('enum_string_required',): { + 'UPPER': "UPPER", + 'LOWER': "lower", + 'EMPTY': "", + }, + ('enum_string',): { + 'UPPER': "UPPER", + 'LOWER': "lower", + 'EMPTY': "", + }, + ('enum_integer',): { + '1': 1, + '-1': -1, + }, + ('enum_number',): { + '1.1': 1.1, + '-1.2': -1.2, + }, + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'enum_string_required': (str,), # noqa: E501 + 'enum_string': (str,), # noqa: E501 + 'enum_integer': (int,), # noqa: E501 + 'enum_number': (float,), # noqa: E501 + 'string_enum': (StringEnum,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'enum_string_required': 'enum_string_required', # noqa: E501 + 'enum_string': 'enum_string', # noqa: E501 + 'enum_integer': 'enum_integer', # noqa: E501 + 'enum_number': 'enum_number', # noqa: E501 + 'string_enum': 'stringEnum', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, enum_string_required, *args, **kwargs): # noqa: E501 + """EnumTest - a model defined in OpenAPI + + Args: + enum_string_required (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + enum_string (str): [optional] # noqa: E501 + enum_integer (int): [optional] # noqa: E501 + enum_number (float): [optional] # noqa: E501 + string_enum (StringEnum): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.enum_string_required = enum_string_required + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file.py new file mode 100644 index 000000000000..a38cccacc6ab --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class File(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'source_uri': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'source_uri': 'sourceURI', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """File - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + source_uri (str): Test capitalization. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file_schema_test_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file_schema_test_class.py new file mode 100644 index 000000000000..b8c519ed9c7c --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file_schema_test_class.py @@ -0,0 +1,174 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.file import File + globals()['File'] = File + + +class FileSchemaTestClass(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'file': (File,), # noqa: E501 + 'files': ([File],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'file': 'file', # noqa: E501 + 'files': 'files', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """FileSchemaTestClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + file (File): [optional] # noqa: E501 + files ([File]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/format_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/format_test.py new file mode 100644 index 000000000000..494ce2646da0 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/format_test.py @@ -0,0 +1,243 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class FormatTest(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + ('number',): { + 'inclusive_maximum': 543.2, + 'inclusive_minimum': 32.1, + }, + ('byte',): { + 'regex': { + 'pattern': r'^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$', # noqa: E501 + }, + }, + ('password',): { + 'max_length': 64, + 'min_length': 10, + }, + ('integer',): { + 'inclusive_maximum': 100, + 'inclusive_minimum': 10, + }, + ('int32',): { + 'inclusive_maximum': 200, + 'inclusive_minimum': 20, + }, + ('float',): { + 'inclusive_maximum': 987.6, + 'inclusive_minimum': 54.3, + }, + ('double',): { + 'inclusive_maximum': 123.4, + 'inclusive_minimum': 67.8, + }, + ('string',): { + 'regex': { + 'pattern': r'^[a-z]+$', # noqa: E501 + 'flags': (re.IGNORECASE) + }, + }, + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'number': (float,), # noqa: E501 + 'byte': (str,), # noqa: E501 + 'date': (date,), # noqa: E501 + 'password': (str,), # noqa: E501 + 'integer': (int,), # noqa: E501 + 'int32': (int,), # noqa: E501 + 'int64': (int,), # noqa: E501 + 'float': (float,), # noqa: E501 + 'double': (float,), # noqa: E501 + 'string': (str,), # noqa: E501 + 'binary': (file_type,), # noqa: E501 + 'date_time': (datetime,), # noqa: E501 + 'uuid': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'number': 'number', # noqa: E501 + 'byte': 'byte', # noqa: E501 + 'date': 'date', # noqa: E501 + 'password': 'password', # noqa: E501 + 'integer': 'integer', # noqa: E501 + 'int32': 'int32', # noqa: E501 + 'int64': 'int64', # noqa: E501 + 'float': 'float', # noqa: E501 + 'double': 'double', # noqa: E501 + 'string': 'string', # noqa: E501 + 'binary': 'binary', # noqa: E501 + 'date_time': 'dateTime', # noqa: E501 + 'uuid': 'uuid', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, number, byte, date, password, *args, **kwargs): # noqa: E501 + """FormatTest - a model defined in OpenAPI + + Args: + number (float): + byte (str): + date (date): + password (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + integer (int): [optional] # noqa: E501 + int32 (int): [optional] # noqa: E501 + int64 (int): [optional] # noqa: E501 + float (float): [optional] # noqa: E501 + double (float): [optional] # noqa: E501 + string (str): [optional] # noqa: E501 + binary (file_type): [optional] # noqa: E501 + date_time (datetime): [optional] # noqa: E501 + uuid (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.number = number + self.byte = byte + self.date = date + self.password = password + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent.py new file mode 100644 index 000000000000..a52744cc3e24 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Grandparent(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'radio_waves': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'radio_waves': 'radioWaves', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Grandparent - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + radio_waves (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent_animal.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent_animal.py new file mode 100644 index 000000000000..48d3f6d9f0b3 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent_animal.py @@ -0,0 +1,188 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.child_cat import ChildCat + from petstore_api.model.child_dog import ChildDog + from petstore_api.model.child_lizard import ChildLizard + from petstore_api.model.parent_pet import ParentPet + globals()['ChildCat'] = ChildCat + globals()['ChildDog'] = ChildDog + globals()['ChildLizard'] = ChildLizard + globals()['ParentPet'] = ParentPet + + +class GrandparentAnimal(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'pet_type': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + lazy_import() + val = { + 'ChildCat': ChildCat, + 'ChildDog': ChildDog, + 'ChildLizard': ChildLizard, + 'ParentPet': ParentPet, + } + if not val: + return None + return {'pet_type': val} + + attribute_map = { + 'pet_type': 'pet_type', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, pet_type, *args, **kwargs): # noqa: E501 + """GrandparentAnimal - a model defined in OpenAPI + + Args: + pet_type (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.pet_type = pet_type + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/has_only_read_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/has_only_read_only.py new file mode 100644 index 000000000000..c94781ae2c46 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/has_only_read_only.py @@ -0,0 +1,169 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class HasOnlyReadOnly(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'bar': (str,), # noqa: E501 + 'foo': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'bar': 'bar', # noqa: E501 + 'foo': 'foo', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """HasOnlyReadOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bar (str): [optional] # noqa: E501 + foo (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/list.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/list.py new file mode 100644 index 000000000000..09c762d6a794 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/list.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class List(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + '_123_list': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + '_123_list': '123-list', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """List - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _123_list (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/map_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/map_test.py new file mode 100644 index 000000000000..169fb9d88ee0 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/map_test.py @@ -0,0 +1,184 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.string_boolean_map import StringBooleanMap + globals()['StringBooleanMap'] = StringBooleanMap + + +class MapTest(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ('map_of_enum_string',): { + 'UPPER': "UPPER", + 'LOWER': "lower", + }, + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'map_map_of_string': ({str: ({str: (str,)},)},), # noqa: E501 + 'map_of_enum_string': ({str: (str,)},), # noqa: E501 + 'direct_map': ({str: (bool,)},), # noqa: E501 + 'indirect_map': (StringBooleanMap,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'map_map_of_string': 'map_map_of_string', # noqa: E501 + 'map_of_enum_string': 'map_of_enum_string', # noqa: E501 + 'direct_map': 'direct_map', # noqa: E501 + 'indirect_map': 'indirect_map', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MapTest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + map_map_of_string ({str: ({str: (str,)},)}): [optional] # noqa: E501 + map_of_enum_string ({str: (str,)}): [optional] # noqa: E501 + direct_map ({str: (bool,)}): [optional] # noqa: E501 + indirect_map (StringBooleanMap): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/mixed_properties_and_additional_properties_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/mixed_properties_and_additional_properties_class.py new file mode 100644 index 000000000000..01df80d9d62b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/mixed_properties_and_additional_properties_class.py @@ -0,0 +1,177 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.animal import Animal + globals()['Animal'] = Animal + + +class MixedPropertiesAndAdditionalPropertiesClass(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'uuid': (str,), # noqa: E501 + 'date_time': (datetime,), # noqa: E501 + 'map': ({str: (Animal,)},), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'uuid': 'uuid', # noqa: E501 + 'date_time': 'dateTime', # noqa: E501 + 'map': 'map', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """MixedPropertiesAndAdditionalPropertiesClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + uuid (str): [optional] # noqa: E501 + date_time (datetime): [optional] # noqa: E501 + map ({str: (Animal,)}): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model200_response.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model200_response.py new file mode 100644 index 000000000000..46b155b65239 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model200_response.py @@ -0,0 +1,169 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Model200Response(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (int,), # noqa: E501 + '_class': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + '_class': 'class', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Model200Response - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (int): [optional] # noqa: E501 + _class (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model_return.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model_return.py new file mode 100644 index 000000000000..377b3507a8b3 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model_return.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ModelReturn(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + '_return': (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + '_return': 'return', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ModelReturn - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _return (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/name.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/name.py new file mode 100644 index 000000000000..1432e185ad6b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/name.py @@ -0,0 +1,178 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Name(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (int,), # noqa: E501 + 'snake_case': (int,), # noqa: E501 + '_property': (str,), # noqa: E501 + '_123_number': (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + 'snake_case': 'snake_case', # noqa: E501 + '_property': 'property', # noqa: E501 + '_123_number': '123Number', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, name, *args, **kwargs): # noqa: E501 + """Name - a model defined in OpenAPI + + Args: + name (int): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + snake_case (int): [optional] # noqa: E501 + _property (str): [optional] # noqa: E501 + _123_number (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_only.py new file mode 100644 index 000000000000..d4892dbede5b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_only.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class NumberOnly(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'just_number': (float,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'just_number': 'JustNumber', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """NumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + just_number (float): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_with_validations.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_with_validations.py new file mode 100644 index 000000000000..458a79459751 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_with_validations.py @@ -0,0 +1,183 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class NumberWithValidations(ModelSimple): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + ('value',): { + 'inclusive_maximum': 2E+1, + 'inclusive_minimum': 1E+1, + }, + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'value': (float,), + } + + @cached_property + def discriminator(): + return None + + + attribute_map = {} + + _composed_schemas = None + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): + """NumberWithValidations - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (float): # noqa: E501 + + Keyword Args: + value (float): # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/object_model_with_ref_props.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/object_model_with_ref_props.py new file mode 100644 index 000000000000..b1dc4bf82e2c --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/object_model_with_ref_props.py @@ -0,0 +1,177 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.number_with_validations import NumberWithValidations + globals()['NumberWithValidations'] = NumberWithValidations + + +class ObjectModelWithRefProps(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'my_number': (NumberWithValidations,), # noqa: E501 + 'my_string': (str,), # noqa: E501 + 'my_boolean': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'my_number': 'my_number', # noqa: E501 + 'my_string': 'my_string', # noqa: E501 + 'my_boolean': 'my_boolean', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ObjectModelWithRefProps - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + my_number (NumberWithValidations): [optional] # noqa: E501 + my_string (str): [optional] # noqa: E501 + my_boolean (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/order.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/order.py new file mode 100644 index 000000000000..b42f066848ab --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/order.py @@ -0,0 +1,186 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Order(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ('status',): { + 'PLACED': "placed", + 'APPROVED': "approved", + 'DELIVERED': "delivered", + }, + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'id': (int,), # noqa: E501 + 'pet_id': (int,), # noqa: E501 + 'quantity': (int,), # noqa: E501 + 'ship_date': (datetime,), # noqa: E501 + 'status': (str,), # noqa: E501 + 'complete': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'id': 'id', # noqa: E501 + 'pet_id': 'petId', # noqa: E501 + 'quantity': 'quantity', # noqa: E501 + 'ship_date': 'shipDate', # noqa: E501 + 'status': 'status', # noqa: E501 + 'complete': 'complete', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Order - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + pet_id (int): [optional] # noqa: E501 + quantity (int): [optional] # noqa: E501 + ship_date (datetime): [optional] # noqa: E501 + status (str): Order Status. [optional] # noqa: E501 + complete (bool): [optional] if omitted the server will use the default value of False # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent.py new file mode 100644 index 000000000000..b07448d9e1fe --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent.py @@ -0,0 +1,212 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.grandparent import Grandparent + from petstore_api.model.parent_all_of import ParentAllOf + globals()['Grandparent'] = Grandparent + globals()['ParentAllOf'] = ParentAllOf + + +class Parent(ModelComposed): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'radio_waves': (bool,), # noqa: E501 + 'tele_vision': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'radio_waves': 'radioWaves', # noqa: E501 + 'tele_vision': 'teleVision', # noqa: E501 + } + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Parent - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + radio_waves (bool): [optional] # noqa: E501 + tele_vision (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error beause the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + Grandparent, + ParentAllOf, + ], + 'oneOf': [ + ], + } diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_all_of.py new file mode 100644 index 000000000000..0d109f25a4c2 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_all_of.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ParentAllOf(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'tele_vision': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'tele_vision': 'teleVision', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ParentAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + tele_vision (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_pet.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_pet.py new file mode 100644 index 000000000000..597e30bb9c4a --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_pet.py @@ -0,0 +1,219 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.child_cat import ChildCat + from petstore_api.model.child_dog import ChildDog + from petstore_api.model.child_lizard import ChildLizard + from petstore_api.model.grandparent_animal import GrandparentAnimal + globals()['ChildCat'] = ChildCat + globals()['ChildDog'] = ChildDog + globals()['ChildLizard'] = ChildLizard + globals()['GrandparentAnimal'] = GrandparentAnimal + + +class ParentPet(ModelComposed): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'pet_type': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + lazy_import() + val = { + 'ChildCat': ChildCat, + 'ChildDog': ChildDog, + 'ChildLizard': ChildLizard, + } + if not val: + return None + return {'pet_type': val} + + attribute_map = { + 'pet_type': 'pet_type', # noqa: E501 + } + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ParentPet - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error beause the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + GrandparentAnimal, + ], + 'oneOf': [ + ], + } diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/pet.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/pet.py new file mode 100644 index 000000000000..e9f1e30a3196 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/pet.py @@ -0,0 +1,197 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.category import Category + from petstore_api.model.tag import Tag + globals()['Category'] = Category + globals()['Tag'] = Tag + + +class Pet(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ('status',): { + 'AVAILABLE': "available", + 'PENDING': "pending", + 'SOLD': "sold", + }, + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'name': (str,), # noqa: E501 + 'photo_urls': ([str],), # noqa: E501 + 'id': (int,), # noqa: E501 + 'category': (Category,), # noqa: E501 + 'tags': ([Tag],), # noqa: E501 + 'status': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + 'photo_urls': 'photoUrls', # noqa: E501 + 'id': 'id', # noqa: E501 + 'category': 'category', # noqa: E501 + 'tags': 'tags', # noqa: E501 + 'status': 'status', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, name, photo_urls, *args, **kwargs): # noqa: E501 + """Pet - a model defined in OpenAPI + + Args: + name (str): + photo_urls ([str]): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + category (Category): [optional] # noqa: E501 + tags ([Tag]): [optional] # noqa: E501 + status (str): pet status in the store. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + self.photo_urls = photo_urls + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/player.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/player.py new file mode 100644 index 000000000000..6e4485fb6500 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/player.py @@ -0,0 +1,172 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Player(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + 'enemy_player': (Player,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + 'enemy_player': 'enemyPlayer', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, name, *args, **kwargs): # noqa: E501 + """Player - a model defined in OpenAPI + + Args: + name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + enemy_player (Player): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/read_only_first.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/read_only_first.py new file mode 100644 index 000000000000..5c68eab91ea3 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/read_only_first.py @@ -0,0 +1,169 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class ReadOnlyFirst(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'bar': (str,), # noqa: E501 + 'baz': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'bar': 'bar', # noqa: E501 + 'baz': 'baz', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ReadOnlyFirst - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bar (str): [optional] # noqa: E501 + baz (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/special_model_name.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/special_model_name.py new file mode 100644 index 000000000000..823e77596636 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/special_model_name.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class SpecialModelName(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'special_property_name': (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'special_property_name': '$special[property.name]', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """SpecialModelName - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + special_property_name (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_boolean_map.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_boolean_map.py new file mode 100644 index 000000000000..4ac526991839 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_boolean_map.py @@ -0,0 +1,169 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class StringBooleanMap(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool,) # noqa: E501 + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """StringBooleanMap - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_enum.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_enum.py new file mode 100644 index 000000000000..37dc04332cac --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_enum.py @@ -0,0 +1,184 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class StringEnum(ModelSimple): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ('value',): { + 'PLACED': "placed", + 'APPROVED': "approved", + 'DELIVERED': "delivered", + }, + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'value': (str,), + } + + @cached_property + def discriminator(): + return None + + + attribute_map = {} + + _composed_schemas = None + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): + """StringEnum - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str):, must be one of ["placed", "approved", "delivered", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["placed", "approved", "delivered", ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/tag.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/tag.py new file mode 100644 index 000000000000..d3dcb78b7ea0 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/tag.py @@ -0,0 +1,172 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Tag(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'id': (int,), # noqa: E501 + 'name': (str,), # noqa: E501 + 'full_name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'id': 'id', # noqa: E501 + 'name': 'name', # noqa: E501 + 'full_name': 'fullName', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Tag - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + full_name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_default.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_default.py new file mode 100644 index 000000000000..324b131f3a2d --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_default.py @@ -0,0 +1,195 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class TypeHolderDefault(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'string_item': (str,), # noqa: E501 + 'number_item': (float,), # noqa: E501 + 'integer_item': (int,), # noqa: E501 + 'bool_item': (bool,), # noqa: E501 + 'array_item': ([int],), # noqa: E501 + 'date_item': (date,), # noqa: E501 + 'datetime_item': (datetime,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'string_item': 'string_item', # noqa: E501 + 'number_item': 'number_item', # noqa: E501 + 'integer_item': 'integer_item', # noqa: E501 + 'bool_item': 'bool_item', # noqa: E501 + 'array_item': 'array_item', # noqa: E501 + 'date_item': 'date_item', # noqa: E501 + 'datetime_item': 'datetime_item', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, array_item, *args, **kwargs): # noqa: E501 + """TypeHolderDefault - a model defined in OpenAPI + + Args: + array_item ([int]): + + Keyword Args: + string_item (str): defaults to "what" # noqa: E501 + number_item (float): defaults to 1.234 # noqa: E501 + integer_item (int): defaults to -2 # noqa: E501 + bool_item (bool): defaults to True # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + date_item (date): [optional] # noqa: E501 + datetime_item (datetime): [optional] # noqa: E501 + """ + + string_item = kwargs.get('string_item', "what") + number_item = kwargs.get('number_item', 1.234) + integer_item = kwargs.get('integer_item', -2) + bool_item = kwargs.get('bool_item', True) + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.string_item = string_item + self.number_item = number_item + self.integer_item = integer_item + self.bool_item = bool_item + self.array_item = array_item + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_example.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_example.py new file mode 100644 index 000000000000..30bbba178f4f --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_example.py @@ -0,0 +1,197 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class TypeHolderExample(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + ('string_item',): { + 'WHAT': "what", + }, + ('number_item',): { + '1.234': 1.234, + }, + ('integer_item',): { + '-2': -2, + }, + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'string_item': (str,), # noqa: E501 + 'number_item': (float,), # noqa: E501 + 'integer_item': (int,), # noqa: E501 + 'bool_item': (bool,), # noqa: E501 + 'array_item': ([int],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'string_item': 'string_item', # noqa: E501 + 'number_item': 'number_item', # noqa: E501 + 'integer_item': 'integer_item', # noqa: E501 + 'bool_item': 'bool_item', # noqa: E501 + 'array_item': 'array_item', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, bool_item, array_item, *args, **kwargs): # noqa: E501 + """TypeHolderExample - a model defined in OpenAPI + + Args: + bool_item (bool): + array_item ([int]): + + Keyword Args: + string_item (str): defaults to "what", must be one of ["what", ] # noqa: E501 + number_item (float): defaults to 1.234, must be one of [1.234, ] # noqa: E501 + integer_item (int): defaults to -2, must be one of [-2, ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + string_item = kwargs.get('string_item', "what") + number_item = kwargs.get('number_item', 1.234) + integer_item = kwargs.get('integer_item', -2) + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.string_item = string_item + self.number_item = number_item + self.integer_item = integer_item + self.bool_item = bool_item + self.array_item = array_item + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/user.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/user.py new file mode 100644 index 000000000000..9a3cd0814114 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/user.py @@ -0,0 +1,187 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class User(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'id': (int,), # noqa: E501 + 'username': (str,), # noqa: E501 + 'first_name': (str,), # noqa: E501 + 'last_name': (str,), # noqa: E501 + 'email': (str,), # noqa: E501 + 'password': (str,), # noqa: E501 + 'phone': (str,), # noqa: E501 + 'user_status': (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'id': 'id', # noqa: E501 + 'username': 'username', # noqa: E501 + 'first_name': 'firstName', # noqa: E501 + 'last_name': 'lastName', # noqa: E501 + 'email': 'email', # noqa: E501 + 'password': 'password', # noqa: E501 + 'phone': 'phone', # noqa: E501 + 'user_status': 'userStatus', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """User - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + username (str): [optional] # noqa: E501 + first_name (str): [optional] # noqa: E501 + last_name (str): [optional] # noqa: E501 + email (str): [optional] # noqa: E501 + password (str): [optional] # noqa: E501 + phone (str): [optional] # noqa: E501 + user_status (int): User Status. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/xml_item.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/xml_item.py new file mode 100644 index 000000000000..8401b3f40076 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/xml_item.py @@ -0,0 +1,250 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class XmlItem(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'attribute_string': (str,), # noqa: E501 + 'attribute_number': (float,), # noqa: E501 + 'attribute_integer': (int,), # noqa: E501 + 'attribute_boolean': (bool,), # noqa: E501 + 'wrapped_array': ([int],), # noqa: E501 + 'name_string': (str,), # noqa: E501 + 'name_number': (float,), # noqa: E501 + 'name_integer': (int,), # noqa: E501 + 'name_boolean': (bool,), # noqa: E501 + 'name_array': ([int],), # noqa: E501 + 'name_wrapped_array': ([int],), # noqa: E501 + 'prefix_string': (str,), # noqa: E501 + 'prefix_number': (float,), # noqa: E501 + 'prefix_integer': (int,), # noqa: E501 + 'prefix_boolean': (bool,), # noqa: E501 + 'prefix_array': ([int],), # noqa: E501 + 'prefix_wrapped_array': ([int],), # noqa: E501 + 'namespace_string': (str,), # noqa: E501 + 'namespace_number': (float,), # noqa: E501 + 'namespace_integer': (int,), # noqa: E501 + 'namespace_boolean': (bool,), # noqa: E501 + 'namespace_array': ([int],), # noqa: E501 + 'namespace_wrapped_array': ([int],), # noqa: E501 + 'prefix_ns_string': (str,), # noqa: E501 + 'prefix_ns_number': (float,), # noqa: E501 + 'prefix_ns_integer': (int,), # noqa: E501 + 'prefix_ns_boolean': (bool,), # noqa: E501 + 'prefix_ns_array': ([int],), # noqa: E501 + 'prefix_ns_wrapped_array': ([int],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'attribute_string': 'attribute_string', # noqa: E501 + 'attribute_number': 'attribute_number', # noqa: E501 + 'attribute_integer': 'attribute_integer', # noqa: E501 + 'attribute_boolean': 'attribute_boolean', # noqa: E501 + 'wrapped_array': 'wrapped_array', # noqa: E501 + 'name_string': 'name_string', # noqa: E501 + 'name_number': 'name_number', # noqa: E501 + 'name_integer': 'name_integer', # noqa: E501 + 'name_boolean': 'name_boolean', # noqa: E501 + 'name_array': 'name_array', # noqa: E501 + 'name_wrapped_array': 'name_wrapped_array', # noqa: E501 + 'prefix_string': 'prefix_string', # noqa: E501 + 'prefix_number': 'prefix_number', # noqa: E501 + 'prefix_integer': 'prefix_integer', # noqa: E501 + 'prefix_boolean': 'prefix_boolean', # noqa: E501 + 'prefix_array': 'prefix_array', # noqa: E501 + 'prefix_wrapped_array': 'prefix_wrapped_array', # noqa: E501 + 'namespace_string': 'namespace_string', # noqa: E501 + 'namespace_number': 'namespace_number', # noqa: E501 + 'namespace_integer': 'namespace_integer', # noqa: E501 + 'namespace_boolean': 'namespace_boolean', # noqa: E501 + 'namespace_array': 'namespace_array', # noqa: E501 + 'namespace_wrapped_array': 'namespace_wrapped_array', # noqa: E501 + 'prefix_ns_string': 'prefix_ns_string', # noqa: E501 + 'prefix_ns_number': 'prefix_ns_number', # noqa: E501 + 'prefix_ns_integer': 'prefix_ns_integer', # noqa: E501 + 'prefix_ns_boolean': 'prefix_ns_boolean', # noqa: E501 + 'prefix_ns_array': 'prefix_ns_array', # noqa: E501 + 'prefix_ns_wrapped_array': 'prefix_ns_wrapped_array', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """XmlItem - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + attribute_string (str): [optional] # noqa: E501 + attribute_number (float): [optional] # noqa: E501 + attribute_integer (int): [optional] # noqa: E501 + attribute_boolean (bool): [optional] # noqa: E501 + wrapped_array ([int]): [optional] # noqa: E501 + name_string (str): [optional] # noqa: E501 + name_number (float): [optional] # noqa: E501 + name_integer (int): [optional] # noqa: E501 + name_boolean (bool): [optional] # noqa: E501 + name_array ([int]): [optional] # noqa: E501 + name_wrapped_array ([int]): [optional] # noqa: E501 + prefix_string (str): [optional] # noqa: E501 + prefix_number (float): [optional] # noqa: E501 + prefix_integer (int): [optional] # noqa: E501 + prefix_boolean (bool): [optional] # noqa: E501 + prefix_array ([int]): [optional] # noqa: E501 + prefix_wrapped_array ([int]): [optional] # noqa: E501 + namespace_string (str): [optional] # noqa: E501 + namespace_number (float): [optional] # noqa: E501 + namespace_integer (int): [optional] # noqa: E501 + namespace_boolean (bool): [optional] # noqa: E501 + namespace_array ([int]): [optional] # noqa: E501 + namespace_wrapped_array ([int]): [optional] # noqa: E501 + prefix_ns_string (str): [optional] # noqa: E501 + prefix_ns_number (float): [optional] # noqa: E501 + prefix_ns_integer (int): [optional] # noqa: E501 + prefix_ns_boolean (bool): [optional] # noqa: E501 + prefix_ns_array ([int]): [optional] # noqa: E501 + prefix_ns_wrapped_array ([int]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py new file mode 100644 index 000000000000..b6d5934170a3 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py @@ -0,0 +1,1848 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from datetime import date, datetime # noqa: F401 +import inspect +import io +import os +import pprint +import re +import tempfile + +from dateutil.parser import parse + +from petstore_api.exceptions import ( + ApiKeyError, + ApiAttributeError, + ApiTypeError, + ApiValueError, +) + +none_type = type(None) +file_type = io.IOBase + + +class cached_property(object): + # this caches the result of the function call for fn with no inputs + # use this as a decorator on fuction methods that you want converted + # into cached properties + result_key = '_results' + + def __init__(self, fn): + self._fn = fn + + def __get__(self, instance, cls=None): + if self.result_key in vars(self): + return vars(self)[self.result_key] + else: + result = self._fn() + setattr(self, self.result_key, result) + return result + + +PRIMITIVE_TYPES = (list, float, int, bool, datetime, date, str, file_type) + +def allows_single_value_input(cls): + """ + This function returns True if the input composed schema model or any + descendant model allows a value only input + This is true for cases where oneOf contains items like: + oneOf: + - float + - NumberWithValidation + - StringEnum + - ArrayModel + - null + TODO: lru_cache this + """ + if ( + issubclass(cls, ModelSimple) or + cls in PRIMITIVE_TYPES + ): + return True + elif issubclass(cls, ModelComposed): + if not cls._composed_schemas['oneOf']: + return False + return any(allows_single_value_input(c) for c in cls._composed_schemas['oneOf']) + return False + +def composed_model_input_classes(cls): + """ + This function returns a list of the possible models that can be accepted as + inputs. + TODO: lru_cache this + """ + if issubclass(cls, ModelSimple) or cls in PRIMITIVE_TYPES: + return [cls] + elif issubclass(cls, ModelNormal): + if cls.discriminator is None: + return [cls] + else: + return get_discriminated_classes(cls) + elif issubclass(cls, ModelComposed): + if not cls._composed_schemas['oneOf']: + return [] + if cls.discriminator is None: + input_classes = [] + for c in cls._composed_schemas['oneOf']: + input_classes.extend(composed_model_input_classes(c)) + return input_classes + else: + return get_discriminated_classes(cls) + return [] + + +class OpenApiModel(object): + """The base class for all OpenAPIModels""" + + def set_attribute(self, name, value): + # this is only used to set properties on self + + path_to_item = [] + if self._path_to_item: + path_to_item.extend(self._path_to_item) + path_to_item.append(name) + + if name in self.openapi_types: + required_types_mixed = self.openapi_types[name] + elif self.additional_properties_type is None: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + path_to_item + ) + elif self.additional_properties_type is not None: + required_types_mixed = self.additional_properties_type + + if get_simple_class(name) != str: + error_msg = type_error_message( + var_name=name, + var_value=name, + valid_classes=(str,), + key_type=True + ) + raise ApiTypeError( + error_msg, + path_to_item=path_to_item, + valid_classes=(str,), + key_type=True + ) + + if self._check_type: + value = validate_and_convert_types( + value, required_types_mixed, path_to_item, self._spec_property_naming, + self._check_type, configuration=self._configuration) + if (name,) in self.allowed_values: + check_allowed_values( + self.allowed_values, + (name,), + value + ) + if (name,) in self.validations: + check_validations( + self.validations, + (name,), + value, + self._configuration + ) + self.__dict__['_data_store'][name] = value + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other + + def __setattr__(self, attr, value): + """set the value of an attribute using dot notation: `instance.attr = val`""" + self[attr] = value + + def __getattr__(self, attr): + """get the value of an attribute using dot notation: `instance.attr`""" + return self.__getitem__(attr) + + def __new__(cls, *args, **kwargs): + # this function uses the discriminator to + # pick a new schema/class to instantiate because a discriminator + # propertyName value was passed in + + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance(cls, model_kwargs, kwargs, model_arg=arg) + return oneof_instance + + + visited_composed_classes = kwargs.get('_visited_composed_classes', ()) + if ( + cls.discriminator is None or + cls in visited_composed_classes + ): + # Use case 1: this openapi schema (cls) does not have a discriminator + # Use case 2: we have already visited this class before and are sure that we + # want to instantiate it this time. We have visited this class deserializing + # a payload with a discriminator. During that process we traveled through + # this class but did not make an instance of it. Now we are making an + # instance of a composed class which contains cls in it, so this time make an instance of cls. + # + # Here's an example of use case 2: If Animal has a discriminator + # petType and we pass in "Dog", and the class Dog + # allOf includes Animal, we move through Animal + # once using the discriminator, and pick Dog. + # Then in the composed schema dog Dog, we will make an instance of the + # Animal class (because Dal has allOf: Animal) but this time we won't travel + # through Animal's discriminator because we passed in + # _visited_composed_classes = (Animal,) + + return super(OpenApiModel, cls).__new__(cls) + + # Get the name and value of the discriminator property. + # The discriminator name is obtained from the discriminator meta-data + # and the discriminator value is obtained from the input data. + discr_propertyname_py = list(cls.discriminator.keys())[0] + discr_propertyname_js = cls.attribute_map[discr_propertyname_py] + if discr_propertyname_js in kwargs: + discr_value = kwargs[discr_propertyname_js] + elif discr_propertyname_py in kwargs: + discr_value = kwargs[discr_propertyname_py] + else: + # The input data does not contain the discriminator property. + path_to_item = kwargs.get('_path_to_item', ()) + raise ApiValueError( + "Cannot deserialize input data due to missing discriminator. " + "The discriminator property '%s' is missing at path: %s" % + (discr_propertyname_js, path_to_item) + ) + + # Implementation note: the last argument to get_discriminator_class + # is a list of visited classes. get_discriminator_class may recursively + # call itself and update the list of visited classes, and the initial + # value must be an empty list. Hence not using 'visited_composed_classes' + new_cls = get_discriminator_class( + cls, discr_propertyname_py, discr_value, []) + if new_cls is None: + path_to_item = kwargs.get('_path_to_item', ()) + disc_prop_value = kwargs.get( + discr_propertyname_js, kwargs.get(discr_propertyname_py)) + raise ApiValueError( + "Cannot deserialize input data due to invalid discriminator " + "value. The OpenAPI document has no mapping for discriminator " + "property '%s'='%s' at path: %s" % + (discr_propertyname_js, disc_prop_value, path_to_item) + ) + + if new_cls in visited_composed_classes: + # if we are making an instance of a composed schema Descendent + # which allOf includes Ancestor, then Ancestor contains + # a discriminator that includes Descendent. + # So if we make an instance of Descendent, we have to make an + # instance of Ancestor to hold the allOf properties. + # This code detects that use case and makes the instance of Ancestor + # For example: + # When making an instance of Dog, _visited_composed_classes = (Dog,) + # then we make an instance of Animal to include in dog._composed_instances + # so when we are here, cls is Animal + # cls.discriminator != None + # cls not in _visited_composed_classes + # new_cls = Dog + # but we know we know that we already have Dog + # because it is in visited_composed_classes + # so make Animal here + return super(OpenApiModel, cls).__new__(cls) + + # Build a list containing all oneOf and anyOf descendants. + oneof_anyof_classes = None + if cls._composed_schemas is not None: + oneof_anyof_classes = ( + cls._composed_schemas.get('oneOf', ()) + + cls._composed_schemas.get('anyOf', ())) + oneof_anyof_child = new_cls in oneof_anyof_classes + kwargs['_visited_composed_classes'] = visited_composed_classes + (cls,) + + if cls._composed_schemas.get('allOf') and oneof_anyof_child: + # Validate that we can make self because when we make the + # new_cls it will not include the allOf validations in self + self_inst = super(OpenApiModel, cls).__new__(cls) + self_inst.__init__(*args, **kwargs) + + new_inst = new_cls.__new__(new_cls, *args, **kwargs) + new_inst.__init__(*args, **kwargs) + return new_inst + + +class ModelSimple(OpenApiModel): + """the parent class of models whose type != object in their + swagger/openapi""" + + def __setitem__(self, name, value): + """set the value of an attribute using square-bracket notation: `instance[attr] = val`""" + if name in self.required_properties: + self.__dict__[name] = value + return + + self.set_attribute(name, value) + + def get(self, name, default=None): + """returns the value of an attribute or some default value if the attribute was not set""" + if name in self.required_properties: + return self.__dict__[name] + + return self.__dict__['_data_store'].get(name, default) + + def __getitem__(self, name): + """get the value of an attribute using square-bracket notation: `instance[attr]`""" + if name in self: + return self.get(name) + + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + + def __contains__(self, name): + """used by `in` operator to check if an attrbute value was set in an instance: `'attr' in instance`""" + if name in self.required_properties: + return name in self.__dict__ + + return name in self.__dict__['_data_store'] + + def to_str(self): + """Returns the string representation of the model""" + return str(self.value) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + this_val = self._data_store['value'] + that_val = other._data_store['value'] + types = set() + types.add(this_val.__class__) + types.add(that_val.__class__) + vals_equal = this_val == that_val + return vals_equal + + +class ModelNormal(OpenApiModel): + """the parent class of models whose type == object in their + swagger/openapi""" + + def __setitem__(self, name, value): + """set the value of an attribute using square-bracket notation: `instance[attr] = val`""" + if name in self.required_properties: + self.__dict__[name] = value + return + + self.set_attribute(name, value) + + def get(self, name, default=None): + """returns the value of an attribute or some default value if the attribute was not set""" + if name in self.required_properties: + return self.__dict__[name] + + return self.__dict__['_data_store'].get(name, default) + + def __getitem__(self, name): + """get the value of an attribute using square-bracket notation: `instance[attr]`""" + if name in self: + return self.get(name) + + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + + def __contains__(self, name): + """used by `in` operator to check if an attrbute value was set in an instance: `'attr' in instance`""" + if name in self.required_properties: + return name in self.__dict__ + + return name in self.__dict__['_data_store'] + + def to_dict(self): + """Returns the model properties as a dict""" + return model_to_dict(self, serialize=False) + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + if not set(self._data_store.keys()) == set(other._data_store.keys()): + return False + for _var_name, this_val in self._data_store.items(): + that_val = other._data_store[_var_name] + types = set() + types.add(this_val.__class__) + types.add(that_val.__class__) + vals_equal = this_val == that_val + if not vals_equal: + return False + return True + + +class ModelComposed(OpenApiModel): + """the parent class of models whose type == object in their + swagger/openapi and have oneOf/allOf/anyOf + + When one sets a property we use var_name_to_model_instances to store the value in + the correct class instances + run any type checking + validation code. + When one gets a property we use var_name_to_model_instances to get the value + from the correct class instances. + This allows multiple composed schemas to contain the same property with additive + constraints on the value. + + _composed_schemas (dict) stores the anyOf/allOf/oneOf classes + key (str): allOf/oneOf/anyOf + value (list): the classes in the XOf definition. + Note: none_type can be included when the openapi document version >= 3.1.0 + _composed_instances (list): stores a list of instances of the composed schemas + defined in _composed_schemas. When properties are accessed in the self instance, + they are returned from the self._data_store or the data stores in the instances + in self._composed_schemas + _var_name_to_model_instances (dict): maps between a variable name on self and + the composed instances (self included) which contain that data + key (str): property name + value (list): list of class instances, self or instances in _composed_instances + which contain the value that the key is referring to. + """ + + def __setitem__(self, name, value): + """set the value of an attribute using square-bracket notation: `instance[attr] = val`""" + if name in self.required_properties: + self.__dict__[name] = value + return + + """ + Use cases: + 1. additional_properties_type is None (additionalProperties == False in spec) + Check for property presence in self.openapi_types + if not present then throw an error + if present set in self, set attribute + always set on composed schemas + 2. additional_properties_type exists + set attribute on self + always set on composed schemas + """ + if self.additional_properties_type is None: + """ + For an attribute to exist on a composed schema it must: + - fulfill schema_requirements in the self composed schema not considering oneOf/anyOf/allOf schemas AND + - fulfill schema_requirements in each oneOf/anyOf/allOf schemas + + schema_requirements: + For an attribute to exist on a schema it must: + - be present in properties at the schema OR + - have additionalProperties unset (defaults additionalProperties = any type) OR + - have additionalProperties set + """ + if name not in self.openapi_types: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + # attribute must be set on self and composed instances + self.set_attribute(name, value) + for model_instance in self._composed_instances: + setattr(model_instance, name, value) + if name not in self._var_name_to_model_instances: + # we assigned an additional property + self.__dict__['_var_name_to_model_instances'][name] = self._composed_instances + [self] + return None + + __unset_attribute_value__ = object() + + def get(self, name, default=None): + """returns the value of an attribute or some default value if the attribute was not set""" + if name in self.required_properties: + return self.__dict__[name] + + # get the attribute from the correct instance + model_instances = self._var_name_to_model_instances.get(name) + values = [] + # A composed model stores self and child (oneof/anyOf/allOf) models under + # self._var_name_to_model_instances. + # Any property must exist in self and all model instances + # The value stored in all model instances must be the same + if model_instances: + for model_instance in model_instances: + if name in model_instance._data_store: + v = model_instance._data_store[name] + if v not in values: + values.append(v) + len_values = len(values) + if len_values == 0: + return default + elif len_values == 1: + return values[0] + elif len_values > 1: + raise ApiValueError( + "Values stored for property {0} in {1} differ when looking " + "at self and self's composed instances. All values must be " + "the same".format(name, type(self).__name__), + [e for e in [self._path_to_item, name] if e] + ) + + def __getitem__(self, name): + """get the value of an attribute using square-bracket notation: `instance[attr]`""" + value = self.get(name, self.__unset_attribute_value__) + if value is self.__unset_attribute_value__: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + return value + + def __contains__(self, name): + """used by `in` operator to check if an attrbute value was set in an instance: `'attr' in instance`""" + + if name in self.required_properties: + return name in self.__dict__ + + model_instances = self._var_name_to_model_instances.get( + name, self._additional_properties_model_instances) + + if model_instances: + for model_instance in model_instances: + if name in model_instance._data_store: + return True + + return False + + def to_dict(self): + """Returns the model properties as a dict""" + return model_to_dict(self, serialize=False) + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + if not set(self._data_store.keys()) == set(other._data_store.keys()): + return False + for _var_name, this_val in self._data_store.items(): + that_val = other._data_store[_var_name] + types = set() + types.add(this_val.__class__) + types.add(that_val.__class__) + vals_equal = this_val == that_val + if not vals_equal: + return False + return True + + +COERCION_INDEX_BY_TYPE = { + ModelComposed: 0, + ModelNormal: 1, + ModelSimple: 2, + none_type: 3, # The type of 'None'. + list: 4, + dict: 5, + float: 6, + int: 7, + bool: 8, + datetime: 9, + date: 10, + str: 11, + file_type: 12, # 'file_type' is an alias for the built-in 'file' or 'io.IOBase' type. +} + +# these are used to limit what type conversions we try to do +# when we have a valid type already and we want to try converting +# to another type +UPCONVERSION_TYPE_PAIRS = ( + (str, datetime), + (str, date), + (int, float), # A float may be serialized as an integer, e.g. '3' is a valid serialized float. + (list, ModelComposed), + (dict, ModelComposed), + (str, ModelComposed), + (int, ModelComposed), + (float, ModelComposed), + (list, ModelComposed), + (list, ModelNormal), + (dict, ModelNormal), + (str, ModelSimple), + (int, ModelSimple), + (float, ModelSimple), + (list, ModelSimple), +) + +COERCIBLE_TYPE_PAIRS = { + False: ( # client instantiation of a model with client data + # (dict, ModelComposed), + # (list, ModelComposed), + # (dict, ModelNormal), + # (list, ModelNormal), + # (str, ModelSimple), + # (int, ModelSimple), + # (float, ModelSimple), + # (list, ModelSimple), + # (str, int), + # (str, float), + # (str, datetime), + # (str, date), + # (int, str), + # (float, str), + ), + True: ( # server -> client data + (dict, ModelComposed), + (list, ModelComposed), + (dict, ModelNormal), + (list, ModelNormal), + (str, ModelSimple), + (int, ModelSimple), + (float, ModelSimple), + (list, ModelSimple), + # (str, int), + # (str, float), + (str, datetime), + (str, date), + # (int, str), + # (float, str), + (str, file_type) + ), +} + + +def get_simple_class(input_value): + """Returns an input_value's simple class that we will use for type checking + Python2: + float and int will return int, where int is the python3 int backport + str and unicode will return str, where str is the python3 str backport + Note: float and int ARE both instances of int backport + Note: str_py2 and unicode_py2 are NOT both instances of str backport + + Args: + input_value (class/class_instance): the item for which we will return + the simple class + """ + if isinstance(input_value, type): + # input_value is a class + return input_value + elif isinstance(input_value, tuple): + return tuple + elif isinstance(input_value, list): + return list + elif isinstance(input_value, dict): + return dict + elif isinstance(input_value, none_type): + return none_type + elif isinstance(input_value, file_type): + return file_type + elif isinstance(input_value, bool): + # this must be higher than the int check because + # isinstance(True, int) == True + return bool + elif isinstance(input_value, int): + return int + elif isinstance(input_value, datetime): + # this must be higher than the date check because + # isinstance(datetime_instance, date) == True + return datetime + elif isinstance(input_value, date): + return date + elif isinstance(input_value, str): + return str + return type(input_value) + + +def check_allowed_values(allowed_values, input_variable_path, input_values): + """Raises an exception if the input_values are not allowed + + Args: + allowed_values (dict): the allowed_values dict + input_variable_path (tuple): the path to the input variable + input_values (list/str/int/float/date/datetime): the values that we + are checking to see if they are in allowed_values + """ + these_allowed_values = list(allowed_values[input_variable_path].values()) + if (isinstance(input_values, list) + and not set(input_values).issubset( + set(these_allowed_values))): + invalid_values = ", ".join( + map(str, set(input_values) - set(these_allowed_values))), + raise ApiValueError( + "Invalid values for `%s` [%s], must be a subset of [%s]" % + ( + input_variable_path[0], + invalid_values, + ", ".join(map(str, these_allowed_values)) + ) + ) + elif (isinstance(input_values, dict) + and not set( + input_values.keys()).issubset(set(these_allowed_values))): + invalid_values = ", ".join( + map(str, set(input_values.keys()) - set(these_allowed_values))) + raise ApiValueError( + "Invalid keys in `%s` [%s], must be a subset of [%s]" % + ( + input_variable_path[0], + invalid_values, + ", ".join(map(str, these_allowed_values)) + ) + ) + elif (not isinstance(input_values, (list, dict)) + and input_values not in these_allowed_values): + raise ApiValueError( + "Invalid value for `%s` (%s), must be one of %s" % + ( + input_variable_path[0], + input_values, + these_allowed_values + ) + ) + + +def is_json_validation_enabled(schema_keyword, configuration=None): + """Returns true if JSON schema validation is enabled for the specified + validation keyword. This can be used to skip JSON schema structural validation + as requested in the configuration. + + Args: + schema_keyword (string): the name of a JSON schema validation keyword. + configuration (Configuration): the configuration class. + """ + + return (configuration is None or + not hasattr(configuration, '_disabled_client_side_validations') or + schema_keyword not in configuration._disabled_client_side_validations) + + +def check_validations( + validations, input_variable_path, input_values, + configuration=None): + """Raises an exception if the input_values are invalid + + Args: + validations (dict): the validation dictionary. + input_variable_path (tuple): the path to the input variable. + input_values (list/str/int/float/date/datetime): the values that we + are checking. + configuration (Configuration): the configuration class. + """ + + if input_values is None: + return + + current_validations = validations[input_variable_path] + if (is_json_validation_enabled('multipleOf', configuration) and + 'multiple_of' in current_validations and + isinstance(input_values, (int, float)) and + not (float(input_values) / current_validations['multiple_of']).is_integer()): + # Note 'multipleOf' will be as good as the floating point arithmetic. + raise ApiValueError( + "Invalid value for `%s`, value must be a multiple of " + "`%s`" % ( + input_variable_path[0], + current_validations['multiple_of'] + ) + ) + + if (is_json_validation_enabled('maxLength', configuration) and + 'max_length' in current_validations and + len(input_values) > current_validations['max_length']): + raise ApiValueError( + "Invalid value for `%s`, length must be less than or equal to " + "`%s`" % ( + input_variable_path[0], + current_validations['max_length'] + ) + ) + + if (is_json_validation_enabled('minLength', configuration) and + 'min_length' in current_validations and + len(input_values) < current_validations['min_length']): + raise ApiValueError( + "Invalid value for `%s`, length must be greater than or equal to " + "`%s`" % ( + input_variable_path[0], + current_validations['min_length'] + ) + ) + + if (is_json_validation_enabled('maxItems', configuration) and + 'max_items' in current_validations and + len(input_values) > current_validations['max_items']): + raise ApiValueError( + "Invalid value for `%s`, number of items must be less than or " + "equal to `%s`" % ( + input_variable_path[0], + current_validations['max_items'] + ) + ) + + if (is_json_validation_enabled('minItems', configuration) and + 'min_items' in current_validations and + len(input_values) < current_validations['min_items']): + raise ValueError( + "Invalid value for `%s`, number of items must be greater than or " + "equal to `%s`" % ( + input_variable_path[0], + current_validations['min_items'] + ) + ) + + items = ('exclusive_maximum', 'inclusive_maximum', 'exclusive_minimum', + 'inclusive_minimum') + if (any(item in current_validations for item in items)): + if isinstance(input_values, list): + max_val = max(input_values) + min_val = min(input_values) + elif isinstance(input_values, dict): + max_val = max(input_values.values()) + min_val = min(input_values.values()) + else: + max_val = input_values + min_val = input_values + + if (is_json_validation_enabled('exclusiveMaximum', configuration) and + 'exclusive_maximum' in current_validations and + max_val >= current_validations['exclusive_maximum']): + raise ApiValueError( + "Invalid value for `%s`, must be a value less than `%s`" % ( + input_variable_path[0], + current_validations['exclusive_maximum'] + ) + ) + + if (is_json_validation_enabled('maximum', configuration) and + 'inclusive_maximum' in current_validations and + max_val > current_validations['inclusive_maximum']): + raise ApiValueError( + "Invalid value for `%s`, must be a value less than or equal to " + "`%s`" % ( + input_variable_path[0], + current_validations['inclusive_maximum'] + ) + ) + + if (is_json_validation_enabled('exclusiveMinimum', configuration) and + 'exclusive_minimum' in current_validations and + min_val <= current_validations['exclusive_minimum']): + raise ApiValueError( + "Invalid value for `%s`, must be a value greater than `%s`" % + ( + input_variable_path[0], + current_validations['exclusive_maximum'] + ) + ) + + if (is_json_validation_enabled('minimum', configuration) and + 'inclusive_minimum' in current_validations and + min_val < current_validations['inclusive_minimum']): + raise ApiValueError( + "Invalid value for `%s`, must be a value greater than or equal " + "to `%s`" % ( + input_variable_path[0], + current_validations['inclusive_minimum'] + ) + ) + flags = current_validations.get('regex', {}).get('flags', 0) + if (is_json_validation_enabled('pattern', configuration) and + 'regex' in current_validations and + not re.search(current_validations['regex']['pattern'], + input_values, flags=flags)): + err_msg = r"Invalid value for `%s`, must match regular expression `%s`" % ( + input_variable_path[0], + current_validations['regex']['pattern'] + ) + if flags != 0: + # Don't print the regex flags if the flags are not + # specified in the OAS document. + err_msg = r"%s with flags=`%s`" % (err_msg, flags) + raise ApiValueError(err_msg) + + +def order_response_types(required_types): + """Returns the required types sorted in coercion order + + Args: + required_types (list/tuple): collection of classes or instance of + list or dict with class information inside it. + + Returns: + (list): coercion order sorted collection of classes or instance + of list or dict with class information inside it. + """ + + def index_getter(class_or_instance): + if isinstance(class_or_instance, list): + return COERCION_INDEX_BY_TYPE[list] + elif isinstance(class_or_instance, dict): + return COERCION_INDEX_BY_TYPE[dict] + elif (inspect.isclass(class_or_instance) + and issubclass(class_or_instance, ModelComposed)): + return COERCION_INDEX_BY_TYPE[ModelComposed] + elif (inspect.isclass(class_or_instance) + and issubclass(class_or_instance, ModelNormal)): + return COERCION_INDEX_BY_TYPE[ModelNormal] + elif (inspect.isclass(class_or_instance) + and issubclass(class_or_instance, ModelSimple)): + return COERCION_INDEX_BY_TYPE[ModelSimple] + elif class_or_instance in COERCION_INDEX_BY_TYPE: + return COERCION_INDEX_BY_TYPE[class_or_instance] + raise ApiValueError("Unsupported type: %s" % class_or_instance) + + sorted_types = sorted( + required_types, + key=lambda class_or_instance: index_getter(class_or_instance) + ) + return sorted_types + + +def remove_uncoercible(required_types_classes, current_item, spec_property_naming, + must_convert=True): + """Only keeps the type conversions that are possible + + Args: + required_types_classes (tuple): tuple of classes that are required + these should be ordered by COERCION_INDEX_BY_TYPE + spec_property_naming (bool): True if the variable names in the input + data are serialized names as specified in the OpenAPI document. + False if the variables names in the input data are python + variable names in PEP-8 snake case. + current_item (any): the current item (input data) to be converted + + Keyword Args: + must_convert (bool): if True the item to convert is of the wrong + type and we want a big list of coercibles + if False, we want a limited list of coercibles + + Returns: + (list): the remaining coercible required types, classes only + """ + current_type_simple = get_simple_class(current_item) + + results_classes = [] + for required_type_class in required_types_classes: + # convert our models to OpenApiModel + required_type_class_simplified = required_type_class + if isinstance(required_type_class_simplified, type): + if issubclass(required_type_class_simplified, ModelComposed): + required_type_class_simplified = ModelComposed + elif issubclass(required_type_class_simplified, ModelNormal): + required_type_class_simplified = ModelNormal + elif issubclass(required_type_class_simplified, ModelSimple): + required_type_class_simplified = ModelSimple + + if required_type_class_simplified == current_type_simple: + # don't consider converting to one's own class + continue + + class_pair = (current_type_simple, required_type_class_simplified) + if must_convert and class_pair in COERCIBLE_TYPE_PAIRS[spec_property_naming]: + results_classes.append(required_type_class) + elif class_pair in UPCONVERSION_TYPE_PAIRS: + results_classes.append(required_type_class) + return results_classes + +def get_discriminated_classes(cls): + """ + Returns all the classes that a discriminator converts to + TODO: lru_cache this + """ + possible_classes = [] + key = list(cls.discriminator.keys())[0] + if is_type_nullable(cls): + possible_classes.append(cls) + for discr_cls in cls.discriminator[key].values(): + if hasattr(discr_cls, 'discriminator') and discr_cls.discriminator is not None: + possible_classes.extend(get_discriminated_classes(discr_cls)) + else: + possible_classes.append(discr_cls) + return possible_classes + + +def get_possible_classes(cls, from_server_context): + # TODO: lru_cache this + possible_classes = [cls] + if from_server_context: + return possible_classes + if hasattr(cls, 'discriminator') and cls.discriminator is not None: + possible_classes = [] + possible_classes.extend(get_discriminated_classes(cls)) + elif issubclass(cls, ModelComposed): + possible_classes.extend(composed_model_input_classes(cls)) + return possible_classes + + +def get_required_type_classes(required_types_mixed, spec_property_naming): + """Converts the tuple required_types into a tuple and a dict described + below + + Args: + required_types_mixed (tuple/list): will contain either classes or + instance of list or dict + spec_property_naming (bool): if True these values came from the + server, and we use the data types in our endpoints. + If False, we are client side and we need to include + oneOf and discriminator classes inside the data types in our endpoints + + Returns: + (valid_classes, dict_valid_class_to_child_types_mixed): + valid_classes (tuple): the valid classes that the current item + should be + dict_valid_class_to_child_types_mixed (dict): + valid_class (class): this is the key + child_types_mixed (list/dict/tuple): describes the valid child + types + """ + valid_classes = [] + child_req_types_by_current_type = {} + for required_type in required_types_mixed: + if isinstance(required_type, list): + valid_classes.append(list) + child_req_types_by_current_type[list] = required_type + elif isinstance(required_type, tuple): + valid_classes.append(tuple) + child_req_types_by_current_type[tuple] = required_type + elif isinstance(required_type, dict): + valid_classes.append(dict) + child_req_types_by_current_type[dict] = required_type[str] + else: + valid_classes.extend(get_possible_classes(required_type, spec_property_naming)) + return tuple(valid_classes), child_req_types_by_current_type + + +def change_keys_js_to_python(input_dict, model_class): + """ + Converts from javascript_key keys in the input_dict to python_keys in + the output dict using the mapping in model_class. + If the input_dict contains a key which does not declared in the model_class, + the key is added to the output dict as is. The assumption is the model_class + may have undeclared properties (additionalProperties attribute in the OAS + document). + """ + + if getattr(model_class, 'attribute_map', None) is None: + return input_dict + output_dict = {} + reversed_attr_map = {value: key for key, value in + model_class.attribute_map.items()} + for javascript_key, value in input_dict.items(): + python_key = reversed_attr_map.get(javascript_key) + if python_key is None: + # if the key is unknown, it is in error or it is an + # additionalProperties variable + python_key = javascript_key + output_dict[python_key] = value + return output_dict + + +def get_type_error(var_value, path_to_item, valid_classes, key_type=False): + error_msg = type_error_message( + var_name=path_to_item[-1], + var_value=var_value, + valid_classes=valid_classes, + key_type=key_type + ) + return ApiTypeError( + error_msg, + path_to_item=path_to_item, + valid_classes=valid_classes, + key_type=key_type + ) + + +def deserialize_primitive(data, klass, path_to_item): + """Deserializes string to primitive type. + + :param data: str/int/float + :param klass: str/class the class to convert to + + :return: int, float, str, bool, date, datetime + """ + additional_message = "" + try: + if klass in {datetime, date}: + additional_message = ( + "If you need your parameter to have a fallback " + "string value, please set its type as `type: {}` in your " + "spec. That allows the value to be any type. " + ) + if klass == datetime: + if len(data) < 8: + raise ValueError("This is not a datetime") + # The string should be in iso8601 datetime format. + parsed_datetime = parse(data) + date_only = ( + parsed_datetime.hour == 0 and + parsed_datetime.minute == 0 and + parsed_datetime.second == 0 and + parsed_datetime.tzinfo is None and + 8 <= len(data) <= 10 + ) + if date_only: + raise ValueError("This is a date, not a datetime") + return parsed_datetime + elif klass == date: + if len(data) < 8: + raise ValueError("This is not a date") + return parse(data).date() + else: + converted_value = klass(data) + if isinstance(data, str) and klass == float: + if str(converted_value) != data: + # '7' -> 7.0 -> '7.0' != '7' + raise ValueError('This is not a float') + return converted_value + except (OverflowError, ValueError) as ex: + # parse can raise OverflowError + raise ApiValueError( + "{0}Failed to parse {1} as {2}".format( + additional_message, repr(data), klass.__name__ + ), + path_to_item=path_to_item + ) from ex + + +def get_discriminator_class(model_class, + discr_name, + discr_value, cls_visited): + """Returns the child class specified by the discriminator. + + Args: + model_class (OpenApiModel): the model class. + discr_name (string): the name of the discriminator property. + discr_value (any): the discriminator value. + cls_visited (list): list of model classes that have been visited. + Used to determine the discriminator class without + visiting circular references indefinitely. + + Returns: + used_model_class (class/None): the chosen child class that will be used + to deserialize the data, for example dog.Dog. + If a class is not found, None is returned. + """ + + if model_class in cls_visited: + # The class has already been visited and no suitable class was found. + return None + cls_visited.append(model_class) + used_model_class = None + if discr_name in model_class.discriminator: + class_name_to_discr_class = model_class.discriminator[discr_name] + used_model_class = class_name_to_discr_class.get(discr_value) + if used_model_class is None: + # We didn't find a discriminated class in class_name_to_discr_class. + # So look in the ancestor or descendant discriminators + # The discriminator mapping may exist in a descendant (anyOf, oneOf) + # or ancestor (allOf). + # Ancestor example: in the GrandparentAnimal -> ParentPet -> ChildCat + # hierarchy, the discriminator mappings may be defined at any level + # in the hierarchy. + # Descendant example: mammal -> whale/zebra/Pig -> BasquePig/DanishPig + # if we try to make BasquePig from mammal, we need to travel through + # the oneOf descendant discriminators to find BasquePig + descendant_classes = model_class._composed_schemas.get('oneOf', ()) + \ + model_class._composed_schemas.get('anyOf', ()) + ancestor_classes = model_class._composed_schemas.get('allOf', ()) + possible_classes = descendant_classes + ancestor_classes + for cls in possible_classes: + # Check if the schema has inherited discriminators. + if hasattr(cls, 'discriminator') and cls.discriminator is not None: + used_model_class = get_discriminator_class( + cls, discr_name, discr_value, cls_visited) + if used_model_class is not None: + return used_model_class + return used_model_class + + +def deserialize_model(model_data, model_class, path_to_item, check_type, + configuration, spec_property_naming): + """Deserializes model_data to model instance. + + Args: + model_data (int/str/float/bool/none_type/list/dict): data to instantiate the model + model_class (OpenApiModel): the model class + path_to_item (list): path to the model in the received data + check_type (bool): whether to check the data tupe for the values in + the model + configuration (Configuration): the instance to use to convert files + spec_property_naming (bool): True if the variable names in the input + data are serialized names as specified in the OpenAPI document. + False if the variables names in the input data are python + variable names in PEP-8 snake case. + + Returns: + model instance + + Raise: + ApiTypeError + ApiValueError + ApiKeyError + """ + + kw_args = dict(_check_type=check_type, + _path_to_item=path_to_item, + _configuration=configuration, + _spec_property_naming=spec_property_naming) + + if issubclass(model_class, ModelSimple): + return model_class(model_data, **kw_args) + elif isinstance(model_data, list): + return model_class(*model_data, **kw_args) + if isinstance(model_data, dict): + kw_args.update(model_data) + return model_class(**kw_args) + elif isinstance(model_data, PRIMITIVE_TYPES): + return model_class(model_data, **kw_args) + + +def deserialize_file(response_data, configuration, content_disposition=None): + """Deserializes body to file + + Saves response body into a file in a temporary folder, + using the filename from the `Content-Disposition` header if provided. + + Args: + param response_data (str): the file data to write + configuration (Configuration): the instance to use to convert files + + Keyword Args: + content_disposition (str): the value of the Content-Disposition + header + + Returns: + (file_type): the deserialized file which is open + The user is responsible for closing and reading the file + """ + fd, path = tempfile.mkstemp(dir=configuration.temp_folder_path) + os.close(fd) + os.remove(path) + + if content_disposition: + filename = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', + content_disposition).group(1) + path = os.path.join(os.path.dirname(path), filename) + + with open(path, "wb") as f: + if isinstance(response_data, str): + # change str to bytes so we can write it + response_data = response_data.encode('utf-8') + f.write(response_data) + + f = open(path, "rb") + return f + + +def attempt_convert_item(input_value, valid_classes, path_to_item, + configuration, spec_property_naming, key_type=False, + must_convert=False, check_type=True): + """ + Args: + input_value (any): the data to convert + valid_classes (any): the classes that are valid + path_to_item (list): the path to the item to convert + configuration (Configuration): the instance to use to convert files + spec_property_naming (bool): True if the variable names in the input + data are serialized names as specified in the OpenAPI document. + False if the variables names in the input data are python + variable names in PEP-8 snake case. + key_type (bool): if True we need to convert a key type (not supported) + must_convert (bool): if True we must convert + check_type (bool): if True we check the type or the returned data in + ModelComposed/ModelNormal/ModelSimple instances + + Returns: + instance (any) the fixed item + + Raises: + ApiTypeError + ApiValueError + ApiKeyError + """ + valid_classes_ordered = order_response_types(valid_classes) + valid_classes_coercible = remove_uncoercible( + valid_classes_ordered, input_value, spec_property_naming) + if not valid_classes_coercible or key_type: + # we do not handle keytype errors, json will take care + # of this for us + if configuration is None or not configuration.discard_unknown_keys: + raise get_type_error(input_value, path_to_item, valid_classes, + key_type=key_type) + for valid_class in valid_classes_coercible: + try: + if issubclass(valid_class, OpenApiModel): + return deserialize_model(input_value, valid_class, + path_to_item, check_type, + configuration, spec_property_naming) + elif valid_class == file_type: + return deserialize_file(input_value, configuration) + return deserialize_primitive(input_value, valid_class, + path_to_item) + except (ApiTypeError, ApiValueError, ApiKeyError) as conversion_exc: + if must_convert: + raise conversion_exc + # if we have conversion errors when must_convert == False + # we ignore the exception and move on to the next class + continue + # we were unable to convert, must_convert == False + return input_value + + +def is_type_nullable(input_type): + """ + Returns true if None is an allowed value for the specified input_type. + + A type is nullable if at least one of the following conditions is true: + 1. The OAS 'nullable' attribute has been specified, + 1. The type is the 'null' type, + 1. The type is a anyOf/oneOf composed schema, and a child schema is + the 'null' type. + Args: + input_type (type): the class of the input_value that we are + checking + Returns: + bool + """ + if input_type is none_type: + return True + if issubclass(input_type, OpenApiModel) and input_type._nullable: + return True + if issubclass(input_type, ModelComposed): + # If oneOf/anyOf, check if the 'null' type is one of the allowed types. + for t in input_type._composed_schemas.get('oneOf', ()): + if is_type_nullable(t): return True + for t in input_type._composed_schemas.get('anyOf', ()): + if is_type_nullable(t): return True + return False + + +def is_valid_type(input_class_simple, valid_classes): + """ + Args: + input_class_simple (class): the class of the input_value that we are + checking + valid_classes (tuple): the valid classes that the current item + should be + Returns: + bool + """ + valid_type = input_class_simple in valid_classes + if not valid_type and ( + issubclass(input_class_simple, OpenApiModel) or + input_class_simple is none_type): + for valid_class in valid_classes: + if input_class_simple is none_type and is_type_nullable(valid_class): + # Schema is oneOf/anyOf and the 'null' type is one of the allowed types. + return True + if not (issubclass(valid_class, OpenApiModel) and valid_class.discriminator): + continue + discr_propertyname_py = list(valid_class.discriminator.keys())[0] + discriminator_classes = ( + valid_class.discriminator[discr_propertyname_py].values() + ) + valid_type = is_valid_type(input_class_simple, discriminator_classes) + if valid_type: + return True + return valid_type + + +def validate_and_convert_types(input_value, required_types_mixed, path_to_item, + spec_property_naming, _check_type, configuration=None): + """Raises a TypeError is there is a problem, otherwise returns value + + Args: + input_value (any): the data to validate/convert + required_types_mixed (list/dict/tuple): A list of + valid classes, or a list tuples of valid classes, or a dict where + the value is a tuple of value classes + path_to_item: (list) the path to the data being validated + this stores a list of keys or indices to get to the data being + validated + spec_property_naming (bool): True if the variable names in the input + data are serialized names as specified in the OpenAPI document. + False if the variables names in the input data are python + variable names in PEP-8 snake case. + _check_type: (boolean) if true, type will be checked and conversion + will be attempted. + configuration: (Configuration): the configuration class to use + when converting file_type items. + If passed, conversion will be attempted when possible + If not passed, no conversions will be attempted and + exceptions will be raised + + Returns: + the correctly typed value + + Raises: + ApiTypeError + """ + results = get_required_type_classes(required_types_mixed, spec_property_naming) + valid_classes, child_req_types_by_current_type = results + + input_class_simple = get_simple_class(input_value) + valid_type = is_valid_type(input_class_simple, valid_classes) + if not valid_type: + if configuration: + # if input_value is not valid_type try to convert it + converted_instance = attempt_convert_item( + input_value, + valid_classes, + path_to_item, + configuration, + spec_property_naming, + key_type=False, + must_convert=True, + check_type=_check_type + ) + return converted_instance + else: + raise get_type_error(input_value, path_to_item, valid_classes, + key_type=False) + + # input_value's type is in valid_classes + if len(valid_classes) > 1 and configuration: + # there are valid classes which are not the current class + valid_classes_coercible = remove_uncoercible( + valid_classes, input_value, spec_property_naming, must_convert=False) + if valid_classes_coercible: + converted_instance = attempt_convert_item( + input_value, + valid_classes_coercible, + path_to_item, + configuration, + spec_property_naming, + key_type=False, + must_convert=False, + check_type=_check_type + ) + return converted_instance + + if child_req_types_by_current_type == {}: + # all types are of the required types and there are no more inner + # variables left to look at + return input_value + inner_required_types = child_req_types_by_current_type.get( + type(input_value) + ) + if inner_required_types is None: + # for this type, there are not more inner variables left to look at + return input_value + if isinstance(input_value, list): + if input_value == []: + # allow an empty list + return input_value + for index, inner_value in enumerate(input_value): + inner_path = list(path_to_item) + inner_path.append(index) + input_value[index] = validate_and_convert_types( + inner_value, + inner_required_types, + inner_path, + spec_property_naming, + _check_type, + configuration=configuration + ) + elif isinstance(input_value, dict): + if input_value == {}: + # allow an empty dict + return input_value + for inner_key, inner_val in input_value.items(): + inner_path = list(path_to_item) + inner_path.append(inner_key) + if get_simple_class(inner_key) != str: + raise get_type_error(inner_key, inner_path, valid_classes, + key_type=True) + input_value[inner_key] = validate_and_convert_types( + inner_val, + inner_required_types, + inner_path, + spec_property_naming, + _check_type, + configuration=configuration + ) + return input_value + + +def model_to_dict(model_instance, serialize=True): + """Returns the model properties as a dict + + Args: + model_instance (one of your model instances): the model instance that + will be converted to a dict. + + Keyword Args: + serialize (bool): if True, the keys in the dict will be values from + attribute_map + """ + result = {} + + model_instances = [model_instance] + if model_instance._composed_schemas: + model_instances.extend(model_instance._composed_instances) + for model_instance in model_instances: + for attr, value in model_instance._data_store.items(): + if serialize: + # we use get here because additional property key names do not + # exist in attribute_map + attr = model_instance.attribute_map.get(attr, attr) + if isinstance(value, list): + if not value or isinstance(value[0], PRIMITIVE_TYPES): + # empty list or primitive types + result[attr] = value + elif isinstance(value[0], ModelSimple): + result[attr] = [x.value for x in value] + else: + result[attr] = [model_to_dict(x, serialize=serialize) for x in value] + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], + model_to_dict(item[1], serialize=serialize)) + if hasattr(item[1], '_data_store') else item, + value.items() + )) + elif isinstance(value, ModelSimple): + result[attr] = value.value + elif hasattr(value, '_data_store'): + result[attr] = model_to_dict(value, serialize=serialize) + else: + result[attr] = value + + return result + + +def type_error_message(var_value=None, var_name=None, valid_classes=None, + key_type=None): + """ + Keyword Args: + var_value (any): the variable which has the type_error + var_name (str): the name of the variable which has the typ error + valid_classes (tuple): the accepted classes for current_item's + value + key_type (bool): False if our value is a value in a dict + True if it is a key in a dict + False if our item is an item in a list + """ + key_or_value = 'value' + if key_type: + key_or_value = 'key' + valid_classes_phrase = get_valid_classes_phrase(valid_classes) + msg = ( + "Invalid type for variable '{0}'. Required {1} type {2} and " + "passed type was {3}".format( + var_name, + key_or_value, + valid_classes_phrase, + type(var_value).__name__, + ) + ) + return msg + + +def get_valid_classes_phrase(input_classes): + """Returns a string phrase describing what types are allowed + """ + all_classes = list(input_classes) + all_classes = sorted(all_classes, key=lambda cls: cls.__name__) + all_class_names = [cls.__name__ for cls in all_classes] + if len(all_class_names) == 1: + return 'is {0}'.format(all_class_names[0]) + return "is one of [{0}]".format(", ".join(all_class_names)) + + +def convert_js_args_to_python_args(fn): + from functools import wraps + @wraps(fn) + def wrapped_init(self, *args, **kwargs): + spec_property_naming = kwargs.get('_spec_property_naming', False) + if spec_property_naming: + kwargs = change_keys_js_to_python(kwargs, self.__class__) + return fn(self, *args, **kwargs) + return wrapped_init + + +def get_allof_instances(self, model_args, constant_args): + """ + Args: + self: the class we are handling + model_args (dict): var_name to var_value + used to make instances + constant_args (dict): + metadata arguments: + _check_type + _path_to_item + _spec_property_naming + _configuration + _visited_composed_classes + + Returns + composed_instances (list) + """ + composed_instances = [] + for allof_class in self._composed_schemas['allOf']: + + try: + allof_instance = allof_class(**model_args, **constant_args) + composed_instances.append(allof_instance) + except Exception as ex: + raise ApiValueError( + "Invalid inputs given to generate an instance of '%s'. The " + "input data was invalid for the allOf schema '%s' in the composed " + "schema '%s'. Error=%s" % ( + allof_class.__name__, + allof_class.__name__, + self.__class__.__name__, + str(ex) + ) + ) from ex + return composed_instances + + +def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None): + """ + Find the oneOf schema that matches the input data (e.g. payload). + If exactly one schema matches the input data, an instance of that schema + is returned. + If zero or more than one schema match the input data, an exception is raised. + In OAS 3.x, the payload MUST, by validation, match exactly one of the + schemas described by oneOf. + + Args: + cls: the class we are handling + model_kwargs (dict): var_name to var_value + The input data, e.g. the payload that must match a oneOf schema + in the OpenAPI document. + constant_kwargs (dict): var_name to var_value + args that every model requires, including configuration, server + and path to item. + + Kwargs: + model_arg: (int, float, bool, str, date, datetime, ModelSimple, None): + the value to assign to a primitive class or ModelSimple class + Notes: + - this is only passed in when oneOf includes types which are not object + - None is used to suppress handling of model_arg, nullable models are handled in __new__ + + Returns + oneof_instance (instance) + """ + if len(cls._composed_schemas['oneOf']) == 0: + return None + + oneof_instances = [] + # Iterate over each oneOf schema and determine if the input data + # matches the oneOf schemas. + for oneof_class in cls._composed_schemas['oneOf']: + # The composed oneOf schema allows the 'null' type and the input data + # is the null value. This is a OAS >= 3.1 feature. + if oneof_class is none_type: + # skip none_types because we are deserializing dict data. + # none_type deserialization is handled in the __new__ method + continue + + single_value_input = allows_single_value_input(oneof_class) + + try: + if not single_value_input: + oneof_instance = oneof_class(**model_kwargs, **constant_kwargs) + else: + if issubclass(oneof_class, ModelSimple): + oneof_instance = oneof_class(model_arg, **constant_kwargs) + elif oneof_class in PRIMITIVE_TYPES: + oneof_instance = validate_and_convert_types( + model_arg, + (oneof_class,), + constant_kwargs['_path_to_item'], + constant_kwargs['_spec_property_naming'], + constant_kwargs['_check_type'], + configuration=constant_kwargs['_configuration'] + ) + oneof_instances.append(oneof_instance) + except Exception: + pass + if len(oneof_instances) == 0: + raise ApiValueError( + "Invalid inputs given to generate an instance of %s. None " + "of the oneOf schemas matched the input data." % + cls.__name__ + ) + elif len(oneof_instances) > 1: + raise ApiValueError( + "Invalid inputs given to generate an instance of %s. Multiple " + "oneOf schemas matched the inputs, but a max of one is allowed." % + cls.__name__ + ) + return oneof_instances[0] + + +def get_anyof_instances(self, model_args, constant_args): + """ + Args: + self: the class we are handling + model_args (dict): var_name to var_value + The input data, e.g. the payload that must match at least one + anyOf child schema in the OpenAPI document. + constant_args (dict): var_name to var_value + args that every model requires, including configuration, server + and path to item. + + Returns + anyof_instances (list) + """ + anyof_instances = [] + if len(self._composed_schemas['anyOf']) == 0: + return anyof_instances + + for anyof_class in self._composed_schemas['anyOf']: + # The composed oneOf schema allows the 'null' type and the input data + # is the null value. This is a OAS >= 3.1 feature. + if anyof_class is none_type: + # skip none_types because we are deserializing dict data. + # none_type deserialization is handled in the __new__ method + continue + + try: + anyof_instance = anyof_class(**model_args, **constant_args) + anyof_instances.append(anyof_instance) + except Exception: + pass + if len(anyof_instances) == 0: + raise ApiValueError( + "Invalid inputs given to generate an instance of %s. None of the " + "anyOf schemas matched the inputs." % + self.__class__.__name__ + ) + return anyof_instances + + +def get_discarded_args(self, composed_instances, model_args): + """ + Gathers the args that were discarded by configuration.discard_unknown_keys + """ + model_arg_keys = model_args.keys() + discarded_args = set() + # arguments passed to self were already converted to python names + # before __init__ was called + for instance in composed_instances: + if instance.__class__ in self._composed_schemas['allOf']: + try: + keys = instance.to_dict().keys() + discarded_keys = model_args - keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass + else: + try: + all_keys = set(model_to_dict(instance, serialize=False).keys()) + js_keys = model_to_dict(instance, serialize=True).keys() + all_keys.update(js_keys) + discarded_keys = model_arg_keys - all_keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass + return discarded_args + + +def validate_get_composed_info(constant_args, model_args, self): + """ + For composed schemas, generate schema instances for + all schemas in the oneOf/anyOf/allOf definition. If additional + properties are allowed, also assign those properties on + all matched schemas that contain additionalProperties. + Openapi schemas are python classes. + + Exceptions are raised if: + - 0 or > 1 oneOf schema matches the model_args input data + - no anyOf schema matches the model_args input data + - any of the allOf schemas do not match the model_args input data + + Args: + constant_args (dict): these are the args that every model requires + model_args (dict): these are the required and optional spec args that + were passed in to make this model + self (class): the class that we are instantiating + This class contains self._composed_schemas + + Returns: + composed_info (list): length three + composed_instances (list): the composed instances which are not + self + var_name_to_model_instances (dict): a dict going from var_name + to the model_instance which holds that var_name + the model_instance may be self or an instance of one of the + classes in self.composed_instances() + additional_properties_model_instances (list): a list of the + model instances which have the property + additional_properties_type. This list can include self + """ + # create composed_instances + composed_instances = [] + allof_instances = get_allof_instances(self, model_args, constant_args) + composed_instances.extend(allof_instances) + oneof_instance = get_oneof_instance(self.__class__, model_args, constant_args) + if oneof_instance is not None: + composed_instances.append(oneof_instance) + anyof_instances = get_anyof_instances(self, model_args, constant_args) + composed_instances.extend(anyof_instances) + """ + set additional_properties_model_instances + additional properties must be evaluated at the schema level + so self's additional properties are most important + If self is a composed schema with: + - no properties defined in self + - additionalProperties: False + Then for object payloads every property is an additional property + and they are not allowed, so only empty dict is allowed + + Properties must be set on all matching schemas + so when a property is assigned toa composed instance, it must be set on all + composed instances regardless of additionalProperties presence + keeping it to prevent breaking changes in v5.0.1 + TODO remove cls._additional_properties_model_instances in 6.0.0 + """ + additional_properties_model_instances = [] + if self.additional_properties_type is not None: + additional_properties_model_instances = [self] + + """ + no need to set properties on self in here, they will be set in __init__ + By here all composed schema oneOf/anyOf/allOf instances have their properties set using + model_args + """ + discarded_args = get_discarded_args(self, composed_instances, model_args) + + # map variable names to composed_instances + var_name_to_model_instances = {} + for prop_name in model_args: + if prop_name not in discarded_args: + var_name_to_model_instances[prop_name] = [self] + composed_instances + + return [ + composed_instances, + var_name_to_model_instances, + additional_properties_model_instances, + discarded_args + ] diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/models/__init__.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/models/__init__.py new file mode 100644 index 000000000000..361e2bd9766c --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/models/__init__.py @@ -0,0 +1,74 @@ +# flake8: noqa + +# import all models into this package +# if you have many models here with many references from one model to another this may +# raise a RecursionError +# to avoid this, import only the models that you directly need like: +# from from petstore_api.model.pet import Pet +# or import this package, but before doing it, use: +# import sys +# sys.setrecursionlimit(n) + +from petstore_api.model.additional_properties_any_type import AdditionalPropertiesAnyType +from petstore_api.model.additional_properties_array import AdditionalPropertiesArray +from petstore_api.model.additional_properties_boolean import AdditionalPropertiesBoolean +from petstore_api.model.additional_properties_class import AdditionalPropertiesClass +from petstore_api.model.additional_properties_integer import AdditionalPropertiesInteger +from petstore_api.model.additional_properties_number import AdditionalPropertiesNumber +from petstore_api.model.additional_properties_object import AdditionalPropertiesObject +from petstore_api.model.additional_properties_string import AdditionalPropertiesString +from petstore_api.model.animal import Animal +from petstore_api.model.animal_farm import AnimalFarm +from petstore_api.model.api_response import ApiResponse +from petstore_api.model.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly +from petstore_api.model.array_of_number_only import ArrayOfNumberOnly +from petstore_api.model.array_test import ArrayTest +from petstore_api.model.capitalization import Capitalization +from petstore_api.model.cat import Cat +from petstore_api.model.cat_all_of import CatAllOf +from petstore_api.model.category import Category +from petstore_api.model.child import Child +from petstore_api.model.child_all_of import ChildAllOf +from petstore_api.model.child_cat import ChildCat +from petstore_api.model.child_cat_all_of import ChildCatAllOf +from petstore_api.model.child_dog import ChildDog +from petstore_api.model.child_dog_all_of import ChildDogAllOf +from petstore_api.model.child_lizard import ChildLizard +from petstore_api.model.child_lizard_all_of import ChildLizardAllOf +from petstore_api.model.class_model import ClassModel +from petstore_api.model.client import Client +from petstore_api.model.dog import Dog +from petstore_api.model.dog_all_of import DogAllOf +from petstore_api.model.enum_arrays import EnumArrays +from petstore_api.model.enum_class import EnumClass +from petstore_api.model.enum_test import EnumTest +from petstore_api.model.file import File +from petstore_api.model.file_schema_test_class import FileSchemaTestClass +from petstore_api.model.format_test import FormatTest +from petstore_api.model.grandparent import Grandparent +from petstore_api.model.grandparent_animal import GrandparentAnimal +from petstore_api.model.has_only_read_only import HasOnlyReadOnly +from petstore_api.model.list import List +from petstore_api.model.map_test import MapTest +from petstore_api.model.mixed_properties_and_additional_properties_class import MixedPropertiesAndAdditionalPropertiesClass +from petstore_api.model.model200_response import Model200Response +from petstore_api.model.model_return import ModelReturn +from petstore_api.model.name import Name +from petstore_api.model.number_only import NumberOnly +from petstore_api.model.number_with_validations import NumberWithValidations +from petstore_api.model.object_model_with_ref_props import ObjectModelWithRefProps +from petstore_api.model.order import Order +from petstore_api.model.parent import Parent +from petstore_api.model.parent_all_of import ParentAllOf +from petstore_api.model.parent_pet import ParentPet +from petstore_api.model.pet import Pet +from petstore_api.model.player import Player +from petstore_api.model.read_only_first import ReadOnlyFirst +from petstore_api.model.special_model_name import SpecialModelName +from petstore_api.model.string_boolean_map import StringBooleanMap +from petstore_api.model.string_enum import StringEnum +from petstore_api.model.tag import Tag +from petstore_api.model.type_holder_default import TypeHolderDefault +from petstore_api.model.type_holder_example import TypeHolderExample +from petstore_api.model.user import User +from petstore_api.model.xml_item import XmlItem diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/rest.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/rest.py new file mode 100644 index 000000000000..a1d580fbe05b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/rest.py @@ -0,0 +1,292 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import io +import json +import logging +import re +import ssl +from urllib.parse import urlencode + +import urllib3 + +from petstore_api.exceptions import ApiException, UnauthorizedException, ForbiddenException, NotFoundException, ServiceException, ApiValueError + + +logger = logging.getLogger(__name__) + + +class RESTResponse(io.IOBase): + + def __init__(self, resp): + self.urllib3_response = resp + self.status = resp.status + self.reason = resp.reason + self.data = resp.data + + def getheaders(self): + """Returns a dictionary of the response headers.""" + return self.urllib3_response.getheaders() + + def getheader(self, name, default=None): + """Returns a given response header.""" + return self.urllib3_response.getheader(name, default) + + +class RESTClientObject(object): + + def __init__(self, configuration, pools_size=4, maxsize=None): + # urllib3.PoolManager will pass all kw parameters to connectionpool + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501 + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501 + # maxsize is the number of requests to host that are allowed in parallel # noqa: E501 + # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501 + + # cert_reqs + if configuration.verify_ssl: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + + addition_pool_args = {} + if configuration.assert_hostname is not None: + addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E501 + + if configuration.retries is not None: + addition_pool_args['retries'] = configuration.retries + + if configuration.socket_options is not None: + addition_pool_args['socket_options'] = configuration.socket_options + + if maxsize is None: + if configuration.connection_pool_maxsize is not None: + maxsize = configuration.connection_pool_maxsize + else: + maxsize = 4 + + # https pool manager + if configuration.proxy: + self.pool_manager = urllib3.ProxyManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + proxy_url=configuration.proxy, + proxy_headers=configuration.proxy_headers, + **addition_pool_args + ) + else: + self.pool_manager = urllib3.PoolManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + **addition_pool_args + ) + + def request(self, method, url, query_params=None, headers=None, + body=None, post_params=None, _preload_content=True, + _request_timeout=None): + """Perform requests. + + :param method: http request method + :param url: http request url + :param query_params: query parameters in the url + :param headers: http request headers + :param body: request json body, for `application/json` + :param post_params: request post parameters, + `application/x-www-form-urlencoded` + and `multipart/form-data` + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + """ + method = method.upper() + assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', + 'PATCH', 'OPTIONS'] + + if post_params and body: + raise ApiValueError( + "body parameter cannot be used with post_params parameter." + ) + + post_params = post_params or {} + headers = headers or {} + + timeout = None + if _request_timeout: + if isinstance(_request_timeout, (int, float)): # noqa: E501,F821 + timeout = urllib3.Timeout(total=_request_timeout) + elif (isinstance(_request_timeout, tuple) and + len(_request_timeout) == 2): + timeout = urllib3.Timeout( + connect=_request_timeout[0], read=_request_timeout[1]) + + if 'Content-Type' not in headers: + headers['Content-Type'] = 'application/json' + + try: + # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` + if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']: + if query_params: + url += '?' + urlencode(query_params) + if re.search('json', headers['Content-Type'], re.IGNORECASE): + request_body = None + if body is not None: + request_body = json.dumps(body) + r = self.pool_manager.request( + method, url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 + r = self.pool_manager.request( + method, url, + fields=post_params, + encode_multipart=False, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers['Content-Type'] == 'multipart/form-data': + # must del headers['Content-Type'], or the correct + # Content-Type which generated by urllib3 will be + # overwritten. + del headers['Content-Type'] + r = self.pool_manager.request( + method, url, + fields=post_params, + encode_multipart=True, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + # Pass a `string` parameter directly in the body to support + # other content types than Json when `body` argument is + # provided in serialized form + elif isinstance(body, str) or isinstance(body, bytes): + request_body = body + r = self.pool_manager.request( + method, url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + else: + # Cannot generate the request from given parameters + msg = """Cannot prepare a request message for provided + arguments. Please check that your arguments match + declared content type.""" + raise ApiException(status=0, reason=msg) + # For `GET`, `HEAD` + else: + r = self.pool_manager.request(method, url, + fields=query_params, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + except urllib3.exceptions.SSLError as e: + msg = "{0}\n{1}".format(type(e).__name__, str(e)) + raise ApiException(status=0, reason=msg) + + if _preload_content: + r = RESTResponse(r) + + # log response body + logger.debug("response body: %s", r.data) + + if not 200 <= r.status <= 299: + if r.status == 401: + raise UnauthorizedException(http_resp=r) + + if r.status == 403: + raise ForbiddenException(http_resp=r) + + if r.status == 404: + raise NotFoundException(http_resp=r) + + if 500 <= r.status <= 599: + raise ServiceException(http_resp=r) + + raise ApiException(http_resp=r) + + return r + + def GET(self, url, headers=None, query_params=None, _preload_content=True, + _request_timeout=None): + return self.request("GET", url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def HEAD(self, url, headers=None, query_params=None, _preload_content=True, + _request_timeout=None): + return self.request("HEAD", url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def OPTIONS(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("OPTIONS", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def DELETE(self, url, headers=None, query_params=None, body=None, + _preload_content=True, _request_timeout=None): + return self.request("DELETE", url, + headers=headers, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def POST(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("POST", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def PUT(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("PUT", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def PATCH(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("PATCH", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/pom.xml b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/pom.xml new file mode 100644 index 000000000000..1db0285b1812 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/pom.xml @@ -0,0 +1,46 @@ + + 4.0.0 + org.openapitools + PythonV2PetstoreClientTestsDisallowAdditionalPropertiesIfNotPresent + pom + 1.0-SNAPSHOT + Python OpenAPI Petstore Client + + + + maven-dependency-plugin + + + package + + copy-dependencies + + + ${project.build.directory} + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + test + integration-test + + exec + + + make + + test + + + + + + + + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/requirements.txt b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/requirements.txt new file mode 100644 index 000000000000..96947f60408f --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/requirements.txt @@ -0,0 +1,3 @@ +python_dateutil >= 2.5.3 +setuptools >= 21.0.0 +urllib3 >= 1.25.3 diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/setup.cfg b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/setup.cfg new file mode 100644 index 000000000000..11433ee875ab --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/setup.cfg @@ -0,0 +1,2 @@ +[flake8] +max-line-length=99 diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/setup.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/setup.py new file mode 100644 index 000000000000..c484eec94f36 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/setup.py @@ -0,0 +1,43 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from setuptools import setup, find_packages # noqa: H301 + +NAME = "petstore-api" +VERSION = "1.0.0" +# To install the library, run the following +# +# python setup.py install +# +# prerequisite: setuptools +# http://pypi.python.org/pypi/setuptools + +REQUIRES = [ + "urllib3 >= 1.25.3", + "python-dateutil", +] + +setup( + name=NAME, + version=VERSION, + description="OpenAPI Petstore", + author="OpenAPI Generator community", + author_email="team@openapitools.org", + url="", + keywords=["OpenAPI", "OpenAPI-Generator", "OpenAPI Petstore"], + python_requires=">=3.6", + install_requires=REQUIRES, + packages=find_packages(exclude=["test", "tests"]), + include_package_data=True, + license="Apache-2.0", + long_description="""\ + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + """ +) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test-requirements.txt b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test-requirements.txt new file mode 100644 index 000000000000..bb4f22bb7a6e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test-requirements.txt @@ -0,0 +1 @@ +pytest-cov>=2.8.1 diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/__init__.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_any_type.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_any_type.py new file mode 100644 index 000000000000..ce985f76ed9e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_any_type.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.additional_properties_any_type import AdditionalPropertiesAnyType + + +class TestAdditionalPropertiesAnyType(unittest.TestCase): + """AdditionalPropertiesAnyType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAdditionalPropertiesAnyType(self): + """Test AdditionalPropertiesAnyType""" + # FIXME: construct object with mandatory attributes with example values + # model = AdditionalPropertiesAnyType() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_array.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_array.py new file mode 100644 index 000000000000..f63ca82f6c22 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_array.py @@ -0,0 +1,50 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.additional_properties_array import AdditionalPropertiesArray + + +class TestAdditionalPropertiesArray(unittest.TestCase): + """AdditionalPropertiesArray unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAdditionalPropertiesArray(self): + """Test AdditionalPropertiesArray""" + # can make model without additional properties + model = AdditionalPropertiesArray() + + # can make one with additional properties + import datetime + some_val = [] + model = AdditionalPropertiesArray(some_key=some_val) + assert model['some_key'] == some_val + some_val = [True, datetime.date(1970,1,1), datetime.datetime(1970,1,1), {}, 3.1, 1, [], 'hello'] + model = AdditionalPropertiesArray(some_key=some_val) + assert model['some_key'] == some_val + + # type checking works on additional properties + with self.assertRaises(petstore_api.ApiTypeError) as exc: + model = AdditionalPropertiesArray(some_key='some string') + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_boolean.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_boolean.py new file mode 100644 index 000000000000..e5a13891c098 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_boolean.py @@ -0,0 +1,45 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.additional_properties_boolean import AdditionalPropertiesBoolean + + +class TestAdditionalPropertiesBoolean(unittest.TestCase): + """AdditionalPropertiesBoolean unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAdditionalPropertiesBoolean(self): + """Test AdditionalPropertiesBoolean""" + # can make model without additional properties + model = AdditionalPropertiesBoolean() + + # can make one with additional properties + model = AdditionalPropertiesBoolean(some_key=True) + assert model['some_key'] == True + + # type checking works on additional properties + with self.assertRaises(petstore_api.ApiTypeError) as exc: + model = AdditionalPropertiesBoolean(some_key='True') + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_class.py new file mode 100644 index 000000000000..befc14455da2 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_class.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.additional_properties_class import AdditionalPropertiesClass + + +class TestAdditionalPropertiesClass(unittest.TestCase): + """AdditionalPropertiesClass unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAdditionalPropertiesClass(self): + """Test AdditionalPropertiesClass""" + # FIXME: construct object with mandatory attributes with example values + # model = AdditionalPropertiesClass() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_integer.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_integer.py new file mode 100644 index 000000000000..0e08b8f87706 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_integer.py @@ -0,0 +1,45 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.additional_properties_integer import AdditionalPropertiesInteger + + +class TestAdditionalPropertiesInteger(unittest.TestCase): + """AdditionalPropertiesInteger unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAdditionalPropertiesInteger(self): + """Test AdditionalPropertiesInteger""" + # can make model without additional properties + model = AdditionalPropertiesInteger() + + # can make one with additional properties + model = AdditionalPropertiesInteger(some_key=3) + assert model['some_key'] == 3 + + # type checking works on additional properties + with self.assertRaises(petstore_api.ApiTypeError) as exc: + model = AdditionalPropertiesInteger(some_key=11.3) + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_number.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_number.py new file mode 100644 index 000000000000..90f4429e989f --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_number.py @@ -0,0 +1,45 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.additional_properties_number import AdditionalPropertiesNumber + + +class TestAdditionalPropertiesNumber(unittest.TestCase): + """AdditionalPropertiesNumber unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAdditionalPropertiesNumber(self): + """Test AdditionalPropertiesNumber""" + # can make model without additional properties + model = AdditionalPropertiesNumber() + + # can make one with additional properties + model = AdditionalPropertiesNumber(some_key=11.3) + assert model['some_key'] == 11.3 + + # type checking works on additional properties + with self.assertRaises(petstore_api.ApiTypeError) as exc: + model = AdditionalPropertiesNumber(some_key=10) + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_object.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_object.py new file mode 100644 index 000000000000..ded4a8e8a124 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_object.py @@ -0,0 +1,50 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.additional_properties_object import AdditionalPropertiesObject + + +class TestAdditionalPropertiesObject(unittest.TestCase): + """AdditionalPropertiesObject unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAdditionalPropertiesObject(self): + """Test AdditionalPropertiesObject""" + # can make model without additional properties + model = AdditionalPropertiesObject() + + # can make one with additional properties + some_val = {} + model = AdditionalPropertiesObject(some_key=some_val) + assert model['some_key'] == some_val + import datetime + some_val = {'a': True, 'b': datetime.date(1970,1,1), 'c': datetime.datetime(1970,1,1), 'd': {}, 'e': 3.1, 'f': 1, 'g': [], 'h': 'hello'} + model = AdditionalPropertiesObject(some_key=some_val) + assert model['some_key'] == some_val + + # type checking works on additional properties + with self.assertRaises(petstore_api.ApiTypeError) as exc: + model = AdditionalPropertiesObject(some_key='some string') + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_string.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_string.py new file mode 100644 index 000000000000..cff2c31921fe --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_additional_properties_string.py @@ -0,0 +1,45 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.additional_properties_string import AdditionalPropertiesString + + +class TestAdditionalPropertiesString(unittest.TestCase): + """AdditionalPropertiesString unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAdditionalPropertiesString(self): + """Test AdditionalPropertiesString""" + # can make model without additional properties + model = AdditionalPropertiesString() + + # can make one with additional properties + model = AdditionalPropertiesString(some_key='some_val') + assert model['some_key'] == 'some_val' + + # type checking works on additional properties + with self.assertRaises(petstore_api.ApiTypeError) as exc: + model = AdditionalPropertiesString(some_key=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_animal.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_animal.py new file mode 100644 index 000000000000..958f303f13e3 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_animal.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import cat +except ImportError: + cat = sys.modules[ + 'petstore_api.model.cat'] +try: + from petstore_api.model import dog +except ImportError: + dog = sys.modules[ + 'petstore_api.model.dog'] +from petstore_api.model.animal import Animal + + +class TestAnimal(unittest.TestCase): + """Animal unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAnimal(self): + """Test Animal""" + # FIXME: construct object with mandatory attributes with example values + # model = Animal() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_animal_farm.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_animal_farm.py new file mode 100644 index 000000000000..7117d42b430e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_animal_farm.py @@ -0,0 +1,43 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import animal +except ImportError: + animal = sys.modules[ + 'petstore_api.model.animal'] +from petstore_api.model.animal_farm import AnimalFarm + + +class TestAnimalFarm(unittest.TestCase): + """AnimalFarm unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAnimalFarm(self): + """Test AnimalFarm""" + # FIXME: construct object with mandatory attributes with example values + # model = AnimalFarm() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_another_fake_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_another_fake_api.py new file mode 100644 index 000000000000..f79966a26961 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_another_fake_api.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import + +import unittest + +import petstore_api +from petstore_api.api.another_fake_api import AnotherFakeApi # noqa: E501 + + +class TestAnotherFakeApi(unittest.TestCase): + """AnotherFakeApi unit test stubs""" + + def setUp(self): + self.api = AnotherFakeApi() # noqa: E501 + + def tearDown(self): + pass + + def test_call_123_test_special_tags(self): + """Test case for call_123_test_special_tags + + To test special tags # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_api_response.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_api_response.py new file mode 100644 index 000000000000..9db92633f626 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_api_response.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.api_response import ApiResponse + + +class TestApiResponse(unittest.TestCase): + """ApiResponse unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testApiResponse(self): + """Test ApiResponse""" + # FIXME: construct object with mandatory attributes with example values + # model = ApiResponse() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_of_array_of_number_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_of_array_of_number_only.py new file mode 100644 index 000000000000..4980ad17afb5 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_of_array_of_number_only.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly + + +class TestArrayOfArrayOfNumberOnly(unittest.TestCase): + """ArrayOfArrayOfNumberOnly unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testArrayOfArrayOfNumberOnly(self): + """Test ArrayOfArrayOfNumberOnly""" + # FIXME: construct object with mandatory attributes with example values + # model = ArrayOfArrayOfNumberOnly() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_of_number_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_of_number_only.py new file mode 100644 index 000000000000..479c537cada7 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_of_number_only.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.array_of_number_only import ArrayOfNumberOnly + + +class TestArrayOfNumberOnly(unittest.TestCase): + """ArrayOfNumberOnly unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testArrayOfNumberOnly(self): + """Test ArrayOfNumberOnly""" + # FIXME: construct object with mandatory attributes with example values + # model = ArrayOfNumberOnly() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_test.py new file mode 100644 index 000000000000..2426b27b7e46 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_array_test.py @@ -0,0 +1,43 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import read_only_first +except ImportError: + read_only_first = sys.modules[ + 'petstore_api.model.read_only_first'] +from petstore_api.model.array_test import ArrayTest + + +class TestArrayTest(unittest.TestCase): + """ArrayTest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testArrayTest(self): + """Test ArrayTest""" + # FIXME: construct object with mandatory attributes with example values + # model = ArrayTest() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_capitalization.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_capitalization.py new file mode 100644 index 000000000000..20d2649c01eb --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_capitalization.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.capitalization import Capitalization + + +class TestCapitalization(unittest.TestCase): + """Capitalization unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCapitalization(self): + """Test Capitalization""" + # FIXME: construct object with mandatory attributes with example values + # model = Capitalization() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_cat.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_cat.py new file mode 100644 index 000000000000..64b525aaf118 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_cat.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import animal +except ImportError: + animal = sys.modules[ + 'petstore_api.model.animal'] +try: + from petstore_api.model import cat_all_of +except ImportError: + cat_all_of = sys.modules[ + 'petstore_api.model.cat_all_of'] +from petstore_api.model.cat import Cat + + +class TestCat(unittest.TestCase): + """Cat unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCat(self): + """Test Cat""" + # FIXME: construct object with mandatory attributes with example values + # model = Cat() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_cat_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_cat_all_of.py new file mode 100644 index 000000000000..a5bb91ac864e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_cat_all_of.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.cat_all_of import CatAllOf + + +class TestCatAllOf(unittest.TestCase): + """CatAllOf unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCatAllOf(self): + """Test CatAllOf""" + # FIXME: construct object with mandatory attributes with example values + # model = CatAllOf() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_category.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_category.py new file mode 100644 index 000000000000..59b64e5924a8 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_category.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.category import Category + + +class TestCategory(unittest.TestCase): + """Category unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCategory(self): + """Test Category""" + # FIXME: construct object with mandatory attributes with example values + # model = Category() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child.py new file mode 100644 index 000000000000..790fc1abc8da --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import child_all_of +except ImportError: + child_all_of = sys.modules[ + 'petstore_api.model.child_all_of'] +try: + from petstore_api.model import parent +except ImportError: + parent = sys.modules[ + 'petstore_api.model.parent'] +from petstore_api.model.child import Child + + +class TestChild(unittest.TestCase): + """Child unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChild(self): + """Test Child + This will fail because additional_properties_type is None in ChildAllOf and it must be defined as any type + to allow in the property radio_waves which is not defined in ChildAllOf, it is defined in Grandparent + """ + # make an instance of Child, a composed schema model + radio_waves = True + tele_vision = True + inter_net = True + with self.assertRaises(petstore_api.exceptions.ApiValueError): + child = Child( + radio_waves=radio_waves, + tele_vision=tele_vision, + inter_net=inter_net + ) + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_all_of.py new file mode 100644 index 000000000000..96e479cf0796 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_all_of.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.child_all_of import ChildAllOf + + +class TestChildAllOf(unittest.TestCase): + """ChildAllOf unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChildAllOf(self): + """Test ChildAllOf""" + # FIXME: construct object with mandatory attributes with example values + # model = ChildAllOf() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_cat.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_cat.py new file mode 100644 index 000000000000..34c085515a80 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_cat.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import child_cat_all_of +except ImportError: + child_cat_all_of = sys.modules[ + 'petstore_api.model.child_cat_all_of'] +try: + from petstore_api.model import parent_pet +except ImportError: + parent_pet = sys.modules[ + 'petstore_api.model.parent_pet'] +from petstore_api.model.child_cat import ChildCat + + +class TestChildCat(unittest.TestCase): + """ChildCat unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChildCat(self): + """Test ChildCat""" + # FIXME: construct object with mandatory attributes with example values + # model = ChildCat() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_cat_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_cat_all_of.py new file mode 100644 index 000000000000..2a7aab100fbf --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_cat_all_of.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.child_cat_all_of import ChildCatAllOf + + +class TestChildCatAllOf(unittest.TestCase): + """ChildCatAllOf unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChildCatAllOf(self): + """Test ChildCatAllOf""" + # FIXME: construct object with mandatory attributes with example values + # model = ChildCatAllOf() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_dog.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_dog.py new file mode 100644 index 000000000000..dfb09213e40c --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_dog.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import child_dog_all_of +except ImportError: + child_dog_all_of = sys.modules[ + 'petstore_api.model.child_dog_all_of'] +try: + from petstore_api.model import parent_pet +except ImportError: + parent_pet = sys.modules[ + 'petstore_api.model.parent_pet'] +from petstore_api.model.child_dog import ChildDog + + +class TestChildDog(unittest.TestCase): + """ChildDog unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChildDog(self): + """Test ChildDog""" + # FIXME: construct object with mandatory attributes with example values + # model = ChildDog() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_dog_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_dog_all_of.py new file mode 100644 index 000000000000..ca75000c650e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_dog_all_of.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.child_dog_all_of import ChildDogAllOf + + +class TestChildDogAllOf(unittest.TestCase): + """ChildDogAllOf unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChildDogAllOf(self): + """Test ChildDogAllOf""" + # FIXME: construct object with mandatory attributes with example values + # model = ChildDogAllOf() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_lizard.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_lizard.py new file mode 100644 index 000000000000..975dc1612a9f --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_lizard.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import child_lizard_all_of +except ImportError: + child_lizard_all_of = sys.modules[ + 'petstore_api.model.child_lizard_all_of'] +try: + from petstore_api.model import parent_pet +except ImportError: + parent_pet = sys.modules[ + 'petstore_api.model.parent_pet'] +from petstore_api.model.child_lizard import ChildLizard + + +class TestChildLizard(unittest.TestCase): + """ChildLizard unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChildLizard(self): + """Test ChildLizard""" + # FIXME: construct object with mandatory attributes with example values + # model = ChildLizard() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_lizard_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_lizard_all_of.py new file mode 100644 index 000000000000..1b3bf4dba943 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_child_lizard_all_of.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.child_lizard_all_of import ChildLizardAllOf + + +class TestChildLizardAllOf(unittest.TestCase): + """ChildLizardAllOf unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChildLizardAllOf(self): + """Test ChildLizardAllOf""" + # FIXME: construct object with mandatory attributes with example values + # model = ChildLizardAllOf() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_class_model.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_class_model.py new file mode 100644 index 000000000000..060df39e4b5e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_class_model.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.class_model import ClassModel + + +class TestClassModel(unittest.TestCase): + """ClassModel unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testClassModel(self): + """Test ClassModel""" + # FIXME: construct object with mandatory attributes with example values + # model = ClassModel() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_client.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_client.py new file mode 100644 index 000000000000..ab5e3a80d377 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_client.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.client import Client + + +class TestClient(unittest.TestCase): + """Client unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testClient(self): + """Test Client""" + # FIXME: construct object with mandatory attributes with example values + # model = Client() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_dog.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_dog.py new file mode 100644 index 000000000000..9fb96ebc6b92 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_dog.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import animal +except ImportError: + animal = sys.modules[ + 'petstore_api.model.animal'] +try: + from petstore_api.model import dog_all_of +except ImportError: + dog_all_of = sys.modules[ + 'petstore_api.model.dog_all_of'] +from petstore_api.model.dog import Dog + + +class TestDog(unittest.TestCase): + """Dog unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testDog(self): + """Test Dog + This will fail because additional_properties_type is None in Animal and it must be defined as any type + to allow in the property breed which is not defined in Animal, it is defined in Dog + """ + # make an instance of dog, a composed schema model + class_name = 'Dog' + color = 'white' + breed = 'Jack Russel Terrier' + with self.assertRaises(petstore_api.exceptions.ApiValueError): + dog = Dog( + class_name=class_name, + color=color, + breed=breed + ) + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_dog_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_dog_all_of.py new file mode 100644 index 000000000000..7ab4e8ae79d8 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_dog_all_of.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.dog_all_of import DogAllOf + + +class TestDogAllOf(unittest.TestCase): + """DogAllOf unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testDogAllOf(self): + """Test DogAllOf""" + # FIXME: construct object with mandatory attributes with example values + # model = DogAllOf() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_arrays.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_arrays.py new file mode 100644 index 000000000000..64ad5fd7dc08 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_arrays.py @@ -0,0 +1,162 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.enum_arrays import EnumArrays + + +class TestEnumArrays(unittest.TestCase): + """EnumArrays unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_enumarrays_init(self): + # + # Check various combinations of valid values. + # + fish_or_crab = EnumArrays(just_symbol=">=") + self.assertEqual(fish_or_crab.just_symbol, ">=") + # if optional property is unset we raise an exception + with self.assertRaises(petstore_api.ApiAttributeError) as exc: + self.assertEqual(fish_or_crab.array_enum, None) + + fish_or_crab = EnumArrays(just_symbol="$", array_enum=["fish"]) + self.assertEqual(fish_or_crab.just_symbol, "$") + self.assertEqual(fish_or_crab.array_enum, ["fish"]) + + fish_or_crab = EnumArrays(just_symbol=">=", array_enum=["fish"]) + self.assertEqual(fish_or_crab.just_symbol, ">=") + self.assertEqual(fish_or_crab.array_enum, ["fish"]) + + fish_or_crab = EnumArrays(just_symbol="$", array_enum=["crab"]) + self.assertEqual(fish_or_crab.just_symbol, "$") + self.assertEqual(fish_or_crab.array_enum, ["crab"]) + + + # + # Check if setting invalid values fails + # + with self.assertRaises(petstore_api.ApiValueError) as exc: + fish_or_crab = EnumArrays(just_symbol="<=") + + with self.assertRaises(petstore_api.ApiValueError) as exc: + fish_or_crab = EnumArrays(just_symbol="$", array_enum=["dog"]) + + with self.assertRaises(petstore_api.ApiTypeError) as exc: + fish_or_crab = EnumArrays(just_symbol=["$"], array_enum=["crab"]) + + + def test_enumarrays_setter(self): + + # + # Check various combinations of valid values + # + fish_or_crab = EnumArrays() + + fish_or_crab.just_symbol = ">=" + self.assertEqual(fish_or_crab.just_symbol, ">=") + + fish_or_crab.just_symbol = "$" + self.assertEqual(fish_or_crab.just_symbol, "$") + + fish_or_crab.array_enum = [] + self.assertEqual(fish_or_crab.array_enum, []) + + fish_or_crab.array_enum = ["fish"] + self.assertEqual(fish_or_crab.array_enum, ["fish"]) + + fish_or_crab.array_enum = ["fish", "fish", "fish"] + self.assertEqual(fish_or_crab.array_enum, ["fish", "fish", "fish"]) + + fish_or_crab.array_enum = ["crab"] + self.assertEqual(fish_or_crab.array_enum, ["crab"]) + + fish_or_crab.array_enum = ["crab", "fish"] + self.assertEqual(fish_or_crab.array_enum, ["crab", "fish"]) + + fish_or_crab.array_enum = ["crab", "fish", "crab", "fish"] + self.assertEqual(fish_or_crab.array_enum, ["crab", "fish", "crab", "fish"]) + + # + # Check if setting invalid values fails + # + fish_or_crab = EnumArrays() + with self.assertRaises(petstore_api.ApiValueError) as exc: + fish_or_crab.just_symbol = "!=" + + with self.assertRaises(petstore_api.ApiTypeError) as exc: + fish_or_crab.just_symbol = ["fish"] + + with self.assertRaises(petstore_api.ApiValueError) as exc: + fish_or_crab.array_enum = ["cat"] + + with self.assertRaises(petstore_api.ApiValueError) as exc: + fish_or_crab.array_enum = ["fish", "crab", "dog"] + + with self.assertRaises(petstore_api.ApiTypeError) as exc: + fish_or_crab.array_enum = "fish" + + + def test_todict(self): + # + # Check if dictionary serialization works + # + dollar_fish_crab_dict = { + 'just_symbol': "$", + 'array_enum': ["fish", "crab"] + } + + dollar_fish_crab = EnumArrays( + just_symbol="$", array_enum=["fish", "crab"]) + + self.assertEqual(dollar_fish_crab_dict, dollar_fish_crab.to_dict()) + + # + # Sanity check for different arrays + # + dollar_crab_fish_dict = { + 'just_symbol': "$", + 'array_enum': ["crab", "fish"] + } + + dollar_fish_crab = EnumArrays( + just_symbol="$", array_enum=["fish", "crab"]) + + self.assertNotEqual(dollar_crab_fish_dict, dollar_fish_crab.to_dict()) + + + def test_equals(self): + # + # Check if object comparison works + # + fish1 = EnumArrays(just_symbol="$", array_enum=["fish"]) + fish2 = EnumArrays(just_symbol="$", array_enum=["fish"]) + self.assertEqual(fish1, fish2) + + fish = EnumArrays(just_symbol="$", array_enum=["fish"]) + crab = EnumArrays(just_symbol="$", array_enum=["crab"]) + self.assertNotEqual(fish, crab) + + dollar = EnumArrays(just_symbol="$") + greater = EnumArrays(just_symbol=">=") + self.assertNotEqual(dollar, greater) + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_class.py new file mode 100644 index 000000000000..f910231c9d02 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_class.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.enum_class import EnumClass + + +class TestEnumClass(unittest.TestCase): + """EnumClass unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testEnumClass(self): + """Test EnumClass""" + # FIXME: construct object with mandatory attributes with example values + # model = EnumClass() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_test.py new file mode 100644 index 000000000000..7b4c1b6b66ac --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_enum_test.py @@ -0,0 +1,43 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import string_enum +except ImportError: + string_enum = sys.modules[ + 'petstore_api.model.string_enum'] +from petstore_api.model.enum_test import EnumTest + + +class TestEnumTest(unittest.TestCase): + """EnumTest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testEnumTest(self): + """Test EnumTest""" + # FIXME: construct object with mandatory attributes with example values + # model = EnumTest() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_fake_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_fake_api.py new file mode 100644 index 000000000000..34d207f3c71d --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_fake_api.py @@ -0,0 +1,197 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import + +import unittest + +import petstore_api +from petstore_api.api.fake_api import FakeApi # noqa: E501 + + +class TestFakeApi(unittest.TestCase): + """FakeApi unit test stubs""" + + def setUp(self): + self.api = FakeApi() # noqa: E501 + + def tearDown(self): + pass + + def test_create_xml_item(self): + """Test case for create_xml_item + + creates an XmlItem # noqa: E501 + """ + pass + + def test_boolean(self): + """Test case for boolean + + """ + endpoint = self.api.boolean + assert endpoint.openapi_types['body'] == (bool,) + assert endpoint.settings['response_type'] == (bool,) + + def test_string(self): + """Test case for string + + """ + endpoint = self.api.string + assert endpoint.openapi_types['body'] == (str,) + assert endpoint.settings['response_type'] == (str,) + + def test_object_model_with_ref_props(self): + """Test case for object_model_with_ref_props + + """ + from petstore_api.model import object_model_with_ref_props + endpoint = self.api.object_model_with_ref_props + assert endpoint.openapi_types['body'] == (object_model_with_ref_props.ObjectModelWithRefProps,) + assert endpoint.settings['response_type'] == (object_model_with_ref_props.ObjectModelWithRefProps,) + + def test_string_enum(self): + """Test case for string_enum + + """ + from petstore_api.model import string_enum + endpoint = self.api.string_enum + assert endpoint.openapi_types['body'] == (string_enum.StringEnum,) + assert endpoint.settings['response_type'] == (string_enum.StringEnum,) + + def test_array_model(self): + """Test case for array_model + + """ + from petstore_api.model import animal_farm + endpoint = self.api.array_model + assert endpoint.openapi_types['body'] == (animal_farm.AnimalFarm,) + assert endpoint.settings['response_type'] == (animal_farm.AnimalFarm,) + + def test_number_with_validations(self): + """Test case for number_with_validations + + """ + from petstore_api.model import number_with_validations + endpoint = self.api.number_with_validations + assert endpoint.openapi_types['body'] == (number_with_validations.NumberWithValidations,) + assert endpoint.settings['response_type'] == (number_with_validations.NumberWithValidations,) + + def test_test_body_with_file_schema(self): + """Test case for test_body_with_file_schema + + """ + pass + + def test_test_body_with_query_params(self): + """Test case for test_body_with_query_params + + """ + pass + + def test_test_client_model(self): + """Test case for test_client_model + + To test \"client\" model # noqa: E501 + """ + pass + + def test_test_endpoint_enums_length_one(self): + """Test case for test_endpoint_enums_length_one + + """ + # when we omit the required enums of length one, they are still set + endpoint = self.api.test_endpoint_enums_length_one + import six + if six.PY3: + from unittest.mock import patch + else: + from mock import patch + with patch.object(endpoint, 'call_with_http_info') as call_with_http_info: + endpoint() + call_with_http_info.assert_called_with( + _check_input_type=True, + _check_return_type=True, + _host_index=None, + _preload_content=True, + _request_timeout=None, + _return_http_data_only=True, + async_req=False, + header_number=1.234, + path_integer=34, + path_string='hello', + query_integer=3, + query_string='brillig' + ) + + def test_test_endpoint_parameters(self): + """Test case for test_endpoint_parameters + + Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 # noqa: E501 + """ + # check that we can access the endpoint's validations + endpoint = self.api.test_endpoint_parameters + assert endpoint.validations[('number',)] == { + 'inclusive_maximum': 543.2, + 'inclusive_minimum': 32.1, + } + # make sure that an exception is thrown on an invalid value + keyword_args = dict( + number=544, # invalid + double=100, + pattern_without_delimiter="abc", + byte='sample string' + ) + with self.assertRaises(petstore_api.ApiValueError): + self.api.test_endpoint_parameters(**keyword_args) + + def test_test_enum_parameters(self): + """Test case for test_enum_parameters + + To test enum parameters # noqa: E501 + """ + # check that we can access the endpoint's allowed_values + endpoint = self.api.test_enum_parameters + assert endpoint.allowed_values[('enum_query_string',)] == { + "_ABC": "_abc", + "-EFG": "-efg", + "(XYZ)": "(xyz)" + } + # make sure that an exception is thrown on an invalid value + keyword_args = dict(enum_query_string="bad value") + with self.assertRaises(petstore_api.ApiValueError): + self.api.test_enum_parameters(**keyword_args) + + def test_test_group_parameters(self): + """Test case for test_group_parameters + + Fake endpoint to test group parameters (optional) # noqa: E501 + """ + pass + + def test_test_inline_additional_properties(self): + """Test case for test_inline_additional_properties + + test inline additionalProperties # noqa: E501 + """ + pass + + def test_test_json_form_data(self): + """Test case for test_json_form_data + + test json serialization of form data # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_fake_classname_tags_123_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_fake_classname_tags_123_api.py new file mode 100644 index 000000000000..1ade31405a62 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_fake_classname_tags_123_api.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.api.fake_classname_tags_123_api import FakeClassnameTags123Api # noqa: E501 + + +class TestFakeClassnameTags123Api(unittest.TestCase): + """FakeClassnameTags123Api unit test stubs""" + + def setUp(self): + self.api = FakeClassnameTags123Api() # noqa: E501 + + def tearDown(self): + pass + + def test_test_classname(self): + """Test case for test_classname + + To test class name in snake case # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_file.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_file.py new file mode 100644 index 000000000000..8d60f64e01cc --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_file.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.file import File + + +class TestFile(unittest.TestCase): + """File unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testFile(self): + """Test File""" + # FIXME: construct object with mandatory attributes with example values + # model = File() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_file_schema_test_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_file_schema_test_class.py new file mode 100644 index 000000000000..9a4f6d38dfef --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_file_schema_test_class.py @@ -0,0 +1,43 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import file +except ImportError: + file = sys.modules[ + 'petstore_api.model.file'] +from petstore_api.model.file_schema_test_class import FileSchemaTestClass + + +class TestFileSchemaTestClass(unittest.TestCase): + """FileSchemaTestClass unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testFileSchemaTestClass(self): + """Test FileSchemaTestClass""" + # FIXME: construct object with mandatory attributes with example values + # model = FileSchemaTestClass() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_format_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_format_test.py new file mode 100644 index 000000000000..ca37b005fd96 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_format_test.py @@ -0,0 +1,153 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.format_test import FormatTest + + +class TestFormatTest(unittest.TestCase): + """FormatTest unit test stubs""" + + def setUp(self): + import datetime + self.required_named_args = dict( + number=40.1, + byte='what', + date=datetime.date(2019, 3, 23), + password='rainbowtable' + ) + + def test_integer(self): + var_name = 'integer' + validations = FormatTest.validations[(var_name,)] + keyword_args = {} + keyword_args.update(self.required_named_args) + key_adder_pairs = [('inclusive_maximum', 1), ('inclusive_minimum', -1)] + for key, adder in key_adder_pairs: + # value outside the bounds throws an error + with self.assertRaises(petstore_api.ApiValueError): + keyword_args[var_name] = validations[key] + adder + FormatTest(**keyword_args) + + # value inside the bounds works + keyword_args[var_name] = validations[key] + assert (getattr(FormatTest(**keyword_args), var_name) == + validations[key]) + + def test_int32(self): + var_name = 'int32' + validations = FormatTest.validations[(var_name,)] + keyword_args = {} + keyword_args.update(self.required_named_args) + key_adder_pairs = [('inclusive_maximum', 1), ('inclusive_minimum', -1)] + for key, adder in key_adder_pairs: + # value outside the bounds throws an error + with self.assertRaises(petstore_api.ApiValueError): + keyword_args[var_name] = validations[key] + adder + FormatTest(**keyword_args) + + # value inside the bounds works + keyword_args[var_name] = validations[key] + assert (getattr(FormatTest(**keyword_args), var_name) == + validations[key]) + + def test_number(self): + var_name = 'number' + validations = FormatTest.validations[(var_name,)] + keyword_args = {} + keyword_args.update(self.required_named_args) + key_adder_pairs = [('inclusive_maximum', 1), ('inclusive_minimum', -1)] + for key, adder in key_adder_pairs: + # value outside the bounds throws an error + with self.assertRaises(petstore_api.ApiValueError): + keyword_args[var_name] = validations[key] + adder + FormatTest(**keyword_args) + + # value inside the bounds works + keyword_args[var_name] = validations[key] + assert (getattr(FormatTest(**keyword_args), var_name) == + validations[key]) + + def test_float(self): + var_name = 'float' + validations = FormatTest.validations[(var_name,)] + keyword_args = {} + keyword_args.update(self.required_named_args) + key_adder_pairs = [('inclusive_maximum', 1), ('inclusive_minimum', -1)] + for key, adder in key_adder_pairs: + # value outside the bounds throws an error + with self.assertRaises(petstore_api.ApiValueError): + keyword_args[var_name] = validations[key] + adder + FormatTest(**keyword_args) + + # value inside the bounds works + keyword_args[var_name] = validations[key] + assert (getattr(FormatTest(**keyword_args), var_name) == + validations[key]) + + def test_double(self): + var_name = 'double' + validations = FormatTest.validations[(var_name,)] + keyword_args = {} + keyword_args.update(self.required_named_args) + key_adder_pairs = [('inclusive_maximum', 1), ('inclusive_minimum', -1)] + for key, adder in key_adder_pairs: + # value outside the bounds throws an error + with self.assertRaises(petstore_api.ApiValueError): + keyword_args[var_name] = validations[key] + adder + FormatTest(**keyword_args) + + # value inside the bounds works + keyword_args[var_name] = validations[key] + assert (getattr(FormatTest(**keyword_args), var_name) == + validations[key]) + + def test_password(self): + var_name = 'password' + validations = FormatTest.validations[(var_name,)] + keyword_args = {} + keyword_args.update(self.required_named_args) + key_adder_pairs = [('max_length', 1), ('min_length', -1)] + for key, adder in key_adder_pairs: + # value outside the bounds throws an error + with self.assertRaises(petstore_api.ApiValueError): + keyword_args[var_name] = 'a'*(validations[key] + adder) + FormatTest(**keyword_args) + + # value inside the bounds works + keyword_args[var_name] = 'a'*validations[key] + assert (getattr(FormatTest(**keyword_args), var_name) == + 'a'*validations[key]) + + def test_string(self): + var_name = 'string' + validations = FormatTest.validations[(var_name,)] + keyword_args = {} + keyword_args.update(self.required_named_args) + values_invalid = ['abc3', '1', '.', ' ', 'مرحبا', ''] + for value_invalid in values_invalid: + # invalid values throw exceptions + with self.assertRaises(petstore_api.ApiValueError): + keyword_args[var_name] = value_invalid + FormatTest(**keyword_args) + + # valid value works + value_valid = 'abcdz' + keyword_args[var_name] = value_valid + assert getattr(FormatTest(**keyword_args), var_name) == value_valid + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_grandparent.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_grandparent.py new file mode 100644 index 000000000000..2972d01161cd --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_grandparent.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.grandparent import Grandparent + + +class TestGrandparent(unittest.TestCase): + """Grandparent unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testGrandparent(self): + """Test Grandparent""" + # FIXME: construct object with mandatory attributes with example values + # model = Grandparent() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_grandparent_animal.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_grandparent_animal.py new file mode 100644 index 000000000000..cabe4d81f98e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_grandparent_animal.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import child_cat +except ImportError: + child_cat = sys.modules[ + 'petstore_api.model.child_cat'] +try: + from petstore_api.model import child_dog +except ImportError: + child_dog = sys.modules[ + 'petstore_api.model.child_dog'] +try: + from petstore_api.model import child_lizard +except ImportError: + child_lizard = sys.modules[ + 'petstore_api.model.child_lizard'] +try: + from petstore_api.model import parent_pet +except ImportError: + parent_pet = sys.modules[ + 'petstore_api.model.parent_pet'] +from petstore_api.model.grandparent_animal import GrandparentAnimal + + +class TestGrandparentAnimal(unittest.TestCase): + """GrandparentAnimal unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testGrandparentAnimal(self): + """Test GrandparentAnimal""" + # FIXME: construct object with mandatory attributes with example values + # model = GrandparentAnimal() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_has_only_read_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_has_only_read_only.py new file mode 100644 index 000000000000..9ebd7683b398 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_has_only_read_only.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.has_only_read_only import HasOnlyReadOnly + + +class TestHasOnlyReadOnly(unittest.TestCase): + """HasOnlyReadOnly unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testHasOnlyReadOnly(self): + """Test HasOnlyReadOnly""" + # FIXME: construct object with mandatory attributes with example values + # model = HasOnlyReadOnly() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_list.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_list.py new file mode 100644 index 000000000000..52156adfed2e --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_list.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.list import List + + +class TestList(unittest.TestCase): + """List unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testList(self): + """Test List""" + # FIXME: construct object with mandatory attributes with example values + # model = List() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_map_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_map_test.py new file mode 100644 index 000000000000..3feda0f688df --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_map_test.py @@ -0,0 +1,125 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import string_boolean_map +except ImportError: + string_boolean_map = sys.modules[ + 'petstore_api.model.string_boolean_map'] +from petstore_api.model.map_test import MapTest + + +class TestMapTest(unittest.TestCase): + """MapTest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_maptest_init(self): + # + # Test MapTest construction with valid values + # + up_or_low_dict = { + 'UPPER': "UP", + 'lower': "low" + } + map_enum_test = MapTest(map_of_enum_string=up_or_low_dict) + + self.assertEqual(map_enum_test.map_of_enum_string, up_or_low_dict) + + map_of_map_of_strings = { + 'valueDict': up_or_low_dict + } + map_enum_test = MapTest(map_map_of_string=map_of_map_of_strings) + + self.assertEqual(map_enum_test.map_map_of_string, map_of_map_of_strings) + + # + # Make sure that the init fails for invalid enum values + # + black_or_white_dict = { + 'black': "UP", + 'white': "low" + } + with self.assertRaises(petstore_api.ApiValueError): + MapTest(map_of_enum_string=black_or_white_dict) + + def test_maptest_setter(self): + # + # Check with some valid values + # + map_enum_test = MapTest() + up_or_low_dict = { + 'UPPER': "UP", + 'lower': "low" + } + map_enum_test.map_of_enum_string = up_or_low_dict + self.assertEqual(map_enum_test.map_of_enum_string, up_or_low_dict) + + # + # Check if the setter fails for invalid enum values + # + map_enum_test = MapTest() + black_or_white_dict = { + 'black': "UP", + 'white': "low" + } + with self.assertRaises(petstore_api.ApiValueError): + map_enum_test.map_of_enum_string = black_or_white_dict + + def test_todict(self): + # + # Check dictionary serialization + # + map_enum_test = MapTest() + up_or_low_dict = { + 'UPPER': "UP", + 'lower': "low" + } + map_of_map_of_strings = { + 'valueDict': up_or_low_dict + } + indirect_map = string_boolean_map.StringBooleanMap(**{ + 'option1': True + }) + direct_map = { + 'option2': False + } + map_enum_test.map_of_enum_string = up_or_low_dict + map_enum_test.map_map_of_string = map_of_map_of_strings + map_enum_test.indirect_map = indirect_map + map_enum_test.direct_map = direct_map + + self.assertEqual(map_enum_test.map_of_enum_string, up_or_low_dict) + self.assertEqual(map_enum_test.map_map_of_string, map_of_map_of_strings) + self.assertEqual(map_enum_test.indirect_map, indirect_map) + self.assertEqual(map_enum_test.direct_map, direct_map) + + expected_dict = { + 'map_of_enum_string': up_or_low_dict, + 'map_map_of_string': map_of_map_of_strings, + 'indirect_map': indirect_map.to_dict(), + 'direct_map': direct_map + } + + self.assertEqual(map_enum_test.to_dict(), expected_dict) + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_mixed_properties_and_additional_properties_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_mixed_properties_and_additional_properties_class.py new file mode 100644 index 000000000000..4dcb5ad4268c --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_mixed_properties_and_additional_properties_class.py @@ -0,0 +1,43 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import animal +except ImportError: + animal = sys.modules[ + 'petstore_api.model.animal'] +from petstore_api.model.mixed_properties_and_additional_properties_class import MixedPropertiesAndAdditionalPropertiesClass + + +class TestMixedPropertiesAndAdditionalPropertiesClass(unittest.TestCase): + """MixedPropertiesAndAdditionalPropertiesClass unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testMixedPropertiesAndAdditionalPropertiesClass(self): + """Test MixedPropertiesAndAdditionalPropertiesClass""" + # FIXME: construct object with mandatory attributes with example values + # model = MixedPropertiesAndAdditionalPropertiesClass() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_model200_response.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_model200_response.py new file mode 100644 index 000000000000..4012eaae3362 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_model200_response.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.model200_response import Model200Response + + +class TestModel200Response(unittest.TestCase): + """Model200Response unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testModel200Response(self): + """Test Model200Response""" + # FIXME: construct object with mandatory attributes with example values + # model = Model200Response() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_model_return.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_model_return.py new file mode 100644 index 000000000000..54c98b33cd66 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_model_return.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.model_return import ModelReturn + + +class TestModelReturn(unittest.TestCase): + """ModelReturn unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testModelReturn(self): + """Test ModelReturn""" + # FIXME: construct object with mandatory attributes with example values + # model = ModelReturn() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_name.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_name.py new file mode 100644 index 000000000000..6a9be99d1a57 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_name.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.name import Name + + +class TestName(unittest.TestCase): + """Name unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testName(self): + """Test Name""" + # FIXME: construct object with mandatory attributes with example values + # model = Name() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_number_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_number_only.py new file mode 100644 index 000000000000..07aab1d78af7 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_number_only.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.number_only import NumberOnly + + +class TestNumberOnly(unittest.TestCase): + """NumberOnly unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testNumberOnly(self): + """Test NumberOnly""" + # FIXME: construct object with mandatory attributes with example values + # model = NumberOnly() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_number_with_validations.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_number_with_validations.py new file mode 100644 index 000000000000..3f0b78835d4b --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_number_with_validations.py @@ -0,0 +1,45 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.number_with_validations import NumberWithValidations + + +class TestNumberWithValidations(unittest.TestCase): + """NumberWithValidations unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testNumberWithValidations(self): + """Test NumberWithValidations""" + valid_values = [10.0, 15.0, 20.0] + for valid_value in valid_values: + model = NumberWithValidations(valid_value) + assert model.value == valid_value + + invalid_values = [9.0, 21.0] + for invalid_value in invalid_values: + with self.assertRaises(petstore_api.ApiValueError): + NumberWithValidations(invalid_value) + + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_object_model_with_ref_props.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_object_model_with_ref_props.py new file mode 100644 index 000000000000..35bd3b6d8ec7 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_object_model_with_ref_props.py @@ -0,0 +1,49 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import number_with_validations +except ImportError: + number_with_validations = sys.modules[ + 'petstore_api.model.number_with_validations'] +from petstore_api.model.object_model_with_ref_props import ObjectModelWithRefProps + + +class TestObjectModelWithRefProps(unittest.TestCase): + """ObjectModelWithRefProps unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testObjectModelWithRefProps(self): + """Test ObjectModelWithRefProps""" + from petstore_api.model.number_with_validations import NumberWithValidations + self.assertEqual( + ObjectModelWithRefProps.openapi_types, + { + 'my_number': (NumberWithValidations,), + 'my_string': (str,), + 'my_boolean': (bool,), + } + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_order.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_order.py new file mode 100644 index 000000000000..ee6988e28ccd --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_order.py @@ -0,0 +1,41 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.order import Order + + +class TestOrder(unittest.TestCase): + """Order unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testOrder(self): + """Test Order""" + order = Order() + order.status = "placed" + self.assertEqual("placed", order.status) + with self.assertRaises(petstore_api.ApiValueError): + order.status = "invalid" + + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent.py new file mode 100644 index 000000000000..20282dfb41ea --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import grandparent +except ImportError: + grandparent = sys.modules[ + 'petstore_api.model.grandparent'] +try: + from petstore_api.model import parent_all_of +except ImportError: + parent_all_of = sys.modules[ + 'petstore_api.model.parent_all_of'] +from petstore_api.model.parent import Parent + + +class TestParent(unittest.TestCase): + """Parent unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testParent(self): + """Test Parent""" + # FIXME: construct object with mandatory attributes with example values + # model = Parent() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent_all_of.py new file mode 100644 index 000000000000..ca87189bba50 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent_all_of.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.parent_all_of import ParentAllOf + + +class TestParentAllOf(unittest.TestCase): + """ParentAllOf unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testParentAllOf(self): + """Test ParentAllOf""" + # FIXME: construct object with mandatory attributes with example values + # model = ParentAllOf() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent_pet.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent_pet.py new file mode 100644 index 000000000000..17a4d60e75dc --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_parent_pet.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import child_cat +except ImportError: + child_cat = sys.modules[ + 'petstore_api.model.child_cat'] +try: + from petstore_api.model import child_dog +except ImportError: + child_dog = sys.modules[ + 'petstore_api.model.child_dog'] +try: + from petstore_api.model import child_lizard +except ImportError: + child_lizard = sys.modules[ + 'petstore_api.model.child_lizard'] +try: + from petstore_api.model import grandparent_animal +except ImportError: + grandparent_animal = sys.modules[ + 'petstore_api.model.grandparent_animal'] +from petstore_api.model.parent_pet import ParentPet + + +class TestParentPet(unittest.TestCase): + """ParentPet unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testParentPet(self): + """Test ParentPet""" + # FIXME: construct object with mandatory attributes with example values + # model = ParentPet() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_pet.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_pet.py new file mode 100644 index 000000000000..b072cff5e9ad --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_pet.py @@ -0,0 +1,89 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +try: + from petstore_api.model import category +except ImportError: + category = sys.modules[ + 'petstore_api.model.category'] +try: + from petstore_api.models import tag +except ImportError: + tag = sys.modules[ + 'petstore_api.model.tag'] +from petstore_api.model.pet import Pet + + +class TestPet(unittest.TestCase): + """Pet unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_to_str(self): + pet = Pet(name="test name", photo_urls=["string"]) + pet.id = 1 + pet.status = "available" + cate = category.Category() + cate.id = 1 + cate.name = "dog" + pet.category = cate + tag1 = tag.Tag() + tag1.id = 1 + pet.tags = [tag1] + + data = ("{'category': {'id': 1, 'name': 'dog'},\n" + " 'id': 1,\n" + " 'name': 'test name',\n" + " 'photo_urls': ['string'],\n" + " 'status': 'available',\n" + " 'tags': [{'id': 1}]}") + self.assertEqual(data, pet.to_str()) + + def test_equal(self): + pet1 = Pet(name="test name", photo_urls=["string"]) + pet1.id = 1 + pet1.status = "available" + cate1 = category.Category() + cate1.id = 1 + cate1.name = "dog" + tag1 = tag.Tag() + tag1.id = 1 + pet1.tags = [tag1] + + pet2 = Pet(name="test name", photo_urls=["string"]) + pet2.id = 1 + pet2.status = "available" + cate2 = category.Category() + cate2.id = 1 + cate2.name = "dog" + tag2 = tag.Tag() + tag2.id = 1 + pet2.tags = [tag2] + + self.assertTrue(pet1 == pet2) + + # reset pet1 tags to empty array so that object comparison returns false + pet1.tags = [] + self.assertFalse(pet1 == pet2) + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_pet_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_pet_api.py new file mode 100644 index 000000000000..091b30cf8ac0 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_pet_api.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.api.pet_api import PetApi # noqa: E501 + + +class TestPetApi(unittest.TestCase): + """PetApi unit test stubs""" + + def setUp(self): + self.api = PetApi() # noqa: E501 + + def tearDown(self): + pass + + def test_add_pet(self): + """Test case for add_pet + + Add a new pet to the store # noqa: E501 + """ + pass + + def test_delete_pet(self): + """Test case for delete_pet + + Deletes a pet # noqa: E501 + """ + pass + + def test_find_pets_by_status(self): + """Test case for find_pets_by_status + + Finds Pets by status # noqa: E501 + """ + pass + + def test_find_pets_by_tags(self): + """Test case for find_pets_by_tags + + Finds Pets by tags # noqa: E501 + """ + pass + + def test_get_pet_by_id(self): + """Test case for get_pet_by_id + + Find pet by ID # noqa: E501 + """ + pass + + def test_update_pet(self): + """Test case for update_pet + + Update an existing pet # noqa: E501 + """ + pass + + def test_update_pet_with_form(self): + """Test case for update_pet_with_form + + Updates a pet in the store with form data # noqa: E501 + """ + pass + + def test_upload_file(self): + """Test case for upload_file + + uploads an image # noqa: E501 + """ + pass + + def test_upload_file_with_required_file(self): + """Test case for upload_file_with_required_file + + uploads an image (required) # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_player.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_player.py new file mode 100644 index 000000000000..ee7b95a677f1 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_player.py @@ -0,0 +1,44 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.player import Player + + +class TestPlayer(unittest.TestCase): + """Player unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testPlayer(self): + """Test Player""" + # we can make a player without an enemy_player property + jane = Player(name="Jane") + # we can make a player with an enemy_player + sally = Player(name="Sally", enemy_player=jane) + # we can make a player with an inline enemy_player + jim = Player( + name="Jim", + enemy_player=Player(name="Sam") + ) + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_read_only_first.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_read_only_first.py new file mode 100644 index 000000000000..c2dcde240e77 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_read_only_first.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.read_only_first import ReadOnlyFirst + + +class TestReadOnlyFirst(unittest.TestCase): + """ReadOnlyFirst unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testReadOnlyFirst(self): + """Test ReadOnlyFirst""" + # FIXME: construct object with mandatory attributes with example values + # model = ReadOnlyFirst() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_special_model_name.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_special_model_name.py new file mode 100644 index 000000000000..6124525f5170 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_special_model_name.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.special_model_name import SpecialModelName + + +class TestSpecialModelName(unittest.TestCase): + """SpecialModelName unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testSpecialModelName(self): + """Test SpecialModelName""" + # FIXME: construct object with mandatory attributes with example values + # model = SpecialModelName() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_store_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_store_api.py new file mode 100644 index 000000000000..0d9cc3dd36ea --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_store_api.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import + +import unittest + +import petstore_api +from petstore_api.api.store_api import StoreApi # noqa: E501 + + +class TestStoreApi(unittest.TestCase): + """StoreApi unit test stubs""" + + def setUp(self): + self.api = StoreApi() # noqa: E501 + + def tearDown(self): + pass + + def test_delete_order(self): + """Test case for delete_order + + Delete purchase order by ID # noqa: E501 + """ + pass + + def test_get_inventory(self): + """Test case for get_inventory + + Returns pet inventories by status # noqa: E501 + """ + pass + + def test_get_order_by_id(self): + """Test case for get_order_by_id + + Find purchase order by ID # noqa: E501 + """ + pass + + def test_place_order(self): + """Test case for place_order + + Place an order for a pet # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_string_boolean_map.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_string_boolean_map.py new file mode 100644 index 000000000000..e2e9d8b420b8 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_string_boolean_map.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.string_boolean_map import StringBooleanMap + + +class TestStringBooleanMap(unittest.TestCase): + """StringBooleanMap unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testStringBooleanMap(self): + """Test StringBooleanMap""" + # FIXME: construct object with mandatory attributes with example values + # model = StringBooleanMap() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_string_enum.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_string_enum.py new file mode 100644 index 000000000000..5eed0ad6f0e9 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_string_enum.py @@ -0,0 +1,49 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.string_enum import StringEnum + + +class TestStringEnum(unittest.TestCase): + """StringEnum unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testStringEnum(self): + """Test StringEnum""" + + """Test OuterEnum""" + # make sure that we can access its allowed_values + assert StringEnum.allowed_values[('value',)] == { + 'PLACED': "placed", + 'APPROVED': "approved", + 'DELIVERED': "delivered" + } + # make sure that an exception is thrown on an invalid value + with self.assertRaises(petstore_api.ApiValueError): + StringEnum('bad_value') + # make sure valid value works + valid_value = StringEnum.allowed_values[('value',)]['PLACED'] + assert valid_value == StringEnum(valid_value).value + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_tag.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_tag.py new file mode 100644 index 000000000000..68a3b9046bf4 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_tag.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.tag import Tag + + +class TestTag(unittest.TestCase): + """Tag unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testTag(self): + """Test Tag""" + # FIXME: construct object with mandatory attributes with example values + # model = Tag() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_type_holder_default.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_type_holder_default.py new file mode 100644 index 000000000000..f9c050b81a82 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_type_holder_default.py @@ -0,0 +1,41 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.type_holder_default import TypeHolderDefault + + +class TestTypeHolderDefault(unittest.TestCase): + """TypeHolderDefault unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testTypeHolderDefault(self): + """Test TypeHolderDefault""" + # required_vars are set to None now until swagger-parser/swagger-core fixes + # https://github.com/swagger-api/swagger-parser/issues/971 + array_item = [1, 2, 3] + model = TypeHolderDefault(array_item=array_item) + self.assertEqual(model.string_item, 'what') + self.assertEqual(model.bool_item, True) + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_type_holder_example.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_type_holder_example.py new file mode 100644 index 000000000000..e1ee7c368628 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_type_holder_example.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.type_holder_example import TypeHolderExample + + +class TestTypeHolderExample(unittest.TestCase): + """TypeHolderExample unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testTypeHolderExample(self): + """Test TypeHolderExample""" + # FIXME: construct object with mandatory attributes with example values + # model = TypeHolderExample() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_user.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_user.py new file mode 100644 index 000000000000..7241bb589c52 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_user.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.user import User + + +class TestUser(unittest.TestCase): + """User unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testUser(self): + """Test User""" + # FIXME: construct object with mandatory attributes with example values + # model = User() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_user_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_user_api.py new file mode 100644 index 000000000000..df306da07761 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_user_api.py @@ -0,0 +1,88 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import + +import unittest + +import petstore_api +from petstore_api.api.user_api import UserApi # noqa: E501 + + +class TestUserApi(unittest.TestCase): + """UserApi unit test stubs""" + + def setUp(self): + self.api = UserApi() # noqa: E501 + + def tearDown(self): + pass + + def test_create_user(self): + """Test case for create_user + + Create user # noqa: E501 + """ + pass + + def test_create_users_with_array_input(self): + """Test case for create_users_with_array_input + + Creates list of users with given input array # noqa: E501 + """ + pass + + def test_create_users_with_list_input(self): + """Test case for create_users_with_list_input + + Creates list of users with given input array # noqa: E501 + """ + pass + + def test_delete_user(self): + """Test case for delete_user + + Delete user # noqa: E501 + """ + pass + + def test_get_user_by_name(self): + """Test case for get_user_by_name + + Get user by user name # noqa: E501 + """ + pass + + def test_login_user(self): + """Test case for login_user + + Logs user into the system # noqa: E501 + """ + pass + + def test_logout_user(self): + """Test case for logout_user + + Logs out current logged in user session # noqa: E501 + """ + pass + + def test_update_user(self): + """Test case for update_user + + Updated user # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_xml_item.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_xml_item.py new file mode 100644 index 000000000000..4354664815ff --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test/test_xml_item.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from __future__ import absolute_import +import sys +import unittest + +import petstore_api +from petstore_api.model.xml_item import XmlItem + + +class TestXmlItem(unittest.TestCase): + """XmlItem unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testXmlItem(self): + """Test XmlItem""" + # FIXME: construct object with mandatory attributes with example values + # model = XmlItem() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test_python.sh b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test_python.sh new file mode 100644 index 000000000000..6f5e2c41d3a6 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/test_python.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +REQUIREMENTS_FILE=dev-requirements.txt +REQUIREMENTS_OUT=dev-requirements.txt.log +SETUP_OUT=*.egg-info +VENV=venv +DEACTIVE=false + +export LC_ALL=en_US.UTF-8 +export LANG=en_US.UTF-8 + +### set virtualenv +if [ -z "$VIRTUAL_ENV" ]; then + virtualenv $VENV --no-site-packages --always-copy + source $VENV/bin/activate + DEACTIVE=true +fi + +### install dependencies +pip install -r $REQUIREMENTS_FILE | tee -a $REQUIREMENTS_OUT + +### run tests +tox || exit 1 + +### static analysis of code +#flake8 --show-source petstore_api/ + +### deactivate virtualenv +#if [ $DEACTIVE == true ]; then +# deactivate +#fi diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/testfiles/1px_pic1.png b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/testfiles/1px_pic1.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3a386a21026f9b15b2c303a81f5c69333e9056 GIT binary patch literal 67 zcmeAS@N?(olHy`uVBq!ia0vp^j3CSbBp9sfW`_bPE>9Q7kcv6UzxWv#Ss9tmFVH&+ OlJ#`;b6Mw<&;$T@!wsPT literal 0 HcmV?d00001 diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/testfiles/1px_pic2.png b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/testfiles/1px_pic2.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3a386a21026f9b15b2c303a81f5c69333e9056 GIT binary patch literal 67 zcmeAS@N?(olHy`uVBq!ia0vp^j3CSbBp9sfW`_bPE>9Q7kcv6UzxWv#Ss9tmFVH&+ OlJ#`;b6Mw<&;$T@!wsPT literal 0 HcmV?d00001 diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/testfiles/foo.png b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/testfiles/foo.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b12cf5927ac757b054dd875ee137c2581f69bb GIT binary patch literal 43280 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 literal 0 HcmV?d00001 diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/__init__.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_api_client.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_api_client.py new file mode 100644 index 000000000000..c249bf1fc5e8 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_api_client.py @@ -0,0 +1,221 @@ +# coding: utf-8 + +# flake8: noqa + +""" +Run the tests. +$ pip install nose (optional) +$ cd OpenAPIetstore-python +$ nosetests -v +""" + +import os +import time +import atexit +import weakref +import unittest +from dateutil.parser import parse + +import petstore_api +import petstore_api.configuration + +HOST = 'http://petstore.swagger.io/v2' + + +class ApiClientTests(unittest.TestCase): + + def setUp(self): + self.api_client = petstore_api.ApiClient() + + def test_configuration(self): + config = petstore_api.Configuration() + config.host = 'http://localhost/' + + config.api_key['api_key'] = '123456' + config.api_key_prefix['api_key'] = 'PREFIX' + config.username = 'test_username' + config.password = 'test_password' + + header_params = {'test1': 'value1'} + query_params = {'test2': 'value2'} + auth_settings = ['api_key', 'unknown'] + + client = petstore_api.ApiClient(config) + + # test prefix + self.assertEqual('PREFIX', client.configuration.api_key_prefix['api_key']) + + # update parameters based on auth setting + client.update_params_for_auth(header_params, query_params, auth_settings, resource_path=None, method=None, body=None) + + # test api key auth + self.assertEqual(header_params['test1'], 'value1') + self.assertEqual(header_params['api_key'], 'PREFIX 123456') + self.assertEqual(query_params['test2'], 'value2') + + # test basic auth + self.assertEqual('test_username', client.configuration.username) + self.assertEqual('test_password', client.configuration.password) + + # test api key without prefix + config.api_key['api_key'] = '123456' + config.api_key_prefix['api_key'] = None + # update parameters based on auth setting + client.update_params_for_auth(header_params, query_params, auth_settings, resource_path=None, method=None, body=None) + self.assertEqual(header_params['api_key'], '123456') + + # test api key with empty prefix + config.api_key['api_key'] = '123456' + config.api_key_prefix['api_key'] = '' + # update parameters based on auth setting + client.update_params_for_auth(header_params, query_params, auth_settings, resource_path=None, method=None, body=None) + self.assertEqual(header_params['api_key'], '123456') + + # test api key with prefix specified in the api_key, useful when the prefix + # must include '=' sign followed by the API key secret without space. + config.api_key['api_key'] = 'PREFIX=123456' + config.api_key_prefix['api_key'] = None + # update parameters based on auth setting + client.update_params_for_auth(header_params, query_params, auth_settings, resource_path=None, method=None, body=None) + self.assertEqual(header_params['api_key'], 'PREFIX=123456') + + + def test_select_header_accept(self): + accepts = ['APPLICATION/JSON', 'APPLICATION/XML'] + accept = self.api_client.select_header_accept(accepts) + self.assertEqual(accept, 'application/json') + + accepts = ['application/json', 'application/xml'] + accept = self.api_client.select_header_accept(accepts) + self.assertEqual(accept, 'application/json') + + accepts = ['application/xml', 'application/json'] + accept = self.api_client.select_header_accept(accepts) + self.assertEqual(accept, 'application/json') + + accepts = ['text/plain', 'application/xml'] + accept = self.api_client.select_header_accept(accepts) + self.assertEqual(accept, 'text/plain, application/xml') + + accepts = [] + accept = self.api_client.select_header_accept(accepts) + self.assertEqual(accept, None) + + def test_select_header_content_type(self): + content_types = ['APPLICATION/JSON', 'APPLICATION/XML'] + content_type = self.api_client.select_header_content_type(content_types) + self.assertEqual(content_type, 'application/json') + + content_types = ['application/json', 'application/xml'] + content_type = self.api_client.select_header_content_type(content_types) + self.assertEqual(content_type, 'application/json') + + content_types = ['application/xml', 'application/json'] + content_type = self.api_client.select_header_content_type(content_types) + self.assertEqual(content_type, 'application/json') + + content_types = ['text/plain', 'application/xml'] + content_type = self.api_client.select_header_content_type(content_types) + self.assertEqual(content_type, 'text/plain') + + content_types = [] + content_type = self.api_client.select_header_content_type(content_types) + self.assertEqual(content_type, 'application/json') + + def test_sanitize_for_serialization(self): + # None + data = None + result = self.api_client.sanitize_for_serialization(None) + self.assertEqual(result, data) + + # str + data = "test string" + result = self.api_client.sanitize_for_serialization(data) + self.assertEqual(result, data) + + # int + data = 1 + result = self.api_client.sanitize_for_serialization(data) + self.assertEqual(result, data) + + # bool + data = True + result = self.api_client.sanitize_for_serialization(data) + self.assertEqual(result, data) + + # date + data = parse("1997-07-16").date() # date + result = self.api_client.sanitize_for_serialization(data) + self.assertEqual(result, "1997-07-16") + + # datetime + data = parse("1997-07-16T19:20:30.45+01:00") # datetime + result = self.api_client.sanitize_for_serialization(data) + self.assertEqual(result, "1997-07-16T19:20:30.450000+01:00") + + # list + data = [1] + result = self.api_client.sanitize_for_serialization(data) + self.assertEqual(result, data) + + # dict + data = {"test key": "test value"} + result = self.api_client.sanitize_for_serialization(data) + self.assertEqual(result, data) + + # model + pet_dict = {"id": 1, "name": "monkey", + "category": {"id": 1, "name": "test category"}, + "tags": [{"id": 1, "fullName": "test tag1"}, + {"id": 2, "fullName": "test tag2"}], + "status": "available", + "photoUrls": ["http://foo.bar.com/3", + "http://foo.bar.com/4"]} + from petstore_api.model.pet import Pet + from petstore_api.model.category import Category + from petstore_api.model.tag import Tag + from petstore_api.model.string_boolean_map import StringBooleanMap + pet = Pet(name=pet_dict["name"], photo_urls=pet_dict["photoUrls"]) + pet.id = pet_dict["id"] + cate = Category() + cate.id = pet_dict["category"]["id"] + cate.name = pet_dict["category"]["name"] + pet.category = cate + tag1 = Tag() + tag1.id = pet_dict["tags"][0]["id"] + tag1.full_name = pet_dict["tags"][0]["fullName"] + tag2 = Tag() + tag2.id = pet_dict["tags"][1]["id"] + tag2.full_name = pet_dict["tags"][1]["fullName"] + pet.tags = [tag1, tag2] + pet.status = pet_dict["status"] + + data = pet + result = self.api_client.sanitize_for_serialization(data) + self.assertEqual(result, pet_dict) + + # list of models + list_of_pet_dict = [pet_dict] + data = [pet] + result = self.api_client.sanitize_for_serialization(data) + self.assertEqual(result, list_of_pet_dict) + + # model with additional proerties + model_dict = {'some_key': True} + model = StringBooleanMap(**model_dict) + result = self.api_client.sanitize_for_serialization(model) + self.assertEqual(result, model_dict) + + def test_context_manager_closes_threadpool(self): + with petstore_api.ApiClient() as client: + self.assertIsNotNone(client.pool) + pool_ref = weakref.ref(client._pool) + self.assertIsNotNone(pool_ref()) + self.assertIsNone(pool_ref()) + + def test_atexit_closes_threadpool(self): + client = petstore_api.ApiClient() + self.assertIsNotNone(client.pool) + self.assertIsNotNone(client._pool) + atexit._run_exitfuncs() + self.assertIsNone(client._pool) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_api_exception.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_api_exception.py new file mode 100644 index 000000000000..0d0771b57850 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_api_exception.py @@ -0,0 +1,86 @@ +# coding: utf-8 + +# flake8: noqa + +""" +Run the tests. +$ pip install nose (optional) +$ cd petstore_api-python +$ nosetests -v +""" + +import os +import six +import sys +import unittest + +import petstore_api + +from .util import id_gen + +class ApiExceptionTests(unittest.TestCase): + + def setUp(self): + self.api_client = petstore_api.ApiClient() + from petstore_api.api.pet_api import PetApi + self.pet_api = PetApi(self.api_client) + self.setUpModels() + + def setUpModels(self): + from petstore_api.model import category, tag, pet + self.category = category.Category() + self.category.id = id_gen() + self.category.name = "dog" + self.tag = tag.Tag() + self.tag.id = id_gen() + self.tag.full_name = "blank" + self.pet = pet.Pet(name="hello kity", photo_urls=["http://foo.bar.com/1", "http://foo.bar.com/2"]) + self.pet.id = id_gen() + self.pet.status = "sold" + self.pet.category = self.category + self.pet.tags = [self.tag] + + def test_404_error(self): + self.pet_api.add_pet(self.pet) + self.pet_api.delete_pet(pet_id=self.pet.id) + + with self.checkRaiseRegex(petstore_api.ApiException, "Pet not found"): + self.pet_api.get_pet_by_id(pet_id=self.pet.id) + + try: + self.pet_api.get_pet_by_id(pet_id=self.pet.id) + except petstore_api.ApiException as e: + self.assertEqual(e.status, 404) + self.assertEqual(e.reason, "Not Found") + self.checkRegex(e.body, "Pet not found") + + def test_500_error(self): + self.pet_api.add_pet(self.pet) + + with self.checkRaiseRegex(petstore_api.ApiException, "Internal Server Error"): + self.pet_api.upload_file( + pet_id=self.pet.id, + additional_metadata="special" + ) + + try: + self.pet_api.upload_file( + pet_id=self.pet.id, + additional_metadata="special" + ) + except petstore_api.ApiException as e: + self.assertEqual(e.status, 500) + self.assertEqual(e.reason, "Internal Server Error") + self.checkRegex(e.body, "Error 500 Internal Server Error") + + def checkRaiseRegex(self, expected_exception, expected_regex): + if sys.version_info < (3, 0): + return self.assertRaisesRegexp(expected_exception, expected_regex) + + return self.assertRaisesRegex(expected_exception, expected_regex) + + def checkRegex(self, text, expected_regex): + if sys.version_info < (3, 0): + return self.assertRegexpMatches(text, expected_regex) + + return self.assertRegex(text, expected_regex) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_deserialization.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_deserialization.py new file mode 100644 index 000000000000..92903bb232dd --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_deserialization.py @@ -0,0 +1,442 @@ +# coding: utf-8 + +# flake8: noqa + +""" +Run the tests. +$ pip install nose (optional) +$ cd OpenAPIPetstore-python +$ nosetests -v +""" +from collections import namedtuple +import json +import os +import time +import unittest +import datetime + +import six + +import petstore_api + +from petstore_api.exceptions import ( + ApiTypeError, + ApiKeyError, + ApiValueError, +) +from petstore_api.model import ( + enum_test, + pet, + animal, + dog, + parent_pet, + child_lizard, + category, + string_enum, + number_with_validations, + string_boolean_map, +) +from petstore_api.model_utils import ( + file_type, + model_to_dict, +) + +from petstore_api.rest import RESTResponse + +MockResponse = namedtuple('MockResponse', 'data') + +class DeserializationTests(unittest.TestCase): + + def setUp(self): + self.api_client = petstore_api.ApiClient() + self.deserialize = self.api_client.deserialize + + def test_enum_test(self): + """ deserialize dict(str, Enum_Test) """ + data = { + 'enum_test': { + "enum_string": "UPPER", + "enum_string_required": "lower", + "enum_integer": 1, + "enum_number": 1.1, + "stringEnum": "placed" + } + } + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, + ({str: (enum_test.EnumTest,)},), True) + self.assertTrue(isinstance(deserialized, dict)) + self.assertTrue( + isinstance(deserialized['enum_test'], enum_test.EnumTest)) + value = ( + string_enum.StringEnum.allowed_values[('value',)]["PLACED"]) + string_enum_val = string_enum.StringEnum(value) + sample_instance = enum_test.EnumTest( + enum_string="UPPER", + enum_string_required="lower", + enum_integer=1, + enum_number=1.1, + string_enum=string_enum_val + ) + self.assertEqual(deserialized['enum_test'], sample_instance) + + def test_deserialize_dict_str_pet(self): + """ deserialize dict(str, Pet) """ + data = { + 'pet': { + "id": 0, + "category": { + "id": 0, + "name": "string" + }, + "name": "doggie", + "photoUrls": [ + "string" + ], + "tags": [ + { + "id": 0, + "fullName": "string" + } + ], + "status": "available" + } + } + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, + ({str: (pet.Pet,)},), True) + self.assertTrue(isinstance(deserialized, dict)) + self.assertTrue(isinstance(deserialized['pet'], pet.Pet)) + + def test_deserialize_dict_str_dog(self): + """ deserialize dict(str, Dog), use discriminator + This will fail because additional_properties_type is None in Animal and it must be defined as any type + to allow in the property breed which is not defined in Animal, it is defined in Dog + """ + with self.assertRaises(petstore_api.exceptions.ApiValueError): + data = { + 'dog': { + "className": "Dog", + "color": "white", + "breed": "Jack Russel Terrier" + } + } + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, + ({str: (animal.Animal,)},), True) + + def test_deserialize_lizard(self): + """ deserialize ChildLizard, use discriminator + because additional_properties_type is None in ChildLizardAllOf + we are unable to use the discriminator + For this to work correctly, additional_properties_type must allow in any type + Then in ChildLizardAllOf defines the property pet_type and allows in lovesRocks as an additionalProperty + """ + with self.assertRaises(petstore_api.exceptions.ApiValueError): + data = { + "pet_type": "ChildLizard", + "lovesRocks": True + } + response = MockResponse(data=json.dumps(data)) + + lizard = self.deserialize(response, + (parent_pet.ParentPet,), True) + + def test_deserialize_dict_str_int(self): + """ deserialize dict(str, int) """ + data = { + 'integer': 1 + } + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, ({str: (int,)},), True) + self.assertTrue(isinstance(deserialized, dict)) + self.assertTrue(isinstance(deserialized['integer'], int)) + + def test_deserialize_str(self): + """ deserialize str """ + data = "test str" + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, (str,), True) + self.assertTrue(isinstance(deserialized, str)) + + def test_deserialize_date(self): + """ deserialize date """ + data = "1997-07-16" + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, (datetime.date,), True) + self.assertTrue(isinstance(deserialized, datetime.date)) + + def test_deserialize_datetime(self): + """ deserialize datetime """ + data = "1997-07-16T19:20:30.45+01:00" + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, (datetime.datetime,), True) + self.assertTrue(isinstance(deserialized, datetime.datetime)) + + def test_deserialize_pet(self): + """ deserialize pet """ + data = { + "id": 0, + "category": { + "id": 0, + "name": "string" + }, + "name": "doggie", + "photoUrls": [ + "string" + ], + "tags": [ + { + "id": 0, + "fullName": "string" + } + ], + "status": "available" + } + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, (pet.Pet,), True) + self.assertTrue(isinstance(deserialized, pet.Pet)) + self.assertEqual(deserialized.id, 0) + self.assertEqual(deserialized.name, "doggie") + self.assertTrue(isinstance(deserialized.category, category.Category)) + self.assertEqual(deserialized.category.name, "string") + self.assertTrue(isinstance(deserialized.tags, list)) + self.assertEqual(deserialized.tags[0].full_name, "string") + + def test_deserialize_list_of_pet(self): + """ deserialize list[Pet] """ + data = [ + { + "id": 0, + "category": { + "id": 0, + "name": "string" + }, + "name": "doggie0", + "photoUrls": [ + "string" + ], + "tags": [ + { + "id": 0, + "fullName": "string" + } + ], + "status": "available" + }, + { + "id": 1, + "category": { + "id": 0, + "name": "string" + }, + "name": "doggie1", + "photoUrls": [ + "string" + ], + "tags": [ + { + "id": 0, + "fullName": "string" + } + ], + "status": "available" + }] + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, + ([pet.Pet],), True) + self.assertTrue(isinstance(deserialized, list)) + self.assertTrue(isinstance(deserialized[0], pet.Pet)) + self.assertEqual(deserialized[0].id, 0) + self.assertEqual(deserialized[1].id, 1) + self.assertEqual(deserialized[0].name, "doggie0") + self.assertEqual(deserialized[1].name, "doggie1") + + def test_deserialize_nested_dict(self): + """ deserialize dict(str, dict(str, int)) """ + data = { + "foo": { + "bar": 1 + } + } + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, + ({str: ({str: (int,)},)},), True) + self.assertTrue(isinstance(deserialized, dict)) + self.assertTrue(isinstance(deserialized["foo"], dict)) + self.assertTrue(isinstance(deserialized["foo"]["bar"], int)) + + def test_deserialize_nested_list(self): + """ deserialize list[list[str]] """ + data = [["foo"]] + response = MockResponse(data=json.dumps(data)) + + deserialized = self.deserialize(response, ([[str]],), True) + self.assertTrue(isinstance(deserialized, list)) + self.assertTrue(isinstance(deserialized[0], list)) + self.assertTrue(isinstance(deserialized[0][0], str)) + + def test_deserialize_none(self): + """ deserialize None """ + response = MockResponse(data=json.dumps(None)) + + error_msg = ( + "Invalid type for variable 'received_data'. Required value type is " + "datetime and passed type was NoneType at ['received_data']" + ) + with self.assertRaises(ApiTypeError) as exc: + deserialized = self.deserialize(response, (datetime.datetime,), True) + self.assertEqual(str(exc.exception), error_msg) + + def test_deserialize_OuterEnum(self): + """ deserialize OuterEnum """ + # make sure that an exception is thrown on an invalid value + with self.assertRaises(ApiValueError): + self.deserialize( + MockResponse(data=json.dumps("test str")), + (string_enum.StringEnum,), + True + ) + + # valid value works + placed_str = ( + string_enum.StringEnum.allowed_values[('value',)]["PLACED"] + ) + response = MockResponse(data=json.dumps(placed_str)) + deserialized = self.deserialize(response, + (string_enum.StringEnum,), True) + self.assertTrue(isinstance(deserialized, string_enum.StringEnum)) + self.assertTrue(deserialized.value == placed_str) + + def test_deserialize_NumberWithValidations(self): + """ deserialize NumberWithValidations """ + # make sure that an exception is thrown on an invalid type value + with self.assertRaises(ApiTypeError): + deserialized = self.deserialize( + MockResponse(data=json.dumps("test str")), + (number_with_validations.NumberWithValidations,), + True + ) + + # make sure that an exception is thrown on an invalid value + with self.assertRaises(ApiValueError): + deserialized = self.deserialize( + MockResponse(data=json.dumps(21.0)), + (number_with_validations.NumberWithValidations,), + True + ) + + # valid value works + number_val = 11.0 + response = MockResponse(data=json.dumps(number_val)) + number = self.deserialize(response, + (number_with_validations.NumberWithValidations,), True) + self.assertTrue(isinstance(number, number_with_validations.NumberWithValidations)) + self.assertTrue(number.value == number_val) + + def test_deserialize_file(self): + """Ensures that file deserialization works""" + response_types_mixed = (file_type,) + + # sample from http://www.jtricks.com/download-text + HTTPResponse = namedtuple( + 'urllib3_response_HTTPResponse', + ['status', 'reason', 'data', 'getheaders', 'getheader'] + ) + headers = {'Content-Disposition': 'attachment; filename=content.txt'} + def get_headers(): + return headers + def get_header(name, default=None): + return headers.get(name, default) + file_data = ( + "You are reading text file that was supposed to be downloaded\r\n" + "to your hard disk. If your browser offered to save you the file," + "\r\nthen it handled the Content-Disposition header correctly." + ) + http_response = HTTPResponse( + status=200, + reason='OK', + data=file_data, + getheaders=get_headers, + getheader=get_header + ) + # response which is deserialized to a file + mock_response = RESTResponse(http_response) + file_path = None + try: + file_object = self.deserialize( + mock_response, response_types_mixed, True) + self.assertTrue(isinstance(file_object, file_type)) + file_path = file_object.name + self.assertFalse(file_object.closed) + file_object.close() + if six.PY3: + file_data = file_data.encode('utf-8') + with open(file_path, 'rb') as other_file_object: + self.assertEqual(other_file_object.read(), file_data) + finally: + os.unlink(file_path) + + def test_deserialize_binary_to_str(self): + """Ensures that bytes deserialization works""" + response_types_mixed = (str,) + + # sample from http://www.jtricks.com/download-text + HTTPResponse = namedtuple( + 'urllib3_response_HTTPResponse', + ['status', 'reason', 'data', 'getheaders', 'getheader'] + ) + headers = {} + def get_headers(): + return headers + def get_header(name, default=None): + return headers.get(name, default) + data = "str" + + http_response = HTTPResponse( + status=200, + reason='OK', + data=json.dumps(data).encode("utf-8") if six.PY3 else json.dumps(data), + getheaders=get_headers, + getheader=get_header + ) + + mock_response = RESTResponse(http_response) + + result = self.deserialize(mock_response, response_types_mixed, True) + self.assertEqual(isinstance(result, str), True) + self.assertEqual(result, data) + + def test_deserialize_string_boolean_map(self): + """ + Ensures that string boolean (additional properties) + deserialization works + """ + # make sure that an exception is thrown on an invalid type + with self.assertRaises(ApiTypeError): + deserialized = self.deserialize( + MockResponse(data=json.dumps("test str")), + (string_boolean_map.StringBooleanMap,), + True + ) + + # valid value works + item_val = {'some_key': True} + response = MockResponse(data=json.dumps(item_val)) + model = string_boolean_map.StringBooleanMap(**item_val) + deserialized = self.deserialize(response, + (string_boolean_map.StringBooleanMap,), True) + self.assertTrue(isinstance(deserialized, string_boolean_map.StringBooleanMap)) + self.assertTrue(deserialized['some_key'] == True) + self.assertTrue(deserialized == model) + diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_pet_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_pet_api.py new file mode 100644 index 000000000000..38d7a1cc0b82 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_pet_api.py @@ -0,0 +1,406 @@ +# coding: utf-8 + +# flake8: noqa + +""" +Run the tests. +$ docker pull swaggerapi/petstore +$ docker run -d -e SWAGGER_HOST=http://petstore.swagger.io -e SWAGGER_BASE_PATH=/v2 -p 80:8080 swaggerapi/petstore +$ pip install nose (optional) +$ cd petstore_api-python +$ nosetests -v +""" + +from collections import namedtuple +import json +import os +import unittest + +import petstore_api +from petstore_api import Configuration +from petstore_api.rest import ( + RESTClientObject, + RESTResponse +) + +import six + +from petstore_api.exceptions import ( + ApiException, + ApiValueError, + ApiTypeError, +) +from petstore_api.api.pet_api import PetApi +from petstore_api.model import pet +from .util import id_gen + +import urllib3 + +if six.PY3: + from unittest.mock import patch +else: + from mock import patch + +HOST = 'http://localhost/v2' + + +class TimeoutWithEqual(urllib3.Timeout): + def __init__(self, *arg, **kwargs): + super(TimeoutWithEqual, self).__init__(*arg, **kwargs) + + def __eq__(self, other): + return self._read == other._read and self._connect == other._connect and self.total == other.total + + +class MockPoolManager(object): + def __init__(self, tc): + self._tc = tc + self._reqs = [] + + def expect_request(self, *args, **kwargs): + self._reqs.append((args, kwargs)) + + def request(self, *args, **kwargs): + self._tc.assertTrue(len(self._reqs) > 0) + r = self._reqs.pop(0) + self._tc.maxDiff = None + self._tc.assertEqual(r[0], args) + self._tc.assertEqual(r[1], kwargs) + return urllib3.HTTPResponse(status=200, body=b'test') + + +class PetApiTests(unittest.TestCase): + + def setUp(self): + config = Configuration() + config.host = HOST + config.access_token = 'ACCESS_TOKEN' + self.api_client = petstore_api.ApiClient(config) + self.pet_api = PetApi(self.api_client) + self.setUpModels() + self.setUpFiles() + + def setUpModels(self): + from petstore_api.model import category, tag + self.category = category.Category() + self.category.id = id_gen() + self.category.name = "dog" + self.tag = tag.Tag() + self.tag.id = id_gen() + self.tag.name = "python-pet-tag" + self.pet = pet.Pet(name="hello kity", photo_urls=["http://foo.bar.com/1", "http://foo.bar.com/2"]) + self.pet.id = id_gen() + self.pet.status = "sold" + self.pet.category = self.category + self.pet.tags = [self.tag] + + def setUpFiles(self): + self.test_file_dir = os.path.join(os.path.dirname(__file__), "..", "testfiles") + self.test_file_dir = os.path.realpath(self.test_file_dir) + + def test_preload_content_flag(self): + self.pet_api.add_pet(self.pet) + + resp = self.pet_api.find_pets_by_status(status=[self.pet.status], _preload_content=False) + + # return response should at least have read and close methods. + self.assertTrue(hasattr(resp, 'read')) + self.assertTrue(hasattr(resp, 'close')) + + # Also we need to make sure we can release the connection to a pool (if exists) when we are done with it. + self.assertTrue(hasattr(resp, 'release_conn')) + + # Right now, the client returns urllib3.HTTPResponse. If that changed in future, it is probably a breaking + # change, however supporting above methods should be enough for most usecases. Remove this test case if + # we followed the breaking change procedure for python client (e.g. increasing major version). + self.assertTrue(resp.__class__, 'urllib3.response.HTTPResponse') + + resp.close() + resp.release_conn() + + def test_config(self): + config = Configuration(host=HOST) + self.assertIsNotNone(config.get_host_settings()) + self.assertEqual(config.get_basic_auth_token(), + urllib3.util.make_headers(basic_auth=":").get('authorization')) + # No authentication scheme has been configured at this point, so auth_settings() + # should return an empty list. + self.assertEqual(len(config.auth_settings()), 0) + # Configure OAuth2 access token and verify the auth_settings have OAuth2 parameters. + config.access_token = 'MY-ACCESS_TOKEN' + self.assertEqual(len(config.auth_settings()), 1) + self.assertIn("petstore_auth", config.auth_settings().keys()) + config.username = "user" + config.password = "password" + self.assertEqual( + config.get_basic_auth_token(), + urllib3.util.make_headers(basic_auth="user:password").get('authorization')) + self.assertEqual(len(config.auth_settings()), 2) + self.assertIn("petstore_auth", config.auth_settings().keys()) + self.assertIn("http_basic_test", config.auth_settings().keys()) + config.username = None + config.password = None + self.assertEqual(len(config.auth_settings()), 1) + self.assertIn("petstore_auth", config.auth_settings().keys()) + + def test_timeout(self): + mock_pool = MockPoolManager(self) + self.api_client.rest_client.pool_manager = mock_pool + + mock_pool.expect_request('POST', 'http://localhost/v2/pet', + body=json.dumps(self.api_client.sanitize_for_serialization(self.pet)), + headers={'Content-Type': 'application/json', + 'Authorization': 'Bearer ACCESS_TOKEN', + 'User-Agent': 'OpenAPI-Generator/1.0.0/python'}, + preload_content=True, timeout=TimeoutWithEqual(total=5)) + mock_pool.expect_request('POST', 'http://localhost/v2/pet', + body=json.dumps(self.api_client.sanitize_for_serialization(self.pet)), + headers={'Content-Type': 'application/json', + 'Authorization': 'Bearer ACCESS_TOKEN', + 'User-Agent': 'OpenAPI-Generator/1.0.0/python'}, + preload_content=True, timeout=TimeoutWithEqual(connect=1, read=2)) + + self.pet_api.add_pet(self.pet, _request_timeout=5) + self.pet_api.add_pet(self.pet, _request_timeout=(1, 2)) + + def test_separate_default_client_instances(self): + pet_api = PetApi() + pet_api2 = PetApi() + self.assertNotEqual(pet_api.api_client, pet_api2.api_client) + + pet_api.api_client.user_agent = 'api client 3' + pet_api2.api_client.user_agent = 'api client 4' + + self.assertNotEqual(pet_api.api_client.user_agent, pet_api2.api_client.user_agent) + + def test_separate_default_config_instances(self): + pet_api = PetApi() + pet_api2 = PetApi() + self.assertNotEqual(pet_api.api_client.configuration, pet_api2.api_client.configuration) + + pet_api.api_client.configuration.host = 'somehost' + pet_api2.api_client.configuration.host = 'someotherhost' + self.assertNotEqual(pet_api.api_client.configuration.host, pet_api2.api_client.configuration.host) + + def test_async_request(self): + thread = self.pet_api.add_pet(self.pet, async_req=True) + response = thread.get() + self.assertIsNone(response) + + thread = self.pet_api.get_pet_by_id(self.pet.id, async_req=True) + result = thread.get() + self.assertIsInstance(result, pet.Pet) + + def test_async_with_result(self): + self.pet_api.add_pet(self.pet, async_req=False) + + thread = self.pet_api.get_pet_by_id(self.pet.id, async_req=True) + thread2 = self.pet_api.get_pet_by_id(self.pet.id, async_req=True) + + response = thread.get() + response2 = thread2.get() + + self.assertEqual(response.id, self.pet.id) + self.assertIsNotNone(response2.id, self.pet.id) + + def test_async_with_http_info(self): + self.pet_api.add_pet(self.pet) + + thread = self.pet_api.get_pet_by_id(self.pet.id, async_req=True, + _return_http_data_only=False) + data, status, headers = thread.get() + + self.assertIsInstance(data, pet.Pet) + self.assertEqual(status, 200) + + def test_async_exception(self): + self.pet_api.add_pet(self.pet) + + thread = self.pet_api.get_pet_by_id(-9999999999999, async_req=True) + + exception = None + try: + thread.get() + except ApiException as e: + exception = e + + self.assertIsInstance(exception, ApiException) + self.assertEqual(exception.status, 404) + + def test_add_pet_and_get_pet_by_id(self): + self.pet_api.add_pet(self.pet) + + fetched = self.pet_api.get_pet_by_id(pet_id=self.pet.id) + self.assertIsNotNone(fetched) + self.assertEqual(self.pet.id, fetched.id) + self.assertIsNotNone(fetched.category) + self.assertEqual(self.pet.category.name, fetched.category.name) + + def test_add_pet_and_get_pet_by_id_with_http_info(self): + self.pet_api.add_pet(self.pet) + + fetched = self.pet_api.get_pet_by_id( + pet_id=self.pet.id, + _return_http_data_only=False + ) + self.assertIsNotNone(fetched) + self.assertEqual(self.pet.id, fetched[0].id) + self.assertIsNotNone(fetched[0].category) + self.assertEqual(self.pet.category.name, fetched[0].category.name) + + def test_update_pet(self): + self.pet.name = "hello kity with updated" + self.pet_api.update_pet(self.pet) + + fetched = self.pet_api.get_pet_by_id(pet_id=self.pet.id) + self.assertIsNotNone(fetched) + self.assertEqual(self.pet.id, fetched.id) + self.assertEqual(self.pet.name, fetched.name) + self.assertIsNotNone(fetched.category) + self.assertEqual(fetched.category.name, self.pet.category.name) + + def test_find_pets_by_status(self): + self.pet_api.add_pet(self.pet) + + self.assertIn( + self.pet.id, + list(map(lambda x: getattr(x, 'id'), self.pet_api.find_pets_by_status(status=[self.pet.status]))) + ) + + def test_find_pets_by_tags(self): + self.pet_api.add_pet(self.pet) + + self.assertIn( + self.pet.id, + list(map(lambda x: getattr(x, 'id'), self.pet_api.find_pets_by_tags(tags=[self.tag.name]))) + ) + + def test_update_pet_with_form(self): + self.pet_api.add_pet(self.pet) + + name = "hello kity with form updated" + status = "pending" + self.pet_api.update_pet_with_form(pet_id=self.pet.id, name=name, status=status) + + fetched = self.pet_api.get_pet_by_id(pet_id=self.pet.id) + self.assertEqual(self.pet.id, fetched.id) + self.assertEqual(name, fetched.name) + self.assertEqual(status, fetched.status) + + def test_upload_file(self): + # upload file with form parameter + file_path1 = os.path.join(self.test_file_dir, "1px_pic1.png") + file_path2 = os.path.join(self.test_file_dir, "1px_pic2.png") + try: + file = open(file_path1, "rb") + additional_metadata = "special" + self.pet_api.upload_file( + pet_id=self.pet.id, + additional_metadata=additional_metadata, + file=file + ) + except ApiException as e: + self.fail("upload_file() raised {0} unexpectedly".format(type(e))) + finally: + file.close() + + # upload only one file + try: + file = open(file_path1, "rb") + self.pet_api.upload_file(pet_id=self.pet.id, file=file) + except ApiException as e: + self.fail("upload_file() raised {0} unexpectedly".format(type(e))) + finally: + file.close() + + # upload multiple files + HTTPResponse = namedtuple( + 'urllib3_response_HTTPResponse', + ['status', 'reason', 'data', 'getheaders', 'getheader'] + ) + headers = {} + def get_headers(): + return headers + def get_header(name, default=None): + return headers.get(name, default) + api_respponse = { + 'code': 200, + 'type': 'blah', + 'message': 'file upload succeeded' + } + http_response = HTTPResponse( + status=200, + reason='OK', + data=json.dumps(api_respponse).encode('utf-8'), + getheaders=get_headers, + getheader=get_header + ) + mock_response = RESTResponse(http_response) + try: + file1 = open(file_path1, "rb") + file2 = open(file_path2, "rb") + with patch.object(RESTClientObject, 'request') as mock_method: + mock_method.return_value = mock_response + res = self.pet_api.upload_file( + pet_id=684696917, files=[file1, file2]) + mock_method.assert_called_with( + 'POST', + 'http://localhost/v2/pet/684696917/uploadImage', + _preload_content=True, + _request_timeout=None, + body=None, + headers={ + 'Accept': 'application/json', + 'Content-Type': 'multipart/form-data', + 'User-Agent': 'OpenAPI-Generator/1.0.0/python', + 'Authorization': 'Bearer ACCESS_TOKEN' + }, + post_params=[ + ('files', ('1px_pic1.png', b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x00\x00\x00\x00:~\x9bU\x00\x00\x00\nIDATx\x9cc\xfa\x0f\x00\x01\x05\x01\x02\xcf\xa0.\xcd\x00\x00\x00\x00IEND\xaeB`\x82', 'image/png')), + ('files', ('1px_pic2.png', b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x00\x00\x00\x00:~\x9bU\x00\x00\x00\nIDATx\x9cc\xfa\x0f\x00\x01\x05\x01\x02\xcf\xa0.\xcd\x00\x00\x00\x00IEND\xaeB`\x82', 'image/png')) + ], + query_params=[] + ) + except ApiException as e: + self.fail("upload_file() raised {0} unexpectedly".format(type(e))) + finally: + file1.close() + file2.close() + + # passing in an array of files to when file only allows one + # raises an exceptions + try: + file = open(file_path1, "rb") + with self.assertRaises(ApiTypeError) as exc: + self.pet_api.upload_file(pet_id=self.pet.id, file=[file]) + finally: + file.close() + + # passing in a single file when an array of file is required + # raises an exception + try: + file = open(file_path1, "rb") + with self.assertRaises(ApiTypeError) as exc: + self.pet_api.upload_file(pet_id=self.pet.id, files=file) + finally: + file.close() + + # passing in a closed file raises an exception + with self.assertRaises(ApiValueError) as exc: + file = open(file_path1, "rb") + file.close() + self.pet_api.upload_file(pet_id=self.pet.id, file=file) + + + def test_delete_pet(self): + self.pet_api.add_pet(self.pet) + self.pet_api.delete_pet(pet_id=self.pet.id, api_key="special-key") + + try: + self.pet_api.get_pet_by_id(pet_id=self.pet.id) + raise Exception("expected an error") + except ApiException as e: + self.assertEqual(404, e.status) + +if __name__ == '__main__': + unittest.main() diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_serialization.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_serialization.py new file mode 100644 index 000000000000..1f718ecca6b5 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_serialization.py @@ -0,0 +1,78 @@ +# coding: utf-8 + +# flake8: noqa + +""" +Run the tests. +$ pip install nose (optional) +$ cd OpenAPIPetstore-python +$ nosetests -v +""" +from collections import namedtuple +import json +import os +import time +import unittest +import datetime + +import six + +import petstore_api + +from petstore_api.exceptions import ( + ApiTypeError, + ApiKeyError, + ApiValueError, +) +from petstore_api.model import ( + enum_test, + pet, + animal, + dog, + parent_pet, + child_lizard, + category, + string_enum, + string_boolean_map, +) +from petstore_api.model_utils import ( + file_type, + model_to_dict, +) + +from petstore_api.rest import RESTResponse + +MockResponse = namedtuple('MockResponse', 'data') + +class SerializationTests(unittest.TestCase): + + def setUp(self): + self.api_client = petstore_api.ApiClient() + self.serialize = self.api_client.sanitize_for_serialization + + def test_enum_test(self): + """ serialize dict(str, Enum_Test) """ + value = ( + string_enum.StringEnum.allowed_values[('value',)]["PLACED"]) + string_enum_val = string_enum.StringEnum(value) + + source = enum_test.EnumTest( + enum_string="UPPER", + enum_string_required="lower", + enum_integer=1, + enum_number=1.1, + string_enum=string_enum_val + ) + + result = { + 'enum_test': { + "enum_string": "UPPER", + "enum_string_required": "lower", + "enum_integer": 1, + "enum_number": 1.1, + "stringEnum": "placed" + } + } + serialized = self.serialize({"enum_test": source}) + + self.assertEqual(result, serialized) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_store_api.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_store_api.py new file mode 100644 index 000000000000..a7c1d5dd6670 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/test_store_api.py @@ -0,0 +1,32 @@ +# coding: utf-8 + +# flake8: noqa + +""" +Run the tests. +$ pip install nose (optional) +$ cd OpenAP/Petstore-python +$ nosetests -v +""" + +import os +import time +import unittest + +import petstore_api +from petstore_api.api.store_api import StoreApi + + +class StoreApiTests(unittest.TestCase): + + def setUp(self): + self.store_api = StoreApi() + + def tearDown(self): + # sleep 1 sec between two every 2 tests + time.sleep(1) + + def test_get_inventory(self): + data = self.store_api.get_inventory() + self.assertIsNotNone(data) + self.assertTrue(isinstance(data, dict)) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/util.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/util.py new file mode 100644 index 000000000000..113d7dcc5478 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tests/util.py @@ -0,0 +1,8 @@ +# flake8: noqa + +import random + + +def id_gen(bits=32): + """ Returns a n-bit randomly generated int """ + return int(random.getrandbits(bits)) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tox.ini b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tox.ini new file mode 100644 index 000000000000..8989fc3c4d96 --- /dev/null +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/tox.ini @@ -0,0 +1,9 @@ +[tox] +envlist = py3 + +[testenv] +deps=-r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt + +commands= + pytest --cov=petstore_api diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py b/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py index 3276615fd49a..1746d5c1a90d 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py +++ b/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py @@ -434,27 +434,43 @@ def __setitem__(self, name, value): self.__dict__[name] = value return - # set the attribute on the correct instance - model_instances = self._var_name_to_model_instances.get( - name, self._additional_properties_model_instances) - if model_instances: - for model_instance in model_instances: - if model_instance == self: - self.set_attribute(name, value) - else: - setattr(model_instance, name, value) - if name not in self._var_name_to_model_instances: - # we assigned an additional property - self.__dict__['_var_name_to_model_instances'][name] = ( - model_instance - ) - return None - - raise ApiAttributeError( - "{0} has no attribute '{1}'".format( - type(self).__name__, name), - [e for e in [self._path_to_item, name] if e] - ) + """ + Use cases: + 1. additional_properties_type is None (additionalProperties == False in spec) + Check for property presence in self.openapi_types + if not present then throw an error + if present set in self, set attribute + always set on composed schemas + 2. additional_properties_type exists + set attribute on self + always set on composed schemas + """ + if self.additional_properties_type is None: + """ + For an attribute to exist on a composed schema it must: + - fulfill schema_requirements in the self composed schema not considering oneOf/anyOf/allOf schemas AND + - fulfill schema_requirements in each oneOf/anyOf/allOf schemas + + schema_requirements: + For an attribute to exist on a schema it must: + - be present in properties at the schema OR + - have additionalProperties unset (defaults additionalProperties = any type) OR + - have additionalProperties set + """ + if name not in self.openapi_types: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + # attribute must be set on self and composed instances + self.set_attribute(name, value) + for model_instance in self._composed_instances: + setattr(model_instance, name, value) + if name not in self._var_name_to_model_instances: + # we assigned an additional property + self.__dict__['_var_name_to_model_instances'][name] = self._composed_instances + [self] + return None __unset_attribute_value__ = object() @@ -464,13 +480,12 @@ def get(self, name, default=None): return self.__dict__[name] # get the attribute from the correct instance - model_instances = self._var_name_to_model_instances.get( - name, self._additional_properties_model_instances) + model_instances = self._var_name_to_model_instances.get(name) values = [] - # A composed model stores child (oneof/anyOf/allOf) models under - # self._var_name_to_model_instances. A named property can exist in - # multiple child models. If the property is present in more than one - # child model, the value must be the same across all the child models. + # A composed model stores self and child (oneof/anyOf/allOf) models under + # self._var_name_to_model_instances. + # Any property must exist in self and all model instances + # The value stored in all model instances must be the same if model_instances: for model_instance in model_instances: if name in model_instance._data_store: @@ -1573,8 +1588,13 @@ def get_allof_instances(self, model_args, constant_args): self: the class we are handling model_args (dict): var_name to var_value used to make instances - constant_args (dict): var_name to var_value - used to make instances + constant_args (dict): + metadata arguments: + _check_type + _path_to_item + _spec_property_naming + _configuration + _visited_composed_classes Returns composed_instances (list) @@ -1582,20 +1602,8 @@ def get_allof_instances(self, model_args, constant_args): composed_instances = [] for allof_class in self._composed_schemas['allOf']: - # no need to handle changing js keys to python because - # for composed schemas, allof parameters are included in the - # composed schema and were changed to python keys in __new__ - # extract a dict of only required keys from fixed_model_args - kwargs = {} - var_names = set(allof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in model_args: - kwargs[var_name] = model_args[var_name] - - # and use it to make the instance - kwargs.update(constant_args) try: - allof_instance = allof_class(**kwargs) + allof_instance = allof_class(**model_args, **constant_args) composed_instances.append(allof_instance) except Exception as ex: raise ApiValueError( @@ -1655,31 +1663,9 @@ def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None): single_value_input = allows_single_value_input(oneof_class) - if not single_value_input: - # transform js keys from input data to python keys in fixed_model_args - fixed_model_args = change_keys_js_to_python( - model_kwargs, oneof_class) - - # Extract a dict with the properties that are declared in the oneOf schema. - # Undeclared properties (e.g. properties that are allowed because of the - # additionalProperties attribute in the OAS document) are not added to - # the dict. - kwargs = {} - var_names = set(oneof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in fixed_model_args: - kwargs[var_name] = fixed_model_args[var_name] - - # do not try to make a model with no input args - if len(kwargs) == 0: - continue - - # and use it to make the instance - kwargs.update(constant_kwargs) - try: if not single_value_input: - oneof_instance = oneof_class(**kwargs) + oneof_instance = oneof_class(**model_kwargs, **constant_kwargs) else: if issubclass(oneof_class, ModelSimple): oneof_instance = oneof_class(model_arg, **constant_kwargs) @@ -1736,24 +1722,8 @@ def get_anyof_instances(self, model_args, constant_args): # none_type deserialization is handled in the __new__ method continue - # transform js keys to python keys in fixed_model_args - fixed_model_args = change_keys_js_to_python(model_args, anyof_class) - - # extract a dict of only required keys from these_model_vars - kwargs = {} - var_names = set(anyof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in fixed_model_args: - kwargs[var_name] = fixed_model_args[var_name] - - # do not try to make a model with no input args - if len(kwargs) == 0: - continue - - # and use it to make the instance - kwargs.update(constant_args) try: - anyof_instance = anyof_class(**kwargs) + anyof_instance = anyof_class(**model_args, **constant_args) anyof_instances.append(anyof_instance) except Exception: pass @@ -1766,47 +1736,34 @@ def get_anyof_instances(self, model_args, constant_args): return anyof_instances -def get_additional_properties_model_instances( - composed_instances, self): - additional_properties_model_instances = [] - all_instances = [self] - all_instances.extend(composed_instances) - for instance in all_instances: - if instance.additional_properties_type is not None: - additional_properties_model_instances.append(instance) - return additional_properties_model_instances - - -def get_var_name_to_model_instances(self, composed_instances): - var_name_to_model_instances = {} - all_instances = [self] - all_instances.extend(composed_instances) - for instance in all_instances: - for var_name in instance.openapi_types: - if var_name not in var_name_to_model_instances: - var_name_to_model_instances[var_name] = [instance] - else: - var_name_to_model_instances[var_name].append(instance) - return var_name_to_model_instances - - -def get_unused_args(self, composed_instances, model_args): - unused_args = dict(model_args) - # arguments apssed to self were already converted to python names +def get_discarded_args(self, composed_instances, model_args): + """ + Gathers the args that were discarded by configuration.discard_unknown_keys + """ + model_arg_keys = model_args.keys() + discarded_args = set() + # arguments passed to self were already converted to python names # before __init__ was called - for var_name_py in self.attribute_map: - if var_name_py in unused_args: - del unused_args[var_name_py] for instance in composed_instances: if instance.__class__ in self._composed_schemas['allOf']: - for var_name_py in instance.attribute_map: - if var_name_py in unused_args: - del unused_args[var_name_py] + try: + keys = instance.to_dict().keys() + discarded_keys = model_args - keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass else: - for var_name_js in instance.attribute_map.values(): - if var_name_js in unused_args: - del unused_args[var_name_js] - return unused_args + try: + all_keys = set(model_to_dict(instance, serialize=False).keys()) + js_keys = model_to_dict(instance, serialize=True).keys() + all_keys.update(js_keys) + discarded_keys = model_arg_keys - all_keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass + return discarded_args def validate_get_composed_info(constant_args, model_args, self): @@ -1850,36 +1807,42 @@ def validate_get_composed_info(constant_args, model_args, self): composed_instances.append(oneof_instance) anyof_instances = get_anyof_instances(self, model_args, constant_args) composed_instances.extend(anyof_instances) + """ + set additional_properties_model_instances + additional properties must be evaluated at the schema level + so self's additional properties are most important + If self is a composed schema with: + - no properties defined in self + - additionalProperties: False + Then for object payloads every property is an additional property + and they are not allowed, so only empty dict is allowed + + Properties must be set on all matching schemas + so when a property is assigned toa composed instance, it must be set on all + composed instances regardless of additionalProperties presence + keeping it to prevent breaking changes in v5.0.1 + TODO remove cls._additional_properties_model_instances in 6.0.0 + """ + additional_properties_model_instances = [] + if self.additional_properties_type is not None: + additional_properties_model_instances = [self] - # map variable names to composed_instances - var_name_to_model_instances = get_var_name_to_model_instances( - self, composed_instances) - - # set additional_properties_model_instances - additional_properties_model_instances = ( - get_additional_properties_model_instances(composed_instances, self) - ) - - # set any remaining values - unused_args = get_unused_args(self, composed_instances, model_args) - if len(unused_args) > 0 and \ - len(additional_properties_model_instances) == 0 and \ - (self._configuration is None or - not self._configuration.discard_unknown_keys): - raise ApiValueError( - "Invalid input arguments input when making an instance of " - "class %s. Not all inputs were used. The unused input data " - "is %s" % (self.__class__.__name__, unused_args) - ) + """ + no need to set properties on self in here, they will be set in __init__ + By here all composed schema oneOf/anyOf/allOf instances have their properties set using + model_args + """ + discarded_args = get_discarded_args(self, composed_instances, model_args) - # no need to add additional_properties to var_name_to_model_instances here - # because additional_properties_model_instances will direct us to that - # instance when we use getattr or setattr - # and we update var_name_to_model_instances in setattr + # map variable names to composed_instances + var_name_to_model_instances = {} + for prop_name in model_args: + if prop_name not in discarded_args: + var_name_to_model_instances[prop_name] = [self] + composed_instances return [ composed_instances, var_name_to_model_instances, additional_properties_model_instances, - unused_args + discarded_args ] diff --git a/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py b/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py index 7edd9487c370..3dc0d4e47e29 100644 --- a/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py +++ b/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py @@ -434,27 +434,43 @@ def __setitem__(self, name, value): self.__dict__[name] = value return - # set the attribute on the correct instance - model_instances = self._var_name_to_model_instances.get( - name, self._additional_properties_model_instances) - if model_instances: - for model_instance in model_instances: - if model_instance == self: - self.set_attribute(name, value) - else: - setattr(model_instance, name, value) - if name not in self._var_name_to_model_instances: - # we assigned an additional property - self.__dict__['_var_name_to_model_instances'][name] = ( - model_instance - ) - return None - - raise ApiAttributeError( - "{0} has no attribute '{1}'".format( - type(self).__name__, name), - [e for e in [self._path_to_item, name] if e] - ) + """ + Use cases: + 1. additional_properties_type is None (additionalProperties == False in spec) + Check for property presence in self.openapi_types + if not present then throw an error + if present set in self, set attribute + always set on composed schemas + 2. additional_properties_type exists + set attribute on self + always set on composed schemas + """ + if self.additional_properties_type is None: + """ + For an attribute to exist on a composed schema it must: + - fulfill schema_requirements in the self composed schema not considering oneOf/anyOf/allOf schemas AND + - fulfill schema_requirements in each oneOf/anyOf/allOf schemas + + schema_requirements: + For an attribute to exist on a schema it must: + - be present in properties at the schema OR + - have additionalProperties unset (defaults additionalProperties = any type) OR + - have additionalProperties set + """ + if name not in self.openapi_types: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + # attribute must be set on self and composed instances + self.set_attribute(name, value) + for model_instance in self._composed_instances: + setattr(model_instance, name, value) + if name not in self._var_name_to_model_instances: + # we assigned an additional property + self.__dict__['_var_name_to_model_instances'][name] = self._composed_instances + [self] + return None __unset_attribute_value__ = object() @@ -464,13 +480,12 @@ def get(self, name, default=None): return self.__dict__[name] # get the attribute from the correct instance - model_instances = self._var_name_to_model_instances.get( - name, self._additional_properties_model_instances) + model_instances = self._var_name_to_model_instances.get(name) values = [] - # A composed model stores child (oneof/anyOf/allOf) models under - # self._var_name_to_model_instances. A named property can exist in - # multiple child models. If the property is present in more than one - # child model, the value must be the same across all the child models. + # A composed model stores self and child (oneof/anyOf/allOf) models under + # self._var_name_to_model_instances. + # Any property must exist in self and all model instances + # The value stored in all model instances must be the same if model_instances: for model_instance in model_instances: if name in model_instance._data_store: @@ -1573,8 +1588,13 @@ def get_allof_instances(self, model_args, constant_args): self: the class we are handling model_args (dict): var_name to var_value used to make instances - constant_args (dict): var_name to var_value - used to make instances + constant_args (dict): + metadata arguments: + _check_type + _path_to_item + _spec_property_naming + _configuration + _visited_composed_classes Returns composed_instances (list) @@ -1582,20 +1602,8 @@ def get_allof_instances(self, model_args, constant_args): composed_instances = [] for allof_class in self._composed_schemas['allOf']: - # no need to handle changing js keys to python because - # for composed schemas, allof parameters are included in the - # composed schema and were changed to python keys in __new__ - # extract a dict of only required keys from fixed_model_args - kwargs = {} - var_names = set(allof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in model_args: - kwargs[var_name] = model_args[var_name] - - # and use it to make the instance - kwargs.update(constant_args) try: - allof_instance = allof_class(**kwargs) + allof_instance = allof_class(**model_args, **constant_args) composed_instances.append(allof_instance) except Exception as ex: raise ApiValueError( @@ -1655,31 +1663,9 @@ def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None): single_value_input = allows_single_value_input(oneof_class) - if not single_value_input: - # transform js keys from input data to python keys in fixed_model_args - fixed_model_args = change_keys_js_to_python( - model_kwargs, oneof_class) - - # Extract a dict with the properties that are declared in the oneOf schema. - # Undeclared properties (e.g. properties that are allowed because of the - # additionalProperties attribute in the OAS document) are not added to - # the dict. - kwargs = {} - var_names = set(oneof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in fixed_model_args: - kwargs[var_name] = fixed_model_args[var_name] - - # do not try to make a model with no input args - if len(kwargs) == 0: - continue - - # and use it to make the instance - kwargs.update(constant_kwargs) - try: if not single_value_input: - oneof_instance = oneof_class(**kwargs) + oneof_instance = oneof_class(**model_kwargs, **constant_kwargs) else: if issubclass(oneof_class, ModelSimple): oneof_instance = oneof_class(model_arg, **constant_kwargs) @@ -1736,24 +1722,8 @@ def get_anyof_instances(self, model_args, constant_args): # none_type deserialization is handled in the __new__ method continue - # transform js keys to python keys in fixed_model_args - fixed_model_args = change_keys_js_to_python(model_args, anyof_class) - - # extract a dict of only required keys from these_model_vars - kwargs = {} - var_names = set(anyof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in fixed_model_args: - kwargs[var_name] = fixed_model_args[var_name] - - # do not try to make a model with no input args - if len(kwargs) == 0: - continue - - # and use it to make the instance - kwargs.update(constant_args) try: - anyof_instance = anyof_class(**kwargs) + anyof_instance = anyof_class(**model_args, **constant_args) anyof_instances.append(anyof_instance) except Exception: pass @@ -1766,47 +1736,34 @@ def get_anyof_instances(self, model_args, constant_args): return anyof_instances -def get_additional_properties_model_instances( - composed_instances, self): - additional_properties_model_instances = [] - all_instances = [self] - all_instances.extend(composed_instances) - for instance in all_instances: - if instance.additional_properties_type is not None: - additional_properties_model_instances.append(instance) - return additional_properties_model_instances - - -def get_var_name_to_model_instances(self, composed_instances): - var_name_to_model_instances = {} - all_instances = [self] - all_instances.extend(composed_instances) - for instance in all_instances: - for var_name in instance.openapi_types: - if var_name not in var_name_to_model_instances: - var_name_to_model_instances[var_name] = [instance] - else: - var_name_to_model_instances[var_name].append(instance) - return var_name_to_model_instances - - -def get_unused_args(self, composed_instances, model_args): - unused_args = dict(model_args) - # arguments apssed to self were already converted to python names +def get_discarded_args(self, composed_instances, model_args): + """ + Gathers the args that were discarded by configuration.discard_unknown_keys + """ + model_arg_keys = model_args.keys() + discarded_args = set() + # arguments passed to self were already converted to python names # before __init__ was called - for var_name_py in self.attribute_map: - if var_name_py in unused_args: - del unused_args[var_name_py] for instance in composed_instances: if instance.__class__ in self._composed_schemas['allOf']: - for var_name_py in instance.attribute_map: - if var_name_py in unused_args: - del unused_args[var_name_py] + try: + keys = instance.to_dict().keys() + discarded_keys = model_args - keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass else: - for var_name_js in instance.attribute_map.values(): - if var_name_js in unused_args: - del unused_args[var_name_js] - return unused_args + try: + all_keys = set(model_to_dict(instance, serialize=False).keys()) + js_keys = model_to_dict(instance, serialize=True).keys() + all_keys.update(js_keys) + discarded_keys = model_arg_keys - all_keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass + return discarded_args def validate_get_composed_info(constant_args, model_args, self): @@ -1850,36 +1807,42 @@ def validate_get_composed_info(constant_args, model_args, self): composed_instances.append(oneof_instance) anyof_instances = get_anyof_instances(self, model_args, constant_args) composed_instances.extend(anyof_instances) + """ + set additional_properties_model_instances + additional properties must be evaluated at the schema level + so self's additional properties are most important + If self is a composed schema with: + - no properties defined in self + - additionalProperties: False + Then for object payloads every property is an additional property + and they are not allowed, so only empty dict is allowed + + Properties must be set on all matching schemas + so when a property is assigned toa composed instance, it must be set on all + composed instances regardless of additionalProperties presence + keeping it to prevent breaking changes in v5.0.1 + TODO remove cls._additional_properties_model_instances in 6.0.0 + """ + additional_properties_model_instances = [] + if self.additional_properties_type is not None: + additional_properties_model_instances = [self] - # map variable names to composed_instances - var_name_to_model_instances = get_var_name_to_model_instances( - self, composed_instances) - - # set additional_properties_model_instances - additional_properties_model_instances = ( - get_additional_properties_model_instances(composed_instances, self) - ) - - # set any remaining values - unused_args = get_unused_args(self, composed_instances, model_args) - if len(unused_args) > 0 and \ - len(additional_properties_model_instances) == 0 and \ - (self._configuration is None or - not self._configuration.discard_unknown_keys): - raise ApiValueError( - "Invalid input arguments input when making an instance of " - "class %s. Not all inputs were used. The unused input data " - "is %s" % (self.__class__.__name__, unused_args) - ) + """ + no need to set properties on self in here, they will be set in __init__ + By here all composed schema oneOf/anyOf/allOf instances have their properties set using + model_args + """ + discarded_args = get_discarded_args(self, composed_instances, model_args) - # no need to add additional_properties to var_name_to_model_instances here - # because additional_properties_model_instances will direct us to that - # instance when we use getattr or setattr - # and we update var_name_to_model_instances in setattr + # map variable names to composed_instances + var_name_to_model_instances = {} + for prop_name in model_args: + if prop_name not in discarded_args: + var_name_to_model_instances[prop_name] = [self] + composed_instances return [ composed_instances, var_name_to_model_instances, additional_properties_model_instances, - unused_args + discarded_args ] diff --git a/samples/openapi3/client/petstore/python-experimental/.coverage b/samples/openapi3/client/petstore/python-experimental/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..9e8563e13450422ac584dd73f6572a2d6b14b7cf GIT binary patch literal 94208 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 literal 0 HcmV?d00001 diff --git a/samples/openapi3/client/petstore/python-legacy/pom.xml b/samples/openapi3/client/petstore/python-legacy/pom.xml index 98955483eb8f..3a9cf7273065 100755 --- a/samples/openapi3/client/petstore/python-legacy/pom.xml +++ b/samples/openapi3/client/petstore/python-legacy/pom.xml @@ -1,7 +1,7 @@ 4.0.0 org.openapitools - PythonOAS3PetstoreTests + PythonLegacyOAS3PetstoreTests pom 1.0-SNAPSHOT Python OpenAPI3 Petstore Client diff --git a/samples/openapi3/client/petstore/python/.openapi-generator/FILES b/samples/openapi3/client/petstore/python/.openapi-generator/FILES index aa906bc845dc..d2f40afcb985 100644 --- a/samples/openapi3/client/petstore/python/.openapi-generator/FILES +++ b/samples/openapi3/client/petstore/python/.openapi-generator/FILES @@ -28,6 +28,7 @@ docs/ClassModel.md docs/Client.md docs/ComplexQuadrilateral.md docs/ComposedOneOfNumberWithValidations.md +docs/ComposedSchemaWithPropsAndNoAddProps.md docs/DanishPig.md docs/DefaultApi.md docs/Dog.md @@ -134,6 +135,7 @@ petstore_api/model/class_model.py petstore_api/model/client.py petstore_api/model/complex_quadrilateral.py petstore_api/model/composed_one_of_number_with_validations.py +petstore_api/model/composed_schema_with_props_and_no_add_props.py petstore_api/model/danish_pig.py petstore_api/model/dog.py petstore_api/model/dog_all_of.py diff --git a/samples/openapi3/client/petstore/python/README.md b/samples/openapi3/client/petstore/python/README.md index 61aebac0aa19..266472605a21 100644 --- a/samples/openapi3/client/petstore/python/README.md +++ b/samples/openapi3/client/petstore/python/README.md @@ -157,6 +157,7 @@ Class | Method | HTTP request | Description - [Client](docs/Client.md) - [ComplexQuadrilateral](docs/ComplexQuadrilateral.md) - [ComposedOneOfNumberWithValidations](docs/ComposedOneOfNumberWithValidations.md) + - [ComposedSchemaWithPropsAndNoAddProps](docs/ComposedSchemaWithPropsAndNoAddProps.md) - [DanishPig](docs/DanishPig.md) - [Dog](docs/Dog.md) - [DogAllOf](docs/DogAllOf.md) diff --git a/samples/openapi3/client/petstore/python/docs/AdditionalPropertiesClass.md b/samples/openapi3/client/petstore/python/docs/AdditionalPropertiesClass.md index 460813c12231..b8d54e3c9bf1 100644 --- a/samples/openapi3/client/petstore/python/docs/AdditionalPropertiesClass.md +++ b/samples/openapi3/client/petstore/python/docs/AdditionalPropertiesClass.md @@ -10,8 +10,9 @@ Name | Type | Description | Notes **map_with_undeclared_properties_anytype_1** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}** | | [optional] **map_with_undeclared_properties_anytype_2** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}** | | [optional] **map_with_undeclared_properties_anytype_3** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}** | | [optional] -**empty_map** | **bool, date, datetime, dict, float, int, list, str** | an object with no declared properties and no undeclared properties, hence it's an empty map. | [optional] +**empty_map** | **dict** | an object with no declared properties and no undeclared properties, hence it's an empty map. | [optional] **map_with_undeclared_properties_string** | **{str: (str,)}** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/AdditionalPropertiesWithArrayOfEnums.md b/samples/openapi3/client/petstore/python/docs/AdditionalPropertiesWithArrayOfEnums.md index 49ca7b3d7540..5cdb2f4c9221 100644 --- a/samples/openapi3/client/petstore/python/docs/AdditionalPropertiesWithArrayOfEnums.md +++ b/samples/openapi3/client/petstore/python/docs/AdditionalPropertiesWithArrayOfEnums.md @@ -4,7 +4,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**any string name** | **[EnumClass]** | any string name can be used but the value must be the correct type | [optional] +**any string name** | [**[EnumClass]**](EnumClass.md) | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Animal.md b/samples/openapi3/client/petstore/python/docs/Animal.md index 1d1c77c01abc..d36c66a5d882 100644 --- a/samples/openapi3/client/petstore/python/docs/Animal.md +++ b/samples/openapi3/client/petstore/python/docs/Animal.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **class_name** | **str** | | **color** | **str** | | [optional] if omitted the server will use the default value of "red" +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/AnimalFarm.md b/samples/openapi3/client/petstore/python/docs/AnimalFarm.md index fc299cf27d34..fb3b33c9c9c2 100644 --- a/samples/openapi3/client/petstore/python/docs/AnimalFarm.md +++ b/samples/openapi3/client/petstore/python/docs/AnimalFarm.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | [**[Animal]**](Animal.md) | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ApiResponse.md b/samples/openapi3/client/petstore/python/docs/ApiResponse.md index 81a7d0d85227..bedefea9a9cb 100644 --- a/samples/openapi3/client/petstore/python/docs/ApiResponse.md +++ b/samples/openapi3/client/petstore/python/docs/ApiResponse.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **code** | **int** | | [optional] **type** | **str** | | [optional] **message** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Apple.md b/samples/openapi3/client/petstore/python/docs/Apple.md index d8ba5ec0711b..d7634278906b 100644 --- a/samples/openapi3/client/petstore/python/docs/Apple.md +++ b/samples/openapi3/client/petstore/python/docs/Apple.md @@ -4,8 +4,9 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**cultivar** | **str** | | [optional] +**cultivar** | **str** | | **origin** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ArrayOfArrayOfNumberOnly.md b/samples/openapi3/client/petstore/python/docs/ArrayOfArrayOfNumberOnly.md index 6ab77963788b..11cd25c98ee4 100644 --- a/samples/openapi3/client/petstore/python/docs/ArrayOfArrayOfNumberOnly.md +++ b/samples/openapi3/client/petstore/python/docs/ArrayOfArrayOfNumberOnly.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **array_array_number** | **[[float]]** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ArrayOfEnums.md b/samples/openapi3/client/petstore/python/docs/ArrayOfEnums.md index d2f8ea80a3d9..f1593c10afd0 100644 --- a/samples/openapi3/client/petstore/python/docs/ArrayOfEnums.md +++ b/samples/openapi3/client/petstore/python/docs/ArrayOfEnums.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | [**[StringEnum]**](StringEnum.md) | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ArrayOfNumberOnly.md b/samples/openapi3/client/petstore/python/docs/ArrayOfNumberOnly.md index ebc65a54ba7e..1e9bb12e4e8b 100644 --- a/samples/openapi3/client/petstore/python/docs/ArrayOfNumberOnly.md +++ b/samples/openapi3/client/petstore/python/docs/ArrayOfNumberOnly.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **array_number** | **[float]** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ArrayTest.md b/samples/openapi3/client/petstore/python/docs/ArrayTest.md index 4e1bda8fc3af..9eac1f8874c4 100644 --- a/samples/openapi3/client/petstore/python/docs/ArrayTest.md +++ b/samples/openapi3/client/petstore/python/docs/ArrayTest.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **array_of_string** | **[str]** | | [optional] **array_array_of_integer** | **[[int]]** | | [optional] **array_array_of_model** | [**[[ReadOnlyFirst]]**](ReadOnlyFirst.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Banana.md b/samples/openapi3/client/petstore/python/docs/Banana.md index 54e06a1de596..2e38614e0f83 100644 --- a/samples/openapi3/client/petstore/python/docs/Banana.md +++ b/samples/openapi3/client/petstore/python/docs/Banana.md @@ -4,7 +4,8 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**length_cm** | **float** | | [optional] +**length_cm** | **float** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/BasquePig.md b/samples/openapi3/client/petstore/python/docs/BasquePig.md index 6c583c5bc9f5..0d92ecbe02bb 100644 --- a/samples/openapi3/client/petstore/python/docs/BasquePig.md +++ b/samples/openapi3/client/petstore/python/docs/BasquePig.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **class_name** | **str** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Capitalization.md b/samples/openapi3/client/petstore/python/docs/Capitalization.md index 1ddeadeb3f46..df9989f8db57 100644 --- a/samples/openapi3/client/petstore/python/docs/Capitalization.md +++ b/samples/openapi3/client/petstore/python/docs/Capitalization.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **capital_snake** | **str** | | [optional] **sca_eth_flow_points** | **str** | | [optional] **att_name** | **str** | Name of the pet | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/CatAllOf.md b/samples/openapi3/client/petstore/python/docs/CatAllOf.md index 0ff7809a99ac..6fd1390a749b 100644 --- a/samples/openapi3/client/petstore/python/docs/CatAllOf.md +++ b/samples/openapi3/client/petstore/python/docs/CatAllOf.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **declawed** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Category.md b/samples/openapi3/client/petstore/python/docs/Category.md index 940f6a45e641..7650eccafba5 100644 --- a/samples/openapi3/client/petstore/python/docs/Category.md +++ b/samples/openapi3/client/petstore/python/docs/Category.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **str** | | defaults to "default-name" **id** | **int** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ChildCatAllOf.md b/samples/openapi3/client/petstore/python/docs/ChildCatAllOf.md index c5883b9a87c8..c5b2f58f28ce 100644 --- a/samples/openapi3/client/petstore/python/docs/ChildCatAllOf.md +++ b/samples/openapi3/client/petstore/python/docs/ChildCatAllOf.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ClassModel.md b/samples/openapi3/client/petstore/python/docs/ClassModel.md index 48ed7cbf2ff0..6605a16d74a9 100644 --- a/samples/openapi3/client/petstore/python/docs/ClassModel.md +++ b/samples/openapi3/client/petstore/python/docs/ClassModel.md @@ -6,6 +6,7 @@ Model for testing model with \"_class\" property Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **_class** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Client.md b/samples/openapi3/client/petstore/python/docs/Client.md index c3986008d6c3..1b293140f348 100644 --- a/samples/openapi3/client/petstore/python/docs/Client.md +++ b/samples/openapi3/client/petstore/python/docs/Client.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **client** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ComposedSchemaWithPropsAndNoAddProps.md b/samples/openapi3/client/petstore/python/docs/ComposedSchemaWithPropsAndNoAddProps.md new file mode 100644 index 000000000000..5930b762b0c2 --- /dev/null +++ b/samples/openapi3/client/petstore/python/docs/ComposedSchemaWithPropsAndNoAddProps.md @@ -0,0 +1,13 @@ +# ComposedSchemaWithPropsAndNoAddProps + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**color** | **str** | | [optional] +**id** | **int** | | [optional] +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/openapi3/client/petstore/python/docs/DanishPig.md b/samples/openapi3/client/petstore/python/docs/DanishPig.md index dd7fe16ea4a9..4d1ebe4f68a0 100644 --- a/samples/openapi3/client/petstore/python/docs/DanishPig.md +++ b/samples/openapi3/client/petstore/python/docs/DanishPig.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **class_name** | **str** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/DogAllOf.md b/samples/openapi3/client/petstore/python/docs/DogAllOf.md index 6382bbd80671..2907a9fd5c43 100644 --- a/samples/openapi3/client/petstore/python/docs/DogAllOf.md +++ b/samples/openapi3/client/petstore/python/docs/DogAllOf.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **breed** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Drawing.md b/samples/openapi3/client/petstore/python/docs/Drawing.md index 0f0390a3f720..a4fc4830562f 100644 --- a/samples/openapi3/client/petstore/python/docs/Drawing.md +++ b/samples/openapi3/client/petstore/python/docs/Drawing.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes **shape_or_null** | [**ShapeOrNull**](ShapeOrNull.md) | | [optional] **nullable_shape** | [**NullableShape**](NullableShape.md) | | [optional] **shapes** | [**[Shape]**](Shape.md) | | [optional] -**any string name** | **Fruit** | any string name can be used but the value must be the correct type | [optional] +**any string name** | [**Fruit**](Fruit.md) | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/EnumArrays.md b/samples/openapi3/client/petstore/python/docs/EnumArrays.md index 9be5c645a809..ad4e9d2fcb7c 100644 --- a/samples/openapi3/client/petstore/python/docs/EnumArrays.md +++ b/samples/openapi3/client/petstore/python/docs/EnumArrays.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **just_symbol** | **str** | | [optional] **array_enum** | **[str]** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/EnumClass.md b/samples/openapi3/client/petstore/python/docs/EnumClass.md index a1f9aae58190..39bb0e1644c5 100644 --- a/samples/openapi3/client/petstore/python/docs/EnumClass.md +++ b/samples/openapi3/client/petstore/python/docs/EnumClass.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | **str** | | defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/EnumTest.md b/samples/openapi3/client/petstore/python/docs/EnumTest.md index b9181858434c..27b6997e695d 100644 --- a/samples/openapi3/client/petstore/python/docs/EnumTest.md +++ b/samples/openapi3/client/petstore/python/docs/EnumTest.md @@ -15,6 +15,7 @@ Name | Type | Description | Notes **integer_enum_one_value** | [**IntegerEnumOneValue**](IntegerEnumOneValue.md) | | [optional] **inline_array_of_str_enum** | [**[StringEnum]**](StringEnum.md) | | [optional] **array_of_str_enum** | [**ArrayOfEnums**](ArrayOfEnums.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/File.md b/samples/openapi3/client/petstore/python/docs/File.md index 63b1d1a65186..f84547d19331 100644 --- a/samples/openapi3/client/petstore/python/docs/File.md +++ b/samples/openapi3/client/petstore/python/docs/File.md @@ -6,6 +6,7 @@ Must be named `File` for test. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **source_uri** | **str** | Test capitalization | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/FileSchemaTestClass.md b/samples/openapi3/client/petstore/python/docs/FileSchemaTestClass.md index caf2440821da..4572aa0905b3 100644 --- a/samples/openapi3/client/petstore/python/docs/FileSchemaTestClass.md +++ b/samples/openapi3/client/petstore/python/docs/FileSchemaTestClass.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **file** | [**File**](File.md) | | [optional] **files** | [**[File]**](File.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Foo.md b/samples/openapi3/client/petstore/python/docs/Foo.md index 23fb5e1678ed..c9c54d1ee40a 100644 --- a/samples/openapi3/client/petstore/python/docs/Foo.md +++ b/samples/openapi3/client/petstore/python/docs/Foo.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **bar** | **str** | | [optional] if omitted the server will use the default value of "bar" +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/FormatTest.md b/samples/openapi3/client/petstore/python/docs/FormatTest.md index 4fcec135190f..3c8cc8697c1c 100644 --- a/samples/openapi3/client/petstore/python/docs/FormatTest.md +++ b/samples/openapi3/client/petstore/python/docs/FormatTest.md @@ -20,6 +20,7 @@ Name | Type | Description | Notes **uuid_no_example** | **str** | | [optional] **pattern_with_digits** | **str** | A string that is a 10 digit number. Can have leading zeros. | [optional] **pattern_with_digits_and_delimiter** | **str** | A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01. | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Fruit.md b/samples/openapi3/client/petstore/python/docs/Fruit.md index 92700e79e084..d65f4cb14b4f 100644 --- a/samples/openapi3/client/petstore/python/docs/Fruit.md +++ b/samples/openapi3/client/petstore/python/docs/Fruit.md @@ -1,13 +1,15 @@ # Fruit +a schema that tests oneOf and includes a schema level property ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- +**cultivar** | **str** | | +**length_cm** | **float** | | **color** | **str** | | [optional] -**cultivar** | **str** | | [optional] **origin** | **str** | | [optional] -**length_cm** | **float** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/FruitReq.md b/samples/openapi3/client/petstore/python/docs/FruitReq.md index 7ff54d6ae022..096dde573091 100644 --- a/samples/openapi3/client/petstore/python/docs/FruitReq.md +++ b/samples/openapi3/client/petstore/python/docs/FruitReq.md @@ -1,5 +1,6 @@ # FruitReq +a schema where additionalProperties is on in the composed schema and off in the oneOf object schemas also, this schem accepts null as a value ## Properties Name | Type | Description | Notes @@ -8,6 +9,7 @@ Name | Type | Description | Notes **sweet** | **bool** | | [optional] **cultivar** | **str** | | [optional] **length_cm** | **float** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/GmFruit.md b/samples/openapi3/client/petstore/python/docs/GmFruit.md index f2af2abe5cef..4da4dd53ad44 100644 --- a/samples/openapi3/client/petstore/python/docs/GmFruit.md +++ b/samples/openapi3/client/petstore/python/docs/GmFruit.md @@ -4,10 +4,11 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- +**cultivar** | **str** | | +**length_cm** | **float** | | **color** | **str** | | [optional] -**cultivar** | **str** | | [optional] **origin** | **str** | | [optional] -**length_cm** | **float** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/GrandparentAnimal.md b/samples/openapi3/client/petstore/python/docs/GrandparentAnimal.md index 15db0708bb1a..a1c340378106 100644 --- a/samples/openapi3/client/petstore/python/docs/GrandparentAnimal.md +++ b/samples/openapi3/client/petstore/python/docs/GrandparentAnimal.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **pet_type** | **str** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/HasOnlyReadOnly.md b/samples/openapi3/client/petstore/python/docs/HasOnlyReadOnly.md index 0e1334519a8b..88bc03d4ff5c 100644 --- a/samples/openapi3/client/petstore/python/docs/HasOnlyReadOnly.md +++ b/samples/openapi3/client/petstore/python/docs/HasOnlyReadOnly.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **bar** | **str** | | [optional] [readonly] **foo** | **str** | | [optional] [readonly] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/HealthCheckResult.md b/samples/openapi3/client/petstore/python/docs/HealthCheckResult.md index ab8b660e667f..e20455fb377a 100644 --- a/samples/openapi3/client/petstore/python/docs/HealthCheckResult.md +++ b/samples/openapi3/client/petstore/python/docs/HealthCheckResult.md @@ -6,6 +6,7 @@ Just a string to inform instance is up and running. Make it nullable in hope to Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **nullable_message** | **str, none_type** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/InlineResponseDefault.md b/samples/openapi3/client/petstore/python/docs/InlineResponseDefault.md index f0a52bc4639c..b8823d383bac 100644 --- a/samples/openapi3/client/petstore/python/docs/InlineResponseDefault.md +++ b/samples/openapi3/client/petstore/python/docs/InlineResponseDefault.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **string** | [**Foo**](Foo.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/IntegerEnum.md b/samples/openapi3/client/petstore/python/docs/IntegerEnum.md index 9567a76cc2e2..a5b38556bf8c 100644 --- a/samples/openapi3/client/petstore/python/docs/IntegerEnum.md +++ b/samples/openapi3/client/petstore/python/docs/IntegerEnum.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | **int** | | must be one of [0, 1, 2, ] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/IntegerEnumOneValue.md b/samples/openapi3/client/petstore/python/docs/IntegerEnumOneValue.md index 99dcaa7a4ec3..d92f3080973d 100644 --- a/samples/openapi3/client/petstore/python/docs/IntegerEnumOneValue.md +++ b/samples/openapi3/client/petstore/python/docs/IntegerEnumOneValue.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | **int** | | defaults to 0, must be one of [0, ] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/IntegerEnumWithDefaultValue.md b/samples/openapi3/client/petstore/python/docs/IntegerEnumWithDefaultValue.md index 4b8e39d9cadd..2fd432edc69d 100644 --- a/samples/openapi3/client/petstore/python/docs/IntegerEnumWithDefaultValue.md +++ b/samples/openapi3/client/petstore/python/docs/IntegerEnumWithDefaultValue.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | **int** | | defaults to 0, must be one of [0, 1, 2, ] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/IsoscelesTriangle.md b/samples/openapi3/client/petstore/python/docs/IsoscelesTriangle.md index e7fffa3be03a..57cfa6d12ad1 100644 --- a/samples/openapi3/client/petstore/python/docs/IsoscelesTriangle.md +++ b/samples/openapi3/client/petstore/python/docs/IsoscelesTriangle.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **shape_type** | **str** | | **triangle_type** | **str** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/List.md b/samples/openapi3/client/petstore/python/docs/List.md index 4b60956971aa..13f2694de358 100644 --- a/samples/openapi3/client/petstore/python/docs/List.md +++ b/samples/openapi3/client/petstore/python/docs/List.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **_123_list** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/MapTest.md b/samples/openapi3/client/petstore/python/docs/MapTest.md index 15228ee1f282..e6584f3811e0 100644 --- a/samples/openapi3/client/petstore/python/docs/MapTest.md +++ b/samples/openapi3/client/petstore/python/docs/MapTest.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **map_of_enum_string** | **{str: (str,)}** | | [optional] **direct_map** | **{str: (bool,)}** | | [optional] **indirect_map** | [**StringBooleanMap**](StringBooleanMap.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/MixedPropertiesAndAdditionalPropertiesClass.md b/samples/openapi3/client/petstore/python/docs/MixedPropertiesAndAdditionalPropertiesClass.md index f489944a20af..f32c4e04134b 100644 --- a/samples/openapi3/client/petstore/python/docs/MixedPropertiesAndAdditionalPropertiesClass.md +++ b/samples/openapi3/client/petstore/python/docs/MixedPropertiesAndAdditionalPropertiesClass.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **uuid** | **str** | | [optional] **date_time** | **datetime** | | [optional] **map** | [**{str: (Animal,)}**](Animal.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Model200Response.md b/samples/openapi3/client/petstore/python/docs/Model200Response.md index c958bd4b33f8..f7ef7d79acf6 100644 --- a/samples/openapi3/client/petstore/python/docs/Model200Response.md +++ b/samples/openapi3/client/petstore/python/docs/Model200Response.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **int** | | [optional] **_class** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ModelReturn.md b/samples/openapi3/client/petstore/python/docs/ModelReturn.md index 043e9d466fab..75fb39a88698 100644 --- a/samples/openapi3/client/petstore/python/docs/ModelReturn.md +++ b/samples/openapi3/client/petstore/python/docs/ModelReturn.md @@ -6,6 +6,7 @@ Model for testing reserved words Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **_return** | **int** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Name.md b/samples/openapi3/client/petstore/python/docs/Name.md index 3be719cdbfba..6e58fae6d0bb 100644 --- a/samples/openapi3/client/petstore/python/docs/Name.md +++ b/samples/openapi3/client/petstore/python/docs/Name.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **snake_case** | **int** | | [optional] [readonly] **_property** | **str** | | [optional] **_123_number** | **int** | | [optional] [readonly] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/NullableClass.md b/samples/openapi3/client/petstore/python/docs/NullableClass.md index 863e93ddfbbc..48a27469f6c9 100644 --- a/samples/openapi3/client/petstore/python/docs/NullableClass.md +++ b/samples/openapi3/client/petstore/python/docs/NullableClass.md @@ -13,10 +13,11 @@ Name | Type | Description | Notes **array_nullable_prop** | **[{str: (bool, date, datetime, dict, float, int, list, str, none_type)}], none_type** | | [optional] **array_and_items_nullable_prop** | **[{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type], none_type** | | [optional] **array_items_nullable** | **[{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type]** | | [optional] +**object_nullable** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type** | | [optional] **object_nullable_prop** | **{str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},)}, none_type** | | [optional] **object_and_items_nullable_prop** | **{str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type)}, none_type** | | [optional] **object_items_nullable** | **{str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type)}** | | [optional] -**any string name** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type** | any string name can be used but the value must be the correct type | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/NumberOnly.md b/samples/openapi3/client/petstore/python/docs/NumberOnly.md index 37195c5d8994..172e86163a44 100644 --- a/samples/openapi3/client/petstore/python/docs/NumberOnly.md +++ b/samples/openapi3/client/petstore/python/docs/NumberOnly.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **just_number** | **float** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/NumberWithValidations.md b/samples/openapi3/client/petstore/python/docs/NumberWithValidations.md index 119e0f678239..cc6f77c152c6 100644 --- a/samples/openapi3/client/petstore/python/docs/NumberWithValidations.md +++ b/samples/openapi3/client/petstore/python/docs/NumberWithValidations.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | **float** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ObjectModelWithRefProps.md b/samples/openapi3/client/petstore/python/docs/ObjectModelWithRefProps.md index 5ff4e52033d6..a0d15f4bbd15 100644 --- a/samples/openapi3/client/petstore/python/docs/ObjectModelWithRefProps.md +++ b/samples/openapi3/client/petstore/python/docs/ObjectModelWithRefProps.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **my_number** | [**NumberWithValidations**](NumberWithValidations.md) | | [optional] **my_string** | **str** | | [optional] **my_boolean** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Order.md b/samples/openapi3/client/petstore/python/docs/Order.md index d29e1a381de8..0423082932d5 100644 --- a/samples/openapi3/client/petstore/python/docs/Order.md +++ b/samples/openapi3/client/petstore/python/docs/Order.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **ship_date** | **datetime** | | [optional] **status** | **str** | Order Status | [optional] **complete** | **bool** | | [optional] if omitted the server will use the default value of False +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Pet.md b/samples/openapi3/client/petstore/python/docs/Pet.md index ea4abdeb13d3..bb6e8d344e64 100644 --- a/samples/openapi3/client/petstore/python/docs/Pet.md +++ b/samples/openapi3/client/petstore/python/docs/Pet.md @@ -11,6 +11,7 @@ Name | Type | Description | Notes **category** | [**Category**](Category.md) | | [optional] **tags** | [**[Tag]**](Tag.md) | | [optional] **status** | **str** | pet status in the store | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/QuadrilateralInterface.md b/samples/openapi3/client/petstore/python/docs/QuadrilateralInterface.md index 3b9c39d22306..05573544bd79 100644 --- a/samples/openapi3/client/petstore/python/docs/QuadrilateralInterface.md +++ b/samples/openapi3/client/petstore/python/docs/QuadrilateralInterface.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **quadrilateral_type** | **str** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ReadOnlyFirst.md b/samples/openapi3/client/petstore/python/docs/ReadOnlyFirst.md index 53b4c61d8445..ba39ec3d04e4 100644 --- a/samples/openapi3/client/petstore/python/docs/ReadOnlyFirst.md +++ b/samples/openapi3/client/petstore/python/docs/ReadOnlyFirst.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **bar** | **str** | | [optional] [readonly] **baz** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/ShapeInterface.md b/samples/openapi3/client/petstore/python/docs/ShapeInterface.md index 4d094158faba..012d4a0cdd86 100644 --- a/samples/openapi3/client/petstore/python/docs/ShapeInterface.md +++ b/samples/openapi3/client/petstore/python/docs/ShapeInterface.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **shape_type** | **str** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/SpecialModelName.md b/samples/openapi3/client/petstore/python/docs/SpecialModelName.md index 268e1134192d..4a1c86ff4de0 100644 --- a/samples/openapi3/client/petstore/python/docs/SpecialModelName.md +++ b/samples/openapi3/client/petstore/python/docs/SpecialModelName.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **special_property_name** | **int** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/StringEnum.md b/samples/openapi3/client/petstore/python/docs/StringEnum.md index b03f3b1e6c64..29e160a9b07e 100644 --- a/samples/openapi3/client/petstore/python/docs/StringEnum.md +++ b/samples/openapi3/client/petstore/python/docs/StringEnum.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **value** | **str** | | must be one of ["placed", "approved", "delivered", "single quoted", '''multiple lines''', '''double quote with newline''', ] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/StringEnumWithDefaultValue.md b/samples/openapi3/client/petstore/python/docs/StringEnumWithDefaultValue.md index 7799b93d8223..700a2caf3b84 100644 --- a/samples/openapi3/client/petstore/python/docs/StringEnumWithDefaultValue.md +++ b/samples/openapi3/client/petstore/python/docs/StringEnumWithDefaultValue.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **value** | **str** | | defaults to "placed", must be one of ["placed", "approved", "delivered", ] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Tag.md b/samples/openapi3/client/petstore/python/docs/Tag.md index 4ccac4949afc..8a95090c036d 100644 --- a/samples/openapi3/client/petstore/python/docs/Tag.md +++ b/samples/openapi3/client/petstore/python/docs/Tag.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **id** | **int** | | [optional] **name** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/TriangleInterface.md b/samples/openapi3/client/petstore/python/docs/TriangleInterface.md index 494c224cd313..9f8411eabdf2 100644 --- a/samples/openapi3/client/petstore/python/docs/TriangleInterface.md +++ b/samples/openapi3/client/petstore/python/docs/TriangleInterface.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **triangle_type** | **str** | | +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/User.md b/samples/openapi3/client/petstore/python/docs/User.md index a4cb117e63a9..4d2da357adb1 100644 --- a/samples/openapi3/client/petstore/python/docs/User.md +++ b/samples/openapi3/client/petstore/python/docs/User.md @@ -16,6 +16,7 @@ Name | Type | Description | Notes **object_with_no_declared_props_nullable** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type** | test code generation for nullable objects. Value must be a map of strings to values or the 'null' value. | [optional] **any_type_prop** | **bool, date, datetime, dict, float, int, list, str, none_type** | test code generation for any type Here the 'type' attribute is not specified, which means the value can be anything, including the null value, string, number, boolean, array or object. See https://github.com/OAI/OpenAPI-Specification/issues/1389 | [optional] **any_type_prop_nullable** | **bool, date, datetime, dict, float, int, list, str, none_type** | test code generation for any type Here the 'type' attribute is not specified, which means the value can be anything, including the null value, string, number, boolean, array or object. The 'nullable' attribute does not change the allowed values. | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Whale.md b/samples/openapi3/client/petstore/python/docs/Whale.md index ea48bff6bc39..500786012ead 100644 --- a/samples/openapi3/client/petstore/python/docs/Whale.md +++ b/samples/openapi3/client/petstore/python/docs/Whale.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **class_name** | **str** | | **has_baleen** | **bool** | | [optional] **has_teeth** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_class.py b/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_class.py index 3b526cd54e36..82aca2a9ca8d 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_class.py @@ -57,7 +57,13 @@ class AdditionalPropertiesClass(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -78,7 +84,7 @@ def openapi_types(): 'map_with_undeclared_properties_anytype_1': ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},), # noqa: E501 'map_with_undeclared_properties_anytype_2': ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},), # noqa: E501 'map_with_undeclared_properties_anytype_3': ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},), # noqa: E501 - 'empty_map': (bool, date, datetime, dict, float, int, list, str,), # noqa: E501 + 'empty_map': (dict,), # noqa: E501 'map_with_undeclared_properties_string': ({str: (str,)},), # noqa: E501 } @@ -150,7 +156,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 map_with_undeclared_properties_anytype_1 ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): [optional] # noqa: E501 map_with_undeclared_properties_anytype_2 ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): [optional] # noqa: E501 map_with_undeclared_properties_anytype_3 ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): [optional] # noqa: E501 - empty_map (bool, date, datetime, dict, float, int, list, str): an object with no declared properties and no undeclared properties, hence it's an empty map.. [optional] # noqa: E501 + empty_map (dict): an object with no declared properties and no undeclared properties, hence it's an empty map.. [optional] # noqa: E501 map_with_undeclared_properties_string ({str: (str,)}): [optional] # noqa: E501 """ diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/animal.py b/samples/openapi3/client/petstore/python/petstore_api/model/animal.py index a3d48b6ea975..c53b1e1ad289 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/animal.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/animal.py @@ -63,7 +63,14 @@ class Animal(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/animal_farm.py b/samples/openapi3/client/petstore/python/petstore_api/model/animal_farm.py index 838b18a12970..fb58224ebd4c 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/animal_farm.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/animal_farm.py @@ -57,7 +57,14 @@ class AnimalFarm(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/api_response.py b/samples/openapi3/client/petstore/python/petstore_api/model/api_response.py index 01e2175b8004..53adb5aba12f 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/api_response.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/api_response.py @@ -57,7 +57,13 @@ class ApiResponse(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/apple.py b/samples/openapi3/client/petstore/python/petstore_api/model/apple.py index 29d34a1efe8b..4068d2488e57 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/apple.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/apple.py @@ -68,7 +68,13 @@ class Apple(ModelNormal): }, } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = True @@ -109,9 +115,12 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, *args, **kwargs): # noqa: E501 + def __init__(self, cultivar, *args, **kwargs): # noqa: E501 """Apple - a model defined in OpenAPI + Args: + cultivar (str): + Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be @@ -143,7 +152,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - cultivar (str): [optional] # noqa: E501 origin (str): [optional] # noqa: E501 """ @@ -170,6 +178,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.cultivar = cultivar for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py index 008b74dd42a3..8b6a2c42d0ed 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py @@ -57,7 +57,13 @@ class ArrayOfArrayOfNumberOnly(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_enums.py b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_enums.py index a3dc283969ae..8d9962152edf 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_enums.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_enums.py @@ -57,7 +57,14 @@ class ArrayOfEnums(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_number_only.py b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_number_only.py index f2e080bc258e..7b754dc283e6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_number_only.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_number_only.py @@ -57,7 +57,13 @@ class ArrayOfNumberOnly(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/array_test.py b/samples/openapi3/client/petstore/python/petstore_api/model/array_test.py index ac42b07b93c9..9691a1e60374 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/array_test.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/array_test.py @@ -61,7 +61,14 @@ class ArrayTest(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/banana.py b/samples/openapi3/client/petstore/python/petstore_api/model/banana.py index 513bd6bf06b1..24ad257e6d21 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/banana.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/banana.py @@ -57,7 +57,13 @@ class Banana(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -96,9 +102,12 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, *args, **kwargs): # noqa: E501 + def __init__(self, length_cm, *args, **kwargs): # noqa: E501 """Banana - a model defined in OpenAPI + Args: + length_cm (float): + Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be @@ -130,7 +139,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - length_cm (float): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -156,6 +164,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.length_cm = length_cm for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/basque_pig.py b/samples/openapi3/client/petstore/python/petstore_api/model/basque_pig.py index 603f7761867c..25b336460bc4 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/basque_pig.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/basque_pig.py @@ -57,7 +57,13 @@ class BasquePig(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/capitalization.py b/samples/openapi3/client/petstore/python/petstore_api/model/capitalization.py index 710c17e51a56..6d939535ceef 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/capitalization.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/capitalization.py @@ -57,7 +57,13 @@ class Capitalization(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/cat.py b/samples/openapi3/client/petstore/python/petstore_api/model/cat.py index 1d62177c6c2e..eeea79359fc9 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/cat.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/cat.py @@ -27,10 +27,8 @@ ) def lazy_import(): - from petstore_api.model.address import Address from petstore_api.model.animal import Animal from petstore_api.model.cat_all_of import CatAllOf - globals()['Address'] = Address globals()['Animal'] = Animal globals()['CatAllOf'] = CatAllOf @@ -120,13 +118,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, class_name, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """Cat - a model defined in OpenAPI - Args: - class_name (str): - Keyword Args: + class_name (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -191,26 +187,18 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'class_name': class_name, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) @@ -229,7 +217,6 @@ def _composed_schemas(): 'anyOf': [ ], 'allOf': [ - Address, Animal, CatAllOf, ], diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/cat_all_of.py b/samples/openapi3/client/petstore/python/petstore_api/model/cat_all_of.py index 50b046510dfa..7efba680b4d8 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/cat_all_of.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/cat_all_of.py @@ -57,7 +57,13 @@ class CatAllOf(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/category.py b/samples/openapi3/client/petstore/python/petstore_api/model/category.py index ed167471d356..4936b4f0e443 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/category.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/category.py @@ -57,7 +57,13 @@ class Category(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/child_cat.py b/samples/openapi3/client/petstore/python/petstore_api/model/child_cat.py index e1869c917cd8..d054cb7a97a0 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/child_cat.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/child_cat.py @@ -116,13 +116,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, pet_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """ChildCat - a model defined in OpenAPI - Args: - pet_type (str): - Keyword Args: + pet_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -186,26 +184,18 @@ def __init__(self, pet_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'pet_type': pet_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/child_cat_all_of.py b/samples/openapi3/client/petstore/python/petstore_api/model/child_cat_all_of.py index f0f1a1ae6bd4..3d732d085fba 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/child_cat_all_of.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/child_cat_all_of.py @@ -57,7 +57,13 @@ class ChildCatAllOf(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/class_model.py b/samples/openapi3/client/petstore/python/petstore_api/model/class_model.py index 18c16f89f908..9e65a9373650 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/class_model.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/class_model.py @@ -57,7 +57,13 @@ class ClassModel(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/client.py b/samples/openapi3/client/petstore/python/petstore_api/model/client.py index da615c547731..6218de1e19e4 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/client.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/client.py @@ -57,7 +57,13 @@ class Client(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/complex_quadrilateral.py b/samples/openapi3/client/petstore/python/petstore_api/model/complex_quadrilateral.py index 56853f5f34f1..e461673adbd4 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/complex_quadrilateral.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/complex_quadrilateral.py @@ -113,14 +113,12 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, shape_type, quadrilateral_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """ComplexQuadrilateral - a model defined in OpenAPI - Args: + Keyword Args: shape_type (str): quadrilateral_type (str): - - Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -183,27 +181,18 @@ def __init__(self, shape_type, quadrilateral_type, *args, **kwargs): # noqa: E5 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'shape_type': shape_type, - 'quadrilateral_type': quadrilateral_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/composed_one_of_number_with_validations.py b/samples/openapi3/client/petstore/python/petstore_api/model/composed_one_of_number_with_validations.py index 4a1129432f54..299c866cf8f3 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/composed_one_of_number_with_validations.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/composed_one_of_number_with_validations.py @@ -181,25 +181,18 @@ def __init__(self, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/composed_schema_with_props_and_no_add_props.py b/samples/openapi3/client/petstore/python/petstore_api/model/composed_schema_with_props_and_no_add_props.py new file mode 100644 index 000000000000..518f4774b555 --- /dev/null +++ b/samples/openapi3/client/petstore/python/petstore_api/model/composed_schema_with_props_and_no_add_props.py @@ -0,0 +1,212 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + +def lazy_import(): + from petstore_api.model.tag import Tag + globals()['Tag'] = Tag + + +class ComposedSchemaWithPropsAndNoAddProps(ModelComposed): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + lazy_import() + return { + 'color': (str,), # noqa: E501 + 'id': (int,), # noqa: E501 + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'color': 'color', # noqa: E501 + 'id': 'id', # noqa: E501 + 'name': 'name', # noqa: E501 + } + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """ComposedSchemaWithPropsAndNoAddProps - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + color (str): [optional] # noqa: E501 + id (int): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error beause the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + Tag, + ], + 'oneOf': [ + ], + } diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/danish_pig.py b/samples/openapi3/client/petstore/python/petstore_api/model/danish_pig.py index 5a6e424a4ec9..82215915e84c 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/danish_pig.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/danish_pig.py @@ -57,7 +57,13 @@ class DanishPig(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/dog.py b/samples/openapi3/client/petstore/python/petstore_api/model/dog.py index 8bf6d8fd3ade..3452f0d040a0 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/dog.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/dog.py @@ -118,13 +118,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, class_name, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """Dog - a model defined in OpenAPI - Args: - class_name (str): - Keyword Args: + class_name (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -189,26 +187,18 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'class_name': class_name, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/dog_all_of.py b/samples/openapi3/client/petstore/python/petstore_api/model/dog_all_of.py index b7b2e7db66d9..962903d3a381 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/dog_all_of.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/dog_all_of.py @@ -57,7 +57,13 @@ class DogAllOf(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/enum_arrays.py b/samples/openapi3/client/petstore/python/petstore_api/model/enum_arrays.py index 43ebac57de38..db56838d7e49 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/enum_arrays.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/enum_arrays.py @@ -65,7 +65,13 @@ class EnumArrays(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/enum_class.py b/samples/openapi3/client/petstore/python/petstore_api/model/enum_class.py index 14188ca31d28..63be703c38e9 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/enum_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/enum_class.py @@ -58,7 +58,13 @@ class EnumClass(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/enum_test.py b/samples/openapi3/client/petstore/python/petstore_api/model/enum_test.py index c0284b371a93..23ddbcf9a2ca 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/enum_test.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/enum_test.py @@ -89,7 +89,14 @@ class EnumTest(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/equilateral_triangle.py b/samples/openapi3/client/petstore/python/petstore_api/model/equilateral_triangle.py index a536701d701e..e5e4104bd024 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/equilateral_triangle.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/equilateral_triangle.py @@ -113,14 +113,12 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, shape_type, triangle_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """EquilateralTriangle - a model defined in OpenAPI - Args: + Keyword Args: shape_type (str): triangle_type (str): - - Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -183,27 +181,18 @@ def __init__(self, shape_type, triangle_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'shape_type': shape_type, - 'triangle_type': triangle_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/file.py b/samples/openapi3/client/petstore/python/petstore_api/model/file.py index a38cccacc6ab..137d00263242 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/file.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/file.py @@ -57,7 +57,13 @@ class File(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/file_schema_test_class.py b/samples/openapi3/client/petstore/python/petstore_api/model/file_schema_test_class.py index b8c519ed9c7c..3722125ae485 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/file_schema_test_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/file_schema_test_class.py @@ -61,7 +61,14 @@ class FileSchemaTestClass(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/foo.py b/samples/openapi3/client/petstore/python/petstore_api/model/foo.py index ebbb09adf91e..7c319dc9995d 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/foo.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/foo.py @@ -57,7 +57,13 @@ class Foo(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/format_test.py b/samples/openapi3/client/petstore/python/petstore_api/model/format_test.py index b232da04b45e..cce7f7f09819 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/format_test.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/format_test.py @@ -100,7 +100,13 @@ class FormatTest(ModelNormal): }, } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/fruit.py b/samples/openapi3/client/petstore/python/petstore_api/model/fruit.py index 15ea987edf5d..c7283f99d0c7 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/fruit.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/fruit.py @@ -74,7 +74,14 @@ class Fruit(ModelComposed): }, } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -90,10 +97,10 @@ def openapi_types(): """ lazy_import() return { - 'color': (str,), # noqa: E501 'cultivar': (str,), # noqa: E501 - 'origin': (str,), # noqa: E501 'length_cm': (float,), # noqa: E501 + 'color': (str,), # noqa: E501 + 'origin': (str,), # noqa: E501 } @cached_property @@ -102,10 +109,10 @@ def discriminator(): attribute_map = { - 'color': 'color', # noqa: E501 'cultivar': 'cultivar', # noqa: E501 - 'origin': 'origin', # noqa: E501 'length_cm': 'lengthCm', # noqa: E501 + 'color': 'color', # noqa: E501 + 'origin': 'origin', # noqa: E501 } required_properties = set([ @@ -125,6 +132,8 @@ def __init__(self, *args, **kwargs): # noqa: E501 """Fruit - a model defined in OpenAPI Keyword Args: + cultivar (str): + length_cm (float): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -156,9 +165,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) color (str): [optional] # noqa: E501 - cultivar (str): [optional] # noqa: E501 origin (str): [optional] # noqa: E501 - length_cm (float): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -191,25 +198,18 @@ def __init__(self, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/fruit_req.py b/samples/openapi3/client/petstore/python/petstore_api/model/fruit_req.py index 13c4d6424a58..519aa6d20eb5 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/fruit_req.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/fruit_req.py @@ -63,7 +63,14 @@ class FruitReq(ModelComposed): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -180,25 +187,18 @@ def __init__(self, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/gm_fruit.py b/samples/openapi3/client/petstore/python/petstore_api/model/gm_fruit.py index f3ad29beb4c4..dc9299c2a1b6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/gm_fruit.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/gm_fruit.py @@ -74,7 +74,14 @@ class GmFruit(ModelComposed): }, } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -90,10 +97,10 @@ def openapi_types(): """ lazy_import() return { - 'color': (str,), # noqa: E501 'cultivar': (str,), # noqa: E501 - 'origin': (str,), # noqa: E501 'length_cm': (float,), # noqa: E501 + 'color': (str,), # noqa: E501 + 'origin': (str,), # noqa: E501 } @cached_property @@ -102,10 +109,10 @@ def discriminator(): attribute_map = { - 'color': 'color', # noqa: E501 'cultivar': 'cultivar', # noqa: E501 - 'origin': 'origin', # noqa: E501 'length_cm': 'lengthCm', # noqa: E501 + 'color': 'color', # noqa: E501 + 'origin': 'origin', # noqa: E501 } required_properties = set([ @@ -125,6 +132,8 @@ def __init__(self, *args, **kwargs): # noqa: E501 """GmFruit - a model defined in OpenAPI Keyword Args: + cultivar (str): + length_cm (float): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -156,9 +165,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) color (str): [optional] # noqa: E501 - cultivar (str): [optional] # noqa: E501 origin (str): [optional] # noqa: E501 - length_cm (float): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -191,25 +198,18 @@ def __init__(self, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/grandparent_animal.py b/samples/openapi3/client/petstore/python/petstore_api/model/grandparent_animal.py index f7c417562ece..70523affd890 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/grandparent_animal.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/grandparent_animal.py @@ -63,7 +63,14 @@ class GrandparentAnimal(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/has_only_read_only.py b/samples/openapi3/client/petstore/python/petstore_api/model/has_only_read_only.py index c94781ae2c46..4ea0bb087217 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/has_only_read_only.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/has_only_read_only.py @@ -57,7 +57,13 @@ class HasOnlyReadOnly(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/health_check_result.py b/samples/openapi3/client/petstore/python/petstore_api/model/health_check_result.py index 3c0cd37dfad9..356ddea3cb14 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/health_check_result.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/health_check_result.py @@ -57,7 +57,13 @@ class HealthCheckResult(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/inline_response_default.py b/samples/openapi3/client/petstore/python/petstore_api/model/inline_response_default.py index 8e814cf43838..cb7b9985ea85 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/inline_response_default.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/inline_response_default.py @@ -61,7 +61,14 @@ class InlineResponseDefault(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum.py b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum.py index a01fc6149225..a31cd7c56958 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum.py @@ -58,7 +58,13 @@ class IntegerEnum(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_one_value.py b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_one_value.py index 0d69cd535b31..f8fc86bfba7f 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_one_value.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_one_value.py @@ -56,7 +56,13 @@ class IntegerEnumOneValue(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_with_default_value.py b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_with_default_value.py index 958b2ad2e39a..3c56da865f6c 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_with_default_value.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_with_default_value.py @@ -58,7 +58,13 @@ class IntegerEnumWithDefaultValue(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/isosceles_triangle.py b/samples/openapi3/client/petstore/python/petstore_api/model/isosceles_triangle.py index 27197f5a235b..b1f64bcb0db9 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/isosceles_triangle.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/isosceles_triangle.py @@ -63,7 +63,14 @@ class IsoscelesTriangle(ModelComposed): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -106,14 +113,12 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, shape_type, triangle_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """IsoscelesTriangle - a model defined in OpenAPI - Args: + Keyword Args: shape_type (str): triangle_type (str): - - Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -176,27 +181,18 @@ def __init__(self, shape_type, triangle_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'shape_type': shape_type, - 'triangle_type': triangle_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/list.py b/samples/openapi3/client/petstore/python/petstore_api/model/list.py index 09c762d6a794..11b46f10b565 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/list.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/list.py @@ -57,7 +57,13 @@ class List(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/mammal.py b/samples/openapi3/client/petstore/python/petstore_api/model/mammal.py index 067adf793505..234933fe1a8e 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/mammal.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/mammal.py @@ -131,13 +131,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, class_name, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """Mammal - a model defined in OpenAPI - Args: - class_name (str): - Keyword Args: + class_name (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -203,26 +201,18 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'class_name': class_name, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/map_test.py b/samples/openapi3/client/petstore/python/petstore_api/model/map_test.py index 169fb9d88ee0..a5418b39e734 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/map_test.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/map_test.py @@ -65,7 +65,14 @@ class MapTest(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py b/samples/openapi3/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py index 01df80d9d62b..67b3f79d9e5f 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py @@ -61,7 +61,14 @@ class MixedPropertiesAndAdditionalPropertiesClass(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/model200_response.py b/samples/openapi3/client/petstore/python/petstore_api/model/model200_response.py index 46b155b65239..056f4c56ad35 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/model200_response.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/model200_response.py @@ -57,7 +57,13 @@ class Model200Response(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/model_return.py b/samples/openapi3/client/petstore/python/petstore_api/model/model_return.py index 377b3507a8b3..5f34582cdb4a 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/model_return.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/model_return.py @@ -57,7 +57,13 @@ class ModelReturn(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/name.py b/samples/openapi3/client/petstore/python/petstore_api/model/name.py index 1432e185ad6b..06b387ce9bfe 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/name.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/name.py @@ -57,7 +57,13 @@ class Name(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/nullable_class.py b/samples/openapi3/client/petstore/python/petstore_api/model/nullable_class.py index a117dfa69160..f2c2cb7642e6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/nullable_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/nullable_class.py @@ -63,7 +63,7 @@ def additional_properties_type(): This must be a method because a model may have properties that are of type self, this must run after the class is loaded """ - return ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type,) # noqa: E501 + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -87,6 +87,7 @@ def openapi_types(): 'array_nullable_prop': ([{str: (bool, date, datetime, dict, float, int, list, str, none_type)}], none_type,), # noqa: E501 'array_and_items_nullable_prop': ([{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type], none_type,), # noqa: E501 'array_items_nullable': ([{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type],), # noqa: E501 + 'object_nullable': ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type,), # noqa: E501 'object_nullable_prop': ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},)}, none_type,), # noqa: E501 'object_and_items_nullable_prop': ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type)}, none_type,), # noqa: E501 'object_items_nullable': ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type)},), # noqa: E501 @@ -107,6 +108,7 @@ def discriminator(): 'array_nullable_prop': 'array_nullable_prop', # noqa: E501 'array_and_items_nullable_prop': 'array_and_items_nullable_prop', # noqa: E501 'array_items_nullable': 'array_items_nullable', # noqa: E501 + 'object_nullable': 'object_nullable', # noqa: E501 'object_nullable_prop': 'object_nullable_prop', # noqa: E501 'object_and_items_nullable_prop': 'object_and_items_nullable_prop', # noqa: E501 'object_items_nullable': 'object_items_nullable', # noqa: E501 @@ -167,6 +169,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 array_nullable_prop ([{str: (bool, date, datetime, dict, float, int, list, str, none_type)}], none_type): [optional] # noqa: E501 array_and_items_nullable_prop ([{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type], none_type): [optional] # noqa: E501 array_items_nullable ([{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type]): [optional] # noqa: E501 + object_nullable ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type): [optional] # noqa: E501 object_nullable_prop ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},)}, none_type): [optional] # noqa: E501 object_and_items_nullable_prop ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type)}, none_type): [optional] # noqa: E501 object_items_nullable ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type)}): [optional] # noqa: E501 diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/nullable_shape.py b/samples/openapi3/client/petstore/python/petstore_api/model/nullable_shape.py index fcd20ddfbc19..a2cf17e3e7b9 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/nullable_shape.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/nullable_shape.py @@ -121,13 +121,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, shape_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """NullableShape - a model defined in OpenAPI - Args: - shape_type (str): - Keyword Args: + shape_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -192,26 +190,18 @@ def __init__(self, shape_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'shape_type': shape_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/number_only.py b/samples/openapi3/client/petstore/python/petstore_api/model/number_only.py index d4892dbede5b..cb2c9e2ad526 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/number_only.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/number_only.py @@ -57,7 +57,13 @@ class NumberOnly(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/number_with_validations.py b/samples/openapi3/client/petstore/python/petstore_api/model/number_with_validations.py index ffa5e9cf4621..a3b2746c22b5 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/number_with_validations.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/number_with_validations.py @@ -57,7 +57,13 @@ class NumberWithValidations(ModelSimple): }, } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py b/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py index b1dc4bf82e2c..7256f67a8d6b 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py @@ -61,7 +61,14 @@ class ObjectModelWithRefProps(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/order.py b/samples/openapi3/client/petstore/python/petstore_api/model/order.py index b42f066848ab..48207e4560eb 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/order.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/order.py @@ -62,7 +62,13 @@ class Order(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/parent_pet.py b/samples/openapi3/client/petstore/python/petstore_api/model/parent_pet.py index 16099236da34..bda9c2779965 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/parent_pet.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/parent_pet.py @@ -116,13 +116,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, pet_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """ParentPet - a model defined in OpenAPI - Args: - pet_type (str): - Keyword Args: + pet_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -185,26 +183,18 @@ def __init__(self, pet_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'pet_type': pet_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/pet.py b/samples/openapi3/client/petstore/python/petstore_api/model/pet.py index e9f1e30a3196..b0c8b08607d1 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/pet.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/pet.py @@ -68,7 +68,14 @@ class Pet(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/pig.py b/samples/openapi3/client/petstore/python/petstore_api/model/pig.py index 4a6f200f6ffc..21f61c65de08 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/pig.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/pig.py @@ -117,13 +117,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, class_name, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """Pig - a model defined in OpenAPI - Args: - class_name (str): - Keyword Args: + class_name (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -186,26 +184,18 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'class_name': class_name, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral.py b/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral.py index 4e28ac0d2389..d15d37cdbca9 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral.py @@ -119,13 +119,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, quadrilateral_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """Quadrilateral - a model defined in OpenAPI - Args: - quadrilateral_type (str): - Keyword Args: + quadrilateral_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -189,26 +187,18 @@ def __init__(self, quadrilateral_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'quadrilateral_type': quadrilateral_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral_interface.py b/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral_interface.py index 124d9128bc53..872608885aca 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral_interface.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral_interface.py @@ -57,7 +57,13 @@ class QuadrilateralInterface(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/read_only_first.py b/samples/openapi3/client/petstore/python/petstore_api/model/read_only_first.py index 5c68eab91ea3..0302bf96a7e5 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/read_only_first.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/read_only_first.py @@ -57,7 +57,13 @@ class ReadOnlyFirst(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/scalene_triangle.py b/samples/openapi3/client/petstore/python/petstore_api/model/scalene_triangle.py index 1e3893627dad..86fc0a4f4959 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/scalene_triangle.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/scalene_triangle.py @@ -113,14 +113,12 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, shape_type, triangle_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """ScaleneTriangle - a model defined in OpenAPI - Args: + Keyword Args: shape_type (str): triangle_type (str): - - Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -183,27 +181,18 @@ def __init__(self, shape_type, triangle_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'shape_type': shape_type, - 'triangle_type': triangle_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/shape.py b/samples/openapi3/client/petstore/python/petstore_api/model/shape.py index f5e3c142b914..763a7aa362b0 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/shape.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/shape.py @@ -121,13 +121,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, shape_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """Shape - a model defined in OpenAPI - Args: - shape_type (str): - Keyword Args: + shape_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -192,26 +190,18 @@ def __init__(self, shape_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'shape_type': shape_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/shape_interface.py b/samples/openapi3/client/petstore/python/petstore_api/model/shape_interface.py index 8a3c52088be3..b8ab31fc31c6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/shape_interface.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/shape_interface.py @@ -57,7 +57,13 @@ class ShapeInterface(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/shape_or_null.py b/samples/openapi3/client/petstore/python/petstore_api/model/shape_or_null.py index 480fa5bd5d65..403449e0c9c2 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/shape_or_null.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/shape_or_null.py @@ -121,13 +121,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, shape_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """ShapeOrNull - a model defined in OpenAPI - Args: - shape_type (str): - Keyword Args: + shape_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -192,26 +190,18 @@ def __init__(self, shape_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'shape_type': shape_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/simple_quadrilateral.py b/samples/openapi3/client/petstore/python/petstore_api/model/simple_quadrilateral.py index f2f0a61acbd2..d68f1d3b5cb3 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/simple_quadrilateral.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/simple_quadrilateral.py @@ -113,14 +113,12 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, shape_type, quadrilateral_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """SimpleQuadrilateral - a model defined in OpenAPI - Args: + Keyword Args: shape_type (str): quadrilateral_type (str): - - Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -183,27 +181,18 @@ def __init__(self, shape_type, quadrilateral_type, *args, **kwargs): # noqa: E5 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'shape_type': shape_type, - 'quadrilateral_type': quadrilateral_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/some_object.py b/samples/openapi3/client/petstore/python/petstore_api/model/some_object.py index 683d1794293c..72687c02ab69 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/some_object.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/some_object.py @@ -173,25 +173,18 @@ def __init__(self, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/special_model_name.py b/samples/openapi3/client/petstore/python/petstore_api/model/special_model_name.py index 823e77596636..cfaedbc78815 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/special_model_name.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/special_model_name.py @@ -57,7 +57,13 @@ class SpecialModelName(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/string_enum.py b/samples/openapi3/client/petstore/python/petstore_api/model/string_enum.py index a6d2fbee08f2..1e48fdecbf49 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/string_enum.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/string_enum.py @@ -64,7 +64,13 @@ class StringEnum(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = True diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/string_enum_with_default_value.py b/samples/openapi3/client/petstore/python/petstore_api/model/string_enum_with_default_value.py index 4dfc426446ca..1417d0ff0fc1 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/string_enum_with_default_value.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/string_enum_with_default_value.py @@ -58,7 +58,13 @@ class StringEnumWithDefaultValue(ModelSimple): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/tag.py b/samples/openapi3/client/petstore/python/petstore_api/model/tag.py index e5fc749d5149..0e7427effa67 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/tag.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/tag.py @@ -57,7 +57,13 @@ class Tag(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/triangle.py b/samples/openapi3/client/petstore/python/petstore_api/model/triangle.py index 83d6e52e8867..b1112e24892d 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/triangle.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/triangle.py @@ -122,13 +122,11 @@ def discriminator(): ]) @convert_js_args_to_python_args - def __init__(self, triangle_type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """Triangle - a model defined in OpenAPI - Args: - triangle_type (str): - Keyword Args: + triangle_type (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -192,26 +190,18 @@ def __init__(self, triangle_type, *args, **kwargs): # noqa: E501 '_configuration': _configuration, '_visited_composed_classes': self._visited_composed_classes, } - required_args = { - 'triangle_type': triangle_type, - } - model_args = {} - model_args.update(required_args) - model_args.update(kwargs) composed_info = validate_get_composed_info( - constant_args, model_args, self) + constant_args, kwargs, self) self._composed_instances = composed_info[0] self._var_name_to_model_instances = composed_info[1] self._additional_properties_model_instances = composed_info[2] - unused_args = composed_info[3] + discarded_args = composed_info[3] - for var_name, var_value in required_args.items(): - setattr(self, var_name, var_value) for var_name, var_value in kwargs.items(): - if var_name in unused_args and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - not self._additional_properties_model_instances: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/triangle_interface.py b/samples/openapi3/client/petstore/python/petstore_api/model/triangle_interface.py index c54bd0811720..f31e3dba1358 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/triangle_interface.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/triangle_interface.py @@ -57,7 +57,13 @@ class TriangleInterface(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/user.py b/samples/openapi3/client/petstore/python/petstore_api/model/user.py index 7613ac7dc263..2271e3e37e51 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/user.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/user.py @@ -57,7 +57,13 @@ class User(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/whale.py b/samples/openapi3/client/petstore/python/petstore_api/model/whale.py index e6400ea34fc7..c3e1c40b4e51 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/whale.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/whale.py @@ -57,7 +57,13 @@ class Whale(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model_utils.py b/samples/openapi3/client/petstore/python/petstore_api/model_utils.py index ae5547106703..b6d5934170a3 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model_utils.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model_utils.py @@ -434,27 +434,43 @@ def __setitem__(self, name, value): self.__dict__[name] = value return - # set the attribute on the correct instance - model_instances = self._var_name_to_model_instances.get( - name, self._additional_properties_model_instances) - if model_instances: - for model_instance in model_instances: - if model_instance == self: - self.set_attribute(name, value) - else: - setattr(model_instance, name, value) - if name not in self._var_name_to_model_instances: - # we assigned an additional property - self.__dict__['_var_name_to_model_instances'][name] = ( - model_instance - ) - return None - - raise ApiAttributeError( - "{0} has no attribute '{1}'".format( - type(self).__name__, name), - [e for e in [self._path_to_item, name] if e] - ) + """ + Use cases: + 1. additional_properties_type is None (additionalProperties == False in spec) + Check for property presence in self.openapi_types + if not present then throw an error + if present set in self, set attribute + always set on composed schemas + 2. additional_properties_type exists + set attribute on self + always set on composed schemas + """ + if self.additional_properties_type is None: + """ + For an attribute to exist on a composed schema it must: + - fulfill schema_requirements in the self composed schema not considering oneOf/anyOf/allOf schemas AND + - fulfill schema_requirements in each oneOf/anyOf/allOf schemas + + schema_requirements: + For an attribute to exist on a schema it must: + - be present in properties at the schema OR + - have additionalProperties unset (defaults additionalProperties = any type) OR + - have additionalProperties set + """ + if name not in self.openapi_types: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + # attribute must be set on self and composed instances + self.set_attribute(name, value) + for model_instance in self._composed_instances: + setattr(model_instance, name, value) + if name not in self._var_name_to_model_instances: + # we assigned an additional property + self.__dict__['_var_name_to_model_instances'][name] = self._composed_instances + [self] + return None __unset_attribute_value__ = object() @@ -464,13 +480,12 @@ def get(self, name, default=None): return self.__dict__[name] # get the attribute from the correct instance - model_instances = self._var_name_to_model_instances.get( - name, self._additional_properties_model_instances) + model_instances = self._var_name_to_model_instances.get(name) values = [] - # A composed model stores child (oneof/anyOf/allOf) models under - # self._var_name_to_model_instances. A named property can exist in - # multiple child models. If the property is present in more than one - # child model, the value must be the same across all the child models. + # A composed model stores self and child (oneof/anyOf/allOf) models under + # self._var_name_to_model_instances. + # Any property must exist in self and all model instances + # The value stored in all model instances must be the same if model_instances: for model_instance in model_instances: if name in model_instance._data_store: @@ -1573,8 +1588,13 @@ def get_allof_instances(self, model_args, constant_args): self: the class we are handling model_args (dict): var_name to var_value used to make instances - constant_args (dict): var_name to var_value - used to make instances + constant_args (dict): + metadata arguments: + _check_type + _path_to_item + _spec_property_naming + _configuration + _visited_composed_classes Returns composed_instances (list) @@ -1582,20 +1602,8 @@ def get_allof_instances(self, model_args, constant_args): composed_instances = [] for allof_class in self._composed_schemas['allOf']: - # no need to handle changing js keys to python because - # for composed schemas, allof parameters are included in the - # composed schema and were changed to python keys in __new__ - # extract a dict of only required keys from fixed_model_args - kwargs = {} - var_names = set(allof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in model_args: - kwargs[var_name] = model_args[var_name] - - # and use it to make the instance - kwargs.update(constant_args) try: - allof_instance = allof_class(**kwargs) + allof_instance = allof_class(**model_args, **constant_args) composed_instances.append(allof_instance) except Exception as ex: raise ApiValueError( @@ -1655,31 +1663,9 @@ def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None): single_value_input = allows_single_value_input(oneof_class) - if not single_value_input: - # transform js keys from input data to python keys in fixed_model_args - fixed_model_args = change_keys_js_to_python( - model_kwargs, oneof_class) - - # Extract a dict with the properties that are declared in the oneOf schema. - # Undeclared properties (e.g. properties that are allowed because of the - # additionalProperties attribute in the OAS document) are not added to - # the dict. - kwargs = {} - var_names = set(oneof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in fixed_model_args: - kwargs[var_name] = fixed_model_args[var_name] - - # do not try to make a model with no input args - if len(kwargs) == 0: - continue - - # and use it to make the instance - kwargs.update(constant_kwargs) - try: if not single_value_input: - oneof_instance = oneof_class(**kwargs) + oneof_instance = oneof_class(**model_kwargs, **constant_kwargs) else: if issubclass(oneof_class, ModelSimple): oneof_instance = oneof_class(model_arg, **constant_kwargs) @@ -1736,24 +1722,8 @@ def get_anyof_instances(self, model_args, constant_args): # none_type deserialization is handled in the __new__ method continue - # transform js keys to python keys in fixed_model_args - fixed_model_args = change_keys_js_to_python(model_args, anyof_class) - - # extract a dict of only required keys from these_model_vars - kwargs = {} - var_names = set(anyof_class.openapi_types.keys()) - for var_name in var_names: - if var_name in fixed_model_args: - kwargs[var_name] = fixed_model_args[var_name] - - # do not try to make a model with no input args - if len(kwargs) == 0: - continue - - # and use it to make the instance - kwargs.update(constant_args) try: - anyof_instance = anyof_class(**kwargs) + anyof_instance = anyof_class(**model_args, **constant_args) anyof_instances.append(anyof_instance) except Exception: pass @@ -1766,47 +1736,34 @@ def get_anyof_instances(self, model_args, constant_args): return anyof_instances -def get_additional_properties_model_instances( - composed_instances, self): - additional_properties_model_instances = [] - all_instances = [self] - all_instances.extend(composed_instances) - for instance in all_instances: - if instance.additional_properties_type is not None: - additional_properties_model_instances.append(instance) - return additional_properties_model_instances - - -def get_var_name_to_model_instances(self, composed_instances): - var_name_to_model_instances = {} - all_instances = [self] - all_instances.extend(composed_instances) - for instance in all_instances: - for var_name in instance.openapi_types: - if var_name not in var_name_to_model_instances: - var_name_to_model_instances[var_name] = [instance] - else: - var_name_to_model_instances[var_name].append(instance) - return var_name_to_model_instances - - -def get_unused_args(self, composed_instances, model_args): - unused_args = dict(model_args) - # arguments apssed to self were already converted to python names +def get_discarded_args(self, composed_instances, model_args): + """ + Gathers the args that were discarded by configuration.discard_unknown_keys + """ + model_arg_keys = model_args.keys() + discarded_args = set() + # arguments passed to self were already converted to python names # before __init__ was called - for var_name_py in self.attribute_map: - if var_name_py in unused_args: - del unused_args[var_name_py] for instance in composed_instances: if instance.__class__ in self._composed_schemas['allOf']: - for var_name_py in instance.attribute_map: - if var_name_py in unused_args: - del unused_args[var_name_py] + try: + keys = instance.to_dict().keys() + discarded_keys = model_args - keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass else: - for var_name_js in instance.attribute_map.values(): - if var_name_js in unused_args: - del unused_args[var_name_js] - return unused_args + try: + all_keys = set(model_to_dict(instance, serialize=False).keys()) + js_keys = model_to_dict(instance, serialize=True).keys() + all_keys.update(js_keys) + discarded_keys = model_arg_keys - all_keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass + return discarded_args def validate_get_composed_info(constant_args, model_args, self): @@ -1850,36 +1807,42 @@ def validate_get_composed_info(constant_args, model_args, self): composed_instances.append(oneof_instance) anyof_instances = get_anyof_instances(self, model_args, constant_args) composed_instances.extend(anyof_instances) + """ + set additional_properties_model_instances + additional properties must be evaluated at the schema level + so self's additional properties are most important + If self is a composed schema with: + - no properties defined in self + - additionalProperties: False + Then for object payloads every property is an additional property + and they are not allowed, so only empty dict is allowed + + Properties must be set on all matching schemas + so when a property is assigned toa composed instance, it must be set on all + composed instances regardless of additionalProperties presence + keeping it to prevent breaking changes in v5.0.1 + TODO remove cls._additional_properties_model_instances in 6.0.0 + """ + additional_properties_model_instances = [] + if self.additional_properties_type is not None: + additional_properties_model_instances = [self] - # map variable names to composed_instances - var_name_to_model_instances = get_var_name_to_model_instances( - self, composed_instances) - - # set additional_properties_model_instances - additional_properties_model_instances = ( - get_additional_properties_model_instances(composed_instances, self) - ) - - # set any remaining values - unused_args = get_unused_args(self, composed_instances, model_args) - if len(unused_args) > 0 and \ - len(additional_properties_model_instances) == 0 and \ - (self._configuration is None or - not self._configuration.discard_unknown_keys): - raise ApiValueError( - "Invalid input arguments input when making an instance of " - "class %s. Not all inputs were used. The unused input data " - "is %s" % (self.__class__.__name__, unused_args) - ) + """ + no need to set properties on self in here, they will be set in __init__ + By here all composed schema oneOf/anyOf/allOf instances have their properties set using + model_args + """ + discarded_args = get_discarded_args(self, composed_instances, model_args) - # no need to add additional_properties to var_name_to_model_instances here - # because additional_properties_model_instances will direct us to that - # instance when we use getattr or setattr - # and we update var_name_to_model_instances in setattr + # map variable names to composed_instances + var_name_to_model_instances = {} + for prop_name in model_args: + if prop_name not in discarded_args: + var_name_to_model_instances[prop_name] = [self] + composed_instances return [ composed_instances, var_name_to_model_instances, additional_properties_model_instances, - unused_args + discarded_args ] diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py b/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py index 4941dc7de6e3..465f610d6d45 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py @@ -34,6 +34,7 @@ from petstore_api.model.client import Client from petstore_api.model.complex_quadrilateral import ComplexQuadrilateral from petstore_api.model.composed_one_of_number_with_validations import ComposedOneOfNumberWithValidations +from petstore_api.model.composed_schema_with_props_and_no_add_props import ComposedSchemaWithPropsAndNoAddProps from petstore_api.model.danish_pig import DanishPig from petstore_api.model.dog import Dog from petstore_api.model.dog_all_of import DogAllOf diff --git a/samples/openapi3/client/petstore/python/pom.xml b/samples/openapi3/client/petstore/python/pom.xml index c2364c744828..e7d7d9caf133 100644 --- a/samples/openapi3/client/petstore/python/pom.xml +++ b/samples/openapi3/client/petstore/python/pom.xml @@ -1,10 +1,10 @@ 4.0.0 org.openapitools - PythonExperimentalOAS3PetstoreTests + PythonOAS3PetstoreTests pom 1.0-SNAPSHOT - Python-Experimental OpenAPI3 Petstore Client + Python OpenAPI3 Petstore Client diff --git a/samples/openapi3/client/petstore/python/test/test_composed_schema_with_props_and_no_add_props.py b/samples/openapi3/client/petstore/python/test/test_composed_schema_with_props_and_no_add_props.py new file mode 100644 index 000000000000..7e7ac901ca6d --- /dev/null +++ b/samples/openapi3/client/petstore/python/test/test_composed_schema_with_props_and_no_add_props.py @@ -0,0 +1,37 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import petstore_api +from petstore_api.model.tag import Tag +globals()['Tag'] = Tag +from petstore_api.model.composed_schema_with_props_and_no_add_props import ComposedSchemaWithPropsAndNoAddProps + + +class TestComposedSchemaWithPropsAndNoAddProps(unittest.TestCase): + """ComposedSchemaWithPropsAndNoAddProps unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testComposedSchemaWithPropsAndNoAddProps(self): + """Test ComposedSchemaWithPropsAndNoAddProps""" + # FIXME: construct object with mandatory attributes with example values + # model = ComposedSchemaWithPropsAndNoAddProps() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_composed_schema_with_props_and_no_add_props.py b/samples/openapi3/client/petstore/python/tests_manual/test_composed_schema_with_props_and_no_add_props.py new file mode 100644 index 000000000000..d219a4e4b8aa --- /dev/null +++ b/samples/openapi3/client/petstore/python/tests_manual/test_composed_schema_with_props_and_no_add_props.py @@ -0,0 +1,45 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import petstore_api +from petstore_api.model.tag import Tag +globals()['Tag'] = Tag +from petstore_api.model.composed_schema_with_props_and_no_add_props import ComposedSchemaWithPropsAndNoAddProps + + +class TestComposedSchemaWithPropsAndNoAddProps(unittest.TestCase): + """ComposedSchemaWithPropsAndNoAddProps unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testComposedSchemaWithPropsAndNoAddProps(self): + """Test ComposedSchemaWithPropsAndNoAddProps""" + + inst = ComposedSchemaWithPropsAndNoAddProps(color='red') + + # ComposedSchemaWithPropsAndNoAddProps should only allow in the color property + # once https://github.com/OpenAPITools/openapi-generator/pull/8816 lands + # this will no longer work + # TODO update the test then + inst = ComposedSchemaWithPropsAndNoAddProps(color='red', id=1, name='foo') + + with self.assertRaises(petstore_api.ApiAttributeError): + inst = ComposedSchemaWithPropsAndNoAddProps(color='red', id=1, name='foo', additional=5) + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_deserialization.py b/samples/openapi3/client/petstore/python/tests_manual/test_deserialization.py index 37e0943273ad..93538160f9a8 100644 --- a/samples/openapi3/client/petstore/python/tests_manual/test_deserialization.py +++ b/samples/openapi3/client/petstore/python/tests_manual/test_deserialization.py @@ -118,12 +118,7 @@ def test_regex_constraint(self): ) assert isinstance(inst, apple.Apple) - inst = apple.Apple( - origin="cHiLe" - ) - assert isinstance(inst, apple.Apple) - - # Test with invalid regex pattern. + # Test with invalid regex pattern in cultivar err_msg = ("Invalid value for `{}`, must match regular expression `{}`$") with self.assertRaisesRegex( petstore_api.ApiValueError, @@ -133,12 +128,14 @@ def test_regex_constraint(self): cultivar="!@#%@$#Akane" ) + # Test with invalid regex pattern in origin err_msg = ("Invalid value for `{}`, must match regular expression `{}` with flags") with self.assertRaisesRegex( petstore_api.ApiValueError, err_msg.format("origin", "[^`]*") ): inst = apple.Apple( + cultivar="Akane", origin="!@#%@$#Chile" ) diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_discard_unknown_properties.py b/samples/openapi3/client/petstore/python/tests_manual/test_discard_unknown_properties.py index d8b71e44353e..ed1ca736d4ba 100644 --- a/samples/openapi3/client/petstore/python/tests_manual/test_discard_unknown_properties.py +++ b/samples/openapi3/client/petstore/python/tests_manual/test_discard_unknown_properties.py @@ -16,7 +16,7 @@ import unittest import petstore_api -from petstore_api.model import cat, dog, isosceles_triangle, banana_req +from petstore_api.model import cat, dog, isosceles_triangle, banana_req, fruit_req from petstore_api import Configuration, signing from petstore_api.model_utils import ( @@ -54,17 +54,17 @@ def test_deserialize_banana_req_do_not_discard_unknown_properties(self): 'Exception message: {0}'.format(str(cm.exception))) - def test_deserialize_isosceles_triangle_do_not_discard_unknown_properties(self): + def test_deserialize_fruit_req_do_not_discard_unknown_properties(self): """ - deserialize IsoscelesTriangle with unknown properties. + deserialize FruitReq with unknown properties. Strict validation is enabled. Composed schema scenario. """ config = Configuration(discard_unknown_keys=False) api_client = petstore_api.ApiClient(config) data = { - 'shape_type': 'Triangle', - 'triangle_type': 'EquilateralTriangle', + 'lengthCm': 21.3, + 'sweet': False, # Below is an unknown property not explicitly declared in the OpenAPI document. # It should not be in the payload because additional properties (undeclared) are # not allowed in the schema (additionalProperties: false). @@ -74,10 +74,29 @@ def test_deserialize_isosceles_triangle_do_not_discard_unknown_properties(self): # Deserializing with strict validation raises an exception because the 'unknown_property' # is undeclared. - with self.assertRaises(petstore_api.ApiValueError) as cm: - deserialized = api_client.deserialize(response, ((isosceles_triangle.IsoscelesTriangle),), True) - self.assertTrue(re.match('.*Not all inputs were used.*unknown_property.*', str(cm.exception)), - 'Exception message: {0}'.format(str(cm.exception))) + with self.assertRaisesRegex(petstore_api.ApiValueError, "Invalid inputs given to generate an instance of FruitReq. None of the oneOf schemas matched the input data."): + deserialized = api_client.deserialize(response, ((fruit_req.FruitReq),), True) + + + def test_deserialize_fruit_req_discard_unknown_properties(self): + """ + deserialize FruitReq with unknown properties. + Strict validation is enabled. + Composed schema scenario. + """ + config = Configuration(discard_unknown_keys=True) + api_client = petstore_api.ApiClient(config) + data = { + 'lengthCm': 21.3, + 'sweet': False, + # Below is an unknown property not explicitly declared in the OpenAPI document. + # It should not be in the payload because additional properties (undeclared) are + # not allowed in BananaReq + 'unknown_property': 'a-value' + } + response = MockResponse(data=json.dumps(data)) + deserialized = api_client.deserialize(response, ((fruit_req.FruitReq),), True) + self.assertNotIn("unknown_property", deserialized.to_dict().keys()) def test_deserialize_banana_req_discard_unknown_properties(self): @@ -145,13 +164,10 @@ def test_deserialize_cat_discard_unknown_properties(self): # Below are additional (undeclared) properties. "my_additional_property": 123, } - # The 'my_additional_property' is undeclared, but 'Cat' has a 'Address' type through - # the allOf: [ $ref: '#/components/schemas/Address' ]. + # The 'my_additional_property' is undeclared response = MockResponse(data=json.dumps(data)) deserialized = api_client.deserialize(response, ((cat.Cat),), True) self.assertTrue(isinstance(deserialized, cat.Cat)) - # Check the 'unknown_property' and 'more-unknown' properties are not present in the - # output. - self.assertIn("declawed", deserialized.to_dict().keys()) + # Check the 'my_additional_property' is present self.assertIn("my_additional_property", deserialized.to_dict().keys()) diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_fruit.py b/samples/openapi3/client/petstore/python/tests_manual/test_fruit.py index a60fdb9f6be3..f95c07755f85 100644 --- a/samples/openapi3/client/petstore/python/tests_manual/test_fruit.py +++ b/samples/openapi3/client/petstore/python/tests_manual/test_fruit.py @@ -14,56 +14,70 @@ import unittest import petstore_api -try: - from petstore_api.model import apple -except ImportError: - apple = sys.modules[ - 'petstore_api.model.apple'] -try: - from petstore_api.model import banana -except ImportError: - banana = sys.modules[ - 'petstore_api.model.banana'] +from petstore_api.model import apple +from petstore_api.model import banana from petstore_api.model.fruit import Fruit class TestFruit(unittest.TestCase): """Fruit unit test stubs""" + length_cm = 20.3 + color = 'yellow' + + def setUp(self): pass def tearDown(self): pass - def testFruit(self): - """Test Fruit""" + def test_fruit_with_additional_props(self): + # including extra parameters works because the oneOf models include additionalProperties + some_value = 'some_value' + some_fruit = Fruit( + color=self.color, + length_cm=self.length_cm, + unknown_property=some_value + ) + assert some_fruit['unknown_property'] == some_value + + def test_fruit_assigning_additional_props_in_client(self): + # setting a value that doesn't exist works because additional_properties_type allows any type + other_fruit = Fruit(length_cm=self.length_cm, color=self.color) + blah = 'blah' + other_fruit['a'] = blah + assert other_fruit.a == blah + + # with setattr + setattr(other_fruit, 'b', blah) + assert other_fruit.b == blah - # make an instance of Fruit, a composed schema oneOf model - # banana test - length_cm = 20.3 - color = 'yellow' - fruit = Fruit(length_cm=length_cm, color=color) - # check its properties - self.assertEqual(fruit.length_cm, length_cm) - self.assertEqual(fruit['length_cm'], length_cm) - self.assertEqual(fruit.get('length_cm'), length_cm) - self.assertEqual(getattr(fruit, 'length_cm'), length_cm) - self.assertEqual(fruit.color, color) - self.assertEqual(fruit['color'], color) - self.assertEqual(getattr(fruit, 'color'), color) - # check the dict representation self.assertEqual( - fruit.to_dict(), + other_fruit.to_dict(), { - 'length_cm': length_cm, - 'color': color + 'a': 'blah', + 'b': 'blah', + 'length_cm': self.length_cm, + 'color': self.color } ) - # setting a value that doesn't exist raises an exception + + def test_fruit_access_errors(self): + fruit = Fruit(length_cm=self.length_cm, color=self.color) + + # getting a value that doesn't exist raises an exception # with a key with self.assertRaises(AttributeError): - fruit['invalid_variable'] = 'some value' + invalid_variable = fruit['cultivar'] + + # Per Python doc, if the named attribute does not exist, + # default is returned if provided, otherwise AttributeError is raised. + with self.assertRaises(AttributeError): + getattr(fruit, 'cultivar') + + def test_fruit_attribute_access(self): + fruit = Fruit(length_cm=self.length_cm, color=self.color) # Assert that we can call the builtin hasattr() function. # hasattr should return False for non-existent attribute. @@ -74,14 +88,6 @@ def testFruit(self): # hasattr should return True for existent attribute. self.assertTrue(hasattr(fruit, 'color')) - # with setattr - with self.assertRaises(AttributeError): - setattr(fruit, 'invalid_variable', 'some value') - - # getting a value that doesn't exist raises an exception - # with a key - with self.assertRaises(AttributeError): - invalid_variable = fruit['cultivar'] # with getattr # Per Python doc, if the named attribute does not exist, # default is returned if provided. @@ -89,10 +95,28 @@ def testFruit(self): self.assertEqual(fruit.get('cultivar'), None) self.assertEqual(fruit.get('cultivar', 'some value'), 'some value') - # Per Python doc, if the named attribute does not exist, - # default is returned if provided, otherwise AttributeError is raised. - with self.assertRaises(AttributeError): - getattr(fruit, 'cultivar') + def test_banana_fruit(self): + """Test Fruit""" + + # make an instance of Fruit, a composed schema oneOf model + # banana test + fruit = Fruit(length_cm=self.length_cm, color=self.color) + # check its properties + self.assertEqual(fruit.length_cm, self.length_cm) + self.assertEqual(fruit['length_cm'], self.length_cm) + self.assertEqual(fruit.get('length_cm'), self.length_cm) + self.assertEqual(getattr(fruit, 'length_cm'), self.length_cm) + self.assertEqual(fruit.color, self.color) + self.assertEqual(fruit['color'], self.color) + self.assertEqual(getattr(fruit, 'color'), self.color) + # check the dict representation + self.assertEqual( + fruit.to_dict(), + { + 'length_cm': self.length_cm, + 'color': self.color + } + ) # make sure that the ModelComposed class properties are correct # model._composed_schemas stores the anyOf/allOf/oneOf info @@ -109,6 +133,7 @@ def testFruit(self): ) # model._composed_instances is a list of the instances that were # made from the anyOf/allOf/OneOf classes in model._composed_schemas + self.assertEqual(len(fruit._composed_instances), 1) for composed_instance in fruit._composed_instances: if composed_instance.__class__ == banana.Banana: banana_instance = composed_instance @@ -118,19 +143,16 @@ def testFruit(self): ) # model._var_name_to_model_instances maps the variable name to the # model instances which store that variable + print(fruit._var_name_to_model_instances) self.assertEqual( fruit._var_name_to_model_instances, { - 'color': [fruit], + 'color': [fruit, banana_instance], 'length_cm': [fruit, banana_instance], - 'cultivar': [fruit], - 'origin': [fruit], } ) - # model._additional_properties_model_instances stores a list of - # models which have the property additional_properties_type != None self.assertEqual( - fruit._additional_properties_model_instances, [] + fruit._additional_properties_model_instances, [fruit] ) # if we modify one of the properties owned by multiple @@ -140,21 +162,15 @@ def testFruit(self): with self.assertRaises(petstore_api.ApiValueError): some_length_cm = fruit.length_cm - # including extra parameters raises an exception - with self.assertRaises(petstore_api.ApiValueError): - fruit = Fruit( - color=color, - length_cm=length_cm, - unknown_property='some value' - ) - # including input parameters for two oneOf instances raise an exception with self.assertRaises(petstore_api.ApiValueError): fruit = Fruit( - length_cm=length_cm, + length_cm=self.length_cm, cultivar='granny smith' ) + def test_apple_fruit(self): + # make an instance of Fruit, a composed schema oneOf model # apple test color = 'red' @@ -190,19 +206,15 @@ def testFruit(self): self.assertEqual( fruit._var_name_to_model_instances, { - 'color': [fruit], - 'length_cm': [fruit], + 'color': [fruit, apple_instance], 'cultivar': [fruit, apple_instance], - 'origin': [fruit, apple_instance], } ) - # model._additional_properties_model_instances stores a list of - # models which have the property additional_properties_type != None self.assertEqual( - fruit._additional_properties_model_instances, [] + fruit._additional_properties_model_instances, [fruit] ) - def testFruitNullValue(self): + def test_null_fruit(self): # Since 'apple' is nullable, validate we can create an apple with the 'null' value. fruit = apple.Apple(None) self.assertIsNone(fruit) @@ -220,5 +232,16 @@ def testFruitNullValue(self): fruit = Fruit(apple.Apple(None)) self.assertIsNone(fruit) + def test_fruit_with_invalid_input_type(self): + + """ + color must be a str, color's str type is only defined at the Fruit level + Banana + Apple would allow color to be assigned with any type of value + """ + invalid_value = 1 + with self.assertRaises(petstore_api.ApiTypeError): + fruit = Fruit(color=invalid_value, length_cm=self.length_cm) + + if __name__ == '__main__': unittest.main() diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_fruit_req.py b/samples/openapi3/client/petstore/python/tests_manual/test_fruit_req.py index 3e637c3226a0..64b710fdd583 100644 --- a/samples/openapi3/client/petstore/python/tests_manual/test_fruit_req.py +++ b/samples/openapi3/client/petstore/python/tests_manual/test_fruit_req.py @@ -14,21 +14,14 @@ import unittest import petstore_api -try: - from petstore_api.model import apple_req -except ImportError: - apple_req = sys.modules[ - 'petstore_api.model.apple_req'] -try: - from petstore_api.model import banana_req -except ImportError: - banana_req = sys.modules[ - 'petstore_api.model.banana_req'] +from petstore_api.model import apple_req +from petstore_api.model import banana_req from petstore_api.model.fruit_req import FruitReq class TestFruitReq(unittest.TestCase): """FruitReq unit test stubs""" + length_cm = 20.3 def setUp(self): pass @@ -36,24 +29,9 @@ def setUp(self): def tearDown(self): pass - def testFruitReq(self): - """Test FruitReq""" + def test_fruit_access_errors(self): + fruit = FruitReq(length_cm=self.length_cm) - # make an instance of Fruit, a composed schema oneOf model - # banana test - length_cm = 20.3 - fruit = FruitReq(length_cm=length_cm) - # check its properties - self.assertEqual(fruit.length_cm, length_cm) - self.assertEqual(fruit['length_cm'], length_cm) - self.assertEqual(getattr(fruit, 'length_cm'), length_cm) - # check the dict representation - self.assertEqual( - fruit.to_dict(), - { - 'length_cm': length_cm, - } - ) # setting a value that doesn't exist raises an exception # with a key with self.assertRaises(AttributeError): @@ -66,12 +44,31 @@ def testFruitReq(self): # with a key with self.assertRaises(AttributeError): invalid_variable = fruit['cultivar'] - # with getattr - self.assertEqual(getattr(fruit, 'cultivar', 'some value'), 'some value') with self.assertRaises(AttributeError): getattr(fruit, 'cultivar') + def test_FruitReq_banana(self): + """Test FruitReq""" + + # make an instance of Fruit, a composed schema oneOf model + # banana test + fruit = FruitReq(length_cm=self.length_cm) + # check its properties + self.assertEqual(fruit.length_cm, self.length_cm) + self.assertEqual(fruit['length_cm'], self.length_cm) + self.assertEqual(getattr(fruit, 'length_cm'), self.length_cm) + # check the dict representation + self.assertEqual( + fruit.to_dict(), + { + 'length_cm': self.length_cm, + } + ) + + # with getattr + self.assertEqual(getattr(fruit, 'cultivar', 'some value'), 'some value') + # make sure that the ModelComposed class properties are correct # model._composed_schemas stores the anyOf/allOf/oneOf info self.assertEqual( @@ -101,15 +98,10 @@ def testFruitReq(self): fruit._var_name_to_model_instances, { 'length_cm': [fruit, banana_instance], - 'cultivar': [fruit], - 'mealy': [fruit], - 'sweet': [fruit, banana_instance], } ) - # model._additional_properties_model_instances stores a list of - # models which have the property additional_properties_type != None self.assertEqual( - fruit._additional_properties_model_instances, [] + fruit._additional_properties_model_instances, [fruit] ) # if we modify one of the properties owned by multiple @@ -119,21 +111,24 @@ def testFruitReq(self): with self.assertRaises(petstore_api.ApiValueError): some_length_cm = fruit.length_cm + def test_invalid_inputs(self): # including extra parameters raises an exception with self.assertRaises(petstore_api.ApiValueError): fruit = FruitReq( - length_cm=length_cm, + length_cm=self.length_cm, unknown_property='some value' ) # including input parameters for two oneOf instances raise an exception with self.assertRaises(petstore_api.ApiValueError): fruit = FruitReq( - length_cm=length_cm, + length_cm=self.length_cm, cultivar='granny smith' ) - # make an instance of Fruit, a composed schema oneOf model + def test_FruitReq_apple(self): + """Test FruitReq""" + # apple test cultivar = 'golden delicious' fruit = FruitReq(cultivar=cultivar) @@ -163,21 +158,18 @@ def testFruitReq(self): self.assertEqual( fruit._var_name_to_model_instances, { - 'length_cm': [fruit], 'cultivar': [fruit, apple_instance], - 'mealy': [fruit, apple_instance], - 'sweet': [fruit], } ) - # model._additional_properties_model_instances stores a list of - # models which have the property additional_properties_type != None self.assertEqual( - fruit._additional_properties_model_instances, [] + fruit._additional_properties_model_instances, [fruit] ) + def test_null_fruit(self): # we can pass in None fruit = FruitReq(None) assert fruit is None + if __name__ == '__main__': unittest.main() diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_gm_fruit.py b/samples/openapi3/client/petstore/python/tests_manual/test_gm_fruit.py index 85d0fcf9b1c7..ad5907ee4436 100644 --- a/samples/openapi3/client/petstore/python/tests_manual/test_gm_fruit.py +++ b/samples/openapi3/client/petstore/python/tests_manual/test_gm_fruit.py @@ -14,21 +14,15 @@ import unittest import petstore_api -try: - from petstore_api.model import apple -except ImportError: - apple = sys.modules[ - 'petstore_api.model.apple'] -try: - from petstore_api.model import banana -except ImportError: - banana = sys.modules[ - 'petstore_api.model.banana'] +from petstore_api.model import apple +from petstore_api.model import banana from petstore_api.model.gm_fruit import GmFruit class TestGmFruit(unittest.TestCase): """GmFruit unit test stubs""" + length_cm = 20.3 + color = 'yellow' def setUp(self): pass @@ -36,36 +30,48 @@ def setUp(self): def tearDown(self): pass - def testGmFruit(self): + def test_set_addprop_attributes(self): + # setting a value that doesn't exist works because additional_properties_type allows any type + other_fruit = GmFruit(length_cm=self.length_cm, color=self.color) + blah = 'blah' + other_fruit['a'] = blah + assert other_fruit.a == blah + + # with setattr + setattr(other_fruit, 'b', blah) + assert other_fruit.b == blah + + self.assertEqual( + other_fruit.to_dict(), + { + 'a': 'blah', + 'b': 'blah', + 'length_cm': self.length_cm, + 'color': self.color + } + ) + + def test_banana_fruit(self): """Test GmFruit""" # make an instance of GmFruit, a composed schema anyOf model # banana test - length_cm = 20.3 - color = 'yellow' - fruit = GmFruit(length_cm=length_cm, color=color) + fruit = GmFruit(length_cm=self.length_cm, color=self.color) # check its properties - self.assertEqual(fruit.length_cm, length_cm) - self.assertEqual(fruit['length_cm'], length_cm) - self.assertEqual(getattr(fruit, 'length_cm'), length_cm) - self.assertEqual(fruit.color, color) - self.assertEqual(fruit['color'], color) - self.assertEqual(getattr(fruit, 'color'), color) + self.assertEqual(fruit.length_cm, self.length_cm) + self.assertEqual(fruit['length_cm'], self.length_cm) + self.assertEqual(getattr(fruit, 'length_cm'), self.length_cm) + self.assertEqual(fruit.color, self.color) + self.assertEqual(fruit['color'], self.color) + self.assertEqual(getattr(fruit, 'color'), self.color) # check the dict representation self.assertEqual( fruit.to_dict(), { - 'length_cm': length_cm, - 'color': color + 'length_cm': self.length_cm, + 'color': self.color } ) - # setting a value that doesn't exist raises an exception - # with a key - with self.assertRaises(AttributeError): - fruit['invalid_variable'] = 'some value' - # with setattr - with self.assertRaises(AttributeError): - setattr(fruit, 'invalid_variable', 'some value') # getting a value that doesn't exist raises an exception # with a key @@ -104,40 +110,22 @@ def testGmFruit(self): self.assertEqual( fruit._var_name_to_model_instances, { - 'color': [fruit], + 'color': [fruit, banana_instance], 'length_cm': [fruit, banana_instance], - 'cultivar': [fruit], - 'origin': [fruit], } ) - # model._additional_properties_model_instances stores a list of - # models which have the property additional_properties_type != None self.assertEqual( - fruit._additional_properties_model_instances, [] + fruit._additional_properties_model_instances, [fruit] ) - # if we modify one of the properties owned by multiple - # model_instances we get an exception when we try to access that - # property because the retrieved values are not all the same - banana_instance.length_cm = 4.56 - with self.assertRaises(petstore_api.ApiValueError): - some_length_cm = fruit.length_cm - - # including extra parameters raises an exception - with self.assertRaises(petstore_api.ApiValueError): - fruit = GmFruit( - color=color, - length_cm=length_cm, - unknown_property='some value' - ) - + def test_combo_fruit(self): # including input parameters for both anyOf instances works cultivar = 'banaple' color = 'orange' fruit = GmFruit( color=color, cultivar=cultivar, - length_cm=length_cm + length_cm=self.length_cm ) self.assertEqual(fruit.color, color) self.assertEqual(fruit['color'], color) @@ -145,9 +133,9 @@ def testGmFruit(self): self.assertEqual(fruit.cultivar, cultivar) self.assertEqual(fruit['cultivar'], cultivar) self.assertEqual(getattr(fruit, 'cultivar'), cultivar) - self.assertEqual(fruit.length_cm, length_cm) - self.assertEqual(fruit['length_cm'], length_cm) - self.assertEqual(getattr(fruit, 'length_cm'), length_cm) + self.assertEqual(fruit.length_cm, self.length_cm) + self.assertEqual(fruit['length_cm'], self.length_cm) + self.assertEqual(getattr(fruit, 'length_cm'), self.length_cm) # model._composed_instances is a list of the instances that were # made from the anyOf/allOf/OneOf classes in model._composed_schemas @@ -165,14 +153,16 @@ def testGmFruit(self): self.assertEqual( fruit._var_name_to_model_instances, { - 'color': [fruit], - 'length_cm': [fruit, banana_instance], - 'cultivar': [fruit, apple_instance], - 'origin': [fruit, apple_instance], + 'color': [fruit, apple_instance, banana_instance], + 'length_cm': [fruit, apple_instance, banana_instance], + 'cultivar': [fruit, apple_instance, banana_instance], } ) + self.assertEqual( + fruit._additional_properties_model_instances, [fruit] + ) - # make an instance of GmFruit, a composed schema anyOf model + def test_apple_fruit(self): # apple test color = 'red' cultivar = 'golden delicious' @@ -214,16 +204,13 @@ def testGmFruit(self): self.assertEqual( fruit._var_name_to_model_instances, { - 'color': [fruit], - 'length_cm': [fruit], + 'color': [fruit, apple_instance], 'cultivar': [fruit, apple_instance], 'origin': [fruit, apple_instance], } ) - # model._additional_properties_model_instances stores a list of - # models which have the property additional_properties_type != None self.assertEqual( - fruit._additional_properties_model_instances, [] + fruit._additional_properties_model_instances, [fruit] ) if __name__ == '__main__': diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_tag.py b/samples/openapi3/client/petstore/python/tests_manual/test_tag.py new file mode 100644 index 000000000000..ec945f6b30b8 --- /dev/null +++ b/samples/openapi3/client/petstore/python/tests_manual/test_tag.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import petstore_api +from petstore_api.model.tag import Tag + + +class TestTag(unittest.TestCase): + """Tag unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_can_ingest_additional_properties_in_tag(self): + t = Tag(a='abc') + assert t.a == 'abc' + + +if __name__ == '__main__': + unittest.main() From 59089feb64cc58487f5e056269dd070092bc5921 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 1 Apr 2021 09:19:50 +0800 Subject: [PATCH 004/186] update samples --- .../.openapi-generator/FILES | 1 - .../.openapi-generator/VERSION | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/FILES b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/FILES index 94732e37243f..a5adeaaddc68 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/FILES +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/FILES @@ -150,7 +150,6 @@ petstore_api/model/user.py petstore_api/model/xml_item.py petstore_api/model_utils.py petstore_api/models/__init__.py -petstore_api/models/__init__.py petstore_api/rest.py requirements.txt setup.cfg diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file From 71f67c3d40f00d3e73c576f8984ca09b5f1e307b Mon Sep 17 00:00:00 2001 From: Justin Black Date: Thu, 1 Apr 2021 11:31:21 -0700 Subject: [PATCH 005/186] Samples regenerated (#9154) --- .../docs/FakeApi.md | 4 ++-- .../petstore_client_lib_fake/.openapi-generator/VERSION | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeApi.md b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeApi.md index a107342b75c0..bfd6467215ba 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeApi.md +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/docs/FakeApi.md @@ -842,13 +842,13 @@ with petstore_api.ApiClient(configuration) as api_client: api_instance = fake_api.FakeApi(api_client) number = 32.1 # float | None double = 67.8 # float | None - pattern_without_delimiter = "AUR,rZ#UM/?R,Fp^l6$ARjbhJk C" # str | None + pattern_without_delimiter = "Aj" # str | None byte = 'YQ==' # str | None integer = 10 # int | None (optional) int32 = 20 # int | None (optional) int64 = 1 # int | None (optional) float = 3.14 # float | None (optional) - string = "a" # str | None (optional) + string = "A" # str | None (optional) binary = open('/path/to/file', 'rb') # file_type | None (optional) date = dateutil_parser('1970-01-01').date() # date | None (optional) date_time = dateutil_parser('1970-01-01T00:00:00.00Z') # datetime | None (optional) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file From 1f227061c646dd1d4b50830b91f7c62384001615 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Tue, 13 Apr 2021 13:50:41 +0800 Subject: [PATCH 006/186] add sponsor message in F# giraffe generator (#9247) --- .../languages/FsharpGiraffeServerCodegen.java | 15 ++++++- .../fsharp-giraffe/.openapi-generator/VERSION | 2 +- .../petstore/fsharp-giraffe/OpenAPI/README.md | 2 - .../fsharp-giraffe/OpenAPI/src/OpenAPI.fsproj | 2 - .../OpenAPI/src/api/PetApiHandler.fs | 40 ++++++++++--------- .../OpenAPI/src/api/PetApiHandlerParams.fs | 30 +++++++++----- .../OpenAPI/src/api/StoreApiHandler.fs | 22 +++++----- .../OpenAPI/src/api/StoreApiHandlerParams.fs | 12 +++--- .../OpenAPI/src/api/UserApiHandler.fs | 30 +++++++------- .../OpenAPI/src/api/UserApiHandlerParams.fs | 8 ++-- .../OpenAPI/src/auth/AuthSchemes.fs | 1 - .../OpenAPI/src/impl/CustomHandlers.fs | 2 - .../OpenAPI/src/impl/PetApiService.fs | 15 +++++-- .../OpenAPI/src/impl/StoreApiService.fs | 6 +-- .../OpenAPI/src/impl/UserApiService.fs | 4 +- 15 files changed, 109 insertions(+), 82 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/FsharpGiraffeServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/FsharpGiraffeServerCodegen.java index d8d4f7fa3df3..b62591c1d0e3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/FsharpGiraffeServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/FsharpGiraffeServerCodegen.java @@ -280,4 +280,17 @@ public Mustache.Compiler processCompiler(Mustache.Compiler compiler) { public String toRegularExpression(String pattern) { return escapeText(pattern); } -} \ No newline at end of file + + @Override + public void postProcess() { + System.out.println("################################################################################"); + System.out.println("# Thanks for using OpenAPI Generator. #"); + System.out.println("# Please consider donation to help us maintain this project \uD83D\uDE4F #"); + System.out.println("# https://opencollective.com/openapi_generator/donate #"); + System.out.println("# #"); + System.out.println("# This generator's contributed by Nick Fisher (https://github.com/nmfisher) #"); + System.out.println("# Please support his work directly via https://paypal.me/nickfisher1984 \uD83D\uDE4F #"); + System.out.println("################################################################################"); + } + +} diff --git a/samples/server/petstore/fsharp-giraffe/.openapi-generator/VERSION b/samples/server/petstore/fsharp-giraffe/.openapi-generator/VERSION index 0e97bd19efbf..d509cc92aa80 100644 --- a/samples/server/petstore/fsharp-giraffe/.openapi-generator/VERSION +++ b/samples/server/petstore/fsharp-giraffe/.openapi-generator/VERSION @@ -1 +1 @@ -4.1.3-SNAPSHOT \ No newline at end of file +5.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/README.md b/samples/server/petstore/fsharp-giraffe/OpenAPI/README.md index c529ef85cdd8..efa4280fbffa 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/README.md +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/README.md @@ -10,8 +10,6 @@ The following models have been auto-generated from the provided OpenAPI schema: - model/TagModel.fs - model/CategoryModel.fs - model/OrderModel.fs -- model/InlineObject1Model.fs -- model/InlineObjectModel.fs - model/PetModel.fs - model/ApiResponseModel.fs diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/OpenAPI.fsproj b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/OpenAPI.fsproj index 4b31d698ba33..be2ed1c3c1fd 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/OpenAPI.fsproj +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/OpenAPI.fsproj @@ -25,8 +25,6 @@ - - diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/PetApiHandler.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/PetApiHandler.fs index 634acdf18752..0e1bd62938ad 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/PetApiHandler.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/PetApiHandler.fs @@ -29,8 +29,10 @@ module PetApiHandler = let serviceArgs = { bodyParams=bodyParams } : AddPetArgs let result = PetApiService.AddPet ctx serviceArgs return! (match result with + | AddPetStatusCode200 resolved -> + setStatusCode 200 >=> json resolved.content | AddPetStatusCode405 resolved -> - setStatusCode 405 >=> text resolved.content + setStatusCode 405 >=> text resolved.content ) next ctx } //#endregion @@ -50,7 +52,7 @@ module PetApiHandler = let result = PetApiService.DeletePet ctx serviceArgs return! (match result with | DeletePetStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content ) next ctx } //#endregion @@ -67,10 +69,10 @@ module PetApiHandler = let serviceArgs = { queryParams=queryParams; } : FindPetsByStatusArgs let result = PetApiService.FindPetsByStatus ctx serviceArgs return! (match result with - | FindPetsByStatusDefaultStatusCode resolved -> - setStatusCode 200 >=> json resolved.content + | FindPetsByStatusStatusCode200 resolved -> + setStatusCode 200 >=> json resolved.content | FindPetsByStatusStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content ) next ctx } //#endregion @@ -87,10 +89,10 @@ module PetApiHandler = let serviceArgs = { queryParams=queryParams; } : FindPetsByTagsArgs let result = PetApiService.FindPetsByTags ctx serviceArgs return! (match result with - | FindPetsByTagsDefaultStatusCode resolved -> - setStatusCode 200 >=> json resolved.content + | FindPetsByTagsStatusCode200 resolved -> + setStatusCode 200 >=> json resolved.content | FindPetsByTagsStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content ) next ctx } //#endregion @@ -106,12 +108,12 @@ module PetApiHandler = let serviceArgs = { pathParams=pathParams; } : GetPetByIdArgs let result = PetApiService.GetPetById ctx serviceArgs return! (match result with - | GetPetByIdDefaultStatusCode resolved -> - setStatusCode 200 >=> json resolved.content + | GetPetByIdStatusCode200 resolved -> + setStatusCode 200 >=> json resolved.content | GetPetByIdStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content | GetPetByIdStatusCode404 resolved -> - setStatusCode 404 >=> text resolved.content + setStatusCode 404 >=> text resolved.content ) next ctx } //#endregion @@ -129,12 +131,14 @@ module PetApiHandler = let serviceArgs = { bodyParams=bodyParams } : UpdatePetArgs let result = PetApiService.UpdatePet ctx serviceArgs return! (match result with + | UpdatePetStatusCode200 resolved -> + setStatusCode 200 >=> json resolved.content | UpdatePetStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content | UpdatePetStatusCode404 resolved -> - setStatusCode 404 >=> text resolved.content + setStatusCode 404 >=> text resolved.content | UpdatePetStatusCode405 resolved -> - setStatusCode 405 >=> text resolved.content + setStatusCode 405 >=> text resolved.content ) next ctx } //#endregion @@ -152,7 +156,7 @@ module PetApiHandler = let result = PetApiService.UpdatePetWithForm ctx serviceArgs return! (match result with | UpdatePetWithFormStatusCode405 resolved -> - setStatusCode 405 >=> text resolved.content + setStatusCode 405 >=> text resolved.content ) next ctx } //#endregion @@ -169,8 +173,8 @@ module PetApiHandler = let serviceArgs = { formParams=formParams; pathParams=pathParams; } : UploadFileArgs let result = PetApiService.UploadFile ctx serviceArgs return! (match result with - | UploadFileDefaultStatusCode resolved -> - setStatusCode 200 >=> json resolved.content + | UploadFileStatusCode200 resolved -> + setStatusCode 200 >=> json resolved.content ) next ctx } //#endregion diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/PetApiHandlerParams.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/PetApiHandlerParams.fs index f84ffb76b22c..c2332ce40bfd 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/PetApiHandlerParams.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/PetApiHandlerParams.fs @@ -14,11 +14,16 @@ module PetApiHandlerParams = //#endregion + type AddPetStatusCode200Response = { + content:Pet; + + } + type AddPetStatusCode405Response = { content:string; } - type AddPetResult = AddPetStatusCode405 of AddPetStatusCode405Response + type AddPetResult = AddPetStatusCode200 of AddPetStatusCode200Response|AddPetStatusCode405 of AddPetStatusCode405Response type AddPetArgs = { bodyParams:AddPetBodyParams @@ -58,7 +63,7 @@ module PetApiHandlerParams = //#endregion - type FindPetsByStatusDefaultStatusCodeResponse = { + type FindPetsByStatusStatusCode200Response = { content:Pet[]; } @@ -67,7 +72,7 @@ module PetApiHandlerParams = content:string; } - type FindPetsByStatusResult = FindPetsByStatusDefaultStatusCode of FindPetsByStatusDefaultStatusCodeResponse|FindPetsByStatusStatusCode400 of FindPetsByStatusStatusCode400Response + type FindPetsByStatusResult = FindPetsByStatusStatusCode200 of FindPetsByStatusStatusCode200Response|FindPetsByStatusStatusCode400 of FindPetsByStatusStatusCode400Response type FindPetsByStatusArgs = { queryParams:Result; @@ -82,7 +87,7 @@ module PetApiHandlerParams = //#endregion - type FindPetsByTagsDefaultStatusCodeResponse = { + type FindPetsByTagsStatusCode200Response = { content:Pet[]; } @@ -91,7 +96,7 @@ module PetApiHandlerParams = content:string; } - type FindPetsByTagsResult = FindPetsByTagsDefaultStatusCode of FindPetsByTagsDefaultStatusCodeResponse|FindPetsByTagsStatusCode400 of FindPetsByTagsStatusCode400Response + type FindPetsByTagsResult = FindPetsByTagsStatusCode200 of FindPetsByTagsStatusCode200Response|FindPetsByTagsStatusCode400 of FindPetsByTagsStatusCode400Response type FindPetsByTagsArgs = { queryParams:Result; @@ -104,7 +109,7 @@ module PetApiHandlerParams = //#endregion - type GetPetByIdDefaultStatusCodeResponse = { + type GetPetByIdStatusCode200Response = { content:Pet; } @@ -118,7 +123,7 @@ module PetApiHandlerParams = content:string; } - type GetPetByIdResult = GetPetByIdDefaultStatusCode of GetPetByIdDefaultStatusCodeResponse|GetPetByIdStatusCode400 of GetPetByIdStatusCode400Response|GetPetByIdStatusCode404 of GetPetByIdStatusCode404Response + type GetPetByIdResult = GetPetByIdStatusCode200 of GetPetByIdStatusCode200Response|GetPetByIdStatusCode400 of GetPetByIdStatusCode400Response|GetPetByIdStatusCode404 of GetPetByIdStatusCode404Response type GetPetByIdArgs = { pathParams:GetPetByIdPathParams; @@ -130,6 +135,11 @@ module PetApiHandlerParams = //#endregion + type UpdatePetStatusCode200Response = { + content:Pet; + + } + type UpdatePetStatusCode400Response = { content:string; @@ -144,7 +154,7 @@ module PetApiHandlerParams = content:string; } - type UpdatePetResult = UpdatePetStatusCode400 of UpdatePetStatusCode400Response|UpdatePetStatusCode404 of UpdatePetStatusCode404Response|UpdatePetStatusCode405 of UpdatePetStatusCode405Response + type UpdatePetResult = UpdatePetStatusCode200 of UpdatePetStatusCode200Response|UpdatePetStatusCode400 of UpdatePetStatusCode400Response|UpdatePetStatusCode404 of UpdatePetStatusCode404Response|UpdatePetStatusCode405 of UpdatePetStatusCode405Response type UpdatePetArgs = { bodyParams:UpdatePetBodyParams @@ -197,11 +207,11 @@ module PetApiHandlerParams = //#endregion - type UploadFileDefaultStatusCodeResponse = { + type UploadFileStatusCode200Response = { content:ApiResponse; } - type UploadFileResult = UploadFileDefaultStatusCode of UploadFileDefaultStatusCodeResponse + type UploadFileResult = UploadFileStatusCode200 of UploadFileStatusCode200Response type UploadFileArgs = { pathParams:UploadFilePathParams; diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/StoreApiHandler.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/StoreApiHandler.fs index 91592d5af51f..cabdab6cbdb5 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/StoreApiHandler.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/StoreApiHandler.fs @@ -28,9 +28,9 @@ module StoreApiHandler = let result = StoreApiService.DeleteOrder ctx serviceArgs return! (match result with | DeleteOrderStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content | DeleteOrderStatusCode404 resolved -> - setStatusCode 404 >=> text resolved.content + setStatusCode 404 >=> text resolved.content ) next ctx } //#endregion @@ -45,8 +45,8 @@ module StoreApiHandler = task { let result = StoreApiService.GetInventory ctx return! (match result with - | GetInventoryDefaultStatusCode resolved -> - setStatusCode 200 >=> json resolved.content + | GetInventoryStatusCode200 resolved -> + setStatusCode 200 >=> json resolved.content ) next ctx } //#endregion @@ -62,12 +62,12 @@ module StoreApiHandler = let serviceArgs = { pathParams=pathParams; } : GetOrderByIdArgs let result = StoreApiService.GetOrderById ctx serviceArgs return! (match result with - | GetOrderByIdDefaultStatusCode resolved -> - setStatusCode 200 >=> json resolved.content + | GetOrderByIdStatusCode200 resolved -> + setStatusCode 200 >=> json resolved.content | GetOrderByIdStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content | GetOrderByIdStatusCode404 resolved -> - setStatusCode 404 >=> text resolved.content + setStatusCode 404 >=> text resolved.content ) next ctx } //#endregion @@ -85,10 +85,10 @@ module StoreApiHandler = let serviceArgs = { bodyParams=bodyParams } : PlaceOrderArgs let result = StoreApiService.PlaceOrder ctx serviceArgs return! (match result with - | PlaceOrderDefaultStatusCode resolved -> - setStatusCode 200 >=> json resolved.content + | PlaceOrderStatusCode200 resolved -> + setStatusCode 200 >=> json resolved.content | PlaceOrderStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content ) next ctx } //#endregion diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/StoreApiHandlerParams.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/StoreApiHandlerParams.fs index 2c9226f8abfe..dbb836432bd3 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/StoreApiHandlerParams.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/StoreApiHandlerParams.fs @@ -31,11 +31,11 @@ module StoreApiHandlerParams = } - type GetInventoryDefaultStatusCodeResponse = { + type GetInventoryStatusCode200Response = { content:IDictionary; } - type GetInventoryResult = GetInventoryDefaultStatusCode of GetInventoryDefaultStatusCodeResponse + type GetInventoryResult = GetInventoryStatusCode200 of GetInventoryStatusCode200Response //#region Path parameters [] @@ -45,7 +45,7 @@ module StoreApiHandlerParams = //#endregion - type GetOrderByIdDefaultStatusCodeResponse = { + type GetOrderByIdStatusCode200Response = { content:Order; } @@ -59,7 +59,7 @@ module StoreApiHandlerParams = content:string; } - type GetOrderByIdResult = GetOrderByIdDefaultStatusCode of GetOrderByIdDefaultStatusCodeResponse|GetOrderByIdStatusCode400 of GetOrderByIdStatusCode400Response|GetOrderByIdStatusCode404 of GetOrderByIdStatusCode404Response + type GetOrderByIdResult = GetOrderByIdStatusCode200 of GetOrderByIdStatusCode200Response|GetOrderByIdStatusCode400 of GetOrderByIdStatusCode400Response|GetOrderByIdStatusCode404 of GetOrderByIdStatusCode404Response type GetOrderByIdArgs = { pathParams:GetOrderByIdPathParams; @@ -71,7 +71,7 @@ module StoreApiHandlerParams = //#endregion - type PlaceOrderDefaultStatusCodeResponse = { + type PlaceOrderStatusCode200Response = { content:Order; } @@ -80,7 +80,7 @@ module StoreApiHandlerParams = content:string; } - type PlaceOrderResult = PlaceOrderDefaultStatusCode of PlaceOrderDefaultStatusCodeResponse|PlaceOrderStatusCode400 of PlaceOrderStatusCode400Response + type PlaceOrderResult = PlaceOrderStatusCode200 of PlaceOrderStatusCode200Response|PlaceOrderStatusCode400 of PlaceOrderStatusCode400Response type PlaceOrderArgs = { bodyParams:PlaceOrderBodyParams diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/UserApiHandler.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/UserApiHandler.fs index 6994e2397416..42352b3f9118 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/UserApiHandler.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/UserApiHandler.fs @@ -29,7 +29,7 @@ module UserApiHandler = let result = UserApiService.CreateUser ctx serviceArgs return! (match result with | CreateUserDefaultStatusCode resolved -> - setStatusCode 0 >=> text resolved.content + setStatusCode 0 >=> text resolved.content ) next ctx } //#endregion @@ -48,7 +48,7 @@ module UserApiHandler = let result = UserApiService.CreateUsersWithArrayInput ctx serviceArgs return! (match result with | CreateUsersWithArrayInputDefaultStatusCode resolved -> - setStatusCode 0 >=> text resolved.content + setStatusCode 0 >=> text resolved.content ) next ctx } //#endregion @@ -67,7 +67,7 @@ module UserApiHandler = let result = UserApiService.CreateUsersWithListInput ctx serviceArgs return! (match result with | CreateUsersWithListInputDefaultStatusCode resolved -> - setStatusCode 0 >=> text resolved.content + setStatusCode 0 >=> text resolved.content ) next ctx } //#endregion @@ -84,9 +84,9 @@ module UserApiHandler = let result = UserApiService.DeleteUser ctx serviceArgs return! (match result with | DeleteUserStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content | DeleteUserStatusCode404 resolved -> - setStatusCode 404 >=> text resolved.content + setStatusCode 404 >=> text resolved.content ) next ctx } //#endregion @@ -102,12 +102,12 @@ module UserApiHandler = let serviceArgs = { pathParams=pathParams; } : GetUserByNameArgs let result = UserApiService.GetUserByName ctx serviceArgs return! (match result with - | GetUserByNameDefaultStatusCode resolved -> - setStatusCode 200 >=> json resolved.content + | GetUserByNameStatusCode200 resolved -> + setStatusCode 200 >=> json resolved.content | GetUserByNameStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content | GetUserByNameStatusCode404 resolved -> - setStatusCode 404 >=> text resolved.content + setStatusCode 404 >=> text resolved.content ) next ctx } //#endregion @@ -124,10 +124,10 @@ module UserApiHandler = let serviceArgs = { queryParams=queryParams; } : LoginUserArgs let result = UserApiService.LoginUser ctx serviceArgs return! (match result with - | LoginUserDefaultStatusCode resolved -> - setStatusCode 200 >=> text resolved.content + | LoginUserStatusCode200 resolved -> + setStatusCode 200 >=> text resolved.content | LoginUserStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content ) next ctx } //#endregion @@ -143,7 +143,7 @@ module UserApiHandler = let result = UserApiService.LogoutUser ctx return! (match result with | LogoutUserDefaultStatusCode resolved -> - setStatusCode 0 >=> text resolved.content + setStatusCode 0 >=> text resolved.content ) next ctx } //#endregion @@ -162,9 +162,9 @@ module UserApiHandler = let result = UserApiService.UpdateUser ctx serviceArgs return! (match result with | UpdateUserStatusCode400 resolved -> - setStatusCode 400 >=> text resolved.content + setStatusCode 400 >=> text resolved.content | UpdateUserStatusCode404 resolved -> - setStatusCode 404 >=> text resolved.content + setStatusCode 404 >=> text resolved.content ) next ctx } //#endregion diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/UserApiHandlerParams.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/UserApiHandlerParams.fs index 42c51c93a664..b32b849c8633 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/UserApiHandlerParams.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/api/UserApiHandlerParams.fs @@ -84,7 +84,7 @@ module UserApiHandlerParams = //#endregion - type GetUserByNameDefaultStatusCodeResponse = { + type GetUserByNameStatusCode200Response = { content:User; } @@ -98,7 +98,7 @@ module UserApiHandlerParams = content:string; } - type GetUserByNameResult = GetUserByNameDefaultStatusCode of GetUserByNameDefaultStatusCodeResponse|GetUserByNameStatusCode400 of GetUserByNameStatusCode400Response|GetUserByNameStatusCode404 of GetUserByNameStatusCode404Response + type GetUserByNameResult = GetUserByNameStatusCode200 of GetUserByNameStatusCode200Response|GetUserByNameStatusCode400 of GetUserByNameStatusCode400Response|GetUserByNameStatusCode404 of GetUserByNameStatusCode404Response type GetUserByNameArgs = { pathParams:GetUserByNamePathParams; @@ -116,7 +116,7 @@ module UserApiHandlerParams = //#endregion - type LoginUserDefaultStatusCodeResponse = { + type LoginUserStatusCode200Response = { content:string; } @@ -125,7 +125,7 @@ module UserApiHandlerParams = content:string; } - type LoginUserResult = LoginUserDefaultStatusCode of LoginUserDefaultStatusCodeResponse|LoginUserStatusCode400 of LoginUserStatusCode400Response + type LoginUserResult = LoginUserStatusCode200 of LoginUserStatusCode200Response|LoginUserStatusCode400 of LoginUserStatusCode400Response type LoginUserArgs = { queryParams:Result; diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/auth/AuthSchemes.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/auth/AuthSchemes.fs index 5e1bc765d48f..d7c5dc2cb355 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/auth/AuthSchemes.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/auth/AuthSchemes.fs @@ -60,7 +60,6 @@ module AuthSchemes = let configureApiKeyAuth (settings:IConfiguration) services = buildApiKeyAuth "api_key" services - raise (NotImplementedException("API key security scheme outside of header has not yet been implemented")) let configureCookie (builder:AuthenticationBuilder) = diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/CustomHandlers.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/CustomHandlers.fs index ef85330bb0e8..6f8dea83e0fb 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/CustomHandlers.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/CustomHandlers.fs @@ -79,7 +79,6 @@ module CustomHandlers = body [] [ h1 [] [ str "Welcome" ] a [_href "/login-with-api_key"] [ str "Login with api_key" ] - a [_href "/login-with-auth_cookie"] [ str "Login with auth_cookie" ] a [_href "/login-with-petstore_auth"] [ str "Login with petstore_auth" ] ] ] @@ -93,7 +92,6 @@ module CustomHandlers = choose [ route "/login" >=> redirectToLogin route "/login-with-api_key" >=> challenge "api_key" - route "/login-with-auth_cookie" >=> challenge "auth_cookie" route "/login-with-petstore_auth" >=> challenge "petstore_auth" route "/logout" >=> logout ] diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/PetApiService.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/PetApiService.fs index 948ee5ce71a2..db576a47d853 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/PetApiService.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/PetApiService.fs @@ -14,6 +14,10 @@ module PetApiServiceImplementation = interface IPetApiService with member this.AddPet ctx args = + if true then + let content = "successful operation" :> obj :?> Pet // this cast is obviously wrong, and is only intended to allow generated project to compile + AddPetStatusCode200 { content = content } + else let content = "Invalid input" AddPetStatusCode405 { content = content } @@ -24,7 +28,7 @@ module PetApiServiceImplementation = member this.FindPetsByStatus ctx args = if true then let content = "successful operation" :> obj :?> Pet[] // this cast is obviously wrong, and is only intended to allow generated project to compile - FindPetsByStatusDefaultStatusCode { content = content } + FindPetsByStatusStatusCode200 { content = content } else let content = "Invalid status value" FindPetsByStatusStatusCode400 { content = content } @@ -32,7 +36,7 @@ module PetApiServiceImplementation = member this.FindPetsByTags ctx args = if true then let content = "successful operation" :> obj :?> Pet[] // this cast is obviously wrong, and is only intended to allow generated project to compile - FindPetsByTagsDefaultStatusCode { content = content } + FindPetsByTagsStatusCode200 { content = content } else let content = "Invalid tag value" FindPetsByTagsStatusCode400 { content = content } @@ -40,7 +44,7 @@ module PetApiServiceImplementation = member this.GetPetById ctx args = if true then let content = "successful operation" :> obj :?> Pet // this cast is obviously wrong, and is only intended to allow generated project to compile - GetPetByIdDefaultStatusCode { content = content } + GetPetByIdStatusCode200 { content = content } else if true then let content = "Invalid ID supplied" GetPetByIdStatusCode400 { content = content } @@ -50,6 +54,9 @@ module PetApiServiceImplementation = member this.UpdatePet ctx args = if true then + let content = "successful operation" :> obj :?> Pet // this cast is obviously wrong, and is only intended to allow generated project to compile + UpdatePetStatusCode200 { content = content } + else if true then let content = "Invalid ID supplied" UpdatePetStatusCode400 { content = content } else if true then @@ -65,7 +72,7 @@ module PetApiServiceImplementation = member this.UploadFile ctx args = let content = "successful operation" :> obj :?> ApiResponse // this cast is obviously wrong, and is only intended to allow generated project to compile - UploadFileDefaultStatusCode { content = content } + UploadFileStatusCode200 { content = content } //#endregion diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/StoreApiService.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/StoreApiService.fs index ccb52b6e6e2a..d24dbe644c12 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/StoreApiService.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/StoreApiService.fs @@ -23,12 +23,12 @@ module StoreApiServiceImplementation = member this.GetInventory ctx = let content = "successful operation" :> obj :?> IDictionary // this cast is obviously wrong, and is only intended to allow generated project to compile - GetInventoryDefaultStatusCode { content = content } + GetInventoryStatusCode200 { content = content } member this.GetOrderById ctx args = if true then let content = "successful operation" :> obj :?> Order // this cast is obviously wrong, and is only intended to allow generated project to compile - GetOrderByIdDefaultStatusCode { content = content } + GetOrderByIdStatusCode200 { content = content } else if true then let content = "Invalid ID supplied" GetOrderByIdStatusCode400 { content = content } @@ -39,7 +39,7 @@ module StoreApiServiceImplementation = member this.PlaceOrder ctx args = if true then let content = "successful operation" :> obj :?> Order // this cast is obviously wrong, and is only intended to allow generated project to compile - PlaceOrderDefaultStatusCode { content = content } + PlaceOrderStatusCode200 { content = content } else let content = "Invalid Order" PlaceOrderStatusCode400 { content = content } diff --git a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/UserApiService.fs b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/UserApiService.fs index 853d8a3d3aef..b6e0d73cd920 100644 --- a/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/UserApiService.fs +++ b/samples/server/petstore/fsharp-giraffe/OpenAPI/src/impl/UserApiService.fs @@ -35,7 +35,7 @@ module UserApiServiceImplementation = member this.GetUserByName ctx args = if true then let content = "successful operation" :> obj :?> User // this cast is obviously wrong, and is only intended to allow generated project to compile - GetUserByNameDefaultStatusCode { content = content } + GetUserByNameStatusCode200 { content = content } else if true then let content = "Invalid username supplied" GetUserByNameStatusCode400 { content = content } @@ -46,7 +46,7 @@ module UserApiServiceImplementation = member this.LoginUser ctx args = if true then let content = "successful operation" :> obj :?> string // this cast is obviously wrong, and is only intended to allow generated project to compile - LoginUserDefaultStatusCode { content = content } + LoginUserStatusCode200 { content = content } else let content = "Invalid username/password supplied" LoginUserStatusCode400 { content = content } From 13c0b2c3c7d7e93c06ca60dbd5dbb862f84592e7 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Tue, 13 Apr 2021 14:09:19 +0800 Subject: [PATCH 007/186] Use warning instead of throwing exceptions (#9188) * use warning instead of throwing exceptions * comment out tests --- .../org/openapitools/codegen/DefaultCodegen.java | 16 ++++++++-------- .../openapitools/codegen/DefaultCodegenTest.java | 12 ++++++++++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 590e925a1422..4993420c5e3b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -2702,14 +2702,14 @@ private CodegenProperty discriminatorFound(String composedSchemaName, Schema sc, String modelName = ModelUtils.getSimpleRef(oneOf.get$ref()); CodegenProperty thisCp = discriminatorFound(composedSchemaName, oneOf, discPropName, openAPI); if (thisCp == null) { - throw new RuntimeException("'" + composedSchemaName + "' defines discriminator '" + discPropName + "', but the referenced OneOf schema '" + modelName + "' is missing " + discPropName); + LOGGER.warn("'" + composedSchemaName + "' defines discriminator '" + discPropName + "', but the referenced OneOf schema '" + modelName + "' is missing " + discPropName); } if (cp.dataType == null) { cp = thisCp; continue; } if (cp != thisCp) { - throw new RuntimeException("'" + composedSchemaName + "' defines discriminator '" + discPropName + "', but the OneOf schema '" + modelName + "' has a different " + discPropName + " definition than the prior OneOf schema's. Make sure the " + discPropName + " type and required values are the same"); + LOGGER.warn("'" + composedSchemaName + "' defines discriminator '" + discPropName + "', but the OneOf schema '" + modelName + "' has a different " + discPropName + " definition than the prior OneOf schema's. Make sure the " + discPropName + " type and required values are the same"); } } return cp; @@ -2721,14 +2721,14 @@ private CodegenProperty discriminatorFound(String composedSchemaName, Schema sc, String modelName = ModelUtils.getSimpleRef(anyOf.get$ref()); CodegenProperty thisCp = discriminatorFound(composedSchemaName, anyOf, discPropName, openAPI); if (thisCp == null) { - throw new RuntimeException("'" + composedSchemaName + "' defines discriminator '" + discPropName + "', but the referenced AnyOf schema '" + modelName + "' is missing " + discPropName); + LOGGER.warn("'" + composedSchemaName + "' defines discriminator '" + discPropName + "', but the referenced AnyOf schema '" + modelName + "' is missing " + discPropName); } if (cp.dataType == null) { cp = thisCp; continue; } if (cp != thisCp) { - throw new RuntimeException("'" + composedSchemaName + "' defines discriminator '" + discPropName + "', but the AnyOf schema '" + modelName + "' has a different " + discPropName + " definition than the prior AnyOf schema's. Make sure the " + discPropName + " type and required values are the same"); + LOGGER.warn("'" + composedSchemaName + "' defines discriminator '" + discPropName + "', but the AnyOf schema '" + modelName + "' has a different " + discPropName + " definition than the prior AnyOf schema's. Make sure the " + discPropName + " type and required values are the same"); } } return cp; @@ -2787,7 +2787,7 @@ private Discriminator recursiveGetDiscriminator(Schema sc, OpenAPI openAPI) { } } if (discriminatorsPropNames.size() > 1) { - throw new RuntimeException("The oneOf schemas have conflicting discriminator property names. " + + LOGGER.warn("The oneOf schemas have conflicting discriminator property names. " + "oneOf schemas must have the same property name, but found " + String.join(", ", discriminatorsPropNames)); } if (foundDisc != null && (hasDiscriminatorCnt + hasNullTypeCnt) == composedSchema.getOneOf().size() && discriminatorsPropNames.size() == 1) { @@ -2816,7 +2816,7 @@ private Discriminator recursiveGetDiscriminator(Schema sc, OpenAPI openAPI) { } } if (discriminatorsPropNames.size() > 1) { - throw new RuntimeException("The anyOf schemas have conflicting discriminator property names. " + + LOGGER.warn("The anyOf schemas have conflicting discriminator property names. " + "anyOf schemas must have the same property name, but found " + String.join(", ", discriminatorsPropNames)); } if (foundDisc != null && (hasDiscriminatorCnt + hasNullTypeCnt) == composedSchema.getAnyOf().size() && discriminatorsPropNames.size() == 1) { @@ -2866,7 +2866,7 @@ protected List getOneOfAnyOfDescendants(String composedSchemaName, // schemas also has inline composed schemas // Note: if it is only inline one level, then the inline model resolver will move it into its own // schema and make it a $ref schema in the oneOf/anyOf location - throw new RuntimeException("Invalid inline schema defined in oneOf/anyOf in '" + composedSchemaName + "'. Per the OpenApi spec, for this case when a composed schema defines a discriminator, the oneOf/anyOf schemas must use $ref. Change this inline definition to a $ref definition"); + LOGGER.warn("Invalid inline schema defined in oneOf/anyOf in '" + composedSchemaName + "'. Per the OpenApi spec, for this case when a composed schema defines a discriminator, the oneOf/anyOf schemas must use $ref. Change this inline definition to a $ref definition"); } CodegenProperty df = discriminatorFound(composedSchemaName, sc, discPropName, openAPI); String modelName = ModelUtils.getSimpleRef(ref); @@ -2886,7 +2886,7 @@ protected List getOneOfAnyOfDescendants(String composedSchemaName, msgSuffix += spacer + "invalid optional definition of " + discPropName + ", include it in required"; } } - throw new RuntimeException("'" + composedSchemaName + "' defines discriminator '" + discPropName + "', but the referenced schema '" + modelName + "' is incorrect. " + msgSuffix); + LOGGER.warn("'" + composedSchemaName + "' defines discriminator '" + discPropName + "', but the referenced schema '" + modelName + "' is incorrect. " + msgSuffix); } MappedModel mm = new MappedModel(modelName, toModelName(modelName)); descendentSchemas.add(mm); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index a21c506d5a22..e125c98a4635 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -1188,12 +1188,15 @@ public void testComposedSchemaOneOfDiscriminatorsInvalid() { Schema sc = openAPI.getComponents().getSchemas().get(modelName); + /* + // comment out below as we're now showing warnings instead of throwing exceptions try { codegen.fromModel(modelName, sc); Assert.assertTrue(false, "A RuntimeException should have been thrown when processing "+modelName+ " but it was not"); } catch (RuntimeException re) { Assert.assertEquals(re.getMessage(), errorMessageExpected); } + */ } } @@ -1220,12 +1223,15 @@ public void testComposedSchemaAnyOfDiscriminatorsInvalid() { Schema sc = openAPI.getComponents().getSchemas().get(modelName); + /* + // comment out below as we're now showing warnings instead of throwing exceptions try { codegen.fromModel(modelName, sc); Assert.assertTrue(false, "A RuntimeException should have been thrown when processing "+modelName+ " but it was not"); } catch (RuntimeException re) { Assert.assertEquals(re.getMessage(), errorMessageExpected); } + */ } } @@ -1256,7 +1262,8 @@ public void testComposedSchemaAnyOfDiscriminatorMap() { // inline anyOf with inline anyOf model doesn't work because we have null $refs and we throw an exception final String fmodelName = "FruitInlineInlineDisc"; final Schema fsc = openAPI.getComponents().getSchemas().get(fmodelName); - Assert.assertThrows(() -> codegen.fromModel(fmodelName, fsc)); + // comment out below as we're now showing warnings instead of throwing exceptions + //Assert.assertThrows(() -> codegen.fromModel(fmodelName, fsc)); // ref anyOf models with discriminator in properties in those models modelName = "FruitReqDisc"; @@ -1341,7 +1348,8 @@ public void testComposedSchemaOneOfDiscriminatorMap() { // inline oneOf with inline oneOf model doesn't work because we have null $refs and we throw an exception final String fmodelName = "FruitInlineInlineDisc"; final Schema fsc = openAPI.getComponents().getSchemas().get(fmodelName); - Assert.assertThrows(() -> codegen.fromModel(fmodelName, fsc)); + // comment out below as we're now showing warnings instead of throwing exceptions + //Assert.assertThrows(() -> codegen.fromModel(fmodelName, fsc)); // ref oneOf models with discriminator in properties in those models modelName = "FruitReqDisc"; From 29c16888602f9f914784e147b52e344283daff52 Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Tue, 13 Apr 2021 08:37:15 +0200 Subject: [PATCH 008/186] [dart][dart-dio] Update pubspec/readme templates (#9201) * Add homepage option to pubspec.yaml package validation fails when trying to publish to pub.dev See: https://dart.dev/tools/pub/pubspec Blocking https://github.com/bigpanther/trober/pull/108 cc: @kuhnroyal * Add missing fields * Update templates and generate samples Co-authored-by: Harsimran Singh Maan --- .../main/resources/dart-dio/pubspec.mustache | 22 ++++++++++------ .../dart/libraries/dio/README.mustache | 25 ++++++++++++------- .../dart/libraries/dio/pubspec.mustache | 3 +++ .../petstore_client_lib_fake/README.md | 24 ++++++++++-------- .../petstore_client_lib_fake/pubspec.yaml | 3 +++ .../dart-dio/petstore_client_lib/pubspec.yaml | 20 +++++++++------ .../petstore_client_lib_fake/pubspec.yaml | 20 +++++++++------ 7 files changed, 76 insertions(+), 41 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/dart-dio/pubspec.mustache b/modules/openapi-generator/src/main/resources/dart-dio/pubspec.mustache index 1d1a328affe5..025230b7357f 100644 --- a/modules/openapi-generator/src/main/resources/dart-dio/pubspec.mustache +++ b/modules/openapi-generator/src/main/resources/dart-dio/pubspec.mustache @@ -1,16 +1,22 @@ name: {{pubName}} version: {{pubVersion}} description: {{pubDescription}} +homepage: {{pubHomepage}} +authors: + - '{{{pubAuthor}}} <{{{pubAuthorEmail}}}>' + environment: - sdk: '>=2.7.0 <3.0.0' + sdk: '>=2.7.0 <3.0.0' + dependencies: - dio: '^3.0.9' - built_value: '>=7.1.0 <8.0.0' - built_collection: '>=4.3.2 <5.0.0' + dio: '^3.0.9' + built_value: '>=7.1.0 <8.0.0' + built_collection: '>=4.3.2 <5.0.0' {{#timeMachine}} - time_machine: '^0.9.12' + time_machine: '^0.9.12' {{/timeMachine}} + dev_dependencies: - built_value_generator: '>=7.1.0 <8.0.0' - build_runner: any - test: '>=1.3.0 <1.16.0' + built_value_generator: '>=7.1.0 <8.0.0' + build_runner: any + test: '>=1.3.0 <1.16.0' diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/README.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/README.mustache index 454bd6ccdb97..3ef0679e726d 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/README.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/README.mustache @@ -21,25 +21,32 @@ For more information, please visit [{{{infoUrl}}}]({{{infoUrl}}}) * Dart 2.12.0 or later OR Flutter 1.26.0 or later * Dio 4.0.0+ +{{#useDateLibTimeMachine}} * timemachine option currently **DOES NOT** support sound null-safety and may not work +{{/useDateLibTimeMachine}} ## Installation & Usage +### pub.dev +To use the package from [pub.dev](https://pub.dev), please include the following in pubspec.yaml +```yaml +dependencies: + {{pubName}}: {{pubVersion}} +``` + ### Github If this Dart package is published to Github, please include the following in pubspec.yaml -``` -name: {{pubName}} -version: {{pubVersion}} -description: {{pubDescription}} +```yaml dependencies: {{pubName}}: - git: https://github.com/{{gitUserId}}/{{gitRepoId}}.git - version: 'any' + git: + url: https://github.com/{{gitUserId}}/{{gitRepoId}}.git + #ref: main ``` -### Local -To use the package in your local drive, please include the following in pubspec.yaml -``` +### Local development +To use the package from your local drive, please include the following in pubspec.yaml +```yaml dependencies: {{pubName}}: path: /path/to/{{pubName}} diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache index 204b4e33bae7..b2eef72f91e5 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache @@ -1,6 +1,9 @@ name: {{pubName}} version: {{pubVersion}} description: {{pubDescription}} +homepage: {{pubHomepage}} +authors: + - '{{{pubAuthor}}} <{{{pubAuthorEmail}}}>' environment: sdk: '>=2.12.0 <3.0.0' diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md index 8c94c359ed77..f49dd295950e 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md @@ -10,25 +10,29 @@ This Dart package is automatically generated by the [OpenAPI Generator](https:// * Dart 2.12.0 or later OR Flutter 1.26.0 or later * Dio 4.0.0+ -* timemachine option currently **DOES NOT** support sound null-safety and may not work ## Installation & Usage +### pub.dev +To use the package from [pub.dev](https://pub.dev), please include the following in pubspec.yaml +```yaml +dependencies: + openapi: 1.0.0 +``` + ### Github If this Dart package is published to Github, please include the following in pubspec.yaml -``` -name: openapi -version: 1.0.0 -description: OpenAPI API client +```yaml dependencies: openapi: - git: https://github.com/GIT_USER_ID/GIT_REPO_ID.git - version: 'any' + git: + url: https://github.com/GIT_USER_ID/GIT_REPO_ID.git + #ref: main ``` -### Local -To use the package in your local drive, please include the following in pubspec.yaml -``` +### Local development +To use the package from your local drive, please include the following in pubspec.yaml +```yaml dependencies: openapi: path: /path/to/openapi diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pubspec.yaml b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pubspec.yaml index 71d34529fb4c..4a109ee28d3a 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pubspec.yaml @@ -1,6 +1,9 @@ name: openapi version: 1.0.0 description: OpenAPI API client +homepage: homepage +authors: + - 'Author ' environment: sdk: '>=2.12.0 <3.0.0' diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/pubspec.yaml b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/pubspec.yaml index 0db393df2b7c..3182395f5791 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/pubspec.yaml @@ -1,13 +1,19 @@ name: openapi version: 1.0.0 description: OpenAPI API client +homepage: homepage +authors: + - 'Author ' + environment: - sdk: '>=2.7.0 <3.0.0' + sdk: '>=2.7.0 <3.0.0' + dependencies: - dio: '^3.0.9' - built_value: '>=7.1.0 <8.0.0' - built_collection: '>=4.3.2 <5.0.0' + dio: '^3.0.9' + built_value: '>=7.1.0 <8.0.0' + built_collection: '>=4.3.2 <5.0.0' + dev_dependencies: - built_value_generator: '>=7.1.0 <8.0.0' - build_runner: any - test: '>=1.3.0 <1.16.0' + built_value_generator: '>=7.1.0 <8.0.0' + build_runner: any + test: '>=1.3.0 <1.16.0' diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/pubspec.yaml b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/pubspec.yaml index 0db393df2b7c..3182395f5791 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/pubspec.yaml @@ -1,13 +1,19 @@ name: openapi version: 1.0.0 description: OpenAPI API client +homepage: homepage +authors: + - 'Author ' + environment: - sdk: '>=2.7.0 <3.0.0' + sdk: '>=2.7.0 <3.0.0' + dependencies: - dio: '^3.0.9' - built_value: '>=7.1.0 <8.0.0' - built_collection: '>=4.3.2 <5.0.0' + dio: '^3.0.9' + built_value: '>=7.1.0 <8.0.0' + built_collection: '>=4.3.2 <5.0.0' + dev_dependencies: - built_value_generator: '>=7.1.0 <8.0.0' - build_runner: any - test: '>=1.3.0 <1.16.0' + built_value_generator: '>=7.1.0 <8.0.0' + build_runner: any + test: '>=1.3.0 <1.16.0' From 7a1f7b2270eea7770ecffd49e2cdbd94f1cca0ae Mon Sep 17 00:00:00 2001 From: Eike Starkmann Date: Tue, 13 Apr 2021 08:57:50 +0200 Subject: [PATCH 009/186] Update model_variables.mustache (#7074) Recursive validate non primitive objects --- .../src/main/resources/php-symfony/model_variables.mustache | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/openapi-generator/src/main/resources/php-symfony/model_variables.mustache b/modules/openapi-generator/src/main/resources/php-symfony/model_variables.mustache index 3ef46d1c9b05..d79a5feb74ab 100644 --- a/modules/openapi-generator/src/main/resources/php-symfony/model_variables.mustache +++ b/modules/openapi-generator/src/main/resources/php-symfony/model_variables.mustache @@ -7,6 +7,9 @@ * @SerializedName("{{baseName}}") {{#required}} * @Assert\NotNull() + {{^isPrimitiveType}} + * @Assert\Valid() + {{/isPrimitiveType}} {{/required}} {{#isEnum}} {{#isContainer}} From b4ea00ed427fea9e2cc5b6395fb5f11e93a25c83 Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Tue, 13 Apr 2021 10:52:27 +0200 Subject: [PATCH 010/186] [dart][dart-dio] Add built_value date support w/o timemachine (#9180) * [dart][dart-dio] Add built_value date support w/o timemachine * Test improvements * Fix lists of dates not working --- .../languages/DartDioNextClientCodegen.java | 10 ++- .../resources/dart/libraries/dio/lib.mustache | 3 +- .../serialization/built_value/date.mustache | 69 +++++++++++++++++++ .../built_value/date_serializer.mustache | 28 ++++++++ ...stache => offset_date_serializer.mustache} | 2 +- .../built_value/serializers.mustache | 13 ++-- .../.openapi-generator/FILES | 2 + .../petstore_client_lib_fake/doc/FakeApi.md | 4 +- .../doc/FormatTest.md | 2 +- .../doc/NullableClass.md | 2 +- .../petstore_client_lib_fake/lib/openapi.dart | 1 + .../lib/src/api/fake_api.dart | 5 +- .../lib/src/date_serializer.dart | 31 +++++++++ .../lib/src/model/date.dart | 69 +++++++++++++++++++ .../lib/src/model/format_test.dart | 7 +- .../lib/src/model/nullable_class.dart | 7 +- .../lib/src/serializers.dart | 5 ++ .../test/fake_api_test.dart | 2 +- .../test/format_test_test.dart | 2 +- .../test/nullable_class_test.dart | 2 +- .../test/api/fake_api_test.dart | 4 +- .../test/model/date_serializer_test.dart | 22 ++++++ .../test/model/date_test.dart | 25 +++++++ 23 files changed, 292 insertions(+), 25 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/date.mustache create mode 100644 modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/date_serializer.mustache rename modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/{local_date_serializer.mustache => offset_date_serializer.mustache} (96%) create mode 100644 samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/date_serializer.dart create mode 100644 samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/date.dart create mode 100644 samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_serializer_test.dart create mode 100644 samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_test.dart diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java index ee1fbb9d261f..764c11464261 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java @@ -205,13 +205,19 @@ private void configureDateLibrary(String srcFolder) { imports.put("OffsetDate", "package:time_machine/time_machine.dart"); imports.put("OffsetDateTime", "package:time_machine/time_machine.dart"); if (SERIALIZATION_LIBRARY_BUILT_VALUE.equals(library)) { - supportingFiles.add(new SupportingFile("serialization/built_value/local_date_serializer.mustache", srcFolder, "local_date_serializer.dart")); + supportingFiles.add(new SupportingFile("serialization/built_value/offset_date_serializer.mustache", srcFolder, "local_date_serializer.dart")); } break; default: case DATE_LIBRARY_CORE: - // this option uses the dart core classes additionalProperties.put("useDateLibCore", "true"); + if (SERIALIZATION_LIBRARY_BUILT_VALUE.equals(library)) { + typeMapping.put("date", "Date"); + typeMapping.put("Date", "Date"); + importMapping.put("Date", "package:" + pubName + "/src/model/date.dart"); + supportingFiles.add(new SupportingFile("serialization/built_value/date.mustache", srcFolder + File.separator + "model", "date.dart")); + supportingFiles.add(new SupportingFile("serialization/built_value/date_serializer.mustache", srcFolder, "date_serializer.dart")); + } break; } } diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/lib.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/lib.mustache index ff5436626536..32f6a54b1a64 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/lib.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/lib.mustache @@ -3,7 +3,8 @@ export 'package:{{pubName}}/src/api.dart'; export 'package:{{pubName}}/src/auth/api_key_auth.dart'; export 'package:{{pubName}}/src/auth/basic_auth.dart'; export 'package:{{pubName}}/src/auth/oauth.dart'; -{{#useBuiltValue}}export 'package:{{pubName}}/src/serializers.dart';{{/useBuiltValue}} +{{#useBuiltValue}}export 'package:{{pubName}}/src/serializers.dart'; +{{#useDateLibCore}}export 'package:{{pubName}}/src/model/date.dart';{{/useDateLibCore}}{{/useBuiltValue}} {{#apiInfo}}{{#apis}}export 'package:{{pubName}}/src/api/{{classFilename}}.dart'; {{/apis}}{{/apiInfo}} diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/date.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/date.mustache new file mode 100644 index 000000000000..c3a87eae259c --- /dev/null +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/date.mustache @@ -0,0 +1,69 @@ +/// A gregorian calendar date generated by +/// OpenAPI generator to differentiate +/// between [DateTime] and [Date] formats. +class Date implements Comparable { + final int year; + + /// January is 1. + final int month; + + /// First day is 1. + final int day; + + Date(this.year, this.month, this.day); + + /// The current date + static Date now({bool utc = false}) { + var now = DateTime.now(); + if (utc) { + now = now.toUtc(); + } + return now.toDate(); + } + + /// Convert to a [DateTime]. + DateTime toDateTime({bool utc = false}) { + if (utc) { + DateTime.utc(year, month, day); + } + return DateTime(year, month, day); + } + + @override + int compareTo(Date other) { + int d = year.compareTo(other.year); + if (d != 0) { + return d; + } + d = month.compareTo(other.month); + if (d != 0) { + return d; + } + return day.compareTo(other.day); + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is Date && + runtimeType == other.runtimeType && + year == other.year && + month == other.month && + day == other.day; + + @override + int get hashCode => year.hashCode ^ month.hashCode ^ day.hashCode; + + @override + String toString() { + final yyyy = year.toString(); + final mm = month.toString().padLeft(2, '0'); + final dd = day.toString().padLeft(2, '0'); + + return '$yyyy-$mm-$dd'; + } +} + +extension DateTimeToDate on DateTime { + Date toDate() => Date(year, month, day); +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/date_serializer.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/date_serializer.mustache new file mode 100644 index 000000000000..b5f0ed32c22f --- /dev/null +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/date_serializer.mustache @@ -0,0 +1,28 @@ +{{>header}} +import 'package:built_collection/built_collection.dart'; +import 'package:built_value/serializer.dart'; +import 'package:{{pubName}}/src/model/date.dart'; + +class DateSerializer implements PrimitiveSerializer { + + const DateSerializer(); + + @override + Iterable get types => BuiltList.of([Date]); + + @override + String get wireName => 'Date'; + + @override + Date deserialize(Serializers serializers, Object serialized, + {FullType specifiedType = FullType.unspecified}) { + final parsed = DateTime.parse(serialized as String); + return Date(parsed.year, parsed.month, parsed.day); + } + + @override + Object serialize(Serializers serializers, Date date, + {FullType specifiedType = FullType.unspecified}) { + return date.toString(); + } +} diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/local_date_serializer.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/offset_date_serializer.mustache similarity index 96% rename from modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/local_date_serializer.mustache rename to modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/offset_date_serializer.mustache index 68cfd5e31c68..2698caf0f493 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/local_date_serializer.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/offset_date_serializer.mustache @@ -8,7 +8,7 @@ class OffsetDateSerializer implements PrimitiveSerializer { const OffsetDateSerializer(); @override - Iterable get types => BuiltList([OffsetDate]); + Iterable get types => BuiltList.of([OffsetDate]); @override String get wireName => 'OffsetDate'; diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serializers.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serializers.mustache index afca0bc138f9..10925bc11120 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serializers.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serializers.mustache @@ -1,11 +1,15 @@ {{>header}} +// ignore_for_file: unused_import + import 'package:built_collection/built_collection.dart'; import 'package:built_value/json_object.dart'; import 'package:built_value/serializer.dart'; import 'package:built_value/standard_json_plugin.dart'; -{{#useDateLibCore}}import 'package:built_value/iso_8601_date_time_serializer.dart';{{/useDateLibCore}} +{{#useDateLibCore}}import 'package:built_value/iso_8601_date_time_serializer.dart'; +import 'package:{{pubName}}/src/date_serializer.dart'; +import 'package:{{pubName}}/src/model/date.dart';{{/useDateLibCore}} {{#useDateLibTimeMachine}}import 'package:time_machine/time_machine.dart'; -import 'package:{{pubName}}/src/local_date_serializer.dart';{{/useDateLibTimeMachine}} +import 'package:{{pubName}}/src/offset_date_serializer.dart';{{/useDateLibTimeMachine}} {{#models}}{{#model}}import 'package:{{pubName}}/src/model/{{classFilename}}.dart'; {{/model}}{{/models}} part 'serializers.g.dart'; @@ -25,8 +29,9 @@ Serializers serializers = (_$serializers.toBuilder(){{#apiInfo}}{{#apis}}{{#seri {{/isMap}} ){{/serializers}}{{/apis}}{{/apiInfo}}{{#useDateLibTimeMachine}} ..add(const OffsetDateSerializer()) - ..add(const OffsetDateTimeSerializer()){{/useDateLibTimeMachine}} - ..add(Iso8601DateTimeSerializer())) + ..add(const OffsetDateTimeSerializer()){{/useDateLibTimeMachine}}{{#useDateLibCore}} + ..add(const DateSerializer()) + ..add(Iso8601DateTimeSerializer())){{/useDateLibCore}} .build(); Serializers standardSerializers = diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/FILES b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/FILES index eb412a44146e..73e49578702f 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/FILES +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/FILES @@ -66,6 +66,7 @@ lib/src/auth/api_key_auth.dart lib/src/auth/auth.dart lib/src/auth/basic_auth.dart lib/src/auth/oauth.dart +lib/src/date_serializer.dart lib/src/model/additional_properties_class.dart lib/src/model/animal.dart lib/src/model/api_response.dart @@ -77,6 +78,7 @@ lib/src/model/cat.dart lib/src/model/cat_all_of.dart lib/src/model/category.dart lib/src/model/class_model.dart +lib/src/model/date.dart lib/src/model/dog.dart lib/src/model/dog_all_of.dart lib/src/model/enum_arrays.dart diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md index 41ab4e4fc126..c01cc40f97d8 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md @@ -478,7 +478,7 @@ var int64 = 789; // int | None var float = 3.4; // double | None var string = string_example; // String | None var binary = BINARY_DATA_HERE; // Uint8List | None -var date = 2013-10-20; // DateTime | None +var date = 2013-10-20; // Date | None var dateTime = 2013-10-20T19:20:30+01:00; // DateTime | None var password = password_example; // String | None var callback = callback_example; // String | None @@ -504,7 +504,7 @@ Name | Type | Description | Notes **float** | **double**| None | [optional] **string** | **String**| None | [optional] **binary** | **Uint8List**| None | [optional] - **date** | **DateTime**| None | [optional] + **date** | **Date**| None | [optional] **dateTime** | **DateTime**| None | [optional] **password** | **String**| None | [optional] **callback** | **String**| None | [optional] diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FormatTest.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FormatTest.md index 7cac4e3b6be1..f811264ca2ba 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FormatTest.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FormatTest.md @@ -18,7 +18,7 @@ Name | Type | Description | Notes **string** | **String** | | [optional] **byte** | **String** | | **binary** | [**Uint8List**](Uint8List.md) | | [optional] -**date** | [**DateTime**](DateTime.md) | | +**date** | [**Date**](Date.md) | | **dateTime** | [**DateTime**](DateTime.md) | | [optional] **uuid** | **String** | | [optional] **password** | **String** | | diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/NullableClass.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/NullableClass.md index a9694f846c55..0241e3eb15e8 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/NullableClass.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/NullableClass.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **numberProp** | **num** | | [optional] **booleanProp** | **bool** | | [optional] **stringProp** | **String** | | [optional] -**dateProp** | [**DateTime**](DateTime.md) | | [optional] +**dateProp** | [**Date**](Date.md) | | [optional] **datetimeProp** | [**DateTime**](DateTime.md) | | [optional] **arrayNullableProp** | [**BuiltList**](JsonObject.md) | | [optional] **arrayAndItemsNullableProp** | [**BuiltList**](JsonObject.md) | | [optional] diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/openapi.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/openapi.dart index 9234c943ab63..e2ea4292ffed 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/openapi.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/openapi.dart @@ -7,6 +7,7 @@ export 'package:openapi/src/auth/api_key_auth.dart'; export 'package:openapi/src/auth/basic_auth.dart'; export 'package:openapi/src/auth/oauth.dart'; export 'package:openapi/src/serializers.dart'; +export 'package:openapi/src/model/date.dart'; export 'package:openapi/src/api/another_fake_api.dart'; export 'package:openapi/src/api/default_api.dart'; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart index 3a9501cca3f8..fed890a78c1c 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart @@ -10,6 +10,7 @@ import 'package:dio/dio.dart'; import 'dart:typed_data'; import 'package:built_collection/built_collection.dart'; import 'package:openapi/src/api_util.dart'; +import 'package:openapi/src/model/date.dart'; import 'package:openapi/src/model/file_schema_test_class.dart'; import 'package:openapi/src/model/health_check_result.dart'; import 'package:openapi/src/model/model_client.dart'; @@ -826,7 +827,7 @@ class FakeApi { double? float, String? string, Uint8List? binary, - DateTime? date, + Date? date, DateTime? dateTime, String? password, String? callback, @@ -875,7 +876,7 @@ class FakeApi { r'pattern_without_delimiter': encodeFormParameter(_serializers, patternWithoutDelimiter, const FullType(String)), r'byte': encodeFormParameter(_serializers, byte, const FullType(String)), if (binary != null) r'binary': MultipartFile.fromBytes(binary, filename: r'binary'), - if (date != null) r'date': encodeFormParameter(_serializers, date, const FullType(DateTime)), + if (date != null) r'date': encodeFormParameter(_serializers, date, const FullType(Date)), if (dateTime != null) r'dateTime': encodeFormParameter(_serializers, dateTime, const FullType(DateTime)), if (password != null) r'password': encodeFormParameter(_serializers, password, const FullType(String)), if (callback != null) r'callback': encodeFormParameter(_serializers, callback, const FullType(String)), diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/date_serializer.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/date_serializer.dart new file mode 100644 index 000000000000..db3c5c437db1 --- /dev/null +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/date_serializer.dart @@ -0,0 +1,31 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// + +import 'package:built_collection/built_collection.dart'; +import 'package:built_value/serializer.dart'; +import 'package:openapi/src/model/date.dart'; + +class DateSerializer implements PrimitiveSerializer { + + const DateSerializer(); + + @override + Iterable get types => BuiltList.of([Date]); + + @override + String get wireName => 'Date'; + + @override + Date deserialize(Serializers serializers, Object serialized, + {FullType specifiedType = FullType.unspecified}) { + final parsed = DateTime.parse(serialized as String); + return Date(parsed.year, parsed.month, parsed.day); + } + + @override + Object serialize(Serializers serializers, Date date, + {FullType specifiedType = FullType.unspecified}) { + return date.toString(); + } +} diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/date.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/date.dart new file mode 100644 index 000000000000..c3a87eae259c --- /dev/null +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/date.dart @@ -0,0 +1,69 @@ +/// A gregorian calendar date generated by +/// OpenAPI generator to differentiate +/// between [DateTime] and [Date] formats. +class Date implements Comparable { + final int year; + + /// January is 1. + final int month; + + /// First day is 1. + final int day; + + Date(this.year, this.month, this.day); + + /// The current date + static Date now({bool utc = false}) { + var now = DateTime.now(); + if (utc) { + now = now.toUtc(); + } + return now.toDate(); + } + + /// Convert to a [DateTime]. + DateTime toDateTime({bool utc = false}) { + if (utc) { + DateTime.utc(year, month, day); + } + return DateTime(year, month, day); + } + + @override + int compareTo(Date other) { + int d = year.compareTo(other.year); + if (d != 0) { + return d; + } + d = month.compareTo(other.month); + if (d != 0) { + return d; + } + return day.compareTo(other.day); + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is Date && + runtimeType == other.runtimeType && + year == other.year && + month == other.month && + day == other.day; + + @override + int get hashCode => year.hashCode ^ month.hashCode ^ day.hashCode; + + @override + String toString() { + final yyyy = year.toString(); + final mm = month.toString().padLeft(2, '0'); + final dd = day.toString().padLeft(2, '0'); + + return '$yyyy-$mm-$dd'; + } +} + +extension DateTimeToDate on DateTime { + Date toDate() => Date(year, month, day); +} \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/format_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/format_test.dart index 60879a1479ad..745e9b5c63bc 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/format_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/format_test.dart @@ -3,6 +3,7 @@ // import 'dart:typed_data'; +import 'package:openapi/src/model/date.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; @@ -42,7 +43,7 @@ abstract class FormatTest implements Built { Uint8List? get binary; @BuiltValueField(wireName: r'date') - DateTime get date; + Date get date; @BuiltValueField(wireName: r'dateTime') DateTime? get dateTime; @@ -141,7 +142,7 @@ class _$FormatTestSerializer implements StructuredSerializer { result ..add(r'date') ..add(serializers.serialize(object.date, - specifiedType: const FullType(DateTime))); + specifiedType: const FullType(Date))); if (object.dateTime != null) { result ..add(r'dateTime') @@ -226,7 +227,7 @@ class _$FormatTestSerializer implements StructuredSerializer { break; case r'date': result.date = serializers.deserialize(value, - specifiedType: const FullType(DateTime)) as DateTime; + specifiedType: const FullType(Date)) as Date; break; case r'dateTime': result.dateTime = serializers.deserialize(value, diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/nullable_class.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/nullable_class.dart index d244f5106819..13fa27880f67 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/nullable_class.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/nullable_class.dart @@ -3,6 +3,7 @@ // import 'package:built_collection/built_collection.dart'; +import 'package:openapi/src/model/date.dart'; import 'package:built_value/json_object.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; @@ -25,7 +26,7 @@ abstract class NullableClass implements Built { result ..add(r'date_prop') ..add(serializers.serialize(object.dateProp, - specifiedType: const FullType(DateTime))); + specifiedType: const FullType(Date))); } if (object.datetimeProp != null) { result @@ -173,7 +174,7 @@ class _$NullableClassSerializer implements StructuredSerializer { break; case r'date_prop': result.dateProp = serializers.deserialize(value, - specifiedType: const FullType(DateTime)) as DateTime; + specifiedType: const FullType(Date)) as Date; break; case r'datetime_prop': result.datetimeProp = serializers.deserialize(value, diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/serializers.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/serializers.dart index e922e1d467c4..ea2264185dab 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/serializers.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/serializers.dart @@ -2,11 +2,15 @@ // AUTO-GENERATED FILE, DO NOT MODIFY! // +// ignore_for_file: unused_import + import 'package:built_collection/built_collection.dart'; import 'package:built_value/json_object.dart'; import 'package:built_value/serializer.dart'; import 'package:built_value/standard_json_plugin.dart'; import 'package:built_value/iso_8601_date_time_serializer.dart'; +import 'package:openapi/src/date_serializer.dart'; +import 'package:openapi/src/model/date.dart'; import 'package:openapi/src/model/additional_properties_class.dart'; import 'package:openapi/src/model/animal.dart'; @@ -122,6 +126,7 @@ Serializers serializers = (_$serializers.toBuilder() const FullType(BuiltList, [FullType(User)]), () => ListBuilder(), ) + ..add(const DateSerializer()) ..add(Iso8601DateTimeSerializer())) .build(); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/fake_api_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/fake_api_test.dart index 961e7a5cec73..7dca853fa9d6 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/fake_api_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/fake_api_test.dart @@ -81,7 +81,7 @@ void main() { // // Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 // - //Future testEndpointParameters(num number, double double_, String patternWithoutDelimiter, String byte, { int integer, int int32, int int64, double float, String string, Uint8List binary, DateTime date, DateTime dateTime, String password, String callback }) async + //Future testEndpointParameters(num number, double double_, String patternWithoutDelimiter, String byte, { int integer, int int32, int int64, double float, String string, Uint8List binary, Date date, DateTime dateTime, String password, String callback }) async test('test testEndpointParameters', () async { // TODO }); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/format_test_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/format_test_test.dart index 78f599fb051b..558c3aa4b659 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/format_test_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/format_test_test.dart @@ -57,7 +57,7 @@ void main() { // TODO }); - // DateTime date + // Date date test('to test the property `date`', () async { // TODO }); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/nullable_class_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/nullable_class_test.dart index a174a90621d4..1a6767dbb2ab 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/nullable_class_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/test/nullable_class_test.dart @@ -27,7 +27,7 @@ void main() { // TODO }); - // DateTime dateProp + // Date dateProp test('to test the property `dateProp`', () async { // TODO }); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/fake_api_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/fake_api_test.dart index 5448f90adce8..e1a40f57fe50 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/fake_api_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/fake_api_test.dart @@ -34,7 +34,7 @@ void main() { 'integer': '45', 'int32': '2147483647', 'int64': '9223372036854775807', - 'date': '2020-08-11T00:00:00.000Z', + 'date': '2020-08-11', 'dateTime': '2020-08-11T12:30:55.123Z', 'binary': "Instance of 'MultipartFile'", }, @@ -53,7 +53,7 @@ void main() { integer: 45, int32: 2147483647, int64: 9223372036854775807, - date: DateTime.utc(2020, 8, 11), + date: Date(2020, 8, 11), dateTime: DateTime.utc(2020, 8, 11, 12, 30, 55, 123), binary: Uint8List.fromList([0, 1, 2, 3, 4, 5]), ); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_serializer_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_serializer_test.dart new file mode 100644 index 000000000000..acae38e3d904 --- /dev/null +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_serializer_test.dart @@ -0,0 +1,22 @@ +import 'package:openapi/openapi.dart'; +import 'package:openapi/src/date_serializer.dart'; +import 'package:test/test.dart'; + +void main() { + final date1 = Date(1999, 3, 25); + const serializer = DateSerializer(); + + group(DateSerializer, () { + test('serialize', () { + expect(serializer.serialize(serializers, date1), '1999-03-25'); + }); + + test('deserialize date', () { + expect(serializer.deserialize(serializers, '1999-03-25'), date1); + }); + + test('deserialize ISO', () { + expect(serializer.deserialize(serializers, '1999-03-25T12:30:55.123Z'), date1); + }); + }); +} diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_test.dart new file mode 100644 index 000000000000..34675bd672e1 --- /dev/null +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_test.dart @@ -0,0 +1,25 @@ +import 'package:openapi/openapi.dart'; +import 'package:test/test.dart'; + +void main() { + final date1 = Date(1999, 3, 25); + final date2 = Date(1999, 1, 1); + + group(Date, () { + test('toString', () { + expect(date1.toString(), '1999-03-25'); + }); + + test('compare >', () { + expect(date1.compareTo(date2), 1); + }); + + test('compare <', () { + expect(date2.compareTo(date1), -1); + }); + + test('compare =', () { + expect(date1.compareTo(date1), 0); + }); + }); +} From 1b63822501575771d58a9f99b4588b2b7869e53a Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 14 Apr 2021 10:14:59 +0800 Subject: [PATCH 011/186] camelize name in nim (#9255) --- .../codegen/languages/NimClientCodegen.java | 24 +++++++++++++++++-- .../petstore/nim/petstore/apis/api_pet.nim | 4 ++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java index 02e4f1b701c2..ff07db2ede8f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NimClientCodegen.java @@ -31,6 +31,8 @@ import java.io.File; import java.util.*; +import static org.openapitools.codegen.utils.StringUtils.camelize; + public class NimClientCodegen extends DefaultCodegen implements CodegenConfig { final Logger LOGGER = LoggerFactory.getLogger(NimClientCodegen.class); @@ -297,14 +299,32 @@ public String getTypeDeclaration(Schema p) { @Override public String toVarName(String name) { - if (isReservedWord(name)) { - name = escapeReservedWord(name); + // sanitize name + name = sanitizeName(name, "\\W-[\\$]"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. + + if ("_".equals(name)) { + name = "_u"; } + // numbers are not allowed at the beginning if (name.matches("^\\d.*")) { name = "`" + name + "`"; } + // if it's all uppper case, do nothing + if (name.matches("^[A-Z0-9_]*$")) { + return name; + } + + // camelize (lower first character) the variable name + // pet_id => petId + name = camelize(name, true); + + // for reserved word or word starting with number, append _ + if (isReservedWord(name)) { + name = escapeReservedWord(name); + } + return name; } diff --git a/samples/client/petstore/nim/petstore/apis/api_pet.nim b/samples/client/petstore/nim/petstore/apis/api_pet.nim index 9858c523647e..3644e392340a 100644 --- a/samples/client/petstore/nim/petstore/apis/api_pet.nim +++ b/samples/client/petstore/nim/petstore/apis/api_pet.nim @@ -45,9 +45,9 @@ proc addPet*(httpClient: HttpClient, body: Pet): Response = httpClient.post(basepath & "/pet", $(%body)) -proc deletePet*(httpClient: HttpClient, petId: int64, api_key: string): Response = +proc deletePet*(httpClient: HttpClient, petId: int64, apiKey: string): Response = ## Deletes a pet - httpClient.headers["api_key"] = api_key + httpClient.headers["api_key"] = apiKey httpClient.delete(basepath & fmt"/pet/{petId}") From c285f393b07a1c6644b65ed5626872b7d384a93a Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 14 Apr 2021 10:36:48 +0800 Subject: [PATCH 012/186] switch to oas3 spec for php-symfony samples (#9248) --- .../php-symfony-SymfonyBundle-php.yaml | 2 +- .../SymfonyBundle-php/Api/PetApiInterface.php | 21 +++-- .../Api/StoreApiInterface.php | 4 +- .../Api/UserApiInterface.php | 25 +++-- .../Controller/PetController.php | 50 +++++++--- .../Controller/StoreController.php | 10 +- .../Controller/UserController.php | 71 ++++++++++---- .../SymfonyBundle-php/Model/Category.php | 1 + .../php-symfony/SymfonyBundle-php/README.md | 2 +- .../Resources/docs/Api/PetApiInterface.md | 20 ++-- .../Resources/docs/Api/StoreApiInterface.md | 8 +- .../Resources/docs/Api/UserApiInterface.md | 92 ++++++++++++++----- 12 files changed, 215 insertions(+), 91 deletions(-) diff --git a/bin/configs/php-symfony-SymfonyBundle-php.yaml b/bin/configs/php-symfony-SymfonyBundle-php.yaml index c77a71f14b7d..f7c6218a50fe 100644 --- a/bin/configs/php-symfony-SymfonyBundle-php.yaml +++ b/bin/configs/php-symfony-SymfonyBundle-php.yaml @@ -1,4 +1,4 @@ generatorName: php-symfony outputDir: samples/server/petstore/php-symfony/SymfonyBundle-php -inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml +inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml templateDir: modules/openapi-generator/src/main/resources/php-symfony diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/PetApiInterface.php b/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/PetApiInterface.php index 0cf1ef82a85d..4958426e7c8f 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/PetApiInterface.php +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/PetApiInterface.php @@ -52,6 +52,15 @@ interface PetApiInterface */ public function setpetstore_auth($value); + /** + * Sets authentication method petstore_auth + * + * @param string $value Value of the petstore_auth authentication method. + * + * @return void + */ + public function setpetstore_auth($value); + /** * Sets authentication method api_key * @@ -66,14 +75,14 @@ public function setapi_key($value); * * Add a new pet to the store * - * @param OpenAPI\Server\Model\Pet $body Pet object that needs to be added to the store (required) + * @param OpenAPI\Server\Model\Pet $pet Pet object that needs to be added to the store (required) * @param integer $responseCode The HTTP response code to return * @param array $responseHeaders Additional HTTP headers to return with the response () * - * @return void + * @return OpenAPI\Server\Model\Pet * */ - public function addPet(Pet $body, &$responseCode, array &$responseHeaders); + public function addPet(Pet $pet, &$responseCode, array &$responseHeaders); /** * Operation deletePet @@ -137,14 +146,14 @@ public function getPetById($petId, &$responseCode, array &$responseHeaders); * * Update an existing pet * - * @param OpenAPI\Server\Model\Pet $body Pet object that needs to be added to the store (required) + * @param OpenAPI\Server\Model\Pet $pet Pet object that needs to be added to the store (required) * @param integer $responseCode The HTTP response code to return * @param array $responseHeaders Additional HTTP headers to return with the response () * - * @return void + * @return OpenAPI\Server\Model\Pet * */ - public function updatePet(Pet $body, &$responseCode, array &$responseHeaders); + public function updatePet(Pet $pet, &$responseCode, array &$responseHeaders); /** * Operation updatePetWithForm diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/StoreApiInterface.php b/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/StoreApiInterface.php index 3a7790362ab1..cf9093ecf13c 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/StoreApiInterface.php +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/StoreApiInterface.php @@ -97,12 +97,12 @@ public function getOrderById($orderId, &$responseCode, array &$responseHeaders); * * Place an order for a pet * - * @param OpenAPI\Server\Model\Order $body order placed for purchasing the pet (required) + * @param OpenAPI\Server\Model\Order $order order placed for purchasing the pet (required) * @param integer $responseCode The HTTP response code to return * @param array $responseHeaders Additional HTTP headers to return with the response () * * @return OpenAPI\Server\Model\Order * */ - public function placeOrder(Order $body, &$responseCode, array &$responseHeaders); + public function placeOrder(Order $order, &$responseCode, array &$responseHeaders); } diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/UserApiInterface.php b/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/UserApiInterface.php index 960c1b6f8cc9..71a5cfac6699 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/UserApiInterface.php +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/Api/UserApiInterface.php @@ -42,47 +42,56 @@ interface UserApiInterface { + /** + * Sets authentication method api_key + * + * @param string $value Value of the api_key authentication method. + * + * @return void + */ + public function setapi_key($value); + /** * Operation createUser * * Create user * - * @param OpenAPI\Server\Model\User $body Created user object (required) + * @param OpenAPI\Server\Model\User $user Created user object (required) * @param integer $responseCode The HTTP response code to return * @param array $responseHeaders Additional HTTP headers to return with the response () * * @return void * */ - public function createUser(User $body, &$responseCode, array &$responseHeaders); + public function createUser(User $user, &$responseCode, array &$responseHeaders); /** * Operation createUsersWithArrayInput * * Creates list of users with given input array * - * @param OpenAPI\Server\Model\User[] $body List of user object (required) + * @param OpenAPI\Server\Model\User[] $user List of user object (required) * @param integer $responseCode The HTTP response code to return * @param array $responseHeaders Additional HTTP headers to return with the response () * * @return void * */ - public function createUsersWithArrayInput(array $body, &$responseCode, array &$responseHeaders); + public function createUsersWithArrayInput(array $user, &$responseCode, array &$responseHeaders); /** * Operation createUsersWithListInput * * Creates list of users with given input array * - * @param OpenAPI\Server\Model\User[] $body List of user object (required) + * @param OpenAPI\Server\Model\User[] $user List of user object (required) * @param integer $responseCode The HTTP response code to return * @param array $responseHeaders Additional HTTP headers to return with the response () * * @return void * */ - public function createUsersWithListInput(array $body, &$responseCode, array &$responseHeaders); + public function createUsersWithListInput(array $user, &$responseCode, array &$responseHeaders); /** * Operation deleteUser @@ -146,12 +155,12 @@ public function logoutUser(&$responseCode, array &$responseHeaders); * Updated user * * @param string $username name that need to be deleted (required) - * @param OpenAPI\Server\Model\User $body Updated user object (required) + * @param OpenAPI\Server\Model\User $user Updated user object (required) * @param integer $responseCode The HTTP response code to return * @param array $responseHeaders Additional HTTP headers to return with the response () * * @return void * */ - public function updateUser($username, User $body, &$responseCode, array &$responseHeaders); + public function updateUser($username, User $user, &$responseCode, array &$responseHeaders); } diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/PetController.php b/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/PetController.php index ca07f62678d6..a20c8b98a2ba 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/PetController.php +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/PetController.php @@ -67,20 +67,29 @@ public function addPetAction(Request $request) return new Response('', 415); } + // Figure out what data format to return to the client + $produces = ['application/xml', 'application/json']; + // Figure out what the client accepts + $clientAccepts = $request->headers->has('Accept')?$request->headers->get('Accept'):'*/*'; + $responseFormat = $this->getOutputFormat($clientAccepts, $produces); + if ($responseFormat === null) { + return new Response('', 406); + } + // Handle authentication // Authentication 'petstore_auth' required // Oauth required $securitypetstore_auth = $request->headers->get('authorization'); // Read out all input parameter values into variables - $body = $request->getContent(); + $pet = $request->getContent(); // Use the default value if no value was provided // Deserialize the input values that needs it try { $inputFormat = $request->getMimeType($request->getContentType()); - $body = $this->deserialize($body, 'OpenAPI\Server\Model\Pet', $inputFormat); + $pet = $this->deserialize($pet, 'OpenAPI\Server\Model\Pet', $inputFormat); } catch (SerializerRuntimeException $exception) { return $this->createBadRequestResponse($exception->getMessage()); } @@ -90,7 +99,7 @@ public function addPetAction(Request $request) $asserts[] = new Assert\NotNull(); $asserts[] = new Assert\Type("OpenAPI\Server\Model\Pet"); $asserts[] = new Assert\Valid(); - $response = $this->validate($body, $asserts); + $response = $this->validate($pet, $asserts); if ($response instanceof Response) { return $response; } @@ -103,26 +112,30 @@ public function addPetAction(Request $request) $handler->setpetstore_auth($securitypetstore_auth); // Make the call to the business logic - $responseCode = 204; + $responseCode = 200; $responseHeaders = []; - $result = $handler->addPet($body, $responseCode, $responseHeaders); + $result = $handler->addPet($pet, $responseCode, $responseHeaders); // Find default response message $message = ''; // Find a more specific message, if available switch ($responseCode) { + case 200: + $message = 'successful operation'; + break; case 405: $message = 'Invalid input'; break; } return new Response( - '', + $result !== null ?$this->serialize($result, $responseFormat):'', $responseCode, array_merge( $responseHeaders, [ + 'Content-Type' => $responseFormat, 'X-OpenAPI-Message' => $message ] ) @@ -498,20 +511,29 @@ public function updatePetAction(Request $request) return new Response('', 415); } + // Figure out what data format to return to the client + $produces = ['application/xml', 'application/json']; + // Figure out what the client accepts + $clientAccepts = $request->headers->has('Accept')?$request->headers->get('Accept'):'*/*'; + $responseFormat = $this->getOutputFormat($clientAccepts, $produces); + if ($responseFormat === null) { + return new Response('', 406); + } + // Handle authentication // Authentication 'petstore_auth' required // Oauth required $securitypetstore_auth = $request->headers->get('authorization'); // Read out all input parameter values into variables - $body = $request->getContent(); + $pet = $request->getContent(); // Use the default value if no value was provided // Deserialize the input values that needs it try { $inputFormat = $request->getMimeType($request->getContentType()); - $body = $this->deserialize($body, 'OpenAPI\Server\Model\Pet', $inputFormat); + $pet = $this->deserialize($pet, 'OpenAPI\Server\Model\Pet', $inputFormat); } catch (SerializerRuntimeException $exception) { return $this->createBadRequestResponse($exception->getMessage()); } @@ -521,7 +543,7 @@ public function updatePetAction(Request $request) $asserts[] = new Assert\NotNull(); $asserts[] = new Assert\Type("OpenAPI\Server\Model\Pet"); $asserts[] = new Assert\Valid(); - $response = $this->validate($body, $asserts); + $response = $this->validate($pet, $asserts); if ($response instanceof Response) { return $response; } @@ -534,15 +556,18 @@ public function updatePetAction(Request $request) $handler->setpetstore_auth($securitypetstore_auth); // Make the call to the business logic - $responseCode = 204; + $responseCode = 200; $responseHeaders = []; - $result = $handler->updatePet($body, $responseCode, $responseHeaders); + $result = $handler->updatePet($pet, $responseCode, $responseHeaders); // Find default response message $message = ''; // Find a more specific message, if available switch ($responseCode) { + case 200: + $message = 'successful operation'; + break; case 400: $message = 'Invalid ID supplied'; break; @@ -555,11 +580,12 @@ public function updatePetAction(Request $request) } return new Response( - '', + $result !== null ?$this->serialize($result, $responseFormat):'', $responseCode, array_merge( $responseHeaders, [ + 'Content-Type' => $responseFormat, 'X-OpenAPI-Message' => $message ] ) diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/StoreController.php b/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/StoreController.php index d6e9e33bb369..b0bc06eafa6a 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/StoreController.php +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/StoreController.php @@ -283,7 +283,7 @@ public function getOrderByIdAction(Request $request, $orderId) public function placeOrderAction(Request $request) { // Make sure that the client is providing something that we can consume - $consumes = []; + $consumes = ['application/json']; if (!static::isContentTypeAllowed($request, $consumes)) { // We can't consume the content that the client is sending us return new Response('', 415); @@ -301,14 +301,14 @@ public function placeOrderAction(Request $request) // Handle authentication // Read out all input parameter values into variables - $body = $request->getContent(); + $order = $request->getContent(); // Use the default value if no value was provided // Deserialize the input values that needs it try { $inputFormat = $request->getMimeType($request->getContentType()); - $body = $this->deserialize($body, 'OpenAPI\Server\Model\Order', $inputFormat); + $order = $this->deserialize($order, 'OpenAPI\Server\Model\Order', $inputFormat); } catch (SerializerRuntimeException $exception) { return $this->createBadRequestResponse($exception->getMessage()); } @@ -318,7 +318,7 @@ public function placeOrderAction(Request $request) $asserts[] = new Assert\NotNull(); $asserts[] = new Assert\Type("OpenAPI\Server\Model\Order"); $asserts[] = new Assert\Valid(); - $response = $this->validate($body, $asserts); + $response = $this->validate($order, $asserts); if ($response instanceof Response) { return $response; } @@ -331,7 +331,7 @@ public function placeOrderAction(Request $request) // Make the call to the business logic $responseCode = 200; $responseHeaders = []; - $result = $handler->placeOrder($body, $responseCode, $responseHeaders); + $result = $handler->placeOrder($order, $responseCode, $responseHeaders); // Find default response message $message = ''; diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/UserController.php b/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/UserController.php index 52af362ae347..b285ae5c23db 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/UserController.php +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/Controller/UserController.php @@ -60,23 +60,26 @@ class UserController extends Controller public function createUserAction(Request $request) { // Make sure that the client is providing something that we can consume - $consumes = []; + $consumes = ['application/json']; if (!static::isContentTypeAllowed($request, $consumes)) { // We can't consume the content that the client is sending us return new Response('', 415); } // Handle authentication + // Authentication 'api_key' required + // Set key with prefix in header + $securityapi_key = $request->headers->get('api_key'); // Read out all input parameter values into variables - $body = $request->getContent(); + $user = $request->getContent(); // Use the default value if no value was provided // Deserialize the input values that needs it try { $inputFormat = $request->getMimeType($request->getContentType()); - $body = $this->deserialize($body, 'OpenAPI\Server\Model\User', $inputFormat); + $user = $this->deserialize($user, 'OpenAPI\Server\Model\User', $inputFormat); } catch (SerializerRuntimeException $exception) { return $this->createBadRequestResponse($exception->getMessage()); } @@ -86,7 +89,7 @@ public function createUserAction(Request $request) $asserts[] = new Assert\NotNull(); $asserts[] = new Assert\Type("OpenAPI\Server\Model\User"); $asserts[] = new Assert\Valid(); - $response = $this->validate($body, $asserts); + $response = $this->validate($user, $asserts); if ($response instanceof Response) { return $response; } @@ -95,11 +98,13 @@ public function createUserAction(Request $request) try { $handler = $this->getApiHandler(); + // Set authentication method 'api_key' + $handler->setapi_key($securityapi_key); // Make the call to the business logic $responseCode = 204; $responseHeaders = []; - $result = $handler->createUser($body, $responseCode, $responseHeaders); + $result = $handler->createUser($user, $responseCode, $responseHeaders); // Find default response message $message = 'successful operation'; @@ -137,23 +142,26 @@ public function createUserAction(Request $request) public function createUsersWithArrayInputAction(Request $request) { // Make sure that the client is providing something that we can consume - $consumes = []; + $consumes = ['application/json']; if (!static::isContentTypeAllowed($request, $consumes)) { // We can't consume the content that the client is sending us return new Response('', 415); } // Handle authentication + // Authentication 'api_key' required + // Set key with prefix in header + $securityapi_key = $request->headers->get('api_key'); // Read out all input parameter values into variables - $body = $request->getContent(); + $user = $request->getContent(); // Use the default value if no value was provided // Deserialize the input values that needs it try { $inputFormat = $request->getMimeType($request->getContentType()); - $body = $this->deserialize($body, 'array', $inputFormat); + $user = $this->deserialize($user, 'array', $inputFormat); } catch (SerializerRuntimeException $exception) { return $this->createBadRequestResponse($exception->getMessage()); } @@ -165,7 +173,7 @@ public function createUsersWithArrayInputAction(Request $request) new Assert\Type("OpenAPI\Server\Model\User"), ]); $asserts[] = new Assert\Valid(); - $response = $this->validate($body, $asserts); + $response = $this->validate($user, $asserts); if ($response instanceof Response) { return $response; } @@ -174,11 +182,13 @@ public function createUsersWithArrayInputAction(Request $request) try { $handler = $this->getApiHandler(); + // Set authentication method 'api_key' + $handler->setapi_key($securityapi_key); // Make the call to the business logic $responseCode = 204; $responseHeaders = []; - $result = $handler->createUsersWithArrayInput($body, $responseCode, $responseHeaders); + $result = $handler->createUsersWithArrayInput($user, $responseCode, $responseHeaders); // Find default response message $message = 'successful operation'; @@ -216,23 +226,26 @@ public function createUsersWithArrayInputAction(Request $request) public function createUsersWithListInputAction(Request $request) { // Make sure that the client is providing something that we can consume - $consumes = []; + $consumes = ['application/json']; if (!static::isContentTypeAllowed($request, $consumes)) { // We can't consume the content that the client is sending us return new Response('', 415); } // Handle authentication + // Authentication 'api_key' required + // Set key with prefix in header + $securityapi_key = $request->headers->get('api_key'); // Read out all input parameter values into variables - $body = $request->getContent(); + $user = $request->getContent(); // Use the default value if no value was provided // Deserialize the input values that needs it try { $inputFormat = $request->getMimeType($request->getContentType()); - $body = $this->deserialize($body, 'array', $inputFormat); + $user = $this->deserialize($user, 'array', $inputFormat); } catch (SerializerRuntimeException $exception) { return $this->createBadRequestResponse($exception->getMessage()); } @@ -244,7 +257,7 @@ public function createUsersWithListInputAction(Request $request) new Assert\Type("OpenAPI\Server\Model\User"), ]); $asserts[] = new Assert\Valid(); - $response = $this->validate($body, $asserts); + $response = $this->validate($user, $asserts); if ($response instanceof Response) { return $response; } @@ -253,11 +266,13 @@ public function createUsersWithListInputAction(Request $request) try { $handler = $this->getApiHandler(); + // Set authentication method 'api_key' + $handler->setapi_key($securityapi_key); // Make the call to the business logic $responseCode = 204; $responseHeaders = []; - $result = $handler->createUsersWithListInput($body, $responseCode, $responseHeaders); + $result = $handler->createUsersWithListInput($user, $responseCode, $responseHeaders); // Find default response message $message = 'successful operation'; @@ -295,6 +310,9 @@ public function createUsersWithListInputAction(Request $request) public function deleteUserAction(Request $request, $username) { // Handle authentication + // Authentication 'api_key' required + // Set key with prefix in header + $securityapi_key = $request->headers->get('api_key'); // Read out all input parameter values into variables @@ -320,6 +338,8 @@ public function deleteUserAction(Request $request, $username) try { $handler = $this->getApiHandler(); + // Set authentication method 'api_key' + $handler->setapi_key($securityapi_key); // Make the call to the business logic $responseCode = 204; @@ -476,6 +496,7 @@ public function loginUserAction(Request $request) $asserts = []; $asserts[] = new Assert\NotNull(); $asserts[] = new Assert\Type("string"); + $asserts[] = new Assert\Regex("/^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$/"); $response = $this->validate($username, $asserts); if ($response instanceof Response) { return $response; @@ -538,6 +559,9 @@ public function loginUserAction(Request $request) public function logoutUserAction(Request $request) { // Handle authentication + // Authentication 'api_key' required + // Set key with prefix in header + $securityapi_key = $request->headers->get('api_key'); // Read out all input parameter values into variables @@ -549,6 +573,8 @@ public function logoutUserAction(Request $request) try { $handler = $this->getApiHandler(); + // Set authentication method 'api_key' + $handler->setapi_key($securityapi_key); // Make the call to the business logic $responseCode = 204; @@ -591,16 +617,19 @@ public function logoutUserAction(Request $request) public function updateUserAction(Request $request, $username) { // Make sure that the client is providing something that we can consume - $consumes = []; + $consumes = ['application/json']; if (!static::isContentTypeAllowed($request, $consumes)) { // We can't consume the content that the client is sending us return new Response('', 415); } // Handle authentication + // Authentication 'api_key' required + // Set key with prefix in header + $securityapi_key = $request->headers->get('api_key'); // Read out all input parameter values into variables - $body = $request->getContent(); + $user = $request->getContent(); // Use the default value if no value was provided @@ -608,7 +637,7 @@ public function updateUserAction(Request $request, $username) try { $username = $this->deserialize($username, 'string', 'string'); $inputFormat = $request->getMimeType($request->getContentType()); - $body = $this->deserialize($body, 'OpenAPI\Server\Model\User', $inputFormat); + $user = $this->deserialize($user, 'OpenAPI\Server\Model\User', $inputFormat); } catch (SerializerRuntimeException $exception) { return $this->createBadRequestResponse($exception->getMessage()); } @@ -625,7 +654,7 @@ public function updateUserAction(Request $request, $username) $asserts[] = new Assert\NotNull(); $asserts[] = new Assert\Type("OpenAPI\Server\Model\User"); $asserts[] = new Assert\Valid(); - $response = $this->validate($body, $asserts); + $response = $this->validate($user, $asserts); if ($response instanceof Response) { return $response; } @@ -634,11 +663,13 @@ public function updateUserAction(Request $request, $username) try { $handler = $this->getApiHandler(); + // Set authentication method 'api_key' + $handler->setapi_key($securityapi_key); // Make the call to the business logic $responseCode = 204; $responseHeaders = []; - $result = $handler->updateUser($username, $body, $responseCode, $responseHeaders); + $result = $handler->updateUser($username, $user, $responseCode, $responseHeaders); // Find default response message $message = ''; diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/Model/Category.php b/samples/server/petstore/php-symfony/SymfonyBundle-php/Model/Category.php index 8964e71b66a9..7ee222ced8d6 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/Model/Category.php +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/Model/Category.php @@ -56,6 +56,7 @@ class Category * @SerializedName("name") * @Assert\Type("string") * @Type("string") + * @Assert\Regex("/^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$/") */ protected $name; diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/README.md b/samples/server/petstore/php-symfony/SymfonyBundle-php/README.md index 27ebd280cd11..b1aab117e185 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/README.md +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/README.md @@ -93,7 +93,7 @@ class PetApi implements PetApiInterface // An interface is autogenerated /** * Implementation of PetApiInterface#addPet */ - public function addPet(Pet $body) + public function addPet(Pet $pet) { // Implement the operation ... } diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/PetApiInterface.md b/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/PetApiInterface.md index 41b9776c01c7..01bd0ee88ae7 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/PetApiInterface.md +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/PetApiInterface.md @@ -27,7 +27,7 @@ services: ``` ## **addPet** -> addPet($body) +> OpenAPI\Server\Model\Pet addPet($pet) Add a new pet to the store @@ -56,7 +56,7 @@ class PetApi implements PetApiInterface /** * Implementation of PetApiInterface#addPet */ - public function addPet(Pet $body) + public function addPet(Pet $pet) { // Implement the operation ... } @@ -69,11 +69,11 @@ class PetApi implements PetApiInterface Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**OpenAPI\Server\Model\Pet**](../Model/Pet.md)| Pet object that needs to be added to the store | + **pet** | [**OpenAPI\Server\Model\Pet**](../Model/Pet.md)| Pet object that needs to be added to the store | ### Return type -void (empty response body) +[**OpenAPI\Server\Model\Pet**](../Model/Pet.md) ### Authorization @@ -82,7 +82,7 @@ void (empty response body) ### HTTP request headers - **Content-Type**: application/json, application/xml - - **Accept**: Not defined + - **Accept**: application/xml, application/json [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) @@ -334,7 +334,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) ## **updatePet** -> updatePet($body) +> OpenAPI\Server\Model\Pet updatePet($pet) Update an existing pet @@ -363,7 +363,7 @@ class PetApi implements PetApiInterface /** * Implementation of PetApiInterface#updatePet */ - public function updatePet(Pet $body) + public function updatePet(Pet $pet) { // Implement the operation ... } @@ -376,11 +376,11 @@ class PetApi implements PetApiInterface Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**OpenAPI\Server\Model\Pet**](../Model/Pet.md)| Pet object that needs to be added to the store | + **pet** | [**OpenAPI\Server\Model\Pet**](../Model/Pet.md)| Pet object that needs to be added to the store | ### Return type -void (empty response body) +[**OpenAPI\Server\Model\Pet**](../Model/Pet.md) ### Authorization @@ -389,7 +389,7 @@ void (empty response body) ### HTTP request headers - **Content-Type**: application/json, application/xml - - **Accept**: Not defined + - **Accept**: application/xml, application/json [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/StoreApiInterface.md b/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/StoreApiInterface.md index 0a1f4154f6d4..3d3e3b18c3ef 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/StoreApiInterface.md +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/StoreApiInterface.md @@ -190,7 +190,7 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) ## **placeOrder** -> OpenAPI\Server\Model\Order placeOrder($body) +> OpenAPI\Server\Model\Order placeOrder($order) Place an order for a pet @@ -211,7 +211,7 @@ class StoreApi implements StoreApiInterface /** * Implementation of StoreApiInterface#placeOrder */ - public function placeOrder(Order $body) + public function placeOrder(Order $order) { // Implement the operation ... } @@ -224,7 +224,7 @@ class StoreApi implements StoreApiInterface Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**OpenAPI\Server\Model\Order**](../Model/Order.md)| order placed for purchasing the pet | + **order** | [**OpenAPI\Server\Model\Order**](../Model/Order.md)| order placed for purchasing the pet | ### Return type @@ -236,7 +236,7 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: application/json - **Accept**: application/xml, application/json [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/UserApiInterface.md b/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/UserApiInterface.md index 571e9dcbf291..c00ce7309a8e 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/UserApiInterface.md +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/Resources/docs/Api/UserApiInterface.md @@ -27,7 +27,7 @@ services: ``` ## **createUser** -> createUser($body) +> createUser($user) Create user @@ -45,12 +45,20 @@ use OpenAPI\Server\Api\UserApiInterface; class UserApi implements UserApiInterface { + /** + * Configure API key authorization: api_key + */ + public function setapi_key($apiKey) + { + // Retrieve logged in user from $apiKey ... + } + // ... /** * Implementation of UserApiInterface#createUser */ - public function createUser(User $body) + public function createUser(User $user) { // Implement the operation ... } @@ -63,7 +71,7 @@ class UserApi implements UserApiInterface Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**OpenAPI\Server\Model\User**](../Model/User.md)| Created user object | + **user** | [**OpenAPI\Server\Model\User**](../Model/User.md)| Created user object | ### Return type @@ -71,17 +79,17 @@ void (empty response body) ### Authorization -No authorization required +[api_key](../../README.md#api_key) ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: application/json - **Accept**: Not defined [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) ## **createUsersWithArrayInput** -> createUsersWithArrayInput($body) +> createUsersWithArrayInput($user) Creates list of users with given input array @@ -97,12 +105,20 @@ use OpenAPI\Server\Api\UserApiInterface; class UserApi implements UserApiInterface { + /** + * Configure API key authorization: api_key + */ + public function setapi_key($apiKey) + { + // Retrieve logged in user from $apiKey ... + } + // ... /** * Implementation of UserApiInterface#createUsersWithArrayInput */ - public function createUsersWithArrayInput(array $body) + public function createUsersWithArrayInput(array $user) { // Implement the operation ... } @@ -115,7 +131,7 @@ class UserApi implements UserApiInterface Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**OpenAPI\Server\Model\User**](../Model/User.md)| List of user object | + **user** | [**OpenAPI\Server\Model\User**](../Model/User.md)| List of user object | ### Return type @@ -123,17 +139,17 @@ void (empty response body) ### Authorization -No authorization required +[api_key](../../README.md#api_key) ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: application/json - **Accept**: Not defined [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) ## **createUsersWithListInput** -> createUsersWithListInput($body) +> createUsersWithListInput($user) Creates list of users with given input array @@ -149,12 +165,20 @@ use OpenAPI\Server\Api\UserApiInterface; class UserApi implements UserApiInterface { + /** + * Configure API key authorization: api_key + */ + public function setapi_key($apiKey) + { + // Retrieve logged in user from $apiKey ... + } + // ... /** * Implementation of UserApiInterface#createUsersWithListInput */ - public function createUsersWithListInput(array $body) + public function createUsersWithListInput(array $user) { // Implement the operation ... } @@ -167,7 +191,7 @@ class UserApi implements UserApiInterface Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**OpenAPI\Server\Model\User**](../Model/User.md)| List of user object | + **user** | [**OpenAPI\Server\Model\User**](../Model/User.md)| List of user object | ### Return type @@ -175,11 +199,11 @@ void (empty response body) ### Authorization -No authorization required +[api_key](../../README.md#api_key) ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: application/json - **Accept**: Not defined [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) @@ -203,6 +227,14 @@ use OpenAPI\Server\Api\UserApiInterface; class UserApi implements UserApiInterface { + /** + * Configure API key authorization: api_key + */ + public function setapi_key($apiKey) + { + // Retrieve logged in user from $apiKey ... + } + // ... /** @@ -229,7 +261,7 @@ void (empty response body) ### Authorization -No authorization required +[api_key](../../README.md#api_key) ### HTTP request headers @@ -360,6 +392,14 @@ use OpenAPI\Server\Api\UserApiInterface; class UserApi implements UserApiInterface { + /** + * Configure API key authorization: api_key + */ + public function setapi_key($apiKey) + { + // Retrieve logged in user from $apiKey ... + } + // ... /** @@ -383,7 +423,7 @@ void (empty response body) ### Authorization -No authorization required +[api_key](../../README.md#api_key) ### HTTP request headers @@ -393,7 +433,7 @@ No authorization required [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) ## **updateUser** -> updateUser($username, $body) +> updateUser($username, $user) Updated user @@ -411,12 +451,20 @@ use OpenAPI\Server\Api\UserApiInterface; class UserApi implements UserApiInterface { + /** + * Configure API key authorization: api_key + */ + public function setapi_key($apiKey) + { + // Retrieve logged in user from $apiKey ... + } + // ... /** * Implementation of UserApiInterface#updateUser */ - public function updateUser($username, User $body) + public function updateUser($username, User $user) { // Implement the operation ... } @@ -430,7 +478,7 @@ class UserApi implements UserApiInterface Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **username** | **string**| name that need to be deleted | - **body** | [**OpenAPI\Server\Model\User**](../Model/User.md)| Updated user object | + **user** | [**OpenAPI\Server\Model\User**](../Model/User.md)| Updated user object | ### Return type @@ -438,11 +486,11 @@ void (empty response body) ### Authorization -No authorization required +[api_key](../../README.md#api_key) ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: application/json - **Accept**: Not defined [[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md) From 19b68f75de495e32359339d02cbe1f5e221d19fe Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 14 Apr 2021 11:15:12 +0800 Subject: [PATCH 013/186] [Docker] support multi-arch build (#9246) * multi arch build * fix buildx * use openjdk * fix bash install * remove armv7 * remove arm64 * use jre 11 * add v8 * skip bash install * add back tests * remove v8 * minor change * fix tag and push * fix tag * skip pull request for dockerhub push --- .travis.yml | 30 +++++++++++++++++------- modules/openapi-generator-cli/Dockerfile | 4 +--- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9ba0b842f02c..8943b3748d31 100644 --- a/.travis.yml +++ b/.travis.yml @@ -62,6 +62,14 @@ addons: - petstore.swagger.io before_install: + - sudo rm -rf /var/lib/apt/lists/* + - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - + - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) edge" + - sudo apt-get update + - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce + - mkdir -vp ~/.docker/cli-plugins/ + - curl --silent -L "https://github.com/docker/buildx/releases/download/v0.3.0/buildx-v0.3.0.linux-amd64" > ~/.docker/cli-plugins/docker-buildx + - chmod a+x ~/.docker/cli-plugins/docker-buildx # to run petstore server locally via docker - echo "$DOCKER_HUB_PASSWORD" | docker login --username=$DOCKER_HUB_USERNAME --password-stdin || true - docker pull swaggerapi/petstore @@ -149,6 +157,8 @@ install: script: # fail fast - set -e + # show docker buildx version + - docker buildx version # fail if the template files contains tabs - /bin/bash ./bin/utils/detect_tab_in_templates.sh # fail if the test files have changes @@ -199,12 +209,14 @@ after_success: echo "$DOCKER_HUB_PASSWORD" | docker login --username=$DOCKER_HUB_USERNAME --password-stdin; export cli_version=$(\mvn -o org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '\['); export build_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ"); - docker build --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-online --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_GENERATOR_IMAGE_NAME ./modules/openapi-generator-online; + docker buildx create --use; if [ ! -z "$TRAVIS_TAG" ]; then - docker tag $DOCKER_GENERATOR_IMAGE_NAME:latest $DOCKER_GENERATOR_IMAGE_NAME:$TRAVIS_TAG; + docker buildx build --platform linux/amd64,linux/arm64 --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-online --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_GENERATOR_IMAGE_NAME:latest -t $DOCKER_GENERATOR_IMAGE_NAME:$TRAVIS_TAG -t $DOCKER_GENERATOR_IMAGE_NAME ./modules/openapi-generator-online; + echo "Built and tagged $DOCKER_GENERATOR_IMAGE_NAME"; fi; - if [ ! -z "$TRAVIS_TAG" ] || [ "$TRAVIS_BRANCH" = "master" ]; then - docker push $DOCKER_GENERATOR_IMAGE_NAME && echo "Pushed to $DOCKER_GENERATOR_IMAGE_NAME"; + if [ -z "$TRAVIS_TAG" ] && [ "$TRAVIS_BRANCH" = "master" ] && ["$TRAVIS_PULL_REQUEST" = "false" ]; then + docker buildx build --push --platform linux/amd64,linux/arm64 --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-online --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_GENERATOR_IMAGE_NAME ./modules/openapi-generator-online; + echo "Pushed to $DOCKER_GENERATOR_IMAGE_NAME for master"; fi; fi; ## docker: build cli image and push to Docker Hub @@ -213,12 +225,14 @@ after_success: cp docker-entrypoint.sh ./modules/openapi-generator-cli; export cli_version=$(\mvn -o org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '\['); export build_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ"); - docker build --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-cli --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/openapi-generator-cli; + docker buildx create --use; + docker buildx build --platform linux/amd64,linux/arm64 --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-cli --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/openapi-generator-cli; if [ ! -z "$TRAVIS_TAG" ]; then - docker tag $DOCKER_CODEGEN_CLI_IMAGE_NAME:latest $DOCKER_CODEGEN_CLI_IMAGE_NAME:$TRAVIS_TAG; + docker buildx build --platform linux/amd64,linux/arm64 --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-cli --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_CODEGEN_CLI_IMAGE_NAME:latest -t $DOCKER_CODEGEN_CLI_IMAGE_NAME:$TRAVIS_TAG -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/openapi-generator-cli; + echo "Built and tagged $DOCKER_GENERATOR_IMAGE_NAME"; fi; - if [ ! -z "$TRAVIS_TAG" ] || [ "$TRAVIS_BRANCH" = "master" ]; then - docker push $DOCKER_CODEGEN_CLI_IMAGE_NAME; + if [ -z "$TRAVIS_TAG" ] && [ "$TRAVIS_BRANCH" = "master" ] && ["$TRAVIS_PULL_REQUEST" = "false" ]; then + docker buildx build --push --platform linux/amd64,linux/arm64 --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-cli --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/openapi-generator-cli; echo "Pushed to $DOCKER_CODEGEN_CLI_IMAGE_NAME"; fi; fi; diff --git a/modules/openapi-generator-cli/Dockerfile b/modules/openapi-generator-cli/Dockerfile index e9c64a546197..00fad3e7cdd8 100644 --- a/modules/openapi-generator-cli/Dockerfile +++ b/modules/openapi-generator-cli/Dockerfile @@ -1,6 +1,4 @@ -FROM java:8-jre-alpine - -RUN apk add --no-cache bash +FROM openjdk:11.0-jre-buster ADD target/openapi-generator-cli.jar /opt/openapi-generator/modules/openapi-generator-cli/target/openapi-generator-cli.jar From dbdb6c51c48ffb059c55d247ceb31b0a979fea74 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 14 Apr 2021 16:55:12 +0800 Subject: [PATCH 014/186] fix missing space in bash script --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8943b3748d31..cc1f953acaa4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -214,7 +214,7 @@ after_success: docker buildx build --platform linux/amd64,linux/arm64 --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-online --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_GENERATOR_IMAGE_NAME:latest -t $DOCKER_GENERATOR_IMAGE_NAME:$TRAVIS_TAG -t $DOCKER_GENERATOR_IMAGE_NAME ./modules/openapi-generator-online; echo "Built and tagged $DOCKER_GENERATOR_IMAGE_NAME"; fi; - if [ -z "$TRAVIS_TAG" ] && [ "$TRAVIS_BRANCH" = "master" ] && ["$TRAVIS_PULL_REQUEST" = "false" ]; then + if [ -z "$TRAVIS_TAG" ] && [ "$TRAVIS_BRANCH" = "master" ] && [ "$TRAVIS_PULL_REQUEST" = "false" ]; then docker buildx build --push --platform linux/amd64,linux/arm64 --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-online --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_GENERATOR_IMAGE_NAME ./modules/openapi-generator-online; echo "Pushed to $DOCKER_GENERATOR_IMAGE_NAME for master"; fi; @@ -231,7 +231,7 @@ after_success: docker buildx build --platform linux/amd64,linux/arm64 --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-cli --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_CODEGEN_CLI_IMAGE_NAME:latest -t $DOCKER_CODEGEN_CLI_IMAGE_NAME:$TRAVIS_TAG -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/openapi-generator-cli; echo "Built and tagged $DOCKER_GENERATOR_IMAGE_NAME"; fi; - if [ -z "$TRAVIS_TAG" ] && [ "$TRAVIS_BRANCH" = "master" ] && ["$TRAVIS_PULL_REQUEST" = "false" ]; then + if [ -z "$TRAVIS_TAG" ] && [ "$TRAVIS_BRANCH" = "master" ] && [ "$TRAVIS_PULL_REQUEST" = "false" ]; then docker buildx build --push --platform linux/amd64,linux/arm64 --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-cli --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/openapi-generator-cli; echo "Pushed to $DOCKER_CODEGEN_CLI_IMAGE_NAME"; fi; From 9edf70e980cebc9577a23f7c989a3340f6d7d4b9 Mon Sep 17 00:00:00 2001 From: Vincent Galloy Date: Wed, 14 Apr 2021 11:02:48 +0200 Subject: [PATCH 015/186] @Input and @Internal should not be apply on the same property (#9059) Motivation: In Gradle 7.0 apply @Input and @Internal on property is forbidden. Before Gradle 7.0 applying both on the same property is confusing. According to the documentation: * @Input: Attached to a task property to indicate that the property specifies some input value for the task. * @Internal: Attached to a task property to indicate that the property is not to be taken into account for up-to-date checking --- .../openapitools/generator/gradle/plugin/tasks/GenerateTask.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt index b1dcd474ae84..c3e1efcee94e 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt @@ -81,9 +81,8 @@ open class GenerateTask : DefaultTask() { val outputDir = project.objects.property() @Suppress("unused") - @get:Internal @set:Option(option = "input", description = "The input specification.") - @Input + @Internal var input: String? = null set(value) { inputSpec.set(value) From 60dcf8613f6b75b606757c4a991fe018ad10ee99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Herv=C3=A9?= Date: Wed, 14 Apr 2021 20:43:28 +0200 Subject: [PATCH 016/186] Don't include read-only properties in Python examples. (#9252) * Don't include read-only properties in Python examples. When using a schema with read-only fields as API inputs, Python generates examples for those: this excludes them. * Fix tests --- .../languages/PythonClientCodegen.java | 17 ++ ...odels-for-testing-with-http-signature.yaml | 8 + .../petstore/python/.openapi-generator/FILES | 2 + .../openapi3/client/petstore/python/README.md | 1 + .../python/docs/ObjectModelWithRefProps.md | 1 + .../client/petstore/python/docs/Readonly.md | 11 ++ .../model/object_model_with_ref_props.py | 5 + .../python/petstore_api/model/readonly.py | 166 ++++++++++++++++++ .../python/petstore_api/models/__init__.py | 1 + .../petstore/python/test/test_readonly.py | 35 ++++ .../test_object_model_with_ref_props.py | 2 + 11 files changed, 249 insertions(+) create mode 100644 samples/openapi3/client/petstore/python/docs/Readonly.md create mode 100644 samples/openapi3/client/petstore/python/petstore_api/model/readonly.py create mode 100644 samples/openapi3/client/petstore/python/test/test_readonly.py diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java index 3b0b5deeb819..87811995525d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonClientCodegen.java @@ -1223,6 +1223,23 @@ private String exampleForObjectModel(Schema schema, String fullPrefix, String cl for (Map.Entry entry : requiredAndOptionalProps.entrySet()) { String propName = entry.getKey(); Schema propSchema = entry.getValue(); + boolean readOnly = false; + if (propSchema.getReadOnly() != null) { + readOnly = propSchema.getReadOnly(); + } + if (readOnly) { + continue; + } + String ref = propSchema.get$ref(); + if (ref != null) { + Schema refSchema = ModelUtils.getSchema(this.openAPI, ModelUtils.getSimpleRef(ref)); + if (refSchema.getReadOnly() != null) { + readOnly = refSchema.getReadOnly(); + } + if (readOnly) { + continue; + } + } propName = toVarName(propName); String propModelName = null; Object propExample = null; diff --git a/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml b/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml index 9e6502ca756c..3c77711d37c9 100644 --- a/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml @@ -2002,6 +2002,8 @@ components: properties: my_number: $ref: '#/definitions/NumberWithValidations' + my_readonly: + $ref: '#/definitions/Readonly' my_string: $ref: '#/definitions/String' my_boolean: @@ -2010,6 +2012,12 @@ components: type: number minimum: 10 maximum: 20 + Readonly: + type: object + readOnly: true + properties: + name: + type: string ComposedOneOfNumberWithValidations: description: this is a model that allows payloads of type object or number oneOf: diff --git a/samples/openapi3/client/petstore/python/.openapi-generator/FILES b/samples/openapi3/client/petstore/python/.openapi-generator/FILES index 6a324e4e94a0..e3b9c0feabbe 100644 --- a/samples/openapi3/client/petstore/python/.openapi-generator/FILES +++ b/samples/openapi3/client/petstore/python/.openapi-generator/FILES @@ -79,6 +79,7 @@ docs/Pig.md docs/Quadrilateral.md docs/QuadrilateralInterface.md docs/ReadOnlyFirst.md +docs/Readonly.md docs/ScaleneTriangle.md docs/Shape.md docs/ShapeInterface.md @@ -185,6 +186,7 @@ petstore_api/model/pig.py petstore_api/model/quadrilateral.py petstore_api/model/quadrilateral_interface.py petstore_api/model/read_only_first.py +petstore_api/model/readonly.py petstore_api/model/scalene_triangle.py petstore_api/model/shape.py petstore_api/model/shape_interface.py diff --git a/samples/openapi3/client/petstore/python/README.md b/samples/openapi3/client/petstore/python/README.md index afe16c9ab23c..2fc4c6b58bd2 100644 --- a/samples/openapi3/client/petstore/python/README.md +++ b/samples/openapi3/client/petstore/python/README.md @@ -206,6 +206,7 @@ Class | Method | HTTP request | Description - [Quadrilateral](docs/Quadrilateral.md) - [QuadrilateralInterface](docs/QuadrilateralInterface.md) - [ReadOnlyFirst](docs/ReadOnlyFirst.md) + - [Readonly](docs/Readonly.md) - [ScaleneTriangle](docs/ScaleneTriangle.md) - [Shape](docs/Shape.md) - [ShapeInterface](docs/ShapeInterface.md) diff --git a/samples/openapi3/client/petstore/python/docs/ObjectModelWithRefProps.md b/samples/openapi3/client/petstore/python/docs/ObjectModelWithRefProps.md index 5ff4e52033d6..a046561314c6 100644 --- a/samples/openapi3/client/petstore/python/docs/ObjectModelWithRefProps.md +++ b/samples/openapi3/client/petstore/python/docs/ObjectModelWithRefProps.md @@ -6,6 +6,7 @@ a model that includes properties which should stay primitive (String + Boolean) Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **my_number** | [**NumberWithValidations**](NumberWithValidations.md) | | [optional] +**my_readonly** | [**Readonly**](Readonly.md) | | [optional] **my_string** | **str** | | [optional] **my_boolean** | **bool** | | [optional] diff --git a/samples/openapi3/client/petstore/python/docs/Readonly.md b/samples/openapi3/client/petstore/python/docs/Readonly.md new file mode 100644 index 000000000000..4f4ba8ede251 --- /dev/null +++ b/samples/openapi3/client/petstore/python/docs/Readonly.md @@ -0,0 +1,11 @@ +# Readonly + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py b/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py index b1dc4bf82e2c..ee3613c44441 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py @@ -28,7 +28,9 @@ def lazy_import(): from petstore_api.model.number_with_validations import NumberWithValidations + from petstore_api.model.readonly import Readonly globals()['NumberWithValidations'] = NumberWithValidations + globals()['Readonly'] = Readonly class ObjectModelWithRefProps(ModelNormal): @@ -78,6 +80,7 @@ def openapi_types(): lazy_import() return { 'my_number': (NumberWithValidations,), # noqa: E501 + 'my_readonly': (Readonly,), # noqa: E501 'my_string': (str,), # noqa: E501 'my_boolean': (bool,), # noqa: E501 } @@ -89,6 +92,7 @@ def discriminator(): attribute_map = { 'my_number': 'my_number', # noqa: E501 + 'my_readonly': 'my_readonly', # noqa: E501 'my_string': 'my_string', # noqa: E501 'my_boolean': 'my_boolean', # noqa: E501 } @@ -140,6 +144,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) my_number (NumberWithValidations): [optional] # noqa: E501 + my_readonly (Readonly): [optional] # noqa: E501 my_string (str): [optional] # noqa: E501 my_boolean (bool): [optional] # noqa: E501 """ diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py b/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py new file mode 100644 index 000000000000..b5d137b467d3 --- /dev/null +++ b/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py @@ -0,0 +1,166 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) + + +class Readonly(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + additional_properties_type = None + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'name': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + } + + _composed_schemas = {} + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Readonly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py b/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py index 5875dbb55cf2..12f8d86da03d 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py @@ -81,6 +81,7 @@ from petstore_api.model.quadrilateral import Quadrilateral from petstore_api.model.quadrilateral_interface import QuadrilateralInterface from petstore_api.model.read_only_first import ReadOnlyFirst +from petstore_api.model.readonly import Readonly from petstore_api.model.scalene_triangle import ScaleneTriangle from petstore_api.model.shape import Shape from petstore_api.model.shape_interface import ShapeInterface diff --git a/samples/openapi3/client/petstore/python/test/test_readonly.py b/samples/openapi3/client/petstore/python/test/test_readonly.py new file mode 100644 index 000000000000..50be60d4e446 --- /dev/null +++ b/samples/openapi3/client/petstore/python/test/test_readonly.py @@ -0,0 +1,35 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import petstore_api +from petstore_api.model.readonly import Readonly + + +class TestReadonly(unittest.TestCase): + """Readonly unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testReadonly(self): + """Test Readonly""" + # FIXME: construct object with mandatory attributes with example values + # model = Readonly() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_object_model_with_ref_props.py b/samples/openapi3/client/petstore/python/tests_manual/test_object_model_with_ref_props.py index 9ce55c75bb87..c708237acb42 100644 --- a/samples/openapi3/client/petstore/python/tests_manual/test_object_model_with_ref_props.py +++ b/samples/openapi3/client/petstore/python/tests_manual/test_object_model_with_ref_props.py @@ -20,6 +20,7 @@ number_with_validations = sys.modules[ 'petstore_api.model.number_with_validations'] from petstore_api.model.object_model_with_ref_props import ObjectModelWithRefProps +from petstore_api.model.readonly import Readonly class TestObjectModelWithRefProps(unittest.TestCase): @@ -38,6 +39,7 @@ def testObjectModelWithRefProps(self): ObjectModelWithRefProps.openapi_types, { 'my_number': (NumberWithValidations,), + 'my_readonly': (Readonly,), 'my_string': (str,), 'my_boolean': (bool,), } From 786458e92834511b1377a1cbd66e2620787ad5fc Mon Sep 17 00:00:00 2001 From: jenswet-el <78686610+jenswet-el@users.noreply.github.com> Date: Fri, 16 Apr 2021 04:11:04 +0200 Subject: [PATCH 017/186] Add missing ResponseBody import (#9239) --- .../kotlin-client/libraries/jvm-retrofit2/api.mustache | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/api.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/api.mustache index 07bf4667f39c..bca56e88bae6 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/api.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/api.mustache @@ -47,6 +47,12 @@ import okhttp3.MultipartBody {{/isMultipart}} {{/x-kotlin-multipart-import}} +{{#operation}} +{{#isResponseFile}} +import okhttp3.ResponseBody + +{{/isResponseFile}} +{{/operation}} interface {{classname}} { {{#operation}} /** From 6dce8179de28f54727152797ac1460987989dc61 Mon Sep 17 00:00:00 2001 From: Stieglitz Date: Fri, 16 Apr 2021 04:46:51 +0200 Subject: [PATCH 018/186] [Kotlin] Fix (de)serialization of enum classes (kotlinx serialization) (#9143) * fix kotlin enum serialization * fix kotlin serialization compiler warning * change samples --- .../main/resources/kotlin-client/build.gradle.mustache | 8 ++++++++ .../src/main/resources/kotlin-client/data_class.mustache | 3 +++ .../kotlin-retrofit2-kotlinx_serialization/build.gradle | 6 ++++++ .../main/kotlin/org/openapitools/client/models/Order.kt | 1 + .../src/main/kotlin/org/openapitools/client/models/Pet.kt | 1 + 5 files changed, 19 insertions(+) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache index 415a8c255744..1f58112db538 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache @@ -114,3 +114,11 @@ dependencies { {{/jvm-retrofit2}} testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" } +{{#kotlinx_serialization}} + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { + kotlinOptions { + freeCompilerArgs += "-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi" + } +} +{{/kotlinx_serialization}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache index b83b7aff9527..117cdef8fd79 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache @@ -70,6 +70,9 @@ import java.io.Serializable * {{{description}}} * Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} */ + {{#kotlinx_serialization}} + @KSerializable + {{/kotlinx_serialization}} {{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{{nameInCamelCase}}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) { {{#allowableValues}} {{#enumVars}} diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle index f4436bd7b3d5..dce987e02010 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle @@ -40,3 +40,9 @@ dependencies { compile "com.squareup.retrofit2:converter-scalars:$retrofitVersion" testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" } + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { + kotlinOptions { + freeCompilerArgs += "-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi" + } +} diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/models/Order.kt index 879fd5c733aa..4121b6fbbbbe 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -50,6 +50,7 @@ data class Order ( * Order Status * Values: PLACED,APPROVED,DELIVERED */ + @KSerializable enum class Status(val value: kotlin.String) { @SerialName(value = "placed") PLACED("placed"), @SerialName(value = "approved") APPROVED("approved"), diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/models/Pet.kt index 1fd2d15f8545..ea1cd27b2627 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -52,6 +52,7 @@ data class Pet ( * pet status in the store * Values: AVAILABLE,PENDING,SOLD */ + @KSerializable enum class Status(val value: kotlin.String) { @SerialName(value = "available") AVAILABLE("available"), @SerialName(value = "pending") PENDING("pending"), From af992e4b299ed3cfe35a0d72f5d10d1c1dfbc9ce Mon Sep 17 00:00:00 2001 From: Moshe Elisha Date: Fri, 16 Apr 2021 06:02:56 +0300 Subject: [PATCH 019/186] [Java] [Native] Add response body to exception message (#9169) * Fix #8027 - import the auto generated supporting JSON class only when generateSupportingFiles is true * Fix #8027 - import the auto generated supporting JSON class only when generateSupportingFiles is true * Fix #8027 - import the auto generated supporting JSON class only when generateSupportingFiles is true * Revert "Fix #8027 - import the auto generated supporting JSON class only when generateSupportingFiles is true" This reverts commit 56e2b1fb * Revert "Fix #8027 - import the auto generated supporting JSON class only when generateSupportingFiles is true" This reverts commit 335c304d * Fix #8027 - import the auto generated supporting JSON class only when generateSupportingFiles is true * Fix #8027 - import the auto generated supporting JSON class only when discriminator is needed * Fix #8027 - import the auto generated supporting JSON class only when discriminator is needed * Fix #8027 - import the auto generated supporting JSON class only when discriminator is needed * [Java] [Native] Add response body to exception message * [Java] [Native] Use default base URI if baseUri param is null * [Java] [Native] Use default base URI if baseUri param is null --- .../Java/libraries/native/ApiClient.mustache | 2 +- .../Java/libraries/native/api.mustache | 13 ++- .../org/openapitools/client/ApiClient.java | 2 +- .../client/api/AnotherFakeApi.java | 8 ++ .../org/openapitools/client/api/FakeApi.java | 8 ++ .../client/api/FakeClassnameTags123Api.java | 8 ++ .../org/openapitools/client/api/PetApi.java | 8 ++ .../org/openapitools/client/api/StoreApi.java | 8 ++ .../org/openapitools/client/api/UserApi.java | 8 ++ .../org/openapitools/client/ApiClient.java | 2 +- .../client/api/AnotherFakeApi.java | 13 ++- .../org/openapitools/client/api/FakeApi.java | 78 +++++------------ .../client/api/FakeClassnameTags123Api.java | 13 ++- .../org/openapitools/client/api/PetApi.java | 53 ++++-------- .../org/openapitools/client/api/StoreApi.java | 28 +++---- .../org/openapitools/client/api/UserApi.java | 48 ++++------- .../org/openapitools/client/ApiClient.java | 2 +- .../client/api/AnotherFakeApi.java | 13 ++- .../openapitools/client/api/DefaultApi.java | 13 ++- .../org/openapitools/client/api/FakeApi.java | 83 +++++-------------- .../client/api/FakeClassnameTags123Api.java | 13 ++- .../org/openapitools/client/api/PetApi.java | 53 ++++-------- .../org/openapitools/client/api/StoreApi.java | 28 +++---- .../org/openapitools/client/api/UserApi.java | 48 ++++------- 24 files changed, 241 insertions(+), 312 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/native/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/native/ApiClient.mustache index 095a71939a7a..ea46db7331d2 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/native/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/native/ApiClient.mustache @@ -170,7 +170,7 @@ public class ApiClient { public ApiClient(HttpClient.Builder builder, ObjectMapper mapper, String baseUri) { this.builder = builder; this.mapper = mapper; - updateBaseUri(baseUri); + updateBaseUri(baseUri != null ? baseUri : getDefaultBaseUri()); interceptor = null; readTimeout = null; responseInterceptor = null; diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/native/api.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/native/api.mustache index 2adef3a6b0e9..e91e72f97b98 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/native/api.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/native/api.mustache @@ -65,6 +65,14 @@ public class {{classname}} { } {{/asyncNative}} + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + {{#operation}} {{#vendorExtensions.x-group-parameters}} {{#hasParams}} @@ -207,10 +215,7 @@ public class {{classname}} { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "{{operationId}} call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "{{operationId}} call received non-success response"); } return new ApiResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}>( localVarResponse.statusCode(), diff --git a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/ApiClient.java index 98cdbf0646b1..4b5a1fb4bd34 100644 --- a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/ApiClient.java @@ -175,7 +175,7 @@ public ApiClient() { public ApiClient(HttpClient.Builder builder, ObjectMapper mapper, String baseUri) { this.builder = builder; this.mapper = mapper; - updateBaseUri(baseUri); + updateBaseUri(baseUri != null ? baseUri : getDefaultBaseUri()); interceptor = null; readTimeout = null; responseInterceptor = null; diff --git a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/AnotherFakeApi.java b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/AnotherFakeApi.java index 38c4a321f657..f2247d141bb1 100644 --- a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/AnotherFakeApi.java +++ b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/AnotherFakeApi.java @@ -67,6 +67,14 @@ private ApiException getApiException(String operationId, HttpResponseloc localVarResponse.body()); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * To test special tags * To test special tags and operation ID starting with number diff --git a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/FakeApi.java b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/FakeApi.java index 415e6a35a40c..388dce55a878 100644 --- a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/FakeApi.java +++ b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/FakeApi.java @@ -75,6 +75,14 @@ private ApiException getApiException(String operationId, HttpResponseloc localVarResponse.body()); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * creates an XmlItem * this route creates an XmlItem diff --git a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java index a04a5441414a..f8076cd69144 100644 --- a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java +++ b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java @@ -67,6 +67,14 @@ private ApiException getApiException(String operationId, HttpResponseloc localVarResponse.body()); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * To test class name in snake case * To test class name in snake case diff --git a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/PetApi.java b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/PetApi.java index 4e9d6f34af79..2dcd304b1f5f 100644 --- a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/PetApi.java +++ b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/PetApi.java @@ -70,6 +70,14 @@ private ApiException getApiException(String operationId, HttpResponseloc localVarResponse.body()); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * Add a new pet to the store * diff --git a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/StoreApi.java b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/StoreApi.java index 41de754a4d95..ec19468ccefc 100644 --- a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/StoreApi.java +++ b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/StoreApi.java @@ -67,6 +67,14 @@ private ApiException getApiException(String operationId, HttpResponseloc localVarResponse.body()); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * Delete purchase order by ID * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors diff --git a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/UserApi.java b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/UserApi.java index bb13d02a2030..ba2cad99cf84 100644 --- a/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/UserApi.java +++ b/samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/api/UserApi.java @@ -67,6 +67,14 @@ private ApiException getApiException(String operationId, HttpResponseloc localVarResponse.body()); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * Create user * This can only be done by the logged in user. diff --git a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java index 98cdbf0646b1..4b5a1fb4bd34 100644 --- a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java @@ -175,7 +175,7 @@ public ApiClient() { public ApiClient(HttpClient.Builder builder, ObjectMapper mapper, String baseUri) { this.builder = builder; this.mapper = mapper; - updateBaseUri(baseUri); + updateBaseUri(baseUri != null ? baseUri : getDefaultBaseUri()); interceptor = null; readTimeout = null; responseInterceptor = null; diff --git a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/AnotherFakeApi.java b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/AnotherFakeApi.java index 9124c1880fc1..2c0088e76d8b 100644 --- a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/AnotherFakeApi.java +++ b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/AnotherFakeApi.java @@ -58,6 +58,14 @@ public AnotherFakeApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * To test special tags * To test special tags and operation ID starting with number @@ -87,10 +95,7 @@ public ApiResponse call123testSpecialTagsWithHttpInfo(Client body) throw memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "call123testSpecialTags call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "call123testSpecialTags call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), diff --git a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeApi.java b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeApi.java index c174f057dbe1..6d3b64d83446 100644 --- a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeApi.java +++ b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeApi.java @@ -66,6 +66,14 @@ public FakeApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * creates an XmlItem * this route creates an XmlItem @@ -93,10 +101,7 @@ public ApiResponse createXmlItemWithHttpInfo(XmlItem xmlItem) throws ApiEx memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "createXmlItem call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "createXmlItem call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -170,10 +175,7 @@ public ApiResponse fakeOuterBooleanSerializeWithHttpInfo(Boolean body) memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "fakeOuterBooleanSerialize call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "fakeOuterBooleanSerialize call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -243,10 +245,7 @@ public ApiResponse fakeOuterCompositeSerializeWithHttpInfo(Outer memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "fakeOuterCompositeSerialize call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "fakeOuterCompositeSerialize call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -316,10 +315,7 @@ public ApiResponse fakeOuterNumberSerializeWithHttpInfo(BigDecimal b memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "fakeOuterNumberSerialize call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "fakeOuterNumberSerialize call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -389,10 +385,7 @@ public ApiResponse fakeOuterStringSerializeWithHttpInfo(String body) thr memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "fakeOuterStringSerialize call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "fakeOuterStringSerialize call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -460,10 +453,7 @@ public ApiResponse testBodyWithFileSchemaWithHttpInfo(FileSchemaTestClass memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testBodyWithFileSchema call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testBodyWithFileSchema call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -537,10 +527,7 @@ public ApiResponse testBodyWithQueryParamsWithHttpInfo(String query, User memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testBodyWithQueryParams call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testBodyWithQueryParams call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -627,10 +614,7 @@ public ApiResponse testClientModelWithHttpInfo(Client body) throws ApiEx memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testClientModel call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testClientModel call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -728,10 +712,7 @@ public ApiResponse testEndpointParametersWithHttpInfo(BigDecimal number, D memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testEndpointParameters call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testEndpointParameters call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -823,10 +804,7 @@ public ApiResponse testEnumParametersWithHttpInfo(List enumHeaderS memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testEnumParameters call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testEnumParameters call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -949,10 +927,7 @@ public ApiResponse testGroupParametersWithHttpInfo(Integer requiredStringG memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testGroupParameters call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testGroupParameters call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -1121,10 +1096,7 @@ public ApiResponse testInlineAdditionalPropertiesWithHttpInfo(Map( localVarResponse.statusCode(), @@ -1198,10 +1170,7 @@ public ApiResponse testJsonFormDataWithHttpInfo(String param, String param memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testJsonFormData call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testJsonFormData call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -1279,10 +1248,7 @@ public ApiResponse testQueryParameterCollectionFormatWithHttpInfo(List( localVarResponse.statusCode(), diff --git a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java index bc13e4b5cb72..b16a097a9c36 100644 --- a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java +++ b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java @@ -58,6 +58,14 @@ public FakeClassnameTags123Api(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * To test class name in snake case * To test class name in snake case @@ -87,10 +95,7 @@ public ApiResponse testClassnameWithHttpInfo(Client body) throws ApiExce memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testClassname call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testClassname call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), diff --git a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/PetApi.java b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/PetApi.java index 78058c16ada1..ff744b272759 100644 --- a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/PetApi.java +++ b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/PetApi.java @@ -61,6 +61,14 @@ public PetApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * Add a new pet to the store * @@ -88,10 +96,7 @@ public ApiResponse addPetWithHttpInfo(Pet body) throws ApiException { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "addPet call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "addPet call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -165,10 +170,7 @@ public ApiResponse deletePetWithHttpInfo(Long petId, String apiKey) throws memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "deletePet call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "deletePet call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -240,10 +242,7 @@ public ApiResponse> findPetsByStatusWithHttpInfo(List status) memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "findPetsByStatus call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "findPetsByStatus call received non-success response"); } return new ApiResponse>( localVarResponse.statusCode(), @@ -324,10 +323,7 @@ public ApiResponse> findPetsByTagsWithHttpInfo(Set tags) throws memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "findPetsByTags call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "findPetsByTags call received non-success response"); } return new ApiResponse>( localVarResponse.statusCode(), @@ -404,10 +400,7 @@ public ApiResponse getPetByIdWithHttpInfo(Long petId) throws ApiException { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "getPetById call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "getPetById call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -474,10 +467,7 @@ public ApiResponse updatePetWithHttpInfo(Pet body) throws ApiException { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "updatePet call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "updatePet call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -553,10 +543,7 @@ public ApiResponse updatePetWithFormWithHttpInfo(Long petId, String name, memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "updatePetWithForm call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "updatePetWithForm call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -629,10 +616,7 @@ public ApiResponse uploadFileWithHttpInfo(Long petId, String a memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "uploadFile call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "uploadFile call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -705,10 +689,7 @@ public ApiResponse uploadFileWithRequiredFileWithHttpInfo(Long memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "uploadFileWithRequiredFile call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "uploadFileWithRequiredFile call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), diff --git a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/StoreApi.java b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/StoreApi.java index 845c1567b0c1..caffb9cd6ff0 100644 --- a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/StoreApi.java +++ b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/StoreApi.java @@ -58,6 +58,14 @@ public StoreApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * Delete purchase order by ID * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors @@ -85,10 +93,7 @@ public ApiResponse deleteOrderWithHttpInfo(String orderId) throws ApiExcep memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "deleteOrder call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "deleteOrder call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -155,10 +160,7 @@ public ApiResponse> getInventoryWithHttpInfo() throws ApiEx memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "getInventory call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "getInventory call received non-success response"); } return new ApiResponse>( localVarResponse.statusCode(), @@ -222,10 +224,7 @@ public ApiResponse getOrderByIdWithHttpInfo(Long orderId) throws ApiExcep memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "getOrderById call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "getOrderById call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -294,10 +293,7 @@ public ApiResponse placeOrderWithHttpInfo(Order body) throws ApiException memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "placeOrder call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "placeOrder call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), diff --git a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/UserApi.java b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/UserApi.java index 6e5b6a147090..e841c2cd1e60 100644 --- a/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/UserApi.java +++ b/samples/client/petstore/java/native/src/main/java/org/openapitools/client/api/UserApi.java @@ -58,6 +58,14 @@ public UserApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * Create user * This can only be done by the logged in user. @@ -85,10 +93,7 @@ public ApiResponse createUserWithHttpInfo(User body) throws ApiException { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "createUser call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "createUser call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -160,10 +165,7 @@ public ApiResponse createUsersWithArrayInputWithHttpInfo(List body) memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "createUsersWithArrayInput call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "createUsersWithArrayInput call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -235,10 +237,7 @@ public ApiResponse createUsersWithListInputWithHttpInfo(List body) t memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "createUsersWithListInput call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "createUsersWithListInput call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -310,10 +309,7 @@ public ApiResponse deleteUserWithHttpInfo(String username) throws ApiExcep memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "deleteUser call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "deleteUser call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -382,10 +378,7 @@ public ApiResponse getUserByNameWithHttpInfo(String username) throws ApiEx memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "getUserByName call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "getUserByName call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -456,10 +449,7 @@ public ApiResponse loginUserWithHttpInfo(String username, String passwor memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "loginUser call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "loginUser call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -537,10 +527,7 @@ public ApiResponse logoutUserWithHttpInfo() throws ApiException { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "logoutUser call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "logoutUser call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -604,10 +591,7 @@ public ApiResponse updateUserWithHttpInfo(String username, User body) thro memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "updateUser call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "updateUser call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), diff --git a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java index 98cdbf0646b1..4b5a1fb4bd34 100644 --- a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/ApiClient.java @@ -175,7 +175,7 @@ public ApiClient() { public ApiClient(HttpClient.Builder builder, ObjectMapper mapper, String baseUri) { this.builder = builder; this.mapper = mapper; - updateBaseUri(baseUri); + updateBaseUri(baseUri != null ? baseUri : getDefaultBaseUri()); interceptor = null; readTimeout = null; responseInterceptor = null; diff --git a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/AnotherFakeApi.java b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/AnotherFakeApi.java index 388e0b3f4526..1d87022e718b 100644 --- a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/AnotherFakeApi.java +++ b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/AnotherFakeApi.java @@ -58,6 +58,14 @@ public AnotherFakeApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * To test special tags * To test special tags and operation ID starting with number @@ -87,10 +95,7 @@ public ApiResponse call123testSpecialTagsWithHttpInfo(Client client) thr memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "call123testSpecialTags call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "call123testSpecialTags call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), diff --git a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/DefaultApi.java b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/DefaultApi.java index efd1d4ca939f..fc06f1fc039b 100644 --- a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/DefaultApi.java +++ b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/DefaultApi.java @@ -58,6 +58,14 @@ public DefaultApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * * @@ -85,10 +93,7 @@ public ApiResponse fooGetWithHttpInfo() throws ApiExcepti memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "fooGet call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "fooGet call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), diff --git a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeApi.java b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeApi.java index 402c28afcd23..b5b0a141d330 100644 --- a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeApi.java +++ b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeApi.java @@ -67,6 +67,14 @@ public FakeApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * Health check endpoint * @@ -94,10 +102,7 @@ public ApiResponse fakeHealthGetWithHttpInfo() throws ApiExce memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "fakeHealthGet call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "fakeHealthGet call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -161,10 +166,7 @@ public ApiResponse fakeOuterBooleanSerializeWithHttpInfo(Boolean body) memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "fakeOuterBooleanSerialize call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "fakeOuterBooleanSerialize call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -234,10 +236,7 @@ public ApiResponse fakeOuterCompositeSerializeWithHttpInfo(Outer memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "fakeOuterCompositeSerialize call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "fakeOuterCompositeSerialize call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -307,10 +306,7 @@ public ApiResponse fakeOuterNumberSerializeWithHttpInfo(BigDecimal b memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "fakeOuterNumberSerialize call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "fakeOuterNumberSerialize call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -380,10 +376,7 @@ public ApiResponse fakeOuterStringSerializeWithHttpInfo(String body) thr memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "fakeOuterStringSerialize call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "fakeOuterStringSerialize call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -451,10 +444,7 @@ public ApiResponse> getArrayOfEnumsWithHttpInfo() throws ApiExce memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "getArrayOfEnums call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "getArrayOfEnums call received non-success response"); } return new ApiResponse>( localVarResponse.statusCode(), @@ -516,10 +506,7 @@ public ApiResponse testBodyWithFileSchemaWithHttpInfo(FileSchemaTestClass memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testBodyWithFileSchema call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testBodyWithFileSchema call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -593,10 +580,7 @@ public ApiResponse testBodyWithQueryParamsWithHttpInfo(String query, User memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testBodyWithQueryParams call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testBodyWithQueryParams call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -683,10 +667,7 @@ public ApiResponse testClientModelWithHttpInfo(Client client) throws Api memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testClientModel call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testClientModel call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -784,10 +765,7 @@ public ApiResponse testEndpointParametersWithHttpInfo(BigDecimal number, D memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testEndpointParameters call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testEndpointParameters call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -879,10 +857,7 @@ public ApiResponse testEnumParametersWithHttpInfo(List enumHeaderS memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testEnumParameters call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testEnumParameters call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -1005,10 +980,7 @@ public ApiResponse testGroupParametersWithHttpInfo(Integer requiredStringG memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testGroupParameters call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testGroupParameters call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -1177,10 +1149,7 @@ public ApiResponse testInlineAdditionalPropertiesWithHttpInfo(Map( localVarResponse.statusCode(), @@ -1254,10 +1223,7 @@ public ApiResponse testJsonFormDataWithHttpInfo(String param, String param memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testJsonFormData call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testJsonFormData call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -1335,10 +1301,7 @@ public ApiResponse testQueryParameterCollectionFormatWithHttpInfo(List( localVarResponse.statusCode(), diff --git a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java index 8200797995f6..caeaf872f788 100644 --- a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java +++ b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java @@ -58,6 +58,14 @@ public FakeClassnameTags123Api(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * To test class name in snake case * To test class name in snake case @@ -87,10 +95,7 @@ public ApiResponse testClassnameWithHttpInfo(Client client) throws ApiEx memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "testClassname call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "testClassname call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), diff --git a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/PetApi.java b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/PetApi.java index d97fb68b9083..530d75960d95 100644 --- a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/PetApi.java +++ b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/PetApi.java @@ -60,6 +60,14 @@ public PetApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * Add a new pet to the store * @@ -87,10 +95,7 @@ public ApiResponse addPetWithHttpInfo(Pet pet) throws ApiException { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "addPet call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "addPet call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -164,10 +169,7 @@ public ApiResponse deletePetWithHttpInfo(Long petId, String apiKey) throws memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "deletePet call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "deletePet call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -239,10 +241,7 @@ public ApiResponse> findPetsByStatusWithHttpInfo(List status) memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "findPetsByStatus call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "findPetsByStatus call received non-success response"); } return new ApiResponse>( localVarResponse.statusCode(), @@ -323,10 +322,7 @@ public ApiResponse> findPetsByTagsWithHttpInfo(List tags) thro memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "findPetsByTags call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "findPetsByTags call received non-success response"); } return new ApiResponse>( localVarResponse.statusCode(), @@ -403,10 +399,7 @@ public ApiResponse getPetByIdWithHttpInfo(Long petId) throws ApiException { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "getPetById call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "getPetById call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -473,10 +466,7 @@ public ApiResponse updatePetWithHttpInfo(Pet pet) throws ApiException { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "updatePet call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "updatePet call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -552,10 +542,7 @@ public ApiResponse updatePetWithFormWithHttpInfo(Long petId, String name, memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "updatePetWithForm call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "updatePetWithForm call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -628,10 +615,7 @@ public ApiResponse uploadFileWithHttpInfo(Long petId, String a memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "uploadFile call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "uploadFile call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -704,10 +688,7 @@ public ApiResponse uploadFileWithRequiredFileWithHttpInfo(Long memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "uploadFileWithRequiredFile call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "uploadFileWithRequiredFile call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), diff --git a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/StoreApi.java b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/StoreApi.java index 0a4ad7902690..c06efabb4a8d 100644 --- a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/StoreApi.java +++ b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/StoreApi.java @@ -58,6 +58,14 @@ public StoreApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * Delete purchase order by ID * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors @@ -85,10 +93,7 @@ public ApiResponse deleteOrderWithHttpInfo(String orderId) throws ApiExcep memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "deleteOrder call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "deleteOrder call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -155,10 +160,7 @@ public ApiResponse> getInventoryWithHttpInfo() throws ApiEx memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "getInventory call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "getInventory call received non-success response"); } return new ApiResponse>( localVarResponse.statusCode(), @@ -222,10 +224,7 @@ public ApiResponse getOrderByIdWithHttpInfo(Long orderId) throws ApiExcep memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "getOrderById call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "getOrderById call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -294,10 +293,7 @@ public ApiResponse placeOrderWithHttpInfo(Order order) throws ApiExceptio memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "placeOrder call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "placeOrder call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), diff --git a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/UserApi.java b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/UserApi.java index 56579ab17f04..3c1a68c98815 100644 --- a/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/UserApi.java +++ b/samples/openapi3/client/petstore/java/native/src/main/java/org/openapitools/client/api/UserApi.java @@ -58,6 +58,14 @@ public UserApi(ApiClient apiClient) { memberVarResponseInterceptor = apiClient.getResponseInterceptor(); } + protected ApiException createApiException(HttpResponse response, String msgPrefix) throws IOException { + String body = response.body() == null ? null : new String(response.body().readAllBytes()); + if (body != null) { + msgPrefix += ": " + body; + } + return new ApiException(response.statusCode(), msgPrefix, response.headers(), body); + } + /** * Create user * This can only be done by the logged in user. @@ -85,10 +93,7 @@ public ApiResponse createUserWithHttpInfo(User user) throws ApiException { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "createUser call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "createUser call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -160,10 +165,7 @@ public ApiResponse createUsersWithArrayInputWithHttpInfo(List user) memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "createUsersWithArrayInput call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "createUsersWithArrayInput call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -235,10 +237,7 @@ public ApiResponse createUsersWithListInputWithHttpInfo(List user) t memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "createUsersWithListInput call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "createUsersWithListInput call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -310,10 +309,7 @@ public ApiResponse deleteUserWithHttpInfo(String username) throws ApiExcep memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "deleteUser call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "deleteUser call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -382,10 +378,7 @@ public ApiResponse getUserByNameWithHttpInfo(String username) throws ApiEx memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "getUserByName call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "getUserByName call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -456,10 +449,7 @@ public ApiResponse loginUserWithHttpInfo(String username, String passwor memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "loginUser call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "loginUser call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -537,10 +527,7 @@ public ApiResponse logoutUserWithHttpInfo() throws ApiException { memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "logoutUser call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "logoutUser call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), @@ -604,10 +591,7 @@ public ApiResponse updateUserWithHttpInfo(String username, User user) thro memberVarResponseInterceptor.accept(localVarResponse); } if (localVarResponse.statusCode()/ 100 != 2) { - throw new ApiException(localVarResponse.statusCode(), - "updateUser call received non-success response", - localVarResponse.headers(), - localVarResponse.body() == null ? null : new String(localVarResponse.body().readAllBytes())); + throw createApiException(localVarResponse, "updateUser call received non-success response"); } return new ApiResponse( localVarResponse.statusCode(), From 4a63aae746edf1186fb2f44063df38ce582df958 Mon Sep 17 00:00:00 2001 From: Christopher Schramm Date: Fri, 16 Apr 2021 06:01:05 +0200 Subject: [PATCH 020/186] [Kotlin] Fix (de)serialization of enum classes (#7917) While inner enum classes from dataClass.mustache work fine, standalone enum classes lack `@JsonProperty` annotations so that Jackson uses names instead of values. --- .../codegen/languages/KotlinSpringServerCodegen.java | 2 ++ .../src/main/resources/kotlin-spring/enumClass.mustache | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinSpringServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinSpringServerCodegen.java index cf3c64b03383..cdaae2afe679 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinSpringServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinSpringServerCodegen.java @@ -540,8 +540,10 @@ public Map postProcessModelsEnum(Map objs) { .filter(cm -> Boolean.TRUE.equals(cm.isEnum) && cm.allowableValues != null) .forEach(cm -> { cm.imports.add(importMapping.get("JsonValue")); + cm.imports.add(importMapping.get("JsonProperty")); Map item = new HashMap<>(); item.put("import", importMapping.get("JsonValue")); + item.put("import", importMapping.get("JsonProperty")); imports.add(item); }); diff --git a/modules/openapi-generator/src/main/resources/kotlin-spring/enumClass.mustache b/modules/openapi-generator/src/main/resources/kotlin-spring/enumClass.mustache index 2f24a1de76b2..bd0794c7f12f 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-spring/enumClass.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-spring/enumClass.mustache @@ -4,6 +4,6 @@ */ enum class {{classname}}(val value: {{dataType}}) { {{#allowableValues}}{{#enumVars}} - {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}} + @JsonProperty({{{value}}}) {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}} {{/enumVars}}{{/allowableValues}} } From 515d4a01537b931a704bf03a55814062b60fceb1 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 16 Apr 2021 18:07:41 +0800 Subject: [PATCH 021/186] [Java][JavaJaxRS] Respect readOnly/writeOnly attribute markers (#9276) * [Java] [JavaJaxRS] Respect readOnly/writeOnly attribute markers Generate jackson JsonProperty like following: - `readOnly` is present in Spec: `@JsonProperty(value = "[name]", access = JsonProperty.Access.READ_ONLY)` - `writeOnly` is present in Spec: `@JsonProperty(value = "[name]", access = JsonProperty.Access.WRITE_ONLY)` Edge case: both are present -> Spec is invalid and generator cancels anyway with: > org.openapitools.codegen.SpecValidationException: There were issues with the specification. The option can be disabled via validateSpec (Maven/Gradle) or --skip-validate-spec (CLI). > | Error count: 1, Warning count: 1 > Errors: > -attribute components.schemas.Example. writeOnly and readOnly are both present * update samples Co-authored-by: Michael Kroll <9883575+mickroll@users.noreply.github.com> --- .../main/resources/JavaJaxRS/pojo.mustache | 2 +- .../model/AdditionalPropertiesAnyType.java | 2 +- .../model/AdditionalPropertiesArray.java | 2 +- .../model/AdditionalPropertiesBoolean.java | 2 +- .../model/AdditionalPropertiesClass.java | 22 +++---- .../model/AdditionalPropertiesInteger.java | 2 +- .../model/AdditionalPropertiesNumber.java | 2 +- .../model/AdditionalPropertiesObject.java | 2 +- .../model/AdditionalPropertiesString.java | 2 +- .../java/org/openapitools/model/Animal.java | 4 +- .../model/ArrayOfArrayOfNumberOnly.java | 2 +- .../openapitools/model/ArrayOfNumberOnly.java | 2 +- .../org/openapitools/model/ArrayTest.java | 6 +- .../java/org/openapitools/model/BigCat.java | 2 +- .../org/openapitools/model/BigCatAllOf.java | 2 +- .../openapitools/model/Capitalization.java | 12 ++-- .../gen/java/org/openapitools/model/Cat.java | 2 +- .../java/org/openapitools/model/CatAllOf.java | 2 +- .../java/org/openapitools/model/Category.java | 4 +- .../org/openapitools/model/ClassModel.java | 2 +- .../java/org/openapitools/model/Client.java | 2 +- .../gen/java/org/openapitools/model/Dog.java | 2 +- .../java/org/openapitools/model/DogAllOf.java | 2 +- .../org/openapitools/model/EnumArrays.java | 4 +- .../java/org/openapitools/model/EnumTest.java | 10 ++-- .../model/FileSchemaTestClass.java | 4 +- .../org/openapitools/model/FormatTest.java | 28 ++++----- .../openapitools/model/HasOnlyReadOnly.java | 4 +- .../java/org/openapitools/model/MapTest.java | 8 +-- ...ropertiesAndAdditionalPropertiesClass.java | 6 +- .../openapitools/model/Model200Response.java | 4 +- .../openapitools/model/ModelApiResponse.java | 6 +- .../org/openapitools/model/ModelReturn.java | 2 +- .../gen/java/org/openapitools/model/Name.java | 8 +-- .../org/openapitools/model/NumberOnly.java | 2 +- .../java/org/openapitools/model/Order.java | 12 ++-- .../openapitools/model/OuterComposite.java | 6 +- .../gen/java/org/openapitools/model/Pet.java | 12 ++-- .../org/openapitools/model/ReadOnlyFirst.java | 4 +- .../openapitools/model/SpecialModelName.java | 2 +- .../gen/java/org/openapitools/model/Tag.java | 4 +- .../openapitools/model/TypeHolderDefault.java | 10 ++-- .../openapitools/model/TypeHolderExample.java | 12 ++-- .../gen/java/org/openapitools/model/User.java | 16 ++--- .../java/org/openapitools/model/XmlItem.java | 58 +++++++++---------- .../model/AdditionalPropertiesClass.java | 4 +- .../java/org/openapitools/model/Animal.java | 4 +- .../model/ArrayOfArrayOfNumberOnly.java | 2 +- .../openapitools/model/ArrayOfNumberOnly.java | 2 +- .../org/openapitools/model/ArrayTest.java | 6 +- .../openapitools/model/Capitalization.java | 12 ++-- .../gen/java/org/openapitools/model/Cat.java | 2 +- .../java/org/openapitools/model/CatAllOf.java | 2 +- .../java/org/openapitools/model/Category.java | 4 +- .../org/openapitools/model/ClassModel.java | 2 +- .../java/org/openapitools/model/Client.java | 2 +- .../gen/java/org/openapitools/model/Dog.java | 2 +- .../java/org/openapitools/model/DogAllOf.java | 2 +- .../org/openapitools/model/EnumArrays.java | 4 +- .../java/org/openapitools/model/EnumTest.java | 16 ++--- .../model/FileSchemaTestClass.java | 4 +- .../gen/java/org/openapitools/model/Foo.java | 2 +- .../org/openapitools/model/FormatTest.java | 32 +++++----- .../openapitools/model/HasOnlyReadOnly.java | 4 +- .../openapitools/model/HealthCheckResult.java | 2 +- .../model/InlineResponseDefault.java | 2 +- .../java/org/openapitools/model/MapTest.java | 8 +-- ...ropertiesAndAdditionalPropertiesClass.java | 6 +- .../openapitools/model/Model200Response.java | 4 +- .../openapitools/model/ModelApiResponse.java | 6 +- .../org/openapitools/model/ModelReturn.java | 2 +- .../gen/java/org/openapitools/model/Name.java | 8 +-- .../org/openapitools/model/NullableClass.java | 24 ++++---- .../org/openapitools/model/NumberOnly.java | 2 +- .../java/org/openapitools/model/Order.java | 12 ++-- .../openapitools/model/OuterComposite.java | 6 +- .../model/OuterObjectWithEnumProperty.java | 2 +- .../gen/java/org/openapitools/model/Pet.java | 12 ++-- .../org/openapitools/model/ReadOnlyFirst.java | 4 +- .../openapitools/model/SpecialModelName.java | 2 +- .../gen/java/org/openapitools/model/Tag.java | 4 +- .../gen/java/org/openapitools/model/User.java | 16 ++--- .../model/AdditionalPropertiesAnyType.java | 2 +- .../model/AdditionalPropertiesArray.java | 2 +- .../model/AdditionalPropertiesBoolean.java | 2 +- .../model/AdditionalPropertiesClass.java | 22 +++---- .../model/AdditionalPropertiesInteger.java | 2 +- .../model/AdditionalPropertiesNumber.java | 2 +- .../model/AdditionalPropertiesObject.java | 2 +- .../model/AdditionalPropertiesString.java | 2 +- .../java/org/openapitools/model/Animal.java | 4 +- .../model/ArrayOfArrayOfNumberOnly.java | 2 +- .../openapitools/model/ArrayOfNumberOnly.java | 2 +- .../org/openapitools/model/ArrayTest.java | 6 +- .../java/org/openapitools/model/BigCat.java | 2 +- .../org/openapitools/model/BigCatAllOf.java | 2 +- .../openapitools/model/Capitalization.java | 12 ++-- .../gen/java/org/openapitools/model/Cat.java | 2 +- .../java/org/openapitools/model/CatAllOf.java | 2 +- .../java/org/openapitools/model/Category.java | 4 +- .../org/openapitools/model/ClassModel.java | 2 +- .../java/org/openapitools/model/Client.java | 2 +- .../gen/java/org/openapitools/model/Dog.java | 2 +- .../java/org/openapitools/model/DogAllOf.java | 2 +- .../org/openapitools/model/EnumArrays.java | 4 +- .../java/org/openapitools/model/EnumTest.java | 10 ++-- .../model/FileSchemaTestClass.java | 4 +- .../org/openapitools/model/FormatTest.java | 28 ++++----- .../openapitools/model/HasOnlyReadOnly.java | 4 +- .../java/org/openapitools/model/MapTest.java | 8 +-- ...ropertiesAndAdditionalPropertiesClass.java | 6 +- .../openapitools/model/Model200Response.java | 4 +- .../openapitools/model/ModelApiResponse.java | 6 +- .../org/openapitools/model/ModelReturn.java | 2 +- .../gen/java/org/openapitools/model/Name.java | 8 +-- .../org/openapitools/model/NumberOnly.java | 2 +- .../java/org/openapitools/model/Order.java | 12 ++-- .../openapitools/model/OuterComposite.java | 6 +- .../gen/java/org/openapitools/model/Pet.java | 12 ++-- .../org/openapitools/model/ReadOnlyFirst.java | 4 +- .../openapitools/model/SpecialModelName.java | 2 +- .../gen/java/org/openapitools/model/Tag.java | 4 +- .../openapitools/model/TypeHolderDefault.java | 10 ++-- .../openapitools/model/TypeHolderExample.java | 12 ++-- .../gen/java/org/openapitools/model/User.java | 16 ++--- .../java/org/openapitools/model/XmlItem.java | 58 +++++++++---------- .../model/AdditionalPropertiesAnyType.java | 2 +- .../model/AdditionalPropertiesArray.java | 2 +- .../model/AdditionalPropertiesBoolean.java | 2 +- .../model/AdditionalPropertiesClass.java | 22 +++---- .../model/AdditionalPropertiesInteger.java | 2 +- .../model/AdditionalPropertiesNumber.java | 2 +- .../model/AdditionalPropertiesObject.java | 2 +- .../model/AdditionalPropertiesString.java | 2 +- .../java/org/openapitools/model/Animal.java | 4 +- .../model/ArrayOfArrayOfNumberOnly.java | 2 +- .../openapitools/model/ArrayOfNumberOnly.java | 2 +- .../org/openapitools/model/ArrayTest.java | 6 +- .../java/org/openapitools/model/BigCat.java | 2 +- .../org/openapitools/model/BigCatAllOf.java | 2 +- .../openapitools/model/Capitalization.java | 12 ++-- .../gen/java/org/openapitools/model/Cat.java | 2 +- .../java/org/openapitools/model/CatAllOf.java | 2 +- .../java/org/openapitools/model/Category.java | 4 +- .../org/openapitools/model/ClassModel.java | 2 +- .../java/org/openapitools/model/Client.java | 2 +- .../gen/java/org/openapitools/model/Dog.java | 2 +- .../java/org/openapitools/model/DogAllOf.java | 2 +- .../org/openapitools/model/EnumArrays.java | 4 +- .../java/org/openapitools/model/EnumTest.java | 10 ++-- .../model/FileSchemaTestClass.java | 4 +- .../org/openapitools/model/FormatTest.java | 28 ++++----- .../openapitools/model/HasOnlyReadOnly.java | 4 +- .../java/org/openapitools/model/MapTest.java | 8 +-- ...ropertiesAndAdditionalPropertiesClass.java | 6 +- .../openapitools/model/Model200Response.java | 4 +- .../openapitools/model/ModelApiResponse.java | 6 +- .../org/openapitools/model/ModelReturn.java | 2 +- .../gen/java/org/openapitools/model/Name.java | 8 +-- .../org/openapitools/model/NumberOnly.java | 2 +- .../java/org/openapitools/model/Order.java | 12 ++-- .../openapitools/model/OuterComposite.java | 6 +- .../gen/java/org/openapitools/model/Pet.java | 12 ++-- .../org/openapitools/model/ReadOnlyFirst.java | 4 +- .../openapitools/model/SpecialModelName.java | 2 +- .../gen/java/org/openapitools/model/Tag.java | 4 +- .../openapitools/model/TypeHolderDefault.java | 10 ++-- .../openapitools/model/TypeHolderExample.java | 12 ++-- .../gen/java/org/openapitools/model/User.java | 16 ++--- .../java/org/openapitools/model/XmlItem.java | 58 +++++++++---------- .../model/AdditionalPropertiesAnyType.java | 2 +- .../model/AdditionalPropertiesArray.java | 2 +- .../model/AdditionalPropertiesBoolean.java | 2 +- .../model/AdditionalPropertiesClass.java | 22 +++---- .../model/AdditionalPropertiesInteger.java | 2 +- .../model/AdditionalPropertiesNumber.java | 2 +- .../model/AdditionalPropertiesObject.java | 2 +- .../model/AdditionalPropertiesString.java | 2 +- .../java/org/openapitools/model/Animal.java | 4 +- .../model/ArrayOfArrayOfNumberOnly.java | 2 +- .../openapitools/model/ArrayOfNumberOnly.java | 2 +- .../org/openapitools/model/ArrayTest.java | 6 +- .../java/org/openapitools/model/BigCat.java | 2 +- .../org/openapitools/model/BigCatAllOf.java | 2 +- .../openapitools/model/Capitalization.java | 12 ++-- .../gen/java/org/openapitools/model/Cat.java | 2 +- .../java/org/openapitools/model/CatAllOf.java | 2 +- .../java/org/openapitools/model/Category.java | 4 +- .../org/openapitools/model/ClassModel.java | 2 +- .../java/org/openapitools/model/Client.java | 2 +- .../gen/java/org/openapitools/model/Dog.java | 2 +- .../java/org/openapitools/model/DogAllOf.java | 2 +- .../org/openapitools/model/EnumArrays.java | 4 +- .../java/org/openapitools/model/EnumTest.java | 10 ++-- .../model/FileSchemaTestClass.java | 4 +- .../org/openapitools/model/FormatTest.java | 28 ++++----- .../openapitools/model/HasOnlyReadOnly.java | 4 +- .../java/org/openapitools/model/MapTest.java | 8 +-- ...ropertiesAndAdditionalPropertiesClass.java | 6 +- .../openapitools/model/Model200Response.java | 4 +- .../openapitools/model/ModelApiResponse.java | 6 +- .../org/openapitools/model/ModelReturn.java | 2 +- .../gen/java/org/openapitools/model/Name.java | 8 +-- .../org/openapitools/model/NumberOnly.java | 2 +- .../java/org/openapitools/model/Order.java | 12 ++-- .../openapitools/model/OuterComposite.java | 6 +- .../gen/java/org/openapitools/model/Pet.java | 12 ++-- .../org/openapitools/model/ReadOnlyFirst.java | 4 +- .../openapitools/model/SpecialModelName.java | 2 +- .../gen/java/org/openapitools/model/Tag.java | 4 +- .../openapitools/model/TypeHolderDefault.java | 10 ++-- .../openapitools/model/TypeHolderExample.java | 12 ++-- .../gen/java/org/openapitools/model/User.java | 16 ++--- .../java/org/openapitools/model/XmlItem.java | 58 +++++++++---------- .../model/AdditionalPropertiesAnyType.java | 2 +- .../model/AdditionalPropertiesArray.java | 2 +- .../model/AdditionalPropertiesBoolean.java | 2 +- .../model/AdditionalPropertiesClass.java | 22 +++---- .../model/AdditionalPropertiesInteger.java | 2 +- .../model/AdditionalPropertiesNumber.java | 2 +- .../model/AdditionalPropertiesObject.java | 2 +- .../model/AdditionalPropertiesString.java | 2 +- .../java/org/openapitools/model/Animal.java | 4 +- .../model/ArrayOfArrayOfNumberOnly.java | 2 +- .../openapitools/model/ArrayOfNumberOnly.java | 2 +- .../org/openapitools/model/ArrayTest.java | 6 +- .../java/org/openapitools/model/BigCat.java | 2 +- .../org/openapitools/model/BigCatAllOf.java | 2 +- .../openapitools/model/Capitalization.java | 12 ++-- .../gen/java/org/openapitools/model/Cat.java | 2 +- .../java/org/openapitools/model/CatAllOf.java | 2 +- .../java/org/openapitools/model/Category.java | 4 +- .../org/openapitools/model/ClassModel.java | 2 +- .../java/org/openapitools/model/Client.java | 2 +- .../gen/java/org/openapitools/model/Dog.java | 2 +- .../java/org/openapitools/model/DogAllOf.java | 2 +- .../org/openapitools/model/EnumArrays.java | 4 +- .../java/org/openapitools/model/EnumTest.java | 10 ++-- .../model/FileSchemaTestClass.java | 4 +- .../org/openapitools/model/FormatTest.java | 28 ++++----- .../openapitools/model/HasOnlyReadOnly.java | 4 +- .../java/org/openapitools/model/MapTest.java | 8 +-- ...ropertiesAndAdditionalPropertiesClass.java | 6 +- .../openapitools/model/Model200Response.java | 4 +- .../openapitools/model/ModelApiResponse.java | 6 +- .../org/openapitools/model/ModelReturn.java | 2 +- .../gen/java/org/openapitools/model/Name.java | 8 +-- .../org/openapitools/model/NumberOnly.java | 2 +- .../java/org/openapitools/model/Order.java | 12 ++-- .../openapitools/model/OuterComposite.java | 6 +- .../gen/java/org/openapitools/model/Pet.java | 12 ++-- .../org/openapitools/model/ReadOnlyFirst.java | 4 +- .../openapitools/model/SpecialModelName.java | 2 +- .../gen/java/org/openapitools/model/Tag.java | 4 +- .../openapitools/model/TypeHolderDefault.java | 10 ++-- .../openapitools/model/TypeHolderExample.java | 12 ++-- .../gen/java/org/openapitools/model/User.java | 16 ++--- .../java/org/openapitools/model/XmlItem.java | 58 +++++++++---------- 258 files changed, 876 insertions(+), 876 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/pojo.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/pojo.mustache index 6bde84c3fdd9..637add30c23b 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/pojo.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/pojo.mustache @@ -87,7 +87,7 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali {{{vendorExtensions.x-extra-annotation}}} {{/vendorExtensions.x-extra-annotation}} {{#jackson}} - @JsonProperty("{{baseName}}") + @JsonProperty(value = "{{baseName}}"{{#isReadOnly}}, access = JsonProperty.Access.READ_ONLY{{/isReadOnly}}{{#isWriteOnly}}, access = JsonProperty.Access.WRITE_ONLY{{/isWriteOnly}}) {{/jackson}} @ApiModelProperty({{#example}}example = "{{{example}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") {{#useBeanValidation}}{{>beanValidation}}{{/useBeanValidation}} diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java index 2177f6a70a32..c9f806f7d523 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java @@ -46,7 +46,7 @@ public AdditionalPropertiesAnyType name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java index c15893f94a9d..61a99c3d4b87 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java @@ -47,7 +47,7 @@ public AdditionalPropertiesArray name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java index 7858bc6c063f..0370765dcc20 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java @@ -46,7 +46,7 @@ public AdditionalPropertiesBoolean name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java index 6cb8e220db95..7174c0f0eb67 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java @@ -106,7 +106,7 @@ public AdditionalPropertiesClass putMapStringItem(String key, String mapStringIt * Get mapString * @return mapString **/ - @JsonProperty("map_string") + @JsonProperty(value = "map_string") @ApiModelProperty(value = "") public Map getMapString() { @@ -134,7 +134,7 @@ public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumb * Get mapNumber * @return mapNumber **/ - @JsonProperty("map_number") + @JsonProperty(value = "map_number") @ApiModelProperty(value = "") @Valid public Map getMapNumber() { @@ -162,7 +162,7 @@ public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntege * Get mapInteger * @return mapInteger **/ - @JsonProperty("map_integer") + @JsonProperty(value = "map_integer") @ApiModelProperty(value = "") public Map getMapInteger() { @@ -190,7 +190,7 @@ public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBoolea * Get mapBoolean * @return mapBoolean **/ - @JsonProperty("map_boolean") + @JsonProperty(value = "map_boolean") @ApiModelProperty(value = "") public Map getMapBoolean() { @@ -218,7 +218,7 @@ public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List> getMapArrayInteger() { @@ -246,7 +246,7 @@ public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List * Get mapArrayAnytype * @return mapArrayAnytype **/ - @JsonProperty("map_array_anytype") + @JsonProperty(value = "map_array_anytype") @ApiModelProperty(value = "") @Valid public Map> getMapArrayAnytype() { @@ -274,7 +274,7 @@ public AdditionalPropertiesClass putMapMapStringItem(String key, Map> getMapMapString() { @@ -302,7 +302,7 @@ public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map> getMapMapAnytype() { @@ -322,7 +322,7 @@ public AdditionalPropertiesClass anytype1(Object anytype1) { * Get anytype1 * @return anytype1 **/ - @JsonProperty("anytype_1") + @JsonProperty(value = "anytype_1") @ApiModelProperty(value = "") public Object getAnytype1() { @@ -342,7 +342,7 @@ public AdditionalPropertiesClass anytype2(Object anytype2) { * Get anytype2 * @return anytype2 **/ - @JsonProperty("anytype_2") + @JsonProperty(value = "anytype_2") @ApiModelProperty(value = "") public Object getAnytype2() { @@ -362,7 +362,7 @@ public AdditionalPropertiesClass anytype3(Object anytype3) { * Get anytype3 * @return anytype3 **/ - @JsonProperty("anytype_3") + @JsonProperty(value = "anytype_3") @ApiModelProperty(value = "") public Object getAnytype3() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java index a51877c6e514..f7ecf1a1106e 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java @@ -46,7 +46,7 @@ public AdditionalPropertiesInteger name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java index 808ed25b4ad4..8608ce3f5918 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java @@ -47,7 +47,7 @@ public AdditionalPropertiesNumber name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java index 0d224bd8ccb5..4dadea8d0f96 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java @@ -46,7 +46,7 @@ public AdditionalPropertiesObject name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java index 21294ea53de2..8fc7ab782b6f 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java @@ -46,7 +46,7 @@ public AdditionalPropertiesString name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Animal.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Animal.java index f504ba2e89bd..bd20629cac45 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Animal.java @@ -57,7 +57,7 @@ public Animal className(String className) { * Get className * @return className **/ - @JsonProperty("className") + @JsonProperty(value = "className") @ApiModelProperty(required = true, value = "") @NotNull public String getClassName() { @@ -77,7 +77,7 @@ public Animal color(String color) { * Get color * @return color **/ - @JsonProperty("color") + @JsonProperty(value = "color") @ApiModelProperty(value = "") public String getColor() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java index c4a31496237b..33121369fee4 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java @@ -55,7 +55,7 @@ public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List arrayAr * Get arrayArrayNumber * @return arrayArrayNumber **/ - @JsonProperty("ArrayArrayNumber") + @JsonProperty(value = "ArrayArrayNumber") @ApiModelProperty(value = "") @Valid public List> getArrayArrayNumber() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java index b164acb08585..efb1371353d9 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java @@ -55,7 +55,7 @@ public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) { * Get arrayNumber * @return arrayNumber **/ - @JsonProperty("ArrayNumber") + @JsonProperty(value = "ArrayNumber") @ApiModelProperty(value = "") @Valid public List getArrayNumber() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayTest.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayTest.java index 16bd74092a96..3bd201dd0617 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayTest.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ArrayTest.java @@ -65,7 +65,7 @@ public ArrayTest addArrayOfStringItem(String arrayOfStringItem) { * Get arrayOfString * @return arrayOfString **/ - @JsonProperty("array_of_string") + @JsonProperty(value = "array_of_string") @ApiModelProperty(value = "") public List getArrayOfString() { @@ -93,7 +93,7 @@ public ArrayTest addArrayArrayOfIntegerItem(List arrayArrayOfIntegerItem) * Get arrayArrayOfInteger * @return arrayArrayOfInteger **/ - @JsonProperty("array_array_of_integer") + @JsonProperty(value = "array_array_of_integer") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfInteger() { @@ -121,7 +121,7 @@ public ArrayTest addArrayArrayOfModelItem(List arrayArrayOfModelI * Get arrayArrayOfModel * @return arrayArrayOfModel **/ - @JsonProperty("array_array_of_model") + @JsonProperty(value = "array_array_of_model") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfModel() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/BigCat.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/BigCat.java index 1c94c77319b2..5e0d5ae925d7 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/BigCat.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/BigCat.java @@ -82,7 +82,7 @@ public BigCat kind(KindEnum kind) { * Get kind * @return kind **/ - @JsonProperty("kind") + @JsonProperty(value = "kind") @ApiModelProperty(value = "") public KindEnum getKind() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/BigCatAllOf.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/BigCatAllOf.java index 9860e5423056..e2c9cc69de8b 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/BigCatAllOf.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/BigCatAllOf.java @@ -80,7 +80,7 @@ public BigCatAllOf kind(KindEnum kind) { * Get kind * @return kind **/ - @JsonProperty("kind") + @JsonProperty(value = "kind") @ApiModelProperty(value = "") public KindEnum getKind() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Capitalization.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Capitalization.java index 21173ba5fd1b..6d180ab1ed1e 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Capitalization.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Capitalization.java @@ -69,7 +69,7 @@ public Capitalization smallCamel(String smallCamel) { * Get smallCamel * @return smallCamel **/ - @JsonProperty("smallCamel") + @JsonProperty(value = "smallCamel") @ApiModelProperty(value = "") public String getSmallCamel() { @@ -89,7 +89,7 @@ public Capitalization capitalCamel(String capitalCamel) { * Get capitalCamel * @return capitalCamel **/ - @JsonProperty("CapitalCamel") + @JsonProperty(value = "CapitalCamel") @ApiModelProperty(value = "") public String getCapitalCamel() { @@ -109,7 +109,7 @@ public Capitalization smallSnake(String smallSnake) { * Get smallSnake * @return smallSnake **/ - @JsonProperty("small_Snake") + @JsonProperty(value = "small_Snake") @ApiModelProperty(value = "") public String getSmallSnake() { @@ -129,7 +129,7 @@ public Capitalization capitalSnake(String capitalSnake) { * Get capitalSnake * @return capitalSnake **/ - @JsonProperty("Capital_Snake") + @JsonProperty(value = "Capital_Snake") @ApiModelProperty(value = "") public String getCapitalSnake() { @@ -149,7 +149,7 @@ public Capitalization scAETHFlowPoints(String scAETHFlowPoints) { * Get scAETHFlowPoints * @return scAETHFlowPoints **/ - @JsonProperty("SCA_ETH_Flow_Points") + @JsonProperty(value = "SCA_ETH_Flow_Points") @ApiModelProperty(value = "") public String getScAETHFlowPoints() { @@ -169,7 +169,7 @@ public Capitalization ATT_NAME(String ATT_NAME) { * Name of the pet * @return ATT_NAME **/ - @JsonProperty("ATT_NAME") + @JsonProperty(value = "ATT_NAME") @ApiModelProperty(value = "Name of the pet ") public String getATTNAME() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Cat.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Cat.java index f371a81df8f3..dd713740017f 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Cat.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Cat.java @@ -46,7 +46,7 @@ public Cat declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/CatAllOf.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/CatAllOf.java index 86715b878ddb..0fafea591aeb 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/CatAllOf.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/CatAllOf.java @@ -44,7 +44,7 @@ public CatAllOf declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Category.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Category.java index cc10e0fe4de6..ab8b79f3af5c 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Category.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Category.java @@ -49,7 +49,7 @@ public Category id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -69,7 +69,7 @@ public Category name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public String getName() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ClassModel.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ClassModel.java index eb09d470010b..eb0be37f6d2b 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ClassModel.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ClassModel.java @@ -45,7 +45,7 @@ public ClassModel propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("_class") + @JsonProperty(value = "_class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Client.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Client.java index d7b603e85bed..aa5d892fdf7a 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Client.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Client.java @@ -44,7 +44,7 @@ public Client client(String client) { * Get client * @return client **/ - @JsonProperty("client") + @JsonProperty(value = "client") @ApiModelProperty(value = "") public String getClient() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Dog.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Dog.java index 86304bcbf2b9..3e551b65d65b 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Dog.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Dog.java @@ -46,7 +46,7 @@ public Dog breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/DogAllOf.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/DogAllOf.java index 25ee4a8ed382..032ee0e253f4 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/DogAllOf.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/DogAllOf.java @@ -44,7 +44,7 @@ public DogAllOf breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/EnumArrays.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/EnumArrays.java index 0bd13b121484..99eccbc1e0c6 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/EnumArrays.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/EnumArrays.java @@ -114,7 +114,7 @@ public EnumArrays justSymbol(JustSymbolEnum justSymbol) { * Get justSymbol * @return justSymbol **/ - @JsonProperty("just_symbol") + @JsonProperty(value = "just_symbol") @ApiModelProperty(value = "") public JustSymbolEnum getJustSymbol() { @@ -142,7 +142,7 @@ public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) { * Get arrayEnum * @return arrayEnum **/ - @JsonProperty("array_enum") + @JsonProperty(value = "array_enum") @ApiModelProperty(value = "") public List getArrayEnum() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/EnumTest.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/EnumTest.java index 06c0cd2730b3..5f19eca41622 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/EnumTest.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/EnumTest.java @@ -194,7 +194,7 @@ public EnumTest enumString(EnumStringEnum enumString) { * Get enumString * @return enumString **/ - @JsonProperty("enum_string") + @JsonProperty(value = "enum_string") @ApiModelProperty(value = "") public EnumStringEnum getEnumString() { @@ -214,7 +214,7 @@ public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) { * Get enumStringRequired * @return enumStringRequired **/ - @JsonProperty("enum_string_required") + @JsonProperty(value = "enum_string_required") @ApiModelProperty(required = true, value = "") @NotNull public EnumStringRequiredEnum getEnumStringRequired() { @@ -234,7 +234,7 @@ public EnumTest enumInteger(EnumIntegerEnum enumInteger) { * Get enumInteger * @return enumInteger **/ - @JsonProperty("enum_integer") + @JsonProperty(value = "enum_integer") @ApiModelProperty(value = "") public EnumIntegerEnum getEnumInteger() { @@ -254,7 +254,7 @@ public EnumTest enumNumber(EnumNumberEnum enumNumber) { * Get enumNumber * @return enumNumber **/ - @JsonProperty("enum_number") + @JsonProperty(value = "enum_number") @ApiModelProperty(value = "") public EnumNumberEnum getEnumNumber() { @@ -274,7 +274,7 @@ public EnumTest outerEnum(OuterEnum outerEnum) { * Get outerEnum * @return outerEnum **/ - @JsonProperty("outerEnum") + @JsonProperty(value = "outerEnum") @ApiModelProperty(value = "") @Valid public OuterEnum getOuterEnum() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/FileSchemaTestClass.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/FileSchemaTestClass.java index 13078766c9ba..7debd01e8dd0 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/FileSchemaTestClass.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/FileSchemaTestClass.java @@ -51,7 +51,7 @@ public FileSchemaTestClass file(java.io.File file) { * Get file * @return file **/ - @JsonProperty("file") + @JsonProperty(value = "file") @ApiModelProperty(value = "") @Valid public java.io.File getFile() { @@ -79,7 +79,7 @@ public FileSchemaTestClass addFilesItem(java.io.File filesItem) { * Get files * @return files **/ - @JsonProperty("files") + @JsonProperty(value = "files") @ApiModelProperty(value = "") @Valid public List getFiles() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/FormatTest.java index c3022356f9f2..e6b1aea1570f 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/FormatTest.java @@ -116,7 +116,7 @@ public FormatTest integer(Integer integer) { * maximum: 100 * @return integer **/ - @JsonProperty("integer") + @JsonProperty(value = "integer") @ApiModelProperty(value = "") @Min(10) @Max(100) public Integer getInteger() { @@ -138,7 +138,7 @@ public FormatTest int32(Integer int32) { * maximum: 200 * @return int32 **/ - @JsonProperty("int32") + @JsonProperty(value = "int32") @ApiModelProperty(value = "") @Min(20) @Max(200) public Integer getInt32() { @@ -158,7 +158,7 @@ public FormatTest int64(Long int64) { * Get int64 * @return int64 **/ - @JsonProperty("int64") + @JsonProperty(value = "int64") @ApiModelProperty(value = "") public Long getInt64() { @@ -180,7 +180,7 @@ public FormatTest number(BigDecimal number) { * maximum: 543.2 * @return number **/ - @JsonProperty("number") + @JsonProperty(value = "number") @ApiModelProperty(required = true, value = "") @NotNull @Valid @DecimalMin("32.1") @DecimalMax("543.2") public BigDecimal getNumber() { @@ -202,7 +202,7 @@ public FormatTest _float(Float _float) { * maximum: 987.6 * @return _float **/ - @JsonProperty("float") + @JsonProperty(value = "float") @ApiModelProperty(value = "") @DecimalMin("54.3") @DecimalMax("987.6") public Float getFloat() { @@ -224,7 +224,7 @@ public FormatTest _double(Double _double) { * maximum: 123.4 * @return _double **/ - @JsonProperty("double") + @JsonProperty(value = "double") @ApiModelProperty(value = "") @DecimalMin("67.8") @DecimalMax("123.4") public Double getDouble() { @@ -244,7 +244,7 @@ public FormatTest string(String string) { * Get string * @return string **/ - @JsonProperty("string") + @JsonProperty(value = "string") @ApiModelProperty(value = "") @Pattern(regexp="/[a-z]/i") public String getString() { @@ -264,7 +264,7 @@ public FormatTest _byte(byte[] _byte) { * Get _byte * @return _byte **/ - @JsonProperty("byte") + @JsonProperty(value = "byte") @ApiModelProperty(required = true, value = "") @NotNull public byte[] getByte() { @@ -284,7 +284,7 @@ public FormatTest binary(File binary) { * Get binary * @return binary **/ - @JsonProperty("binary") + @JsonProperty(value = "binary") @ApiModelProperty(value = "") public File getBinary() { @@ -304,7 +304,7 @@ public FormatTest date(LocalDate date) { * Get date * @return date **/ - @JsonProperty("date") + @JsonProperty(value = "date") @ApiModelProperty(required = true, value = "") @NotNull public LocalDate getDate() { @@ -324,7 +324,7 @@ public FormatTest dateTime(OffsetDateTime dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public OffsetDateTime getDateTime() { @@ -344,7 +344,7 @@ public FormatTest uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(example = "72f98069-206d-4f12-9f12-3d1e525a8e84", value = "") public UUID getUuid() { @@ -364,7 +364,7 @@ public FormatTest password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(required = true, value = "") @NotNull @Size(min=10,max=64) public String getPassword() { @@ -384,7 +384,7 @@ public FormatTest bigDecimal(BigDecimal bigDecimal) { * Get bigDecimal * @return bigDecimal **/ - @JsonProperty("BigDecimal") + @JsonProperty(value = "BigDecimal") @ApiModelProperty(value = "") @Valid public BigDecimal getBigDecimal() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java index 4a85a3526299..49e5c178cc2f 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java @@ -49,7 +49,7 @@ public HasOnlyReadOnly bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -69,7 +69,7 @@ public HasOnlyReadOnly foo(String foo) { * Get foo * @return foo **/ - @JsonProperty("foo") + @JsonProperty(value = "foo", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getFoo() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/MapTest.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/MapTest.java index ea710248eb3a..0f920d2a3ea6 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/MapTest.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/MapTest.java @@ -102,7 +102,7 @@ public MapTest putMapMapOfStringItem(String key, Map mapMapOfStr * Get mapMapOfString * @return mapMapOfString **/ - @JsonProperty("map_map_of_string") + @JsonProperty(value = "map_map_of_string") @ApiModelProperty(value = "") @Valid public Map> getMapMapOfString() { @@ -130,7 +130,7 @@ public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) * Get mapOfEnumString * @return mapOfEnumString **/ - @JsonProperty("map_of_enum_string") + @JsonProperty(value = "map_of_enum_string") @ApiModelProperty(value = "") public Map getMapOfEnumString() { @@ -158,7 +158,7 @@ public MapTest putDirectMapItem(String key, Boolean directMapItem) { * Get directMap * @return directMap **/ - @JsonProperty("direct_map") + @JsonProperty(value = "direct_map") @ApiModelProperty(value = "") public Map getDirectMap() { @@ -186,7 +186,7 @@ public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) { * Get indirectMap * @return indirectMap **/ - @JsonProperty("indirect_map") + @JsonProperty(value = "indirect_map") @ApiModelProperty(value = "") public Map getIndirectMap() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java index a404fc161d0b..56f41997d170 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java @@ -60,7 +60,7 @@ public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(value = "") public UUID getUuid() { @@ -80,7 +80,7 @@ public MixedPropertiesAndAdditionalPropertiesClass dateTime(OffsetDateTime dateT * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public OffsetDateTime getDateTime() { @@ -108,7 +108,7 @@ public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal * Get map * @return map **/ - @JsonProperty("map") + @JsonProperty(value = "map") @ApiModelProperty(value = "") @Valid public Map getMap() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Model200Response.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Model200Response.java index de4421e21e13..3d502128b84d 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Model200Response.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Model200Response.java @@ -50,7 +50,7 @@ public Model200Response name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public Integer getName() { @@ -70,7 +70,7 @@ public Model200Response propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("class") + @JsonProperty(value = "class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ModelApiResponse.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ModelApiResponse.java index 3fe631f5c022..d2b4bcc66cd9 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ModelApiResponse.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ModelApiResponse.java @@ -54,7 +54,7 @@ public ModelApiResponse code(Integer code) { * Get code * @return code **/ - @JsonProperty("code") + @JsonProperty(value = "code") @ApiModelProperty(value = "") public Integer getCode() { @@ -74,7 +74,7 @@ public ModelApiResponse type(String type) { * Get type * @return type **/ - @JsonProperty("type") + @JsonProperty(value = "type") @ApiModelProperty(value = "") public String getType() { @@ -94,7 +94,7 @@ public ModelApiResponse message(String message) { * Get message * @return message **/ - @JsonProperty("message") + @JsonProperty(value = "message") @ApiModelProperty(value = "") public String getMessage() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ModelReturn.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ModelReturn.java index a33c8543b53c..628e4e58975b 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ModelReturn.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ModelReturn.java @@ -45,7 +45,7 @@ public ModelReturn _return(Integer _return) { * Get _return * @return _return **/ - @JsonProperty("return") + @JsonProperty(value = "return") @ApiModelProperty(value = "") public Integer getReturn() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Name.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Name.java index e0e88d4acd1e..deeead372d63 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Name.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Name.java @@ -60,7 +60,7 @@ public Name name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public Integer getName() { @@ -80,7 +80,7 @@ public Name snakeCase(Integer snakeCase) { * Get snakeCase * @return snakeCase **/ - @JsonProperty("snake_case") + @JsonProperty(value = "snake_case", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer getSnakeCase() { @@ -100,7 +100,7 @@ public Name property(String property) { * Get property * @return property **/ - @JsonProperty("property") + @JsonProperty(value = "property") @ApiModelProperty(value = "") public String getProperty() { @@ -120,7 +120,7 @@ public Name _123number(Integer _123number) { * Get _123number * @return _123number **/ - @JsonProperty("123Number") + @JsonProperty(value = "123Number", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer get123number() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/NumberOnly.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/NumberOnly.java index 6dfda96ddced..63a02a6fceda 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/NumberOnly.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/NumberOnly.java @@ -45,7 +45,7 @@ public NumberOnly justNumber(BigDecimal justNumber) { * Get justNumber * @return justNumber **/ - @JsonProperty("JustNumber") + @JsonProperty(value = "JustNumber") @ApiModelProperty(value = "") @Valid public BigDecimal getJustNumber() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Order.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Order.java index c953dbccbb9a..87a841661665 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Order.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Order.java @@ -104,7 +104,7 @@ public Order id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -124,7 +124,7 @@ public Order petId(Long petId) { * Get petId * @return petId **/ - @JsonProperty("petId") + @JsonProperty(value = "petId") @ApiModelProperty(value = "") public Long getPetId() { @@ -144,7 +144,7 @@ public Order quantity(Integer quantity) { * Get quantity * @return quantity **/ - @JsonProperty("quantity") + @JsonProperty(value = "quantity") @ApiModelProperty(value = "") public Integer getQuantity() { @@ -164,7 +164,7 @@ public Order shipDate(OffsetDateTime shipDate) { * Get shipDate * @return shipDate **/ - @JsonProperty("shipDate") + @JsonProperty(value = "shipDate") @ApiModelProperty(value = "") public OffsetDateTime getShipDate() { @@ -184,7 +184,7 @@ public Order status(StatusEnum status) { * Order Status * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "Order Status") public StatusEnum getStatus() { @@ -204,7 +204,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - @JsonProperty("complete") + @JsonProperty(value = "complete") @ApiModelProperty(value = "") public Boolean getComplete() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/OuterComposite.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/OuterComposite.java index 943768a62507..0c90b69d363d 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/OuterComposite.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/OuterComposite.java @@ -55,7 +55,7 @@ public OuterComposite myNumber(BigDecimal myNumber) { * Get myNumber * @return myNumber **/ - @JsonProperty("my_number") + @JsonProperty(value = "my_number") @ApiModelProperty(value = "") @Valid public BigDecimal getMyNumber() { @@ -75,7 +75,7 @@ public OuterComposite myString(String myString) { * Get myString * @return myString **/ - @JsonProperty("my_string") + @JsonProperty(value = "my_string") @ApiModelProperty(value = "") public String getMyString() { @@ -95,7 +95,7 @@ public OuterComposite myBoolean(Boolean myBoolean) { * Get myBoolean * @return myBoolean **/ - @JsonProperty("my_boolean") + @JsonProperty(value = "my_boolean") @ApiModelProperty(value = "") public Boolean getMyBoolean() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Pet.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Pet.java index 2537652ce8ba..6d027716816b 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Pet.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Pet.java @@ -109,7 +109,7 @@ public Pet id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -129,7 +129,7 @@ public Pet category(Category category) { * Get category * @return category **/ - @JsonProperty("category") + @JsonProperty(value = "category") @ApiModelProperty(value = "") @Valid public Category getCategory() { @@ -149,7 +149,7 @@ public Pet name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(example = "doggie", required = true, value = "") @NotNull public String getName() { @@ -174,7 +174,7 @@ public Pet addPhotoUrlsItem(String photoUrlsItem) { * Get photoUrls * @return photoUrls **/ - @JsonProperty("photoUrls") + @JsonProperty(value = "photoUrls") @ApiModelProperty(required = true, value = "") @NotNull public Set getPhotoUrls() { @@ -202,7 +202,7 @@ public Pet addTagsItem(Tag tagsItem) { * Get tags * @return tags **/ - @JsonProperty("tags") + @JsonProperty(value = "tags") @ApiModelProperty(value = "") @Valid public List getTags() { @@ -222,7 +222,7 @@ public Pet status(StatusEnum status) { * pet status in the store * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "pet status in the store") public StatusEnum getStatus() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ReadOnlyFirst.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ReadOnlyFirst.java index ff231427df0f..51d1241ba7bf 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ReadOnlyFirst.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/ReadOnlyFirst.java @@ -49,7 +49,7 @@ public ReadOnlyFirst bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -69,7 +69,7 @@ public ReadOnlyFirst baz(String baz) { * Get baz * @return baz **/ - @JsonProperty("baz") + @JsonProperty(value = "baz") @ApiModelProperty(value = "") public String getBaz() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/SpecialModelName.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/SpecialModelName.java index 0c4fbc16fdcd..172cd981a676 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/SpecialModelName.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/SpecialModelName.java @@ -44,7 +44,7 @@ public class SpecialModelName implements Serializable { * Get $specialPropertyName * @return $specialPropertyName **/ - @JsonProperty("$special[property.name]") + @JsonProperty(value = "$special[property.name]") @ApiModelProperty(value = "") public Long get$SpecialPropertyName() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Tag.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Tag.java index 2108bd16dd6a..cfe137b1be97 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Tag.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/Tag.java @@ -49,7 +49,7 @@ public Tag id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -69,7 +69,7 @@ public Tag name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/TypeHolderDefault.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/TypeHolderDefault.java index 50c0860a93eb..c32060bf63a5 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/TypeHolderDefault.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/TypeHolderDefault.java @@ -67,7 +67,7 @@ public TypeHolderDefault stringItem(String stringItem) { * Get stringItem * @return stringItem **/ - @JsonProperty("string_item") + @JsonProperty(value = "string_item") @ApiModelProperty(required = true, value = "") @NotNull public String getStringItem() { @@ -87,7 +87,7 @@ public TypeHolderDefault numberItem(BigDecimal numberItem) { * Get numberItem * @return numberItem **/ - @JsonProperty("number_item") + @JsonProperty(value = "number_item") @ApiModelProperty(required = true, value = "") @NotNull @Valid public BigDecimal getNumberItem() { @@ -107,7 +107,7 @@ public TypeHolderDefault integerItem(Integer integerItem) { * Get integerItem * @return integerItem **/ - @JsonProperty("integer_item") + @JsonProperty(value = "integer_item") @ApiModelProperty(required = true, value = "") @NotNull public Integer getIntegerItem() { @@ -127,7 +127,7 @@ public TypeHolderDefault boolItem(Boolean boolItem) { * Get boolItem * @return boolItem **/ - @JsonProperty("bool_item") + @JsonProperty(value = "bool_item") @ApiModelProperty(required = true, value = "") @NotNull public Boolean getBoolItem() { @@ -152,7 +152,7 @@ public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) { * Get arrayItem * @return arrayItem **/ - @JsonProperty("array_item") + @JsonProperty(value = "array_item") @ApiModelProperty(required = true, value = "") @NotNull public List getArrayItem() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/TypeHolderExample.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/TypeHolderExample.java index f7e12684f56e..e6e731b04cfe 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/TypeHolderExample.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/TypeHolderExample.java @@ -72,7 +72,7 @@ public TypeHolderExample stringItem(String stringItem) { * Get stringItem * @return stringItem **/ - @JsonProperty("string_item") + @JsonProperty(value = "string_item") @ApiModelProperty(example = "what", required = true, value = "") @NotNull public String getStringItem() { @@ -92,7 +92,7 @@ public TypeHolderExample numberItem(BigDecimal numberItem) { * Get numberItem * @return numberItem **/ - @JsonProperty("number_item") + @JsonProperty(value = "number_item") @ApiModelProperty(example = "1.234", required = true, value = "") @NotNull @Valid public BigDecimal getNumberItem() { @@ -112,7 +112,7 @@ public TypeHolderExample floatItem(Float floatItem) { * Get floatItem * @return floatItem **/ - @JsonProperty("float_item") + @JsonProperty(value = "float_item") @ApiModelProperty(example = "1.234", required = true, value = "") @NotNull public Float getFloatItem() { @@ -132,7 +132,7 @@ public TypeHolderExample integerItem(Integer integerItem) { * Get integerItem * @return integerItem **/ - @JsonProperty("integer_item") + @JsonProperty(value = "integer_item") @ApiModelProperty(example = "-2", required = true, value = "") @NotNull public Integer getIntegerItem() { @@ -152,7 +152,7 @@ public TypeHolderExample boolItem(Boolean boolItem) { * Get boolItem * @return boolItem **/ - @JsonProperty("bool_item") + @JsonProperty(value = "bool_item") @ApiModelProperty(example = "true", required = true, value = "") @NotNull public Boolean getBoolItem() { @@ -177,7 +177,7 @@ public TypeHolderExample addArrayItemItem(Integer arrayItemItem) { * Get arrayItem * @return arrayItem **/ - @JsonProperty("array_item") + @JsonProperty(value = "array_item") @ApiModelProperty(example = "[0, 1, 2, 3]", required = true, value = "") @NotNull public List getArrayItem() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/User.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/User.java index d8d16a00ff51..72e9b20a083e 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/User.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/User.java @@ -79,7 +79,7 @@ public User id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -99,7 +99,7 @@ public User username(String username) { * Get username * @return username **/ - @JsonProperty("username") + @JsonProperty(value = "username") @ApiModelProperty(value = "") public String getUsername() { @@ -119,7 +119,7 @@ public User firstName(String firstName) { * Get firstName * @return firstName **/ - @JsonProperty("firstName") + @JsonProperty(value = "firstName") @ApiModelProperty(value = "") public String getFirstName() { @@ -139,7 +139,7 @@ public User lastName(String lastName) { * Get lastName * @return lastName **/ - @JsonProperty("lastName") + @JsonProperty(value = "lastName") @ApiModelProperty(value = "") public String getLastName() { @@ -159,7 +159,7 @@ public User email(String email) { * Get email * @return email **/ - @JsonProperty("email") + @JsonProperty(value = "email") @ApiModelProperty(value = "") public String getEmail() { @@ -179,7 +179,7 @@ public User password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(value = "") public String getPassword() { @@ -199,7 +199,7 @@ public User phone(String phone) { * Get phone * @return phone **/ - @JsonProperty("phone") + @JsonProperty(value = "phone") @ApiModelProperty(value = "") public String getPhone() { @@ -219,7 +219,7 @@ public User userStatus(Integer userStatus) { * User Status * @return userStatus **/ - @JsonProperty("userStatus") + @JsonProperty(value = "userStatus") @ApiModelProperty(value = "User Status") public Integer getUserStatus() { diff --git a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/XmlItem.java b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/XmlItem.java index 3f9ee0ed32d5..cb6de49fbdb2 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/XmlItem.java +++ b/samples/server/petstore/jaxrs-datelib-j8/src/gen/java/org/openapitools/model/XmlItem.java @@ -187,7 +187,7 @@ public XmlItem attributeString(String attributeString) { * Get attributeString * @return attributeString **/ - @JsonProperty("attribute_string") + @JsonProperty(value = "attribute_string") @ApiModelProperty(example = "string", value = "") public String getAttributeString() { @@ -207,7 +207,7 @@ public XmlItem attributeNumber(BigDecimal attributeNumber) { * Get attributeNumber * @return attributeNumber **/ - @JsonProperty("attribute_number") + @JsonProperty(value = "attribute_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getAttributeNumber() { @@ -227,7 +227,7 @@ public XmlItem attributeInteger(Integer attributeInteger) { * Get attributeInteger * @return attributeInteger **/ - @JsonProperty("attribute_integer") + @JsonProperty(value = "attribute_integer") @ApiModelProperty(example = "-2", value = "") public Integer getAttributeInteger() { @@ -247,7 +247,7 @@ public XmlItem attributeBoolean(Boolean attributeBoolean) { * Get attributeBoolean * @return attributeBoolean **/ - @JsonProperty("attribute_boolean") + @JsonProperty(value = "attribute_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getAttributeBoolean() { @@ -275,7 +275,7 @@ public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) { * Get wrappedArray * @return wrappedArray **/ - @JsonProperty("wrapped_array") + @JsonProperty(value = "wrapped_array") @ApiModelProperty(value = "") public List getWrappedArray() { @@ -295,7 +295,7 @@ public XmlItem nameString(String nameString) { * Get nameString * @return nameString **/ - @JsonProperty("name_string") + @JsonProperty(value = "name_string") @ApiModelProperty(example = "string", value = "") public String getNameString() { @@ -315,7 +315,7 @@ public XmlItem nameNumber(BigDecimal nameNumber) { * Get nameNumber * @return nameNumber **/ - @JsonProperty("name_number") + @JsonProperty(value = "name_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getNameNumber() { @@ -335,7 +335,7 @@ public XmlItem nameInteger(Integer nameInteger) { * Get nameInteger * @return nameInteger **/ - @JsonProperty("name_integer") + @JsonProperty(value = "name_integer") @ApiModelProperty(example = "-2", value = "") public Integer getNameInteger() { @@ -355,7 +355,7 @@ public XmlItem nameBoolean(Boolean nameBoolean) { * Get nameBoolean * @return nameBoolean **/ - @JsonProperty("name_boolean") + @JsonProperty(value = "name_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getNameBoolean() { @@ -383,7 +383,7 @@ public XmlItem addNameArrayItem(Integer nameArrayItem) { * Get nameArray * @return nameArray **/ - @JsonProperty("name_array") + @JsonProperty(value = "name_array") @ApiModelProperty(value = "") public List getNameArray() { @@ -411,7 +411,7 @@ public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) { * Get nameWrappedArray * @return nameWrappedArray **/ - @JsonProperty("name_wrapped_array") + @JsonProperty(value = "name_wrapped_array") @ApiModelProperty(value = "") public List getNameWrappedArray() { @@ -431,7 +431,7 @@ public XmlItem prefixString(String prefixString) { * Get prefixString * @return prefixString **/ - @JsonProperty("prefix_string") + @JsonProperty(value = "prefix_string") @ApiModelProperty(example = "string", value = "") public String getPrefixString() { @@ -451,7 +451,7 @@ public XmlItem prefixNumber(BigDecimal prefixNumber) { * Get prefixNumber * @return prefixNumber **/ - @JsonProperty("prefix_number") + @JsonProperty(value = "prefix_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getPrefixNumber() { @@ -471,7 +471,7 @@ public XmlItem prefixInteger(Integer prefixInteger) { * Get prefixInteger * @return prefixInteger **/ - @JsonProperty("prefix_integer") + @JsonProperty(value = "prefix_integer") @ApiModelProperty(example = "-2", value = "") public Integer getPrefixInteger() { @@ -491,7 +491,7 @@ public XmlItem prefixBoolean(Boolean prefixBoolean) { * Get prefixBoolean * @return prefixBoolean **/ - @JsonProperty("prefix_boolean") + @JsonProperty(value = "prefix_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getPrefixBoolean() { @@ -519,7 +519,7 @@ public XmlItem addPrefixArrayItem(Integer prefixArrayItem) { * Get prefixArray * @return prefixArray **/ - @JsonProperty("prefix_array") + @JsonProperty(value = "prefix_array") @ApiModelProperty(value = "") public List getPrefixArray() { @@ -547,7 +547,7 @@ public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) { * Get prefixWrappedArray * @return prefixWrappedArray **/ - @JsonProperty("prefix_wrapped_array") + @JsonProperty(value = "prefix_wrapped_array") @ApiModelProperty(value = "") public List getPrefixWrappedArray() { @@ -567,7 +567,7 @@ public XmlItem namespaceString(String namespaceString) { * Get namespaceString * @return namespaceString **/ - @JsonProperty("namespace_string") + @JsonProperty(value = "namespace_string") @ApiModelProperty(example = "string", value = "") public String getNamespaceString() { @@ -587,7 +587,7 @@ public XmlItem namespaceNumber(BigDecimal namespaceNumber) { * Get namespaceNumber * @return namespaceNumber **/ - @JsonProperty("namespace_number") + @JsonProperty(value = "namespace_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getNamespaceNumber() { @@ -607,7 +607,7 @@ public XmlItem namespaceInteger(Integer namespaceInteger) { * Get namespaceInteger * @return namespaceInteger **/ - @JsonProperty("namespace_integer") + @JsonProperty(value = "namespace_integer") @ApiModelProperty(example = "-2", value = "") public Integer getNamespaceInteger() { @@ -627,7 +627,7 @@ public XmlItem namespaceBoolean(Boolean namespaceBoolean) { * Get namespaceBoolean * @return namespaceBoolean **/ - @JsonProperty("namespace_boolean") + @JsonProperty(value = "namespace_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getNamespaceBoolean() { @@ -655,7 +655,7 @@ public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) { * Get namespaceArray * @return namespaceArray **/ - @JsonProperty("namespace_array") + @JsonProperty(value = "namespace_array") @ApiModelProperty(value = "") public List getNamespaceArray() { @@ -683,7 +683,7 @@ public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) { * Get namespaceWrappedArray * @return namespaceWrappedArray **/ - @JsonProperty("namespace_wrapped_array") + @JsonProperty(value = "namespace_wrapped_array") @ApiModelProperty(value = "") public List getNamespaceWrappedArray() { @@ -703,7 +703,7 @@ public XmlItem prefixNsString(String prefixNsString) { * Get prefixNsString * @return prefixNsString **/ - @JsonProperty("prefix_ns_string") + @JsonProperty(value = "prefix_ns_string") @ApiModelProperty(example = "string", value = "") public String getPrefixNsString() { @@ -723,7 +723,7 @@ public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) { * Get prefixNsNumber * @return prefixNsNumber **/ - @JsonProperty("prefix_ns_number") + @JsonProperty(value = "prefix_ns_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getPrefixNsNumber() { @@ -743,7 +743,7 @@ public XmlItem prefixNsInteger(Integer prefixNsInteger) { * Get prefixNsInteger * @return prefixNsInteger **/ - @JsonProperty("prefix_ns_integer") + @JsonProperty(value = "prefix_ns_integer") @ApiModelProperty(example = "-2", value = "") public Integer getPrefixNsInteger() { @@ -763,7 +763,7 @@ public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) { * Get prefixNsBoolean * @return prefixNsBoolean **/ - @JsonProperty("prefix_ns_boolean") + @JsonProperty(value = "prefix_ns_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getPrefixNsBoolean() { @@ -791,7 +791,7 @@ public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) { * Get prefixNsArray * @return prefixNsArray **/ - @JsonProperty("prefix_ns_array") + @JsonProperty(value = "prefix_ns_array") @ApiModelProperty(value = "") public List getPrefixNsArray() { @@ -819,7 +819,7 @@ public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) { * Get prefixNsWrappedArray * @return prefixNsWrappedArray **/ - @JsonProperty("prefix_ns_wrapped_array") + @JsonProperty(value = "prefix_ns_wrapped_array") @ApiModelProperty(value = "") public List getPrefixNsWrappedArray() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java index 0429935fefbb..8c2ff2504c06 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java @@ -59,7 +59,7 @@ public AdditionalPropertiesClass putMapPropertyItem(String key, String mapProper * Get mapProperty * @return mapProperty **/ - @JsonProperty("map_property") + @JsonProperty(value = "map_property") @ApiModelProperty(value = "") public Map getMapProperty() { @@ -87,7 +87,7 @@ public AdditionalPropertiesClass putMapOfMapPropertyItem(String key, Map> getMapOfMapProperty() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Animal.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Animal.java index 8b8033f340ae..eec45c1f7efc 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Animal.java @@ -55,7 +55,7 @@ public Animal className(String className) { * Get className * @return className **/ - @JsonProperty("className") + @JsonProperty(value = "className") @ApiModelProperty(required = true, value = "") @NotNull public String getClassName() { @@ -75,7 +75,7 @@ public Animal color(String color) { * Get color * @return color **/ - @JsonProperty("color") + @JsonProperty(value = "color") @ApiModelProperty(value = "") public String getColor() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java index cd6a16edb265..d277c77993f3 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java @@ -54,7 +54,7 @@ public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List arrayAr * Get arrayArrayNumber * @return arrayArrayNumber **/ - @JsonProperty("ArrayArrayNumber") + @JsonProperty(value = "ArrayArrayNumber") @ApiModelProperty(value = "") @Valid public List> getArrayArrayNumber() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java index 71d88cd5d890..f8b08e16723e 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java @@ -54,7 +54,7 @@ public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) { * Get arrayNumber * @return arrayNumber **/ - @JsonProperty("ArrayNumber") + @JsonProperty(value = "ArrayNumber") @ApiModelProperty(value = "") @Valid public List getArrayNumber() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayTest.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayTest.java index 7fdd2b52d241..fdde01afe2f5 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayTest.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ArrayTest.java @@ -64,7 +64,7 @@ public ArrayTest addArrayOfStringItem(String arrayOfStringItem) { * Get arrayOfString * @return arrayOfString **/ - @JsonProperty("array_of_string") + @JsonProperty(value = "array_of_string") @ApiModelProperty(value = "") @Size(min=0,max=3) public List getArrayOfString() { @@ -92,7 +92,7 @@ public ArrayTest addArrayArrayOfIntegerItem(List arrayArrayOfIntegerItem) * Get arrayArrayOfInteger * @return arrayArrayOfInteger **/ - @JsonProperty("array_array_of_integer") + @JsonProperty(value = "array_array_of_integer") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfInteger() { @@ -120,7 +120,7 @@ public ArrayTest addArrayArrayOfModelItem(List arrayArrayOfModelI * Get arrayArrayOfModel * @return arrayArrayOfModel **/ - @JsonProperty("array_array_of_model") + @JsonProperty(value = "array_array_of_model") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfModel() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Capitalization.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Capitalization.java index 9b99fe2b58b3..650d2c7b790b 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Capitalization.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Capitalization.java @@ -68,7 +68,7 @@ public Capitalization smallCamel(String smallCamel) { * Get smallCamel * @return smallCamel **/ - @JsonProperty("smallCamel") + @JsonProperty(value = "smallCamel") @ApiModelProperty(value = "") public String getSmallCamel() { @@ -88,7 +88,7 @@ public Capitalization capitalCamel(String capitalCamel) { * Get capitalCamel * @return capitalCamel **/ - @JsonProperty("CapitalCamel") + @JsonProperty(value = "CapitalCamel") @ApiModelProperty(value = "") public String getCapitalCamel() { @@ -108,7 +108,7 @@ public Capitalization smallSnake(String smallSnake) { * Get smallSnake * @return smallSnake **/ - @JsonProperty("small_Snake") + @JsonProperty(value = "small_Snake") @ApiModelProperty(value = "") public String getSmallSnake() { @@ -128,7 +128,7 @@ public Capitalization capitalSnake(String capitalSnake) { * Get capitalSnake * @return capitalSnake **/ - @JsonProperty("Capital_Snake") + @JsonProperty(value = "Capital_Snake") @ApiModelProperty(value = "") public String getCapitalSnake() { @@ -148,7 +148,7 @@ public Capitalization scAETHFlowPoints(String scAETHFlowPoints) { * Get scAETHFlowPoints * @return scAETHFlowPoints **/ - @JsonProperty("SCA_ETH_Flow_Points") + @JsonProperty(value = "SCA_ETH_Flow_Points") @ApiModelProperty(value = "") public String getScAETHFlowPoints() { @@ -168,7 +168,7 @@ public Capitalization ATT_NAME(String ATT_NAME) { * Name of the pet * @return ATT_NAME **/ - @JsonProperty("ATT_NAME") + @JsonProperty(value = "ATT_NAME") @ApiModelProperty(value = "Name of the pet ") public String getATTNAME() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Cat.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Cat.java index a393506d3aa5..ef4f615bfe76 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Cat.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Cat.java @@ -45,7 +45,7 @@ public Cat declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/CatAllOf.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/CatAllOf.java index 7e2a72595950..83503a712d2b 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/CatAllOf.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/CatAllOf.java @@ -43,7 +43,7 @@ public CatAllOf declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Category.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Category.java index d7a5c2b2fafa..af6055dba4ea 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Category.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Category.java @@ -48,7 +48,7 @@ public Category id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -68,7 +68,7 @@ public Category name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public String getName() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ClassModel.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ClassModel.java index 00352ed5bce9..ccfe8e27684e 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ClassModel.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ClassModel.java @@ -44,7 +44,7 @@ public ClassModel propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("_class") + @JsonProperty(value = "_class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Client.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Client.java index 04b28287ed41..0c87d7030a57 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Client.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Client.java @@ -43,7 +43,7 @@ public Client client(String client) { * Get client * @return client **/ - @JsonProperty("client") + @JsonProperty(value = "client") @ApiModelProperty(value = "") public String getClient() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Dog.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Dog.java index 7d6059b2fc1f..e126444fd61e 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Dog.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Dog.java @@ -45,7 +45,7 @@ public Dog breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/DogAllOf.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/DogAllOf.java index 9fcfbfb92cfc..6902a980c243 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/DogAllOf.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/DogAllOf.java @@ -43,7 +43,7 @@ public DogAllOf breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/EnumArrays.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/EnumArrays.java index 526f387372ca..08e6db1ffc92 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/EnumArrays.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/EnumArrays.java @@ -113,7 +113,7 @@ public EnumArrays justSymbol(JustSymbolEnum justSymbol) { * Get justSymbol * @return justSymbol **/ - @JsonProperty("just_symbol") + @JsonProperty(value = "just_symbol") @ApiModelProperty(value = "") public JustSymbolEnum getJustSymbol() { @@ -141,7 +141,7 @@ public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) { * Get arrayEnum * @return arrayEnum **/ - @JsonProperty("array_enum") + @JsonProperty(value = "array_enum") @ApiModelProperty(value = "") public List getArrayEnum() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/EnumTest.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/EnumTest.java index 84a9862fa90f..c0bc2c355fad 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/EnumTest.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/EnumTest.java @@ -211,7 +211,7 @@ public EnumTest enumString(EnumStringEnum enumString) { * Get enumString * @return enumString **/ - @JsonProperty("enum_string") + @JsonProperty(value = "enum_string") @ApiModelProperty(value = "") public EnumStringEnum getEnumString() { @@ -231,7 +231,7 @@ public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) { * Get enumStringRequired * @return enumStringRequired **/ - @JsonProperty("enum_string_required") + @JsonProperty(value = "enum_string_required") @ApiModelProperty(required = true, value = "") @NotNull public EnumStringRequiredEnum getEnumStringRequired() { @@ -251,7 +251,7 @@ public EnumTest enumInteger(EnumIntegerEnum enumInteger) { * Get enumInteger * @return enumInteger **/ - @JsonProperty("enum_integer") + @JsonProperty(value = "enum_integer") @ApiModelProperty(value = "") public EnumIntegerEnum getEnumInteger() { @@ -271,7 +271,7 @@ public EnumTest enumNumber(EnumNumberEnum enumNumber) { * Get enumNumber * @return enumNumber **/ - @JsonProperty("enum_number") + @JsonProperty(value = "enum_number") @ApiModelProperty(value = "") public EnumNumberEnum getEnumNumber() { @@ -291,7 +291,7 @@ public EnumTest outerEnum(OuterEnum outerEnum) { * Get outerEnum * @return outerEnum **/ - @JsonProperty("outerEnum") + @JsonProperty(value = "outerEnum") @ApiModelProperty(value = "") @Valid public OuterEnum getOuterEnum() { @@ -311,7 +311,7 @@ public EnumTest outerEnumInteger(OuterEnumInteger outerEnumInteger) { * Get outerEnumInteger * @return outerEnumInteger **/ - @JsonProperty("outerEnumInteger") + @JsonProperty(value = "outerEnumInteger") @ApiModelProperty(value = "") @Valid public OuterEnumInteger getOuterEnumInteger() { @@ -331,7 +331,7 @@ public EnumTest outerEnumDefaultValue(OuterEnumDefaultValue outerEnumDefaultValu * Get outerEnumDefaultValue * @return outerEnumDefaultValue **/ - @JsonProperty("outerEnumDefaultValue") + @JsonProperty(value = "outerEnumDefaultValue") @ApiModelProperty(value = "") @Valid public OuterEnumDefaultValue getOuterEnumDefaultValue() { @@ -351,7 +351,7 @@ public EnumTest outerEnumIntegerDefaultValue(OuterEnumIntegerDefaultValue outerE * Get outerEnumIntegerDefaultValue * @return outerEnumIntegerDefaultValue **/ - @JsonProperty("outerEnumIntegerDefaultValue") + @JsonProperty(value = "outerEnumIntegerDefaultValue") @ApiModelProperty(value = "") @Valid public OuterEnumIntegerDefaultValue getOuterEnumIntegerDefaultValue() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/FileSchemaTestClass.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/FileSchemaTestClass.java index 4be816893906..fb40a511e446 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/FileSchemaTestClass.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/FileSchemaTestClass.java @@ -50,7 +50,7 @@ public FileSchemaTestClass file(java.io.File file) { * Get file * @return file **/ - @JsonProperty("file") + @JsonProperty(value = "file") @ApiModelProperty(value = "") @Valid public java.io.File getFile() { @@ -78,7 +78,7 @@ public FileSchemaTestClass addFilesItem(java.io.File filesItem) { * Get files * @return files **/ - @JsonProperty("files") + @JsonProperty(value = "files") @ApiModelProperty(value = "") @Valid public List getFiles() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Foo.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Foo.java index db05a7ee0996..eafca9cc314c 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Foo.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Foo.java @@ -43,7 +43,7 @@ public Foo bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar") @ApiModelProperty(value = "") public String getBar() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/FormatTest.java index 614b54e17a7f..1459aa93dd2f 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/FormatTest.java @@ -124,7 +124,7 @@ public FormatTest integer(Integer integer) { * maximum: 100 * @return integer **/ - @JsonProperty("integer") + @JsonProperty(value = "integer") @ApiModelProperty(value = "") @Min(10) @Max(100) public Integer getInteger() { @@ -146,7 +146,7 @@ public FormatTest int32(Integer int32) { * maximum: 200 * @return int32 **/ - @JsonProperty("int32") + @JsonProperty(value = "int32") @ApiModelProperty(value = "") @Min(20) @Max(200) public Integer getInt32() { @@ -166,7 +166,7 @@ public FormatTest int64(Long int64) { * Get int64 * @return int64 **/ - @JsonProperty("int64") + @JsonProperty(value = "int64") @ApiModelProperty(value = "") public Long getInt64() { @@ -188,7 +188,7 @@ public FormatTest number(BigDecimal number) { * maximum: 543.2 * @return number **/ - @JsonProperty("number") + @JsonProperty(value = "number") @ApiModelProperty(required = true, value = "") @NotNull @Valid @DecimalMin("32.1") @DecimalMax("543.2") public BigDecimal getNumber() { @@ -210,7 +210,7 @@ public FormatTest _float(Float _float) { * maximum: 987.6 * @return _float **/ - @JsonProperty("float") + @JsonProperty(value = "float") @ApiModelProperty(value = "") @DecimalMin("54.3") @DecimalMax("987.6") public Float getFloat() { @@ -232,7 +232,7 @@ public FormatTest _double(Double _double) { * maximum: 123.4 * @return _double **/ - @JsonProperty("double") + @JsonProperty(value = "double") @ApiModelProperty(value = "") @DecimalMin("67.8") @DecimalMax("123.4") public Double getDouble() { @@ -252,7 +252,7 @@ public FormatTest decimal(BigDecimal decimal) { * Get decimal * @return decimal **/ - @JsonProperty("decimal") + @JsonProperty(value = "decimal") @ApiModelProperty(value = "") @Valid public BigDecimal getDecimal() { @@ -272,7 +272,7 @@ public FormatTest string(String string) { * Get string * @return string **/ - @JsonProperty("string") + @JsonProperty(value = "string") @ApiModelProperty(value = "") @Pattern(regexp="/[a-z]/i") public String getString() { @@ -292,7 +292,7 @@ public FormatTest _byte(byte[] _byte) { * Get _byte * @return _byte **/ - @JsonProperty("byte") + @JsonProperty(value = "byte") @ApiModelProperty(required = true, value = "") @NotNull public byte[] getByte() { @@ -312,7 +312,7 @@ public FormatTest binary(File binary) { * Get binary * @return binary **/ - @JsonProperty("binary") + @JsonProperty(value = "binary") @ApiModelProperty(value = "") public File getBinary() { @@ -332,7 +332,7 @@ public FormatTest date(Date date) { * Get date * @return date **/ - @JsonProperty("date") + @JsonProperty(value = "date") @ApiModelProperty(required = true, value = "") @NotNull public Date getDate() { @@ -352,7 +352,7 @@ public FormatTest dateTime(Date dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public Date getDateTime() { @@ -372,7 +372,7 @@ public FormatTest uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(example = "72f98069-206d-4f12-9f12-3d1e525a8e84", value = "") public UUID getUuid() { @@ -392,7 +392,7 @@ public FormatTest password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(required = true, value = "") @NotNull @Size(min=10,max=64) public String getPassword() { @@ -412,7 +412,7 @@ public FormatTest patternWithDigits(String patternWithDigits) { * A string that is a 10 digit number. Can have leading zeros. * @return patternWithDigits **/ - @JsonProperty("pattern_with_digits") + @JsonProperty(value = "pattern_with_digits") @ApiModelProperty(value = "A string that is a 10 digit number. Can have leading zeros.") @Pattern(regexp="^\\d{10}$") public String getPatternWithDigits() { @@ -432,7 +432,7 @@ public FormatTest patternWithDigitsAndDelimiter(String patternWithDigitsAndDelim * A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01. * @return patternWithDigitsAndDelimiter **/ - @JsonProperty("pattern_with_digits_and_delimiter") + @JsonProperty(value = "pattern_with_digits_and_delimiter") @ApiModelProperty(value = "A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.") @Pattern(regexp="/^image_\\d{1,3}$/i") public String getPatternWithDigitsAndDelimiter() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java index 4f72442fd947..1b5042f61f59 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java @@ -48,7 +48,7 @@ public HasOnlyReadOnly bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -68,7 +68,7 @@ public HasOnlyReadOnly foo(String foo) { * Get foo * @return foo **/ - @JsonProperty("foo") + @JsonProperty(value = "foo", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getFoo() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/HealthCheckResult.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/HealthCheckResult.java index 0da152286843..9757ba544587 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/HealthCheckResult.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/HealthCheckResult.java @@ -44,7 +44,7 @@ public HealthCheckResult nullableMessage(String nullableMessage) { * Get nullableMessage * @return nullableMessage **/ - @JsonProperty("NullableMessage") + @JsonProperty(value = "NullableMessage") @ApiModelProperty(value = "") public String getNullableMessage() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/InlineResponseDefault.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/InlineResponseDefault.java index 8882497a0215..789a62c847af 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/InlineResponseDefault.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/InlineResponseDefault.java @@ -44,7 +44,7 @@ public InlineResponseDefault string(Foo string) { * Get string * @return string **/ - @JsonProperty("string") + @JsonProperty(value = "string") @ApiModelProperty(value = "") @Valid public Foo getString() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/MapTest.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/MapTest.java index 4db676efea2d..12516e0afba2 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/MapTest.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/MapTest.java @@ -101,7 +101,7 @@ public MapTest putMapMapOfStringItem(String key, Map mapMapOfStr * Get mapMapOfString * @return mapMapOfString **/ - @JsonProperty("map_map_of_string") + @JsonProperty(value = "map_map_of_string") @ApiModelProperty(value = "") @Valid public Map> getMapMapOfString() { @@ -129,7 +129,7 @@ public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) * Get mapOfEnumString * @return mapOfEnumString **/ - @JsonProperty("map_of_enum_string") + @JsonProperty(value = "map_of_enum_string") @ApiModelProperty(value = "") public Map getMapOfEnumString() { @@ -157,7 +157,7 @@ public MapTest putDirectMapItem(String key, Boolean directMapItem) { * Get directMap * @return directMap **/ - @JsonProperty("direct_map") + @JsonProperty(value = "direct_map") @ApiModelProperty(value = "") public Map getDirectMap() { @@ -185,7 +185,7 @@ public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) { * Get indirectMap * @return indirectMap **/ - @JsonProperty("indirect_map") + @JsonProperty(value = "indirect_map") @ApiModelProperty(value = "") public Map getIndirectMap() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java index 0ba358c6b5c2..eb4fcd577811 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java @@ -59,7 +59,7 @@ public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(value = "") public UUID getUuid() { @@ -79,7 +79,7 @@ public MixedPropertiesAndAdditionalPropertiesClass dateTime(Date dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public Date getDateTime() { @@ -107,7 +107,7 @@ public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal * Get map * @return map **/ - @JsonProperty("map") + @JsonProperty(value = "map") @ApiModelProperty(value = "") @Valid public Map getMap() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Model200Response.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Model200Response.java index 2df0caa9725d..1a3e698983e5 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Model200Response.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Model200Response.java @@ -49,7 +49,7 @@ public Model200Response name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public Integer getName() { @@ -69,7 +69,7 @@ public Model200Response propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("class") + @JsonProperty(value = "class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ModelApiResponse.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ModelApiResponse.java index b0d01665ef6a..1552245d1dc8 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ModelApiResponse.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ModelApiResponse.java @@ -53,7 +53,7 @@ public ModelApiResponse code(Integer code) { * Get code * @return code **/ - @JsonProperty("code") + @JsonProperty(value = "code") @ApiModelProperty(value = "") public Integer getCode() { @@ -73,7 +73,7 @@ public ModelApiResponse type(String type) { * Get type * @return type **/ - @JsonProperty("type") + @JsonProperty(value = "type") @ApiModelProperty(value = "") public String getType() { @@ -93,7 +93,7 @@ public ModelApiResponse message(String message) { * Get message * @return message **/ - @JsonProperty("message") + @JsonProperty(value = "message") @ApiModelProperty(value = "") public String getMessage() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ModelReturn.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ModelReturn.java index 41a1c059f7ef..c9f4504d3f0e 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ModelReturn.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ModelReturn.java @@ -44,7 +44,7 @@ public ModelReturn _return(Integer _return) { * Get _return * @return _return **/ - @JsonProperty("return") + @JsonProperty(value = "return") @ApiModelProperty(value = "") public Integer getReturn() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Name.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Name.java index a7a189571897..cdcef856cd21 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Name.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Name.java @@ -59,7 +59,7 @@ public Name name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public Integer getName() { @@ -79,7 +79,7 @@ public Name snakeCase(Integer snakeCase) { * Get snakeCase * @return snakeCase **/ - @JsonProperty("snake_case") + @JsonProperty(value = "snake_case", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer getSnakeCase() { @@ -99,7 +99,7 @@ public Name property(String property) { * Get property * @return property **/ - @JsonProperty("property") + @JsonProperty(value = "property") @ApiModelProperty(value = "") public String getProperty() { @@ -119,7 +119,7 @@ public Name _123number(Integer _123number) { * Get _123number * @return _123number **/ - @JsonProperty("123Number") + @JsonProperty(value = "123Number", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer get123number() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/NullableClass.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/NullableClass.java index 090f6948d300..f1f9e12b46ea 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/NullableClass.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/NullableClass.java @@ -104,7 +104,7 @@ public NullableClass integerProp(Integer integerProp) { * Get integerProp * @return integerProp **/ - @JsonProperty("integer_prop") + @JsonProperty(value = "integer_prop") @ApiModelProperty(value = "") public Integer getIntegerProp() { @@ -124,7 +124,7 @@ public NullableClass numberProp(BigDecimal numberProp) { * Get numberProp * @return numberProp **/ - @JsonProperty("number_prop") + @JsonProperty(value = "number_prop") @ApiModelProperty(value = "") @Valid public BigDecimal getNumberProp() { @@ -144,7 +144,7 @@ public NullableClass booleanProp(Boolean booleanProp) { * Get booleanProp * @return booleanProp **/ - @JsonProperty("boolean_prop") + @JsonProperty(value = "boolean_prop") @ApiModelProperty(value = "") public Boolean getBooleanProp() { @@ -164,7 +164,7 @@ public NullableClass stringProp(String stringProp) { * Get stringProp * @return stringProp **/ - @JsonProperty("string_prop") + @JsonProperty(value = "string_prop") @ApiModelProperty(value = "") public String getStringProp() { @@ -184,7 +184,7 @@ public NullableClass dateProp(Date dateProp) { * Get dateProp * @return dateProp **/ - @JsonProperty("date_prop") + @JsonProperty(value = "date_prop") @ApiModelProperty(value = "") public Date getDateProp() { @@ -204,7 +204,7 @@ public NullableClass datetimeProp(Date datetimeProp) { * Get datetimeProp * @return datetimeProp **/ - @JsonProperty("datetime_prop") + @JsonProperty(value = "datetime_prop") @ApiModelProperty(value = "") public Date getDatetimeProp() { @@ -232,7 +232,7 @@ public NullableClass addArrayNullablePropItem(Object arrayNullablePropItem) { * Get arrayNullableProp * @return arrayNullableProp **/ - @JsonProperty("array_nullable_prop") + @JsonProperty(value = "array_nullable_prop") @ApiModelProperty(value = "") public List getArrayNullableProp() { @@ -260,7 +260,7 @@ public NullableClass addArrayAndItemsNullablePropItem(Object arrayAndItemsNullab * Get arrayAndItemsNullableProp * @return arrayAndItemsNullableProp **/ - @JsonProperty("array_and_items_nullable_prop") + @JsonProperty(value = "array_and_items_nullable_prop") @ApiModelProperty(value = "") public List getArrayAndItemsNullableProp() { @@ -288,7 +288,7 @@ public NullableClass addArrayItemsNullableItem(Object arrayItemsNullableItem) { * Get arrayItemsNullable * @return arrayItemsNullable **/ - @JsonProperty("array_items_nullable") + @JsonProperty(value = "array_items_nullable") @ApiModelProperty(value = "") public List getArrayItemsNullable() { @@ -316,7 +316,7 @@ public NullableClass putObjectNullablePropItem(String key, Object objectNullable * Get objectNullableProp * @return objectNullableProp **/ - @JsonProperty("object_nullable_prop") + @JsonProperty(value = "object_nullable_prop") @ApiModelProperty(value = "") public Map getObjectNullableProp() { @@ -344,7 +344,7 @@ public NullableClass putObjectAndItemsNullablePropItem(String key, Object object * Get objectAndItemsNullableProp * @return objectAndItemsNullableProp **/ - @JsonProperty("object_and_items_nullable_prop") + @JsonProperty(value = "object_and_items_nullable_prop") @ApiModelProperty(value = "") public Map getObjectAndItemsNullableProp() { @@ -372,7 +372,7 @@ public NullableClass putObjectItemsNullableItem(String key, Object objectItemsNu * Get objectItemsNullable * @return objectItemsNullable **/ - @JsonProperty("object_items_nullable") + @JsonProperty(value = "object_items_nullable") @ApiModelProperty(value = "") public Map getObjectItemsNullable() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/NumberOnly.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/NumberOnly.java index 188899dc4460..3ec25c75ae59 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/NumberOnly.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/NumberOnly.java @@ -44,7 +44,7 @@ public NumberOnly justNumber(BigDecimal justNumber) { * Get justNumber * @return justNumber **/ - @JsonProperty("JustNumber") + @JsonProperty(value = "JustNumber") @ApiModelProperty(value = "") @Valid public BigDecimal getJustNumber() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Order.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Order.java index 7ce0000199f9..b97b051ebc80 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Order.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Order.java @@ -103,7 +103,7 @@ public Order id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -123,7 +123,7 @@ public Order petId(Long petId) { * Get petId * @return petId **/ - @JsonProperty("petId") + @JsonProperty(value = "petId") @ApiModelProperty(value = "") public Long getPetId() { @@ -143,7 +143,7 @@ public Order quantity(Integer quantity) { * Get quantity * @return quantity **/ - @JsonProperty("quantity") + @JsonProperty(value = "quantity") @ApiModelProperty(value = "") public Integer getQuantity() { @@ -163,7 +163,7 @@ public Order shipDate(Date shipDate) { * Get shipDate * @return shipDate **/ - @JsonProperty("shipDate") + @JsonProperty(value = "shipDate") @ApiModelProperty(value = "") public Date getShipDate() { @@ -183,7 +183,7 @@ public Order status(StatusEnum status) { * Order Status * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "Order Status") public StatusEnum getStatus() { @@ -203,7 +203,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - @JsonProperty("complete") + @JsonProperty(value = "complete") @ApiModelProperty(value = "") public Boolean getComplete() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/OuterComposite.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/OuterComposite.java index 43b69002d036..577504e1bef2 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/OuterComposite.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/OuterComposite.java @@ -54,7 +54,7 @@ public OuterComposite myNumber(BigDecimal myNumber) { * Get myNumber * @return myNumber **/ - @JsonProperty("my_number") + @JsonProperty(value = "my_number") @ApiModelProperty(value = "") @Valid public BigDecimal getMyNumber() { @@ -74,7 +74,7 @@ public OuterComposite myString(String myString) { * Get myString * @return myString **/ - @JsonProperty("my_string") + @JsonProperty(value = "my_string") @ApiModelProperty(value = "") public String getMyString() { @@ -94,7 +94,7 @@ public OuterComposite myBoolean(Boolean myBoolean) { * Get myBoolean * @return myBoolean **/ - @JsonProperty("my_boolean") + @JsonProperty(value = "my_boolean") @ApiModelProperty(value = "") public Boolean getMyBoolean() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/OuterObjectWithEnumProperty.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/OuterObjectWithEnumProperty.java index 55890a0c6ee1..2f7242fa36d1 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/OuterObjectWithEnumProperty.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/OuterObjectWithEnumProperty.java @@ -44,7 +44,7 @@ public OuterObjectWithEnumProperty value(OuterEnumInteger value) { * Get value * @return value **/ - @JsonProperty("value") + @JsonProperty(value = "value") @ApiModelProperty(required = true, value = "") @NotNull @Valid public OuterEnumInteger getValue() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Pet.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Pet.java index adcdbf24a57d..4ed108d787e9 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Pet.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Pet.java @@ -108,7 +108,7 @@ public Pet id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -128,7 +128,7 @@ public Pet category(Category category) { * Get category * @return category **/ - @JsonProperty("category") + @JsonProperty(value = "category") @ApiModelProperty(value = "") @Valid public Category getCategory() { @@ -148,7 +148,7 @@ public Pet name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(example = "doggie", required = true, value = "") @NotNull public String getName() { @@ -173,7 +173,7 @@ public Pet addPhotoUrlsItem(String photoUrlsItem) { * Get photoUrls * @return photoUrls **/ - @JsonProperty("photoUrls") + @JsonProperty(value = "photoUrls") @ApiModelProperty(required = true, value = "") @NotNull public Set getPhotoUrls() { @@ -201,7 +201,7 @@ public Pet addTagsItem(Tag tagsItem) { * Get tags * @return tags **/ - @JsonProperty("tags") + @JsonProperty(value = "tags") @ApiModelProperty(value = "") @Valid public List getTags() { @@ -221,7 +221,7 @@ public Pet status(StatusEnum status) { * pet status in the store * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "pet status in the store") public StatusEnum getStatus() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ReadOnlyFirst.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ReadOnlyFirst.java index e2e5ea910e68..05c01064ff67 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ReadOnlyFirst.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/ReadOnlyFirst.java @@ -48,7 +48,7 @@ public ReadOnlyFirst bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -68,7 +68,7 @@ public ReadOnlyFirst baz(String baz) { * Get baz * @return baz **/ - @JsonProperty("baz") + @JsonProperty(value = "baz") @ApiModelProperty(value = "") public String getBaz() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/SpecialModelName.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/SpecialModelName.java index d5a487ed873d..912dd213133f 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/SpecialModelName.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/SpecialModelName.java @@ -43,7 +43,7 @@ public class SpecialModelName { * Get $specialPropertyName * @return $specialPropertyName **/ - @JsonProperty("$special[property.name]") + @JsonProperty(value = "$special[property.name]") @ApiModelProperty(value = "") public Long get$SpecialPropertyName() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Tag.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Tag.java index 80d098d57c16..5ac82ca92382 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Tag.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/Tag.java @@ -48,7 +48,7 @@ public Tag id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -68,7 +68,7 @@ public Tag name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/User.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/User.java index 1e702dd070d5..37ab5453c3d2 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/User.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/model/User.java @@ -78,7 +78,7 @@ public User id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -98,7 +98,7 @@ public User username(String username) { * Get username * @return username **/ - @JsonProperty("username") + @JsonProperty(value = "username") @ApiModelProperty(value = "") public String getUsername() { @@ -118,7 +118,7 @@ public User firstName(String firstName) { * Get firstName * @return firstName **/ - @JsonProperty("firstName") + @JsonProperty(value = "firstName") @ApiModelProperty(value = "") public String getFirstName() { @@ -138,7 +138,7 @@ public User lastName(String lastName) { * Get lastName * @return lastName **/ - @JsonProperty("lastName") + @JsonProperty(value = "lastName") @ApiModelProperty(value = "") public String getLastName() { @@ -158,7 +158,7 @@ public User email(String email) { * Get email * @return email **/ - @JsonProperty("email") + @JsonProperty(value = "email") @ApiModelProperty(value = "") public String getEmail() { @@ -178,7 +178,7 @@ public User password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(value = "") public String getPassword() { @@ -198,7 +198,7 @@ public User phone(String phone) { * Get phone * @return phone **/ - @JsonProperty("phone") + @JsonProperty(value = "phone") @ApiModelProperty(value = "") public String getPhone() { @@ -218,7 +218,7 @@ public User userStatus(Integer userStatus) { * User Status * @return userStatus **/ - @JsonProperty("userStatus") + @JsonProperty(value = "userStatus") @ApiModelProperty(value = "User Status") public Integer getUserStatus() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java index 94ab4ee99b59..b69405239b38 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java @@ -45,7 +45,7 @@ public AdditionalPropertiesAnyType name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java index 8a7cbbfa5e79..f90d93c37aec 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java @@ -46,7 +46,7 @@ public AdditionalPropertiesArray name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java index 8e5e3a7ec7cc..473358d6cda0 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java @@ -45,7 +45,7 @@ public AdditionalPropertiesBoolean name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java index df959efecfe6..bf846cfb6bf7 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java @@ -105,7 +105,7 @@ public AdditionalPropertiesClass putMapStringItem(String key, String mapStringIt * Get mapString * @return mapString **/ - @JsonProperty("map_string") + @JsonProperty(value = "map_string") @ApiModelProperty(value = "") public Map getMapString() { @@ -133,7 +133,7 @@ public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumb * Get mapNumber * @return mapNumber **/ - @JsonProperty("map_number") + @JsonProperty(value = "map_number") @ApiModelProperty(value = "") @Valid public Map getMapNumber() { @@ -161,7 +161,7 @@ public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntege * Get mapInteger * @return mapInteger **/ - @JsonProperty("map_integer") + @JsonProperty(value = "map_integer") @ApiModelProperty(value = "") public Map getMapInteger() { @@ -189,7 +189,7 @@ public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBoolea * Get mapBoolean * @return mapBoolean **/ - @JsonProperty("map_boolean") + @JsonProperty(value = "map_boolean") @ApiModelProperty(value = "") public Map getMapBoolean() { @@ -217,7 +217,7 @@ public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List> getMapArrayInteger() { @@ -245,7 +245,7 @@ public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List * Get mapArrayAnytype * @return mapArrayAnytype **/ - @JsonProperty("map_array_anytype") + @JsonProperty(value = "map_array_anytype") @ApiModelProperty(value = "") @Valid public Map> getMapArrayAnytype() { @@ -273,7 +273,7 @@ public AdditionalPropertiesClass putMapMapStringItem(String key, Map> getMapMapString() { @@ -301,7 +301,7 @@ public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map> getMapMapAnytype() { @@ -321,7 +321,7 @@ public AdditionalPropertiesClass anytype1(Object anytype1) { * Get anytype1 * @return anytype1 **/ - @JsonProperty("anytype_1") + @JsonProperty(value = "anytype_1") @ApiModelProperty(value = "") public Object getAnytype1() { @@ -341,7 +341,7 @@ public AdditionalPropertiesClass anytype2(Object anytype2) { * Get anytype2 * @return anytype2 **/ - @JsonProperty("anytype_2") + @JsonProperty(value = "anytype_2") @ApiModelProperty(value = "") public Object getAnytype2() { @@ -361,7 +361,7 @@ public AdditionalPropertiesClass anytype3(Object anytype3) { * Get anytype3 * @return anytype3 **/ - @JsonProperty("anytype_3") + @JsonProperty(value = "anytype_3") @ApiModelProperty(value = "") public Object getAnytype3() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java index ac5f7501b3a8..29bd12be784b 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java @@ -45,7 +45,7 @@ public AdditionalPropertiesInteger name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java index d3072f447dca..f05484cd7cc7 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java @@ -46,7 +46,7 @@ public AdditionalPropertiesNumber name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java index 8f8b575df2a2..fb246cac6598 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java @@ -45,7 +45,7 @@ public AdditionalPropertiesObject name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java index c5d4ac7f7c1b..b7018e370e50 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java @@ -45,7 +45,7 @@ public AdditionalPropertiesString name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Animal.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Animal.java index db142b932d90..97cdd70ab0a1 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Animal.java @@ -56,7 +56,7 @@ public Animal className(String className) { * Get className * @return className **/ - @JsonProperty("className") + @JsonProperty(value = "className") @ApiModelProperty(required = true, value = "") @NotNull public String getClassName() { @@ -76,7 +76,7 @@ public Animal color(String color) { * Get color * @return color **/ - @JsonProperty("color") + @JsonProperty(value = "color") @ApiModelProperty(value = "") public String getColor() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java index cd6a16edb265..d277c77993f3 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java @@ -54,7 +54,7 @@ public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List arrayAr * Get arrayArrayNumber * @return arrayArrayNumber **/ - @JsonProperty("ArrayArrayNumber") + @JsonProperty(value = "ArrayArrayNumber") @ApiModelProperty(value = "") @Valid public List> getArrayArrayNumber() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java index 71d88cd5d890..f8b08e16723e 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java @@ -54,7 +54,7 @@ public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) { * Get arrayNumber * @return arrayNumber **/ - @JsonProperty("ArrayNumber") + @JsonProperty(value = "ArrayNumber") @ApiModelProperty(value = "") @Valid public List getArrayNumber() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayTest.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayTest.java index 738fa858e7e7..dfeb88958dca 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayTest.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ArrayTest.java @@ -64,7 +64,7 @@ public ArrayTest addArrayOfStringItem(String arrayOfStringItem) { * Get arrayOfString * @return arrayOfString **/ - @JsonProperty("array_of_string") + @JsonProperty(value = "array_of_string") @ApiModelProperty(value = "") public List getArrayOfString() { @@ -92,7 +92,7 @@ public ArrayTest addArrayArrayOfIntegerItem(List arrayArrayOfIntegerItem) * Get arrayArrayOfInteger * @return arrayArrayOfInteger **/ - @JsonProperty("array_array_of_integer") + @JsonProperty(value = "array_array_of_integer") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfInteger() { @@ -120,7 +120,7 @@ public ArrayTest addArrayArrayOfModelItem(List arrayArrayOfModelI * Get arrayArrayOfModel * @return arrayArrayOfModel **/ - @JsonProperty("array_array_of_model") + @JsonProperty(value = "array_array_of_model") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfModel() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/BigCat.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/BigCat.java index 0af195ad0a72..867f51230021 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/BigCat.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/BigCat.java @@ -81,7 +81,7 @@ public BigCat kind(KindEnum kind) { * Get kind * @return kind **/ - @JsonProperty("kind") + @JsonProperty(value = "kind") @ApiModelProperty(value = "") public KindEnum getKind() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/BigCatAllOf.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/BigCatAllOf.java index eaf4e4f49f5e..ae1220fcefd1 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/BigCatAllOf.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/BigCatAllOf.java @@ -79,7 +79,7 @@ public BigCatAllOf kind(KindEnum kind) { * Get kind * @return kind **/ - @JsonProperty("kind") + @JsonProperty(value = "kind") @ApiModelProperty(value = "") public KindEnum getKind() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Capitalization.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Capitalization.java index 9b99fe2b58b3..650d2c7b790b 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Capitalization.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Capitalization.java @@ -68,7 +68,7 @@ public Capitalization smallCamel(String smallCamel) { * Get smallCamel * @return smallCamel **/ - @JsonProperty("smallCamel") + @JsonProperty(value = "smallCamel") @ApiModelProperty(value = "") public String getSmallCamel() { @@ -88,7 +88,7 @@ public Capitalization capitalCamel(String capitalCamel) { * Get capitalCamel * @return capitalCamel **/ - @JsonProperty("CapitalCamel") + @JsonProperty(value = "CapitalCamel") @ApiModelProperty(value = "") public String getCapitalCamel() { @@ -108,7 +108,7 @@ public Capitalization smallSnake(String smallSnake) { * Get smallSnake * @return smallSnake **/ - @JsonProperty("small_Snake") + @JsonProperty(value = "small_Snake") @ApiModelProperty(value = "") public String getSmallSnake() { @@ -128,7 +128,7 @@ public Capitalization capitalSnake(String capitalSnake) { * Get capitalSnake * @return capitalSnake **/ - @JsonProperty("Capital_Snake") + @JsonProperty(value = "Capital_Snake") @ApiModelProperty(value = "") public String getCapitalSnake() { @@ -148,7 +148,7 @@ public Capitalization scAETHFlowPoints(String scAETHFlowPoints) { * Get scAETHFlowPoints * @return scAETHFlowPoints **/ - @JsonProperty("SCA_ETH_Flow_Points") + @JsonProperty(value = "SCA_ETH_Flow_Points") @ApiModelProperty(value = "") public String getScAETHFlowPoints() { @@ -168,7 +168,7 @@ public Capitalization ATT_NAME(String ATT_NAME) { * Name of the pet * @return ATT_NAME **/ - @JsonProperty("ATT_NAME") + @JsonProperty(value = "ATT_NAME") @ApiModelProperty(value = "Name of the pet ") public String getATTNAME() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Cat.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Cat.java index a393506d3aa5..ef4f615bfe76 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Cat.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Cat.java @@ -45,7 +45,7 @@ public Cat declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/CatAllOf.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/CatAllOf.java index 7e2a72595950..83503a712d2b 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/CatAllOf.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/CatAllOf.java @@ -43,7 +43,7 @@ public CatAllOf declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Category.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Category.java index d7a5c2b2fafa..af6055dba4ea 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Category.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Category.java @@ -48,7 +48,7 @@ public Category id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -68,7 +68,7 @@ public Category name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ClassModel.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ClassModel.java index 00352ed5bce9..ccfe8e27684e 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ClassModel.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ClassModel.java @@ -44,7 +44,7 @@ public ClassModel propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("_class") + @JsonProperty(value = "_class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Client.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Client.java index 04b28287ed41..0c87d7030a57 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Client.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Client.java @@ -43,7 +43,7 @@ public Client client(String client) { * Get client * @return client **/ - @JsonProperty("client") + @JsonProperty(value = "client") @ApiModelProperty(value = "") public String getClient() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Dog.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Dog.java index 7d6059b2fc1f..e126444fd61e 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Dog.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Dog.java @@ -45,7 +45,7 @@ public Dog breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/DogAllOf.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/DogAllOf.java index 9fcfbfb92cfc..6902a980c243 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/DogAllOf.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/DogAllOf.java @@ -43,7 +43,7 @@ public DogAllOf breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/EnumArrays.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/EnumArrays.java index 526f387372ca..08e6db1ffc92 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/EnumArrays.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/EnumArrays.java @@ -113,7 +113,7 @@ public EnumArrays justSymbol(JustSymbolEnum justSymbol) { * Get justSymbol * @return justSymbol **/ - @JsonProperty("just_symbol") + @JsonProperty(value = "just_symbol") @ApiModelProperty(value = "") public JustSymbolEnum getJustSymbol() { @@ -141,7 +141,7 @@ public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) { * Get arrayEnum * @return arrayEnum **/ - @JsonProperty("array_enum") + @JsonProperty(value = "array_enum") @ApiModelProperty(value = "") public List getArrayEnum() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/EnumTest.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/EnumTest.java index ee08eadfa8d7..937a9f7f6aeb 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/EnumTest.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/EnumTest.java @@ -193,7 +193,7 @@ public EnumTest enumString(EnumStringEnum enumString) { * Get enumString * @return enumString **/ - @JsonProperty("enum_string") + @JsonProperty(value = "enum_string") @ApiModelProperty(value = "") public EnumStringEnum getEnumString() { @@ -213,7 +213,7 @@ public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) { * Get enumStringRequired * @return enumStringRequired **/ - @JsonProperty("enum_string_required") + @JsonProperty(value = "enum_string_required") @ApiModelProperty(required = true, value = "") @NotNull public EnumStringRequiredEnum getEnumStringRequired() { @@ -233,7 +233,7 @@ public EnumTest enumInteger(EnumIntegerEnum enumInteger) { * Get enumInteger * @return enumInteger **/ - @JsonProperty("enum_integer") + @JsonProperty(value = "enum_integer") @ApiModelProperty(value = "") public EnumIntegerEnum getEnumInteger() { @@ -253,7 +253,7 @@ public EnumTest enumNumber(EnumNumberEnum enumNumber) { * Get enumNumber * @return enumNumber **/ - @JsonProperty("enum_number") + @JsonProperty(value = "enum_number") @ApiModelProperty(value = "") public EnumNumberEnum getEnumNumber() { @@ -273,7 +273,7 @@ public EnumTest outerEnum(OuterEnum outerEnum) { * Get outerEnum * @return outerEnum **/ - @JsonProperty("outerEnum") + @JsonProperty(value = "outerEnum") @ApiModelProperty(value = "") @Valid public OuterEnum getOuterEnum() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/FileSchemaTestClass.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/FileSchemaTestClass.java index 4be816893906..fb40a511e446 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/FileSchemaTestClass.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/FileSchemaTestClass.java @@ -50,7 +50,7 @@ public FileSchemaTestClass file(java.io.File file) { * Get file * @return file **/ - @JsonProperty("file") + @JsonProperty(value = "file") @ApiModelProperty(value = "") @Valid public java.io.File getFile() { @@ -78,7 +78,7 @@ public FileSchemaTestClass addFilesItem(java.io.File filesItem) { * Get files * @return files **/ - @JsonProperty("files") + @JsonProperty(value = "files") @ApiModelProperty(value = "") @Valid public List getFiles() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/FormatTest.java index 9817e78712a7..d640a11342c7 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/FormatTest.java @@ -114,7 +114,7 @@ public FormatTest integer(Integer integer) { * maximum: 100 * @return integer **/ - @JsonProperty("integer") + @JsonProperty(value = "integer") @ApiModelProperty(value = "") @Min(10) @Max(100) public Integer getInteger() { @@ -136,7 +136,7 @@ public FormatTest int32(Integer int32) { * maximum: 200 * @return int32 **/ - @JsonProperty("int32") + @JsonProperty(value = "int32") @ApiModelProperty(value = "") @Min(20) @Max(200) public Integer getInt32() { @@ -156,7 +156,7 @@ public FormatTest int64(Long int64) { * Get int64 * @return int64 **/ - @JsonProperty("int64") + @JsonProperty(value = "int64") @ApiModelProperty(value = "") public Long getInt64() { @@ -178,7 +178,7 @@ public FormatTest number(BigDecimal number) { * maximum: 543.2 * @return number **/ - @JsonProperty("number") + @JsonProperty(value = "number") @ApiModelProperty(required = true, value = "") @NotNull @Valid @DecimalMin("32.1") @DecimalMax("543.2") public BigDecimal getNumber() { @@ -200,7 +200,7 @@ public FormatTest _float(Float _float) { * maximum: 987.6 * @return _float **/ - @JsonProperty("float") + @JsonProperty(value = "float") @ApiModelProperty(value = "") @DecimalMin("54.3") @DecimalMax("987.6") public Float getFloat() { @@ -222,7 +222,7 @@ public FormatTest _double(Double _double) { * maximum: 123.4 * @return _double **/ - @JsonProperty("double") + @JsonProperty(value = "double") @ApiModelProperty(value = "") @DecimalMin("67.8") @DecimalMax("123.4") public Double getDouble() { @@ -242,7 +242,7 @@ public FormatTest string(String string) { * Get string * @return string **/ - @JsonProperty("string") + @JsonProperty(value = "string") @ApiModelProperty(value = "") @Pattern(regexp="/[a-z]/i") public String getString() { @@ -262,7 +262,7 @@ public FormatTest _byte(byte[] _byte) { * Get _byte * @return _byte **/ - @JsonProperty("byte") + @JsonProperty(value = "byte") @ApiModelProperty(required = true, value = "") @NotNull public byte[] getByte() { @@ -282,7 +282,7 @@ public FormatTest binary(File binary) { * Get binary * @return binary **/ - @JsonProperty("binary") + @JsonProperty(value = "binary") @ApiModelProperty(value = "") public File getBinary() { @@ -302,7 +302,7 @@ public FormatTest date(Date date) { * Get date * @return date **/ - @JsonProperty("date") + @JsonProperty(value = "date") @ApiModelProperty(required = true, value = "") @NotNull public Date getDate() { @@ -322,7 +322,7 @@ public FormatTest dateTime(Date dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public Date getDateTime() { @@ -342,7 +342,7 @@ public FormatTest uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(example = "72f98069-206d-4f12-9f12-3d1e525a8e84", value = "") public UUID getUuid() { @@ -362,7 +362,7 @@ public FormatTest password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(required = true, value = "") @NotNull @Size(min=10,max=64) public String getPassword() { @@ -382,7 +382,7 @@ public FormatTest bigDecimal(BigDecimal bigDecimal) { * Get bigDecimal * @return bigDecimal **/ - @JsonProperty("BigDecimal") + @JsonProperty(value = "BigDecimal") @ApiModelProperty(value = "") @Valid public BigDecimal getBigDecimal() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java index 4f72442fd947..1b5042f61f59 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java @@ -48,7 +48,7 @@ public HasOnlyReadOnly bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -68,7 +68,7 @@ public HasOnlyReadOnly foo(String foo) { * Get foo * @return foo **/ - @JsonProperty("foo") + @JsonProperty(value = "foo", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getFoo() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/MapTest.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/MapTest.java index 4db676efea2d..12516e0afba2 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/MapTest.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/MapTest.java @@ -101,7 +101,7 @@ public MapTest putMapMapOfStringItem(String key, Map mapMapOfStr * Get mapMapOfString * @return mapMapOfString **/ - @JsonProperty("map_map_of_string") + @JsonProperty(value = "map_map_of_string") @ApiModelProperty(value = "") @Valid public Map> getMapMapOfString() { @@ -129,7 +129,7 @@ public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) * Get mapOfEnumString * @return mapOfEnumString **/ - @JsonProperty("map_of_enum_string") + @JsonProperty(value = "map_of_enum_string") @ApiModelProperty(value = "") public Map getMapOfEnumString() { @@ -157,7 +157,7 @@ public MapTest putDirectMapItem(String key, Boolean directMapItem) { * Get directMap * @return directMap **/ - @JsonProperty("direct_map") + @JsonProperty(value = "direct_map") @ApiModelProperty(value = "") public Map getDirectMap() { @@ -185,7 +185,7 @@ public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) { * Get indirectMap * @return indirectMap **/ - @JsonProperty("indirect_map") + @JsonProperty(value = "indirect_map") @ApiModelProperty(value = "") public Map getIndirectMap() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java index 0ba358c6b5c2..eb4fcd577811 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java @@ -59,7 +59,7 @@ public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(value = "") public UUID getUuid() { @@ -79,7 +79,7 @@ public MixedPropertiesAndAdditionalPropertiesClass dateTime(Date dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public Date getDateTime() { @@ -107,7 +107,7 @@ public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal * Get map * @return map **/ - @JsonProperty("map") + @JsonProperty(value = "map") @ApiModelProperty(value = "") @Valid public Map getMap() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Model200Response.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Model200Response.java index 2df0caa9725d..1a3e698983e5 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Model200Response.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Model200Response.java @@ -49,7 +49,7 @@ public Model200Response name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public Integer getName() { @@ -69,7 +69,7 @@ public Model200Response propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("class") + @JsonProperty(value = "class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ModelApiResponse.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ModelApiResponse.java index b0d01665ef6a..1552245d1dc8 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ModelApiResponse.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ModelApiResponse.java @@ -53,7 +53,7 @@ public ModelApiResponse code(Integer code) { * Get code * @return code **/ - @JsonProperty("code") + @JsonProperty(value = "code") @ApiModelProperty(value = "") public Integer getCode() { @@ -73,7 +73,7 @@ public ModelApiResponse type(String type) { * Get type * @return type **/ - @JsonProperty("type") + @JsonProperty(value = "type") @ApiModelProperty(value = "") public String getType() { @@ -93,7 +93,7 @@ public ModelApiResponse message(String message) { * Get message * @return message **/ - @JsonProperty("message") + @JsonProperty(value = "message") @ApiModelProperty(value = "") public String getMessage() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ModelReturn.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ModelReturn.java index 41a1c059f7ef..c9f4504d3f0e 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ModelReturn.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ModelReturn.java @@ -44,7 +44,7 @@ public ModelReturn _return(Integer _return) { * Get _return * @return _return **/ - @JsonProperty("return") + @JsonProperty(value = "return") @ApiModelProperty(value = "") public Integer getReturn() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Name.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Name.java index a7a189571897..cdcef856cd21 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Name.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Name.java @@ -59,7 +59,7 @@ public Name name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public Integer getName() { @@ -79,7 +79,7 @@ public Name snakeCase(Integer snakeCase) { * Get snakeCase * @return snakeCase **/ - @JsonProperty("snake_case") + @JsonProperty(value = "snake_case", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer getSnakeCase() { @@ -99,7 +99,7 @@ public Name property(String property) { * Get property * @return property **/ - @JsonProperty("property") + @JsonProperty(value = "property") @ApiModelProperty(value = "") public String getProperty() { @@ -119,7 +119,7 @@ public Name _123number(Integer _123number) { * Get _123number * @return _123number **/ - @JsonProperty("123Number") + @JsonProperty(value = "123Number", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer get123number() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/NumberOnly.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/NumberOnly.java index 188899dc4460..3ec25c75ae59 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/NumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/NumberOnly.java @@ -44,7 +44,7 @@ public NumberOnly justNumber(BigDecimal justNumber) { * Get justNumber * @return justNumber **/ - @JsonProperty("JustNumber") + @JsonProperty(value = "JustNumber") @ApiModelProperty(value = "") @Valid public BigDecimal getJustNumber() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Order.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Order.java index 7ce0000199f9..b97b051ebc80 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Order.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Order.java @@ -103,7 +103,7 @@ public Order id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -123,7 +123,7 @@ public Order petId(Long petId) { * Get petId * @return petId **/ - @JsonProperty("petId") + @JsonProperty(value = "petId") @ApiModelProperty(value = "") public Long getPetId() { @@ -143,7 +143,7 @@ public Order quantity(Integer quantity) { * Get quantity * @return quantity **/ - @JsonProperty("quantity") + @JsonProperty(value = "quantity") @ApiModelProperty(value = "") public Integer getQuantity() { @@ -163,7 +163,7 @@ public Order shipDate(Date shipDate) { * Get shipDate * @return shipDate **/ - @JsonProperty("shipDate") + @JsonProperty(value = "shipDate") @ApiModelProperty(value = "") public Date getShipDate() { @@ -183,7 +183,7 @@ public Order status(StatusEnum status) { * Order Status * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "Order Status") public StatusEnum getStatus() { @@ -203,7 +203,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - @JsonProperty("complete") + @JsonProperty(value = "complete") @ApiModelProperty(value = "") public Boolean getComplete() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/OuterComposite.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/OuterComposite.java index 43b69002d036..577504e1bef2 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/OuterComposite.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/OuterComposite.java @@ -54,7 +54,7 @@ public OuterComposite myNumber(BigDecimal myNumber) { * Get myNumber * @return myNumber **/ - @JsonProperty("my_number") + @JsonProperty(value = "my_number") @ApiModelProperty(value = "") @Valid public BigDecimal getMyNumber() { @@ -74,7 +74,7 @@ public OuterComposite myString(String myString) { * Get myString * @return myString **/ - @JsonProperty("my_string") + @JsonProperty(value = "my_string") @ApiModelProperty(value = "") public String getMyString() { @@ -94,7 +94,7 @@ public OuterComposite myBoolean(Boolean myBoolean) { * Get myBoolean * @return myBoolean **/ - @JsonProperty("my_boolean") + @JsonProperty(value = "my_boolean") @ApiModelProperty(value = "") public Boolean getMyBoolean() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Pet.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Pet.java index adcdbf24a57d..4ed108d787e9 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Pet.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Pet.java @@ -108,7 +108,7 @@ public Pet id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -128,7 +128,7 @@ public Pet category(Category category) { * Get category * @return category **/ - @JsonProperty("category") + @JsonProperty(value = "category") @ApiModelProperty(value = "") @Valid public Category getCategory() { @@ -148,7 +148,7 @@ public Pet name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(example = "doggie", required = true, value = "") @NotNull public String getName() { @@ -173,7 +173,7 @@ public Pet addPhotoUrlsItem(String photoUrlsItem) { * Get photoUrls * @return photoUrls **/ - @JsonProperty("photoUrls") + @JsonProperty(value = "photoUrls") @ApiModelProperty(required = true, value = "") @NotNull public Set getPhotoUrls() { @@ -201,7 +201,7 @@ public Pet addTagsItem(Tag tagsItem) { * Get tags * @return tags **/ - @JsonProperty("tags") + @JsonProperty(value = "tags") @ApiModelProperty(value = "") @Valid public List getTags() { @@ -221,7 +221,7 @@ public Pet status(StatusEnum status) { * pet status in the store * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "pet status in the store") public StatusEnum getStatus() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ReadOnlyFirst.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ReadOnlyFirst.java index e2e5ea910e68..05c01064ff67 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ReadOnlyFirst.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/ReadOnlyFirst.java @@ -48,7 +48,7 @@ public ReadOnlyFirst bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -68,7 +68,7 @@ public ReadOnlyFirst baz(String baz) { * Get baz * @return baz **/ - @JsonProperty("baz") + @JsonProperty(value = "baz") @ApiModelProperty(value = "") public String getBaz() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/SpecialModelName.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/SpecialModelName.java index 48ed44ecf621..1fbc58e301e6 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/SpecialModelName.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/SpecialModelName.java @@ -43,7 +43,7 @@ public class SpecialModelName { * Get $specialPropertyName * @return $specialPropertyName **/ - @JsonProperty("$special[property.name]") + @JsonProperty(value = "$special[property.name]") @ApiModelProperty(value = "") public Long get$SpecialPropertyName() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Tag.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Tag.java index 80d098d57c16..5ac82ca92382 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Tag.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/Tag.java @@ -48,7 +48,7 @@ public Tag id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -68,7 +68,7 @@ public Tag name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/TypeHolderDefault.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/TypeHolderDefault.java index 52830413a08c..a8450d0e61d5 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/TypeHolderDefault.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/TypeHolderDefault.java @@ -66,7 +66,7 @@ public TypeHolderDefault stringItem(String stringItem) { * Get stringItem * @return stringItem **/ - @JsonProperty("string_item") + @JsonProperty(value = "string_item") @ApiModelProperty(required = true, value = "") @NotNull public String getStringItem() { @@ -86,7 +86,7 @@ public TypeHolderDefault numberItem(BigDecimal numberItem) { * Get numberItem * @return numberItem **/ - @JsonProperty("number_item") + @JsonProperty(value = "number_item") @ApiModelProperty(required = true, value = "") @NotNull @Valid public BigDecimal getNumberItem() { @@ -106,7 +106,7 @@ public TypeHolderDefault integerItem(Integer integerItem) { * Get integerItem * @return integerItem **/ - @JsonProperty("integer_item") + @JsonProperty(value = "integer_item") @ApiModelProperty(required = true, value = "") @NotNull public Integer getIntegerItem() { @@ -126,7 +126,7 @@ public TypeHolderDefault boolItem(Boolean boolItem) { * Get boolItem * @return boolItem **/ - @JsonProperty("bool_item") + @JsonProperty(value = "bool_item") @ApiModelProperty(required = true, value = "") @NotNull public Boolean getBoolItem() { @@ -151,7 +151,7 @@ public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) { * Get arrayItem * @return arrayItem **/ - @JsonProperty("array_item") + @JsonProperty(value = "array_item") @ApiModelProperty(required = true, value = "") @NotNull public List getArrayItem() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/TypeHolderExample.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/TypeHolderExample.java index 8e57cc93cef4..026943cb64e3 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/TypeHolderExample.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/TypeHolderExample.java @@ -71,7 +71,7 @@ public TypeHolderExample stringItem(String stringItem) { * Get stringItem * @return stringItem **/ - @JsonProperty("string_item") + @JsonProperty(value = "string_item") @ApiModelProperty(example = "what", required = true, value = "") @NotNull public String getStringItem() { @@ -91,7 +91,7 @@ public TypeHolderExample numberItem(BigDecimal numberItem) { * Get numberItem * @return numberItem **/ - @JsonProperty("number_item") + @JsonProperty(value = "number_item") @ApiModelProperty(example = "1.234", required = true, value = "") @NotNull @Valid public BigDecimal getNumberItem() { @@ -111,7 +111,7 @@ public TypeHolderExample floatItem(Float floatItem) { * Get floatItem * @return floatItem **/ - @JsonProperty("float_item") + @JsonProperty(value = "float_item") @ApiModelProperty(example = "1.234", required = true, value = "") @NotNull public Float getFloatItem() { @@ -131,7 +131,7 @@ public TypeHolderExample integerItem(Integer integerItem) { * Get integerItem * @return integerItem **/ - @JsonProperty("integer_item") + @JsonProperty(value = "integer_item") @ApiModelProperty(example = "-2", required = true, value = "") @NotNull public Integer getIntegerItem() { @@ -151,7 +151,7 @@ public TypeHolderExample boolItem(Boolean boolItem) { * Get boolItem * @return boolItem **/ - @JsonProperty("bool_item") + @JsonProperty(value = "bool_item") @ApiModelProperty(example = "true", required = true, value = "") @NotNull public Boolean getBoolItem() { @@ -176,7 +176,7 @@ public TypeHolderExample addArrayItemItem(Integer arrayItemItem) { * Get arrayItem * @return arrayItem **/ - @JsonProperty("array_item") + @JsonProperty(value = "array_item") @ApiModelProperty(example = "[0, 1, 2, 3]", required = true, value = "") @NotNull public List getArrayItem() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/User.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/User.java index 1e702dd070d5..37ab5453c3d2 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/User.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/User.java @@ -78,7 +78,7 @@ public User id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -98,7 +98,7 @@ public User username(String username) { * Get username * @return username **/ - @JsonProperty("username") + @JsonProperty(value = "username") @ApiModelProperty(value = "") public String getUsername() { @@ -118,7 +118,7 @@ public User firstName(String firstName) { * Get firstName * @return firstName **/ - @JsonProperty("firstName") + @JsonProperty(value = "firstName") @ApiModelProperty(value = "") public String getFirstName() { @@ -138,7 +138,7 @@ public User lastName(String lastName) { * Get lastName * @return lastName **/ - @JsonProperty("lastName") + @JsonProperty(value = "lastName") @ApiModelProperty(value = "") public String getLastName() { @@ -158,7 +158,7 @@ public User email(String email) { * Get email * @return email **/ - @JsonProperty("email") + @JsonProperty(value = "email") @ApiModelProperty(value = "") public String getEmail() { @@ -178,7 +178,7 @@ public User password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(value = "") public String getPassword() { @@ -198,7 +198,7 @@ public User phone(String phone) { * Get phone * @return phone **/ - @JsonProperty("phone") + @JsonProperty(value = "phone") @ApiModelProperty(value = "") public String getPhone() { @@ -218,7 +218,7 @@ public User userStatus(Integer userStatus) { * User Status * @return userStatus **/ - @JsonProperty("userStatus") + @JsonProperty(value = "userStatus") @ApiModelProperty(value = "User Status") public Integer getUserStatus() { diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/XmlItem.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/XmlItem.java index 8c61e3e4cc0e..46c2de9ca268 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/XmlItem.java +++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/model/XmlItem.java @@ -186,7 +186,7 @@ public XmlItem attributeString(String attributeString) { * Get attributeString * @return attributeString **/ - @JsonProperty("attribute_string") + @JsonProperty(value = "attribute_string") @ApiModelProperty(example = "string", value = "") public String getAttributeString() { @@ -206,7 +206,7 @@ public XmlItem attributeNumber(BigDecimal attributeNumber) { * Get attributeNumber * @return attributeNumber **/ - @JsonProperty("attribute_number") + @JsonProperty(value = "attribute_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getAttributeNumber() { @@ -226,7 +226,7 @@ public XmlItem attributeInteger(Integer attributeInteger) { * Get attributeInteger * @return attributeInteger **/ - @JsonProperty("attribute_integer") + @JsonProperty(value = "attribute_integer") @ApiModelProperty(example = "-2", value = "") public Integer getAttributeInteger() { @@ -246,7 +246,7 @@ public XmlItem attributeBoolean(Boolean attributeBoolean) { * Get attributeBoolean * @return attributeBoolean **/ - @JsonProperty("attribute_boolean") + @JsonProperty(value = "attribute_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getAttributeBoolean() { @@ -274,7 +274,7 @@ public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) { * Get wrappedArray * @return wrappedArray **/ - @JsonProperty("wrapped_array") + @JsonProperty(value = "wrapped_array") @ApiModelProperty(value = "") public List getWrappedArray() { @@ -294,7 +294,7 @@ public XmlItem nameString(String nameString) { * Get nameString * @return nameString **/ - @JsonProperty("name_string") + @JsonProperty(value = "name_string") @ApiModelProperty(example = "string", value = "") public String getNameString() { @@ -314,7 +314,7 @@ public XmlItem nameNumber(BigDecimal nameNumber) { * Get nameNumber * @return nameNumber **/ - @JsonProperty("name_number") + @JsonProperty(value = "name_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getNameNumber() { @@ -334,7 +334,7 @@ public XmlItem nameInteger(Integer nameInteger) { * Get nameInteger * @return nameInteger **/ - @JsonProperty("name_integer") + @JsonProperty(value = "name_integer") @ApiModelProperty(example = "-2", value = "") public Integer getNameInteger() { @@ -354,7 +354,7 @@ public XmlItem nameBoolean(Boolean nameBoolean) { * Get nameBoolean * @return nameBoolean **/ - @JsonProperty("name_boolean") + @JsonProperty(value = "name_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getNameBoolean() { @@ -382,7 +382,7 @@ public XmlItem addNameArrayItem(Integer nameArrayItem) { * Get nameArray * @return nameArray **/ - @JsonProperty("name_array") + @JsonProperty(value = "name_array") @ApiModelProperty(value = "") public List getNameArray() { @@ -410,7 +410,7 @@ public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) { * Get nameWrappedArray * @return nameWrappedArray **/ - @JsonProperty("name_wrapped_array") + @JsonProperty(value = "name_wrapped_array") @ApiModelProperty(value = "") public List getNameWrappedArray() { @@ -430,7 +430,7 @@ public XmlItem prefixString(String prefixString) { * Get prefixString * @return prefixString **/ - @JsonProperty("prefix_string") + @JsonProperty(value = "prefix_string") @ApiModelProperty(example = "string", value = "") public String getPrefixString() { @@ -450,7 +450,7 @@ public XmlItem prefixNumber(BigDecimal prefixNumber) { * Get prefixNumber * @return prefixNumber **/ - @JsonProperty("prefix_number") + @JsonProperty(value = "prefix_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getPrefixNumber() { @@ -470,7 +470,7 @@ public XmlItem prefixInteger(Integer prefixInteger) { * Get prefixInteger * @return prefixInteger **/ - @JsonProperty("prefix_integer") + @JsonProperty(value = "prefix_integer") @ApiModelProperty(example = "-2", value = "") public Integer getPrefixInteger() { @@ -490,7 +490,7 @@ public XmlItem prefixBoolean(Boolean prefixBoolean) { * Get prefixBoolean * @return prefixBoolean **/ - @JsonProperty("prefix_boolean") + @JsonProperty(value = "prefix_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getPrefixBoolean() { @@ -518,7 +518,7 @@ public XmlItem addPrefixArrayItem(Integer prefixArrayItem) { * Get prefixArray * @return prefixArray **/ - @JsonProperty("prefix_array") + @JsonProperty(value = "prefix_array") @ApiModelProperty(value = "") public List getPrefixArray() { @@ -546,7 +546,7 @@ public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) { * Get prefixWrappedArray * @return prefixWrappedArray **/ - @JsonProperty("prefix_wrapped_array") + @JsonProperty(value = "prefix_wrapped_array") @ApiModelProperty(value = "") public List getPrefixWrappedArray() { @@ -566,7 +566,7 @@ public XmlItem namespaceString(String namespaceString) { * Get namespaceString * @return namespaceString **/ - @JsonProperty("namespace_string") + @JsonProperty(value = "namespace_string") @ApiModelProperty(example = "string", value = "") public String getNamespaceString() { @@ -586,7 +586,7 @@ public XmlItem namespaceNumber(BigDecimal namespaceNumber) { * Get namespaceNumber * @return namespaceNumber **/ - @JsonProperty("namespace_number") + @JsonProperty(value = "namespace_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getNamespaceNumber() { @@ -606,7 +606,7 @@ public XmlItem namespaceInteger(Integer namespaceInteger) { * Get namespaceInteger * @return namespaceInteger **/ - @JsonProperty("namespace_integer") + @JsonProperty(value = "namespace_integer") @ApiModelProperty(example = "-2", value = "") public Integer getNamespaceInteger() { @@ -626,7 +626,7 @@ public XmlItem namespaceBoolean(Boolean namespaceBoolean) { * Get namespaceBoolean * @return namespaceBoolean **/ - @JsonProperty("namespace_boolean") + @JsonProperty(value = "namespace_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getNamespaceBoolean() { @@ -654,7 +654,7 @@ public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) { * Get namespaceArray * @return namespaceArray **/ - @JsonProperty("namespace_array") + @JsonProperty(value = "namespace_array") @ApiModelProperty(value = "") public List getNamespaceArray() { @@ -682,7 +682,7 @@ public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) { * Get namespaceWrappedArray * @return namespaceWrappedArray **/ - @JsonProperty("namespace_wrapped_array") + @JsonProperty(value = "namespace_wrapped_array") @ApiModelProperty(value = "") public List getNamespaceWrappedArray() { @@ -702,7 +702,7 @@ public XmlItem prefixNsString(String prefixNsString) { * Get prefixNsString * @return prefixNsString **/ - @JsonProperty("prefix_ns_string") + @JsonProperty(value = "prefix_ns_string") @ApiModelProperty(example = "string", value = "") public String getPrefixNsString() { @@ -722,7 +722,7 @@ public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) { * Get prefixNsNumber * @return prefixNsNumber **/ - @JsonProperty("prefix_ns_number") + @JsonProperty(value = "prefix_ns_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getPrefixNsNumber() { @@ -742,7 +742,7 @@ public XmlItem prefixNsInteger(Integer prefixNsInteger) { * Get prefixNsInteger * @return prefixNsInteger **/ - @JsonProperty("prefix_ns_integer") + @JsonProperty(value = "prefix_ns_integer") @ApiModelProperty(example = "-2", value = "") public Integer getPrefixNsInteger() { @@ -762,7 +762,7 @@ public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) { * Get prefixNsBoolean * @return prefixNsBoolean **/ - @JsonProperty("prefix_ns_boolean") + @JsonProperty(value = "prefix_ns_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getPrefixNsBoolean() { @@ -790,7 +790,7 @@ public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) { * Get prefixNsArray * @return prefixNsArray **/ - @JsonProperty("prefix_ns_array") + @JsonProperty(value = "prefix_ns_array") @ApiModelProperty(value = "") public List getPrefixNsArray() { @@ -818,7 +818,7 @@ public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) { * Get prefixNsWrappedArray * @return prefixNsWrappedArray **/ - @JsonProperty("prefix_ns_wrapped_array") + @JsonProperty(value = "prefix_ns_wrapped_array") @ApiModelProperty(value = "") public List getPrefixNsWrappedArray() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java index 94ab4ee99b59..b69405239b38 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java @@ -45,7 +45,7 @@ public AdditionalPropertiesAnyType name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java index 8a7cbbfa5e79..f90d93c37aec 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java @@ -46,7 +46,7 @@ public AdditionalPropertiesArray name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java index 8e5e3a7ec7cc..473358d6cda0 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java @@ -45,7 +45,7 @@ public AdditionalPropertiesBoolean name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java index df959efecfe6..bf846cfb6bf7 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java @@ -105,7 +105,7 @@ public AdditionalPropertiesClass putMapStringItem(String key, String mapStringIt * Get mapString * @return mapString **/ - @JsonProperty("map_string") + @JsonProperty(value = "map_string") @ApiModelProperty(value = "") public Map getMapString() { @@ -133,7 +133,7 @@ public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumb * Get mapNumber * @return mapNumber **/ - @JsonProperty("map_number") + @JsonProperty(value = "map_number") @ApiModelProperty(value = "") @Valid public Map getMapNumber() { @@ -161,7 +161,7 @@ public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntege * Get mapInteger * @return mapInteger **/ - @JsonProperty("map_integer") + @JsonProperty(value = "map_integer") @ApiModelProperty(value = "") public Map getMapInteger() { @@ -189,7 +189,7 @@ public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBoolea * Get mapBoolean * @return mapBoolean **/ - @JsonProperty("map_boolean") + @JsonProperty(value = "map_boolean") @ApiModelProperty(value = "") public Map getMapBoolean() { @@ -217,7 +217,7 @@ public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List> getMapArrayInteger() { @@ -245,7 +245,7 @@ public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List * Get mapArrayAnytype * @return mapArrayAnytype **/ - @JsonProperty("map_array_anytype") + @JsonProperty(value = "map_array_anytype") @ApiModelProperty(value = "") @Valid public Map> getMapArrayAnytype() { @@ -273,7 +273,7 @@ public AdditionalPropertiesClass putMapMapStringItem(String key, Map> getMapMapString() { @@ -301,7 +301,7 @@ public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map> getMapMapAnytype() { @@ -321,7 +321,7 @@ public AdditionalPropertiesClass anytype1(Object anytype1) { * Get anytype1 * @return anytype1 **/ - @JsonProperty("anytype_1") + @JsonProperty(value = "anytype_1") @ApiModelProperty(value = "") public Object getAnytype1() { @@ -341,7 +341,7 @@ public AdditionalPropertiesClass anytype2(Object anytype2) { * Get anytype2 * @return anytype2 **/ - @JsonProperty("anytype_2") + @JsonProperty(value = "anytype_2") @ApiModelProperty(value = "") public Object getAnytype2() { @@ -361,7 +361,7 @@ public AdditionalPropertiesClass anytype3(Object anytype3) { * Get anytype3 * @return anytype3 **/ - @JsonProperty("anytype_3") + @JsonProperty(value = "anytype_3") @ApiModelProperty(value = "") public Object getAnytype3() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java index ac5f7501b3a8..29bd12be784b 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java @@ -45,7 +45,7 @@ public AdditionalPropertiesInteger name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java index d3072f447dca..f05484cd7cc7 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java @@ -46,7 +46,7 @@ public AdditionalPropertiesNumber name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java index 8f8b575df2a2..fb246cac6598 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java @@ -45,7 +45,7 @@ public AdditionalPropertiesObject name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java index c5d4ac7f7c1b..b7018e370e50 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java @@ -45,7 +45,7 @@ public AdditionalPropertiesString name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Animal.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Animal.java index db142b932d90..97cdd70ab0a1 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Animal.java @@ -56,7 +56,7 @@ public Animal className(String className) { * Get className * @return className **/ - @JsonProperty("className") + @JsonProperty(value = "className") @ApiModelProperty(required = true, value = "") @NotNull public String getClassName() { @@ -76,7 +76,7 @@ public Animal color(String color) { * Get color * @return color **/ - @JsonProperty("color") + @JsonProperty(value = "color") @ApiModelProperty(value = "") public String getColor() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java index cd6a16edb265..d277c77993f3 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java @@ -54,7 +54,7 @@ public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List arrayAr * Get arrayArrayNumber * @return arrayArrayNumber **/ - @JsonProperty("ArrayArrayNumber") + @JsonProperty(value = "ArrayArrayNumber") @ApiModelProperty(value = "") @Valid public List> getArrayArrayNumber() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java index 71d88cd5d890..f8b08e16723e 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java @@ -54,7 +54,7 @@ public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) { * Get arrayNumber * @return arrayNumber **/ - @JsonProperty("ArrayNumber") + @JsonProperty(value = "ArrayNumber") @ApiModelProperty(value = "") @Valid public List getArrayNumber() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayTest.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayTest.java index 738fa858e7e7..dfeb88958dca 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayTest.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ArrayTest.java @@ -64,7 +64,7 @@ public ArrayTest addArrayOfStringItem(String arrayOfStringItem) { * Get arrayOfString * @return arrayOfString **/ - @JsonProperty("array_of_string") + @JsonProperty(value = "array_of_string") @ApiModelProperty(value = "") public List getArrayOfString() { @@ -92,7 +92,7 @@ public ArrayTest addArrayArrayOfIntegerItem(List arrayArrayOfIntegerItem) * Get arrayArrayOfInteger * @return arrayArrayOfInteger **/ - @JsonProperty("array_array_of_integer") + @JsonProperty(value = "array_array_of_integer") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfInteger() { @@ -120,7 +120,7 @@ public ArrayTest addArrayArrayOfModelItem(List arrayArrayOfModelI * Get arrayArrayOfModel * @return arrayArrayOfModel **/ - @JsonProperty("array_array_of_model") + @JsonProperty(value = "array_array_of_model") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfModel() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/BigCat.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/BigCat.java index 0af195ad0a72..867f51230021 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/BigCat.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/BigCat.java @@ -81,7 +81,7 @@ public BigCat kind(KindEnum kind) { * Get kind * @return kind **/ - @JsonProperty("kind") + @JsonProperty(value = "kind") @ApiModelProperty(value = "") public KindEnum getKind() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/BigCatAllOf.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/BigCatAllOf.java index eaf4e4f49f5e..ae1220fcefd1 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/BigCatAllOf.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/BigCatAllOf.java @@ -79,7 +79,7 @@ public BigCatAllOf kind(KindEnum kind) { * Get kind * @return kind **/ - @JsonProperty("kind") + @JsonProperty(value = "kind") @ApiModelProperty(value = "") public KindEnum getKind() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Capitalization.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Capitalization.java index 9b99fe2b58b3..650d2c7b790b 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Capitalization.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Capitalization.java @@ -68,7 +68,7 @@ public Capitalization smallCamel(String smallCamel) { * Get smallCamel * @return smallCamel **/ - @JsonProperty("smallCamel") + @JsonProperty(value = "smallCamel") @ApiModelProperty(value = "") public String getSmallCamel() { @@ -88,7 +88,7 @@ public Capitalization capitalCamel(String capitalCamel) { * Get capitalCamel * @return capitalCamel **/ - @JsonProperty("CapitalCamel") + @JsonProperty(value = "CapitalCamel") @ApiModelProperty(value = "") public String getCapitalCamel() { @@ -108,7 +108,7 @@ public Capitalization smallSnake(String smallSnake) { * Get smallSnake * @return smallSnake **/ - @JsonProperty("small_Snake") + @JsonProperty(value = "small_Snake") @ApiModelProperty(value = "") public String getSmallSnake() { @@ -128,7 +128,7 @@ public Capitalization capitalSnake(String capitalSnake) { * Get capitalSnake * @return capitalSnake **/ - @JsonProperty("Capital_Snake") + @JsonProperty(value = "Capital_Snake") @ApiModelProperty(value = "") public String getCapitalSnake() { @@ -148,7 +148,7 @@ public Capitalization scAETHFlowPoints(String scAETHFlowPoints) { * Get scAETHFlowPoints * @return scAETHFlowPoints **/ - @JsonProperty("SCA_ETH_Flow_Points") + @JsonProperty(value = "SCA_ETH_Flow_Points") @ApiModelProperty(value = "") public String getScAETHFlowPoints() { @@ -168,7 +168,7 @@ public Capitalization ATT_NAME(String ATT_NAME) { * Name of the pet * @return ATT_NAME **/ - @JsonProperty("ATT_NAME") + @JsonProperty(value = "ATT_NAME") @ApiModelProperty(value = "Name of the pet ") public String getATTNAME() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Cat.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Cat.java index a393506d3aa5..ef4f615bfe76 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Cat.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Cat.java @@ -45,7 +45,7 @@ public Cat declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/CatAllOf.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/CatAllOf.java index 7e2a72595950..83503a712d2b 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/CatAllOf.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/CatAllOf.java @@ -43,7 +43,7 @@ public CatAllOf declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Category.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Category.java index d7a5c2b2fafa..af6055dba4ea 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Category.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Category.java @@ -48,7 +48,7 @@ public Category id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -68,7 +68,7 @@ public Category name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ClassModel.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ClassModel.java index 00352ed5bce9..ccfe8e27684e 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ClassModel.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ClassModel.java @@ -44,7 +44,7 @@ public ClassModel propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("_class") + @JsonProperty(value = "_class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Client.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Client.java index 04b28287ed41..0c87d7030a57 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Client.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Client.java @@ -43,7 +43,7 @@ public Client client(String client) { * Get client * @return client **/ - @JsonProperty("client") + @JsonProperty(value = "client") @ApiModelProperty(value = "") public String getClient() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Dog.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Dog.java index 7d6059b2fc1f..e126444fd61e 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Dog.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Dog.java @@ -45,7 +45,7 @@ public Dog breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/DogAllOf.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/DogAllOf.java index 9fcfbfb92cfc..6902a980c243 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/DogAllOf.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/DogAllOf.java @@ -43,7 +43,7 @@ public DogAllOf breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/EnumArrays.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/EnumArrays.java index 526f387372ca..08e6db1ffc92 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/EnumArrays.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/EnumArrays.java @@ -113,7 +113,7 @@ public EnumArrays justSymbol(JustSymbolEnum justSymbol) { * Get justSymbol * @return justSymbol **/ - @JsonProperty("just_symbol") + @JsonProperty(value = "just_symbol") @ApiModelProperty(value = "") public JustSymbolEnum getJustSymbol() { @@ -141,7 +141,7 @@ public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) { * Get arrayEnum * @return arrayEnum **/ - @JsonProperty("array_enum") + @JsonProperty(value = "array_enum") @ApiModelProperty(value = "") public List getArrayEnum() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/EnumTest.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/EnumTest.java index ee08eadfa8d7..937a9f7f6aeb 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/EnumTest.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/EnumTest.java @@ -193,7 +193,7 @@ public EnumTest enumString(EnumStringEnum enumString) { * Get enumString * @return enumString **/ - @JsonProperty("enum_string") + @JsonProperty(value = "enum_string") @ApiModelProperty(value = "") public EnumStringEnum getEnumString() { @@ -213,7 +213,7 @@ public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) { * Get enumStringRequired * @return enumStringRequired **/ - @JsonProperty("enum_string_required") + @JsonProperty(value = "enum_string_required") @ApiModelProperty(required = true, value = "") @NotNull public EnumStringRequiredEnum getEnumStringRequired() { @@ -233,7 +233,7 @@ public EnumTest enumInteger(EnumIntegerEnum enumInteger) { * Get enumInteger * @return enumInteger **/ - @JsonProperty("enum_integer") + @JsonProperty(value = "enum_integer") @ApiModelProperty(value = "") public EnumIntegerEnum getEnumInteger() { @@ -253,7 +253,7 @@ public EnumTest enumNumber(EnumNumberEnum enumNumber) { * Get enumNumber * @return enumNumber **/ - @JsonProperty("enum_number") + @JsonProperty(value = "enum_number") @ApiModelProperty(value = "") public EnumNumberEnum getEnumNumber() { @@ -273,7 +273,7 @@ public EnumTest outerEnum(OuterEnum outerEnum) { * Get outerEnum * @return outerEnum **/ - @JsonProperty("outerEnum") + @JsonProperty(value = "outerEnum") @ApiModelProperty(value = "") @Valid public OuterEnum getOuterEnum() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/FileSchemaTestClass.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/FileSchemaTestClass.java index 4be816893906..fb40a511e446 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/FileSchemaTestClass.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/FileSchemaTestClass.java @@ -50,7 +50,7 @@ public FileSchemaTestClass file(java.io.File file) { * Get file * @return file **/ - @JsonProperty("file") + @JsonProperty(value = "file") @ApiModelProperty(value = "") @Valid public java.io.File getFile() { @@ -78,7 +78,7 @@ public FileSchemaTestClass addFilesItem(java.io.File filesItem) { * Get files * @return files **/ - @JsonProperty("files") + @JsonProperty(value = "files") @ApiModelProperty(value = "") @Valid public List getFiles() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/FormatTest.java index 9817e78712a7..d640a11342c7 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/FormatTest.java @@ -114,7 +114,7 @@ public FormatTest integer(Integer integer) { * maximum: 100 * @return integer **/ - @JsonProperty("integer") + @JsonProperty(value = "integer") @ApiModelProperty(value = "") @Min(10) @Max(100) public Integer getInteger() { @@ -136,7 +136,7 @@ public FormatTest int32(Integer int32) { * maximum: 200 * @return int32 **/ - @JsonProperty("int32") + @JsonProperty(value = "int32") @ApiModelProperty(value = "") @Min(20) @Max(200) public Integer getInt32() { @@ -156,7 +156,7 @@ public FormatTest int64(Long int64) { * Get int64 * @return int64 **/ - @JsonProperty("int64") + @JsonProperty(value = "int64") @ApiModelProperty(value = "") public Long getInt64() { @@ -178,7 +178,7 @@ public FormatTest number(BigDecimal number) { * maximum: 543.2 * @return number **/ - @JsonProperty("number") + @JsonProperty(value = "number") @ApiModelProperty(required = true, value = "") @NotNull @Valid @DecimalMin("32.1") @DecimalMax("543.2") public BigDecimal getNumber() { @@ -200,7 +200,7 @@ public FormatTest _float(Float _float) { * maximum: 987.6 * @return _float **/ - @JsonProperty("float") + @JsonProperty(value = "float") @ApiModelProperty(value = "") @DecimalMin("54.3") @DecimalMax("987.6") public Float getFloat() { @@ -222,7 +222,7 @@ public FormatTest _double(Double _double) { * maximum: 123.4 * @return _double **/ - @JsonProperty("double") + @JsonProperty(value = "double") @ApiModelProperty(value = "") @DecimalMin("67.8") @DecimalMax("123.4") public Double getDouble() { @@ -242,7 +242,7 @@ public FormatTest string(String string) { * Get string * @return string **/ - @JsonProperty("string") + @JsonProperty(value = "string") @ApiModelProperty(value = "") @Pattern(regexp="/[a-z]/i") public String getString() { @@ -262,7 +262,7 @@ public FormatTest _byte(byte[] _byte) { * Get _byte * @return _byte **/ - @JsonProperty("byte") + @JsonProperty(value = "byte") @ApiModelProperty(required = true, value = "") @NotNull public byte[] getByte() { @@ -282,7 +282,7 @@ public FormatTest binary(File binary) { * Get binary * @return binary **/ - @JsonProperty("binary") + @JsonProperty(value = "binary") @ApiModelProperty(value = "") public File getBinary() { @@ -302,7 +302,7 @@ public FormatTest date(Date date) { * Get date * @return date **/ - @JsonProperty("date") + @JsonProperty(value = "date") @ApiModelProperty(required = true, value = "") @NotNull public Date getDate() { @@ -322,7 +322,7 @@ public FormatTest dateTime(Date dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public Date getDateTime() { @@ -342,7 +342,7 @@ public FormatTest uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(example = "72f98069-206d-4f12-9f12-3d1e525a8e84", value = "") public UUID getUuid() { @@ -362,7 +362,7 @@ public FormatTest password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(required = true, value = "") @NotNull @Size(min=10,max=64) public String getPassword() { @@ -382,7 +382,7 @@ public FormatTest bigDecimal(BigDecimal bigDecimal) { * Get bigDecimal * @return bigDecimal **/ - @JsonProperty("BigDecimal") + @JsonProperty(value = "BigDecimal") @ApiModelProperty(value = "") @Valid public BigDecimal getBigDecimal() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java index 4f72442fd947..1b5042f61f59 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java @@ -48,7 +48,7 @@ public HasOnlyReadOnly bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -68,7 +68,7 @@ public HasOnlyReadOnly foo(String foo) { * Get foo * @return foo **/ - @JsonProperty("foo") + @JsonProperty(value = "foo", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getFoo() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/MapTest.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/MapTest.java index 4db676efea2d..12516e0afba2 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/MapTest.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/MapTest.java @@ -101,7 +101,7 @@ public MapTest putMapMapOfStringItem(String key, Map mapMapOfStr * Get mapMapOfString * @return mapMapOfString **/ - @JsonProperty("map_map_of_string") + @JsonProperty(value = "map_map_of_string") @ApiModelProperty(value = "") @Valid public Map> getMapMapOfString() { @@ -129,7 +129,7 @@ public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) * Get mapOfEnumString * @return mapOfEnumString **/ - @JsonProperty("map_of_enum_string") + @JsonProperty(value = "map_of_enum_string") @ApiModelProperty(value = "") public Map getMapOfEnumString() { @@ -157,7 +157,7 @@ public MapTest putDirectMapItem(String key, Boolean directMapItem) { * Get directMap * @return directMap **/ - @JsonProperty("direct_map") + @JsonProperty(value = "direct_map") @ApiModelProperty(value = "") public Map getDirectMap() { @@ -185,7 +185,7 @@ public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) { * Get indirectMap * @return indirectMap **/ - @JsonProperty("indirect_map") + @JsonProperty(value = "indirect_map") @ApiModelProperty(value = "") public Map getIndirectMap() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java index 0ba358c6b5c2..eb4fcd577811 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java @@ -59,7 +59,7 @@ public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(value = "") public UUID getUuid() { @@ -79,7 +79,7 @@ public MixedPropertiesAndAdditionalPropertiesClass dateTime(Date dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public Date getDateTime() { @@ -107,7 +107,7 @@ public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal * Get map * @return map **/ - @JsonProperty("map") + @JsonProperty(value = "map") @ApiModelProperty(value = "") @Valid public Map getMap() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Model200Response.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Model200Response.java index 2df0caa9725d..1a3e698983e5 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Model200Response.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Model200Response.java @@ -49,7 +49,7 @@ public Model200Response name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public Integer getName() { @@ -69,7 +69,7 @@ public Model200Response propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("class") + @JsonProperty(value = "class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ModelApiResponse.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ModelApiResponse.java index b0d01665ef6a..1552245d1dc8 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ModelApiResponse.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ModelApiResponse.java @@ -53,7 +53,7 @@ public ModelApiResponse code(Integer code) { * Get code * @return code **/ - @JsonProperty("code") + @JsonProperty(value = "code") @ApiModelProperty(value = "") public Integer getCode() { @@ -73,7 +73,7 @@ public ModelApiResponse type(String type) { * Get type * @return type **/ - @JsonProperty("type") + @JsonProperty(value = "type") @ApiModelProperty(value = "") public String getType() { @@ -93,7 +93,7 @@ public ModelApiResponse message(String message) { * Get message * @return message **/ - @JsonProperty("message") + @JsonProperty(value = "message") @ApiModelProperty(value = "") public String getMessage() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ModelReturn.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ModelReturn.java index 41a1c059f7ef..c9f4504d3f0e 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ModelReturn.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ModelReturn.java @@ -44,7 +44,7 @@ public ModelReturn _return(Integer _return) { * Get _return * @return _return **/ - @JsonProperty("return") + @JsonProperty(value = "return") @ApiModelProperty(value = "") public Integer getReturn() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Name.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Name.java index a7a189571897..cdcef856cd21 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Name.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Name.java @@ -59,7 +59,7 @@ public Name name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public Integer getName() { @@ -79,7 +79,7 @@ public Name snakeCase(Integer snakeCase) { * Get snakeCase * @return snakeCase **/ - @JsonProperty("snake_case") + @JsonProperty(value = "snake_case", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer getSnakeCase() { @@ -99,7 +99,7 @@ public Name property(String property) { * Get property * @return property **/ - @JsonProperty("property") + @JsonProperty(value = "property") @ApiModelProperty(value = "") public String getProperty() { @@ -119,7 +119,7 @@ public Name _123number(Integer _123number) { * Get _123number * @return _123number **/ - @JsonProperty("123Number") + @JsonProperty(value = "123Number", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer get123number() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/NumberOnly.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/NumberOnly.java index 188899dc4460..3ec25c75ae59 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/NumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/NumberOnly.java @@ -44,7 +44,7 @@ public NumberOnly justNumber(BigDecimal justNumber) { * Get justNumber * @return justNumber **/ - @JsonProperty("JustNumber") + @JsonProperty(value = "JustNumber") @ApiModelProperty(value = "") @Valid public BigDecimal getJustNumber() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Order.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Order.java index 7ce0000199f9..b97b051ebc80 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Order.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Order.java @@ -103,7 +103,7 @@ public Order id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -123,7 +123,7 @@ public Order petId(Long petId) { * Get petId * @return petId **/ - @JsonProperty("petId") + @JsonProperty(value = "petId") @ApiModelProperty(value = "") public Long getPetId() { @@ -143,7 +143,7 @@ public Order quantity(Integer quantity) { * Get quantity * @return quantity **/ - @JsonProperty("quantity") + @JsonProperty(value = "quantity") @ApiModelProperty(value = "") public Integer getQuantity() { @@ -163,7 +163,7 @@ public Order shipDate(Date shipDate) { * Get shipDate * @return shipDate **/ - @JsonProperty("shipDate") + @JsonProperty(value = "shipDate") @ApiModelProperty(value = "") public Date getShipDate() { @@ -183,7 +183,7 @@ public Order status(StatusEnum status) { * Order Status * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "Order Status") public StatusEnum getStatus() { @@ -203,7 +203,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - @JsonProperty("complete") + @JsonProperty(value = "complete") @ApiModelProperty(value = "") public Boolean getComplete() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/OuterComposite.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/OuterComposite.java index 43b69002d036..577504e1bef2 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/OuterComposite.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/OuterComposite.java @@ -54,7 +54,7 @@ public OuterComposite myNumber(BigDecimal myNumber) { * Get myNumber * @return myNumber **/ - @JsonProperty("my_number") + @JsonProperty(value = "my_number") @ApiModelProperty(value = "") @Valid public BigDecimal getMyNumber() { @@ -74,7 +74,7 @@ public OuterComposite myString(String myString) { * Get myString * @return myString **/ - @JsonProperty("my_string") + @JsonProperty(value = "my_string") @ApiModelProperty(value = "") public String getMyString() { @@ -94,7 +94,7 @@ public OuterComposite myBoolean(Boolean myBoolean) { * Get myBoolean * @return myBoolean **/ - @JsonProperty("my_boolean") + @JsonProperty(value = "my_boolean") @ApiModelProperty(value = "") public Boolean getMyBoolean() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Pet.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Pet.java index adcdbf24a57d..4ed108d787e9 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Pet.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Pet.java @@ -108,7 +108,7 @@ public Pet id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -128,7 +128,7 @@ public Pet category(Category category) { * Get category * @return category **/ - @JsonProperty("category") + @JsonProperty(value = "category") @ApiModelProperty(value = "") @Valid public Category getCategory() { @@ -148,7 +148,7 @@ public Pet name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(example = "doggie", required = true, value = "") @NotNull public String getName() { @@ -173,7 +173,7 @@ public Pet addPhotoUrlsItem(String photoUrlsItem) { * Get photoUrls * @return photoUrls **/ - @JsonProperty("photoUrls") + @JsonProperty(value = "photoUrls") @ApiModelProperty(required = true, value = "") @NotNull public Set getPhotoUrls() { @@ -201,7 +201,7 @@ public Pet addTagsItem(Tag tagsItem) { * Get tags * @return tags **/ - @JsonProperty("tags") + @JsonProperty(value = "tags") @ApiModelProperty(value = "") @Valid public List getTags() { @@ -221,7 +221,7 @@ public Pet status(StatusEnum status) { * pet status in the store * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "pet status in the store") public StatusEnum getStatus() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ReadOnlyFirst.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ReadOnlyFirst.java index e2e5ea910e68..05c01064ff67 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ReadOnlyFirst.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/ReadOnlyFirst.java @@ -48,7 +48,7 @@ public ReadOnlyFirst bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -68,7 +68,7 @@ public ReadOnlyFirst baz(String baz) { * Get baz * @return baz **/ - @JsonProperty("baz") + @JsonProperty(value = "baz") @ApiModelProperty(value = "") public String getBaz() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/SpecialModelName.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/SpecialModelName.java index 48ed44ecf621..1fbc58e301e6 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/SpecialModelName.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/SpecialModelName.java @@ -43,7 +43,7 @@ public class SpecialModelName { * Get $specialPropertyName * @return $specialPropertyName **/ - @JsonProperty("$special[property.name]") + @JsonProperty(value = "$special[property.name]") @ApiModelProperty(value = "") public Long get$SpecialPropertyName() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Tag.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Tag.java index 80d098d57c16..5ac82ca92382 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Tag.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/Tag.java @@ -48,7 +48,7 @@ public Tag id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -68,7 +68,7 @@ public Tag name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/TypeHolderDefault.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/TypeHolderDefault.java index 52830413a08c..a8450d0e61d5 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/TypeHolderDefault.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/TypeHolderDefault.java @@ -66,7 +66,7 @@ public TypeHolderDefault stringItem(String stringItem) { * Get stringItem * @return stringItem **/ - @JsonProperty("string_item") + @JsonProperty(value = "string_item") @ApiModelProperty(required = true, value = "") @NotNull public String getStringItem() { @@ -86,7 +86,7 @@ public TypeHolderDefault numberItem(BigDecimal numberItem) { * Get numberItem * @return numberItem **/ - @JsonProperty("number_item") + @JsonProperty(value = "number_item") @ApiModelProperty(required = true, value = "") @NotNull @Valid public BigDecimal getNumberItem() { @@ -106,7 +106,7 @@ public TypeHolderDefault integerItem(Integer integerItem) { * Get integerItem * @return integerItem **/ - @JsonProperty("integer_item") + @JsonProperty(value = "integer_item") @ApiModelProperty(required = true, value = "") @NotNull public Integer getIntegerItem() { @@ -126,7 +126,7 @@ public TypeHolderDefault boolItem(Boolean boolItem) { * Get boolItem * @return boolItem **/ - @JsonProperty("bool_item") + @JsonProperty(value = "bool_item") @ApiModelProperty(required = true, value = "") @NotNull public Boolean getBoolItem() { @@ -151,7 +151,7 @@ public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) { * Get arrayItem * @return arrayItem **/ - @JsonProperty("array_item") + @JsonProperty(value = "array_item") @ApiModelProperty(required = true, value = "") @NotNull public List getArrayItem() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/TypeHolderExample.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/TypeHolderExample.java index 8e57cc93cef4..026943cb64e3 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/TypeHolderExample.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/TypeHolderExample.java @@ -71,7 +71,7 @@ public TypeHolderExample stringItem(String stringItem) { * Get stringItem * @return stringItem **/ - @JsonProperty("string_item") + @JsonProperty(value = "string_item") @ApiModelProperty(example = "what", required = true, value = "") @NotNull public String getStringItem() { @@ -91,7 +91,7 @@ public TypeHolderExample numberItem(BigDecimal numberItem) { * Get numberItem * @return numberItem **/ - @JsonProperty("number_item") + @JsonProperty(value = "number_item") @ApiModelProperty(example = "1.234", required = true, value = "") @NotNull @Valid public BigDecimal getNumberItem() { @@ -111,7 +111,7 @@ public TypeHolderExample floatItem(Float floatItem) { * Get floatItem * @return floatItem **/ - @JsonProperty("float_item") + @JsonProperty(value = "float_item") @ApiModelProperty(example = "1.234", required = true, value = "") @NotNull public Float getFloatItem() { @@ -131,7 +131,7 @@ public TypeHolderExample integerItem(Integer integerItem) { * Get integerItem * @return integerItem **/ - @JsonProperty("integer_item") + @JsonProperty(value = "integer_item") @ApiModelProperty(example = "-2", required = true, value = "") @NotNull public Integer getIntegerItem() { @@ -151,7 +151,7 @@ public TypeHolderExample boolItem(Boolean boolItem) { * Get boolItem * @return boolItem **/ - @JsonProperty("bool_item") + @JsonProperty(value = "bool_item") @ApiModelProperty(example = "true", required = true, value = "") @NotNull public Boolean getBoolItem() { @@ -176,7 +176,7 @@ public TypeHolderExample addArrayItemItem(Integer arrayItemItem) { * Get arrayItem * @return arrayItem **/ - @JsonProperty("array_item") + @JsonProperty(value = "array_item") @ApiModelProperty(example = "[0, 1, 2, 3]", required = true, value = "") @NotNull public List getArrayItem() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/User.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/User.java index 1e702dd070d5..37ab5453c3d2 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/User.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/User.java @@ -78,7 +78,7 @@ public User id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -98,7 +98,7 @@ public User username(String username) { * Get username * @return username **/ - @JsonProperty("username") + @JsonProperty(value = "username") @ApiModelProperty(value = "") public String getUsername() { @@ -118,7 +118,7 @@ public User firstName(String firstName) { * Get firstName * @return firstName **/ - @JsonProperty("firstName") + @JsonProperty(value = "firstName") @ApiModelProperty(value = "") public String getFirstName() { @@ -138,7 +138,7 @@ public User lastName(String lastName) { * Get lastName * @return lastName **/ - @JsonProperty("lastName") + @JsonProperty(value = "lastName") @ApiModelProperty(value = "") public String getLastName() { @@ -158,7 +158,7 @@ public User email(String email) { * Get email * @return email **/ - @JsonProperty("email") + @JsonProperty(value = "email") @ApiModelProperty(value = "") public String getEmail() { @@ -178,7 +178,7 @@ public User password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(value = "") public String getPassword() { @@ -198,7 +198,7 @@ public User phone(String phone) { * Get phone * @return phone **/ - @JsonProperty("phone") + @JsonProperty(value = "phone") @ApiModelProperty(value = "") public String getPhone() { @@ -218,7 +218,7 @@ public User userStatus(Integer userStatus) { * User Status * @return userStatus **/ - @JsonProperty("userStatus") + @JsonProperty(value = "userStatus") @ApiModelProperty(value = "User Status") public Integer getUserStatus() { diff --git a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/XmlItem.java b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/XmlItem.java index 8c61e3e4cc0e..46c2de9ca268 100644 --- a/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/XmlItem.java +++ b/samples/server/petstore/jaxrs/jersey1/src/gen/java/org/openapitools/model/XmlItem.java @@ -186,7 +186,7 @@ public XmlItem attributeString(String attributeString) { * Get attributeString * @return attributeString **/ - @JsonProperty("attribute_string") + @JsonProperty(value = "attribute_string") @ApiModelProperty(example = "string", value = "") public String getAttributeString() { @@ -206,7 +206,7 @@ public XmlItem attributeNumber(BigDecimal attributeNumber) { * Get attributeNumber * @return attributeNumber **/ - @JsonProperty("attribute_number") + @JsonProperty(value = "attribute_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getAttributeNumber() { @@ -226,7 +226,7 @@ public XmlItem attributeInteger(Integer attributeInteger) { * Get attributeInteger * @return attributeInteger **/ - @JsonProperty("attribute_integer") + @JsonProperty(value = "attribute_integer") @ApiModelProperty(example = "-2", value = "") public Integer getAttributeInteger() { @@ -246,7 +246,7 @@ public XmlItem attributeBoolean(Boolean attributeBoolean) { * Get attributeBoolean * @return attributeBoolean **/ - @JsonProperty("attribute_boolean") + @JsonProperty(value = "attribute_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getAttributeBoolean() { @@ -274,7 +274,7 @@ public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) { * Get wrappedArray * @return wrappedArray **/ - @JsonProperty("wrapped_array") + @JsonProperty(value = "wrapped_array") @ApiModelProperty(value = "") public List getWrappedArray() { @@ -294,7 +294,7 @@ public XmlItem nameString(String nameString) { * Get nameString * @return nameString **/ - @JsonProperty("name_string") + @JsonProperty(value = "name_string") @ApiModelProperty(example = "string", value = "") public String getNameString() { @@ -314,7 +314,7 @@ public XmlItem nameNumber(BigDecimal nameNumber) { * Get nameNumber * @return nameNumber **/ - @JsonProperty("name_number") + @JsonProperty(value = "name_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getNameNumber() { @@ -334,7 +334,7 @@ public XmlItem nameInteger(Integer nameInteger) { * Get nameInteger * @return nameInteger **/ - @JsonProperty("name_integer") + @JsonProperty(value = "name_integer") @ApiModelProperty(example = "-2", value = "") public Integer getNameInteger() { @@ -354,7 +354,7 @@ public XmlItem nameBoolean(Boolean nameBoolean) { * Get nameBoolean * @return nameBoolean **/ - @JsonProperty("name_boolean") + @JsonProperty(value = "name_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getNameBoolean() { @@ -382,7 +382,7 @@ public XmlItem addNameArrayItem(Integer nameArrayItem) { * Get nameArray * @return nameArray **/ - @JsonProperty("name_array") + @JsonProperty(value = "name_array") @ApiModelProperty(value = "") public List getNameArray() { @@ -410,7 +410,7 @@ public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) { * Get nameWrappedArray * @return nameWrappedArray **/ - @JsonProperty("name_wrapped_array") + @JsonProperty(value = "name_wrapped_array") @ApiModelProperty(value = "") public List getNameWrappedArray() { @@ -430,7 +430,7 @@ public XmlItem prefixString(String prefixString) { * Get prefixString * @return prefixString **/ - @JsonProperty("prefix_string") + @JsonProperty(value = "prefix_string") @ApiModelProperty(example = "string", value = "") public String getPrefixString() { @@ -450,7 +450,7 @@ public XmlItem prefixNumber(BigDecimal prefixNumber) { * Get prefixNumber * @return prefixNumber **/ - @JsonProperty("prefix_number") + @JsonProperty(value = "prefix_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getPrefixNumber() { @@ -470,7 +470,7 @@ public XmlItem prefixInteger(Integer prefixInteger) { * Get prefixInteger * @return prefixInteger **/ - @JsonProperty("prefix_integer") + @JsonProperty(value = "prefix_integer") @ApiModelProperty(example = "-2", value = "") public Integer getPrefixInteger() { @@ -490,7 +490,7 @@ public XmlItem prefixBoolean(Boolean prefixBoolean) { * Get prefixBoolean * @return prefixBoolean **/ - @JsonProperty("prefix_boolean") + @JsonProperty(value = "prefix_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getPrefixBoolean() { @@ -518,7 +518,7 @@ public XmlItem addPrefixArrayItem(Integer prefixArrayItem) { * Get prefixArray * @return prefixArray **/ - @JsonProperty("prefix_array") + @JsonProperty(value = "prefix_array") @ApiModelProperty(value = "") public List getPrefixArray() { @@ -546,7 +546,7 @@ public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) { * Get prefixWrappedArray * @return prefixWrappedArray **/ - @JsonProperty("prefix_wrapped_array") + @JsonProperty(value = "prefix_wrapped_array") @ApiModelProperty(value = "") public List getPrefixWrappedArray() { @@ -566,7 +566,7 @@ public XmlItem namespaceString(String namespaceString) { * Get namespaceString * @return namespaceString **/ - @JsonProperty("namespace_string") + @JsonProperty(value = "namespace_string") @ApiModelProperty(example = "string", value = "") public String getNamespaceString() { @@ -586,7 +586,7 @@ public XmlItem namespaceNumber(BigDecimal namespaceNumber) { * Get namespaceNumber * @return namespaceNumber **/ - @JsonProperty("namespace_number") + @JsonProperty(value = "namespace_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getNamespaceNumber() { @@ -606,7 +606,7 @@ public XmlItem namespaceInteger(Integer namespaceInteger) { * Get namespaceInteger * @return namespaceInteger **/ - @JsonProperty("namespace_integer") + @JsonProperty(value = "namespace_integer") @ApiModelProperty(example = "-2", value = "") public Integer getNamespaceInteger() { @@ -626,7 +626,7 @@ public XmlItem namespaceBoolean(Boolean namespaceBoolean) { * Get namespaceBoolean * @return namespaceBoolean **/ - @JsonProperty("namespace_boolean") + @JsonProperty(value = "namespace_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getNamespaceBoolean() { @@ -654,7 +654,7 @@ public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) { * Get namespaceArray * @return namespaceArray **/ - @JsonProperty("namespace_array") + @JsonProperty(value = "namespace_array") @ApiModelProperty(value = "") public List getNamespaceArray() { @@ -682,7 +682,7 @@ public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) { * Get namespaceWrappedArray * @return namespaceWrappedArray **/ - @JsonProperty("namespace_wrapped_array") + @JsonProperty(value = "namespace_wrapped_array") @ApiModelProperty(value = "") public List getNamespaceWrappedArray() { @@ -702,7 +702,7 @@ public XmlItem prefixNsString(String prefixNsString) { * Get prefixNsString * @return prefixNsString **/ - @JsonProperty("prefix_ns_string") + @JsonProperty(value = "prefix_ns_string") @ApiModelProperty(example = "string", value = "") public String getPrefixNsString() { @@ -722,7 +722,7 @@ public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) { * Get prefixNsNumber * @return prefixNsNumber **/ - @JsonProperty("prefix_ns_number") + @JsonProperty(value = "prefix_ns_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getPrefixNsNumber() { @@ -742,7 +742,7 @@ public XmlItem prefixNsInteger(Integer prefixNsInteger) { * Get prefixNsInteger * @return prefixNsInteger **/ - @JsonProperty("prefix_ns_integer") + @JsonProperty(value = "prefix_ns_integer") @ApiModelProperty(example = "-2", value = "") public Integer getPrefixNsInteger() { @@ -762,7 +762,7 @@ public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) { * Get prefixNsBoolean * @return prefixNsBoolean **/ - @JsonProperty("prefix_ns_boolean") + @JsonProperty(value = "prefix_ns_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getPrefixNsBoolean() { @@ -790,7 +790,7 @@ public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) { * Get prefixNsArray * @return prefixNsArray **/ - @JsonProperty("prefix_ns_array") + @JsonProperty(value = "prefix_ns_array") @ApiModelProperty(value = "") public List getPrefixNsArray() { @@ -818,7 +818,7 @@ public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) { * Get prefixNsWrappedArray * @return prefixNsWrappedArray **/ - @JsonProperty("prefix_ns_wrapped_array") + @JsonProperty(value = "prefix_ns_wrapped_array") @ApiModelProperty(value = "") public List getPrefixNsWrappedArray() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java index 94ab4ee99b59..b69405239b38 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java @@ -45,7 +45,7 @@ public AdditionalPropertiesAnyType name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java index 8a7cbbfa5e79..f90d93c37aec 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java @@ -46,7 +46,7 @@ public AdditionalPropertiesArray name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java index 8e5e3a7ec7cc..473358d6cda0 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java @@ -45,7 +45,7 @@ public AdditionalPropertiesBoolean name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java index df959efecfe6..bf846cfb6bf7 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java @@ -105,7 +105,7 @@ public AdditionalPropertiesClass putMapStringItem(String key, String mapStringIt * Get mapString * @return mapString **/ - @JsonProperty("map_string") + @JsonProperty(value = "map_string") @ApiModelProperty(value = "") public Map getMapString() { @@ -133,7 +133,7 @@ public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumb * Get mapNumber * @return mapNumber **/ - @JsonProperty("map_number") + @JsonProperty(value = "map_number") @ApiModelProperty(value = "") @Valid public Map getMapNumber() { @@ -161,7 +161,7 @@ public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntege * Get mapInteger * @return mapInteger **/ - @JsonProperty("map_integer") + @JsonProperty(value = "map_integer") @ApiModelProperty(value = "") public Map getMapInteger() { @@ -189,7 +189,7 @@ public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBoolea * Get mapBoolean * @return mapBoolean **/ - @JsonProperty("map_boolean") + @JsonProperty(value = "map_boolean") @ApiModelProperty(value = "") public Map getMapBoolean() { @@ -217,7 +217,7 @@ public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List> getMapArrayInteger() { @@ -245,7 +245,7 @@ public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List * Get mapArrayAnytype * @return mapArrayAnytype **/ - @JsonProperty("map_array_anytype") + @JsonProperty(value = "map_array_anytype") @ApiModelProperty(value = "") @Valid public Map> getMapArrayAnytype() { @@ -273,7 +273,7 @@ public AdditionalPropertiesClass putMapMapStringItem(String key, Map> getMapMapString() { @@ -301,7 +301,7 @@ public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map> getMapMapAnytype() { @@ -321,7 +321,7 @@ public AdditionalPropertiesClass anytype1(Object anytype1) { * Get anytype1 * @return anytype1 **/ - @JsonProperty("anytype_1") + @JsonProperty(value = "anytype_1") @ApiModelProperty(value = "") public Object getAnytype1() { @@ -341,7 +341,7 @@ public AdditionalPropertiesClass anytype2(Object anytype2) { * Get anytype2 * @return anytype2 **/ - @JsonProperty("anytype_2") + @JsonProperty(value = "anytype_2") @ApiModelProperty(value = "") public Object getAnytype2() { @@ -361,7 +361,7 @@ public AdditionalPropertiesClass anytype3(Object anytype3) { * Get anytype3 * @return anytype3 **/ - @JsonProperty("anytype_3") + @JsonProperty(value = "anytype_3") @ApiModelProperty(value = "") public Object getAnytype3() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java index ac5f7501b3a8..29bd12be784b 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java @@ -45,7 +45,7 @@ public AdditionalPropertiesInteger name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java index d3072f447dca..f05484cd7cc7 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java @@ -46,7 +46,7 @@ public AdditionalPropertiesNumber name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java index 8f8b575df2a2..fb246cac6598 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java @@ -45,7 +45,7 @@ public AdditionalPropertiesObject name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java index c5d4ac7f7c1b..b7018e370e50 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java @@ -45,7 +45,7 @@ public AdditionalPropertiesString name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Animal.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Animal.java index db142b932d90..97cdd70ab0a1 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Animal.java @@ -56,7 +56,7 @@ public Animal className(String className) { * Get className * @return className **/ - @JsonProperty("className") + @JsonProperty(value = "className") @ApiModelProperty(required = true, value = "") @NotNull public String getClassName() { @@ -76,7 +76,7 @@ public Animal color(String color) { * Get color * @return color **/ - @JsonProperty("color") + @JsonProperty(value = "color") @ApiModelProperty(value = "") public String getColor() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java index cd6a16edb265..d277c77993f3 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java @@ -54,7 +54,7 @@ public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List arrayAr * Get arrayArrayNumber * @return arrayArrayNumber **/ - @JsonProperty("ArrayArrayNumber") + @JsonProperty(value = "ArrayArrayNumber") @ApiModelProperty(value = "") @Valid public List> getArrayArrayNumber() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java index 71d88cd5d890..f8b08e16723e 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java @@ -54,7 +54,7 @@ public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) { * Get arrayNumber * @return arrayNumber **/ - @JsonProperty("ArrayNumber") + @JsonProperty(value = "ArrayNumber") @ApiModelProperty(value = "") @Valid public List getArrayNumber() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayTest.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayTest.java index 738fa858e7e7..dfeb88958dca 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayTest.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ArrayTest.java @@ -64,7 +64,7 @@ public ArrayTest addArrayOfStringItem(String arrayOfStringItem) { * Get arrayOfString * @return arrayOfString **/ - @JsonProperty("array_of_string") + @JsonProperty(value = "array_of_string") @ApiModelProperty(value = "") public List getArrayOfString() { @@ -92,7 +92,7 @@ public ArrayTest addArrayArrayOfIntegerItem(List arrayArrayOfIntegerItem) * Get arrayArrayOfInteger * @return arrayArrayOfInteger **/ - @JsonProperty("array_array_of_integer") + @JsonProperty(value = "array_array_of_integer") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfInteger() { @@ -120,7 +120,7 @@ public ArrayTest addArrayArrayOfModelItem(List arrayArrayOfModelI * Get arrayArrayOfModel * @return arrayArrayOfModel **/ - @JsonProperty("array_array_of_model") + @JsonProperty(value = "array_array_of_model") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfModel() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/BigCat.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/BigCat.java index 0af195ad0a72..867f51230021 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/BigCat.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/BigCat.java @@ -81,7 +81,7 @@ public BigCat kind(KindEnum kind) { * Get kind * @return kind **/ - @JsonProperty("kind") + @JsonProperty(value = "kind") @ApiModelProperty(value = "") public KindEnum getKind() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/BigCatAllOf.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/BigCatAllOf.java index eaf4e4f49f5e..ae1220fcefd1 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/BigCatAllOf.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/BigCatAllOf.java @@ -79,7 +79,7 @@ public BigCatAllOf kind(KindEnum kind) { * Get kind * @return kind **/ - @JsonProperty("kind") + @JsonProperty(value = "kind") @ApiModelProperty(value = "") public KindEnum getKind() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Capitalization.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Capitalization.java index 9b99fe2b58b3..650d2c7b790b 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Capitalization.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Capitalization.java @@ -68,7 +68,7 @@ public Capitalization smallCamel(String smallCamel) { * Get smallCamel * @return smallCamel **/ - @JsonProperty("smallCamel") + @JsonProperty(value = "smallCamel") @ApiModelProperty(value = "") public String getSmallCamel() { @@ -88,7 +88,7 @@ public Capitalization capitalCamel(String capitalCamel) { * Get capitalCamel * @return capitalCamel **/ - @JsonProperty("CapitalCamel") + @JsonProperty(value = "CapitalCamel") @ApiModelProperty(value = "") public String getCapitalCamel() { @@ -108,7 +108,7 @@ public Capitalization smallSnake(String smallSnake) { * Get smallSnake * @return smallSnake **/ - @JsonProperty("small_Snake") + @JsonProperty(value = "small_Snake") @ApiModelProperty(value = "") public String getSmallSnake() { @@ -128,7 +128,7 @@ public Capitalization capitalSnake(String capitalSnake) { * Get capitalSnake * @return capitalSnake **/ - @JsonProperty("Capital_Snake") + @JsonProperty(value = "Capital_Snake") @ApiModelProperty(value = "") public String getCapitalSnake() { @@ -148,7 +148,7 @@ public Capitalization scAETHFlowPoints(String scAETHFlowPoints) { * Get scAETHFlowPoints * @return scAETHFlowPoints **/ - @JsonProperty("SCA_ETH_Flow_Points") + @JsonProperty(value = "SCA_ETH_Flow_Points") @ApiModelProperty(value = "") public String getScAETHFlowPoints() { @@ -168,7 +168,7 @@ public Capitalization ATT_NAME(String ATT_NAME) { * Name of the pet * @return ATT_NAME **/ - @JsonProperty("ATT_NAME") + @JsonProperty(value = "ATT_NAME") @ApiModelProperty(value = "Name of the pet ") public String getATTNAME() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Cat.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Cat.java index a393506d3aa5..ef4f615bfe76 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Cat.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Cat.java @@ -45,7 +45,7 @@ public Cat declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/CatAllOf.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/CatAllOf.java index 7e2a72595950..83503a712d2b 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/CatAllOf.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/CatAllOf.java @@ -43,7 +43,7 @@ public CatAllOf declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Category.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Category.java index d7a5c2b2fafa..af6055dba4ea 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Category.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Category.java @@ -48,7 +48,7 @@ public Category id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -68,7 +68,7 @@ public Category name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ClassModel.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ClassModel.java index 00352ed5bce9..ccfe8e27684e 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ClassModel.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ClassModel.java @@ -44,7 +44,7 @@ public ClassModel propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("_class") + @JsonProperty(value = "_class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Client.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Client.java index 04b28287ed41..0c87d7030a57 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Client.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Client.java @@ -43,7 +43,7 @@ public Client client(String client) { * Get client * @return client **/ - @JsonProperty("client") + @JsonProperty(value = "client") @ApiModelProperty(value = "") public String getClient() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Dog.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Dog.java index 7d6059b2fc1f..e126444fd61e 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Dog.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Dog.java @@ -45,7 +45,7 @@ public Dog breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/DogAllOf.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/DogAllOf.java index 9fcfbfb92cfc..6902a980c243 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/DogAllOf.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/DogAllOf.java @@ -43,7 +43,7 @@ public DogAllOf breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/EnumArrays.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/EnumArrays.java index 526f387372ca..08e6db1ffc92 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/EnumArrays.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/EnumArrays.java @@ -113,7 +113,7 @@ public EnumArrays justSymbol(JustSymbolEnum justSymbol) { * Get justSymbol * @return justSymbol **/ - @JsonProperty("just_symbol") + @JsonProperty(value = "just_symbol") @ApiModelProperty(value = "") public JustSymbolEnum getJustSymbol() { @@ -141,7 +141,7 @@ public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) { * Get arrayEnum * @return arrayEnum **/ - @JsonProperty("array_enum") + @JsonProperty(value = "array_enum") @ApiModelProperty(value = "") public List getArrayEnum() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/EnumTest.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/EnumTest.java index ee08eadfa8d7..937a9f7f6aeb 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/EnumTest.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/EnumTest.java @@ -193,7 +193,7 @@ public EnumTest enumString(EnumStringEnum enumString) { * Get enumString * @return enumString **/ - @JsonProperty("enum_string") + @JsonProperty(value = "enum_string") @ApiModelProperty(value = "") public EnumStringEnum getEnumString() { @@ -213,7 +213,7 @@ public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) { * Get enumStringRequired * @return enumStringRequired **/ - @JsonProperty("enum_string_required") + @JsonProperty(value = "enum_string_required") @ApiModelProperty(required = true, value = "") @NotNull public EnumStringRequiredEnum getEnumStringRequired() { @@ -233,7 +233,7 @@ public EnumTest enumInteger(EnumIntegerEnum enumInteger) { * Get enumInteger * @return enumInteger **/ - @JsonProperty("enum_integer") + @JsonProperty(value = "enum_integer") @ApiModelProperty(value = "") public EnumIntegerEnum getEnumInteger() { @@ -253,7 +253,7 @@ public EnumTest enumNumber(EnumNumberEnum enumNumber) { * Get enumNumber * @return enumNumber **/ - @JsonProperty("enum_number") + @JsonProperty(value = "enum_number") @ApiModelProperty(value = "") public EnumNumberEnum getEnumNumber() { @@ -273,7 +273,7 @@ public EnumTest outerEnum(OuterEnum outerEnum) { * Get outerEnum * @return outerEnum **/ - @JsonProperty("outerEnum") + @JsonProperty(value = "outerEnum") @ApiModelProperty(value = "") @Valid public OuterEnum getOuterEnum() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/FileSchemaTestClass.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/FileSchemaTestClass.java index 4be816893906..fb40a511e446 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/FileSchemaTestClass.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/FileSchemaTestClass.java @@ -50,7 +50,7 @@ public FileSchemaTestClass file(java.io.File file) { * Get file * @return file **/ - @JsonProperty("file") + @JsonProperty(value = "file") @ApiModelProperty(value = "") @Valid public java.io.File getFile() { @@ -78,7 +78,7 @@ public FileSchemaTestClass addFilesItem(java.io.File filesItem) { * Get files * @return files **/ - @JsonProperty("files") + @JsonProperty(value = "files") @ApiModelProperty(value = "") @Valid public List getFiles() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/FormatTest.java index 9817e78712a7..d640a11342c7 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/FormatTest.java @@ -114,7 +114,7 @@ public FormatTest integer(Integer integer) { * maximum: 100 * @return integer **/ - @JsonProperty("integer") + @JsonProperty(value = "integer") @ApiModelProperty(value = "") @Min(10) @Max(100) public Integer getInteger() { @@ -136,7 +136,7 @@ public FormatTest int32(Integer int32) { * maximum: 200 * @return int32 **/ - @JsonProperty("int32") + @JsonProperty(value = "int32") @ApiModelProperty(value = "") @Min(20) @Max(200) public Integer getInt32() { @@ -156,7 +156,7 @@ public FormatTest int64(Long int64) { * Get int64 * @return int64 **/ - @JsonProperty("int64") + @JsonProperty(value = "int64") @ApiModelProperty(value = "") public Long getInt64() { @@ -178,7 +178,7 @@ public FormatTest number(BigDecimal number) { * maximum: 543.2 * @return number **/ - @JsonProperty("number") + @JsonProperty(value = "number") @ApiModelProperty(required = true, value = "") @NotNull @Valid @DecimalMin("32.1") @DecimalMax("543.2") public BigDecimal getNumber() { @@ -200,7 +200,7 @@ public FormatTest _float(Float _float) { * maximum: 987.6 * @return _float **/ - @JsonProperty("float") + @JsonProperty(value = "float") @ApiModelProperty(value = "") @DecimalMin("54.3") @DecimalMax("987.6") public Float getFloat() { @@ -222,7 +222,7 @@ public FormatTest _double(Double _double) { * maximum: 123.4 * @return _double **/ - @JsonProperty("double") + @JsonProperty(value = "double") @ApiModelProperty(value = "") @DecimalMin("67.8") @DecimalMax("123.4") public Double getDouble() { @@ -242,7 +242,7 @@ public FormatTest string(String string) { * Get string * @return string **/ - @JsonProperty("string") + @JsonProperty(value = "string") @ApiModelProperty(value = "") @Pattern(regexp="/[a-z]/i") public String getString() { @@ -262,7 +262,7 @@ public FormatTest _byte(byte[] _byte) { * Get _byte * @return _byte **/ - @JsonProperty("byte") + @JsonProperty(value = "byte") @ApiModelProperty(required = true, value = "") @NotNull public byte[] getByte() { @@ -282,7 +282,7 @@ public FormatTest binary(File binary) { * Get binary * @return binary **/ - @JsonProperty("binary") + @JsonProperty(value = "binary") @ApiModelProperty(value = "") public File getBinary() { @@ -302,7 +302,7 @@ public FormatTest date(Date date) { * Get date * @return date **/ - @JsonProperty("date") + @JsonProperty(value = "date") @ApiModelProperty(required = true, value = "") @NotNull public Date getDate() { @@ -322,7 +322,7 @@ public FormatTest dateTime(Date dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public Date getDateTime() { @@ -342,7 +342,7 @@ public FormatTest uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(example = "72f98069-206d-4f12-9f12-3d1e525a8e84", value = "") public UUID getUuid() { @@ -362,7 +362,7 @@ public FormatTest password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(required = true, value = "") @NotNull @Size(min=10,max=64) public String getPassword() { @@ -382,7 +382,7 @@ public FormatTest bigDecimal(BigDecimal bigDecimal) { * Get bigDecimal * @return bigDecimal **/ - @JsonProperty("BigDecimal") + @JsonProperty(value = "BigDecimal") @ApiModelProperty(value = "") @Valid public BigDecimal getBigDecimal() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java index 4f72442fd947..1b5042f61f59 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java @@ -48,7 +48,7 @@ public HasOnlyReadOnly bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -68,7 +68,7 @@ public HasOnlyReadOnly foo(String foo) { * Get foo * @return foo **/ - @JsonProperty("foo") + @JsonProperty(value = "foo", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getFoo() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/MapTest.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/MapTest.java index 4db676efea2d..12516e0afba2 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/MapTest.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/MapTest.java @@ -101,7 +101,7 @@ public MapTest putMapMapOfStringItem(String key, Map mapMapOfStr * Get mapMapOfString * @return mapMapOfString **/ - @JsonProperty("map_map_of_string") + @JsonProperty(value = "map_map_of_string") @ApiModelProperty(value = "") @Valid public Map> getMapMapOfString() { @@ -129,7 +129,7 @@ public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) * Get mapOfEnumString * @return mapOfEnumString **/ - @JsonProperty("map_of_enum_string") + @JsonProperty(value = "map_of_enum_string") @ApiModelProperty(value = "") public Map getMapOfEnumString() { @@ -157,7 +157,7 @@ public MapTest putDirectMapItem(String key, Boolean directMapItem) { * Get directMap * @return directMap **/ - @JsonProperty("direct_map") + @JsonProperty(value = "direct_map") @ApiModelProperty(value = "") public Map getDirectMap() { @@ -185,7 +185,7 @@ public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) { * Get indirectMap * @return indirectMap **/ - @JsonProperty("indirect_map") + @JsonProperty(value = "indirect_map") @ApiModelProperty(value = "") public Map getIndirectMap() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java index 0ba358c6b5c2..eb4fcd577811 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java @@ -59,7 +59,7 @@ public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(value = "") public UUID getUuid() { @@ -79,7 +79,7 @@ public MixedPropertiesAndAdditionalPropertiesClass dateTime(Date dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public Date getDateTime() { @@ -107,7 +107,7 @@ public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal * Get map * @return map **/ - @JsonProperty("map") + @JsonProperty(value = "map") @ApiModelProperty(value = "") @Valid public Map getMap() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Model200Response.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Model200Response.java index 2df0caa9725d..1a3e698983e5 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Model200Response.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Model200Response.java @@ -49,7 +49,7 @@ public Model200Response name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public Integer getName() { @@ -69,7 +69,7 @@ public Model200Response propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("class") + @JsonProperty(value = "class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ModelApiResponse.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ModelApiResponse.java index b0d01665ef6a..1552245d1dc8 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ModelApiResponse.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ModelApiResponse.java @@ -53,7 +53,7 @@ public ModelApiResponse code(Integer code) { * Get code * @return code **/ - @JsonProperty("code") + @JsonProperty(value = "code") @ApiModelProperty(value = "") public Integer getCode() { @@ -73,7 +73,7 @@ public ModelApiResponse type(String type) { * Get type * @return type **/ - @JsonProperty("type") + @JsonProperty(value = "type") @ApiModelProperty(value = "") public String getType() { @@ -93,7 +93,7 @@ public ModelApiResponse message(String message) { * Get message * @return message **/ - @JsonProperty("message") + @JsonProperty(value = "message") @ApiModelProperty(value = "") public String getMessage() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ModelReturn.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ModelReturn.java index 41a1c059f7ef..c9f4504d3f0e 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ModelReturn.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ModelReturn.java @@ -44,7 +44,7 @@ public ModelReturn _return(Integer _return) { * Get _return * @return _return **/ - @JsonProperty("return") + @JsonProperty(value = "return") @ApiModelProperty(value = "") public Integer getReturn() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Name.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Name.java index a7a189571897..cdcef856cd21 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Name.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Name.java @@ -59,7 +59,7 @@ public Name name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public Integer getName() { @@ -79,7 +79,7 @@ public Name snakeCase(Integer snakeCase) { * Get snakeCase * @return snakeCase **/ - @JsonProperty("snake_case") + @JsonProperty(value = "snake_case", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer getSnakeCase() { @@ -99,7 +99,7 @@ public Name property(String property) { * Get property * @return property **/ - @JsonProperty("property") + @JsonProperty(value = "property") @ApiModelProperty(value = "") public String getProperty() { @@ -119,7 +119,7 @@ public Name _123number(Integer _123number) { * Get _123number * @return _123number **/ - @JsonProperty("123Number") + @JsonProperty(value = "123Number", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer get123number() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/NumberOnly.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/NumberOnly.java index 188899dc4460..3ec25c75ae59 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/NumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/NumberOnly.java @@ -44,7 +44,7 @@ public NumberOnly justNumber(BigDecimal justNumber) { * Get justNumber * @return justNumber **/ - @JsonProperty("JustNumber") + @JsonProperty(value = "JustNumber") @ApiModelProperty(value = "") @Valid public BigDecimal getJustNumber() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Order.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Order.java index 7ce0000199f9..b97b051ebc80 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Order.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Order.java @@ -103,7 +103,7 @@ public Order id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -123,7 +123,7 @@ public Order petId(Long petId) { * Get petId * @return petId **/ - @JsonProperty("petId") + @JsonProperty(value = "petId") @ApiModelProperty(value = "") public Long getPetId() { @@ -143,7 +143,7 @@ public Order quantity(Integer quantity) { * Get quantity * @return quantity **/ - @JsonProperty("quantity") + @JsonProperty(value = "quantity") @ApiModelProperty(value = "") public Integer getQuantity() { @@ -163,7 +163,7 @@ public Order shipDate(Date shipDate) { * Get shipDate * @return shipDate **/ - @JsonProperty("shipDate") + @JsonProperty(value = "shipDate") @ApiModelProperty(value = "") public Date getShipDate() { @@ -183,7 +183,7 @@ public Order status(StatusEnum status) { * Order Status * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "Order Status") public StatusEnum getStatus() { @@ -203,7 +203,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - @JsonProperty("complete") + @JsonProperty(value = "complete") @ApiModelProperty(value = "") public Boolean getComplete() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/OuterComposite.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/OuterComposite.java index 43b69002d036..577504e1bef2 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/OuterComposite.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/OuterComposite.java @@ -54,7 +54,7 @@ public OuterComposite myNumber(BigDecimal myNumber) { * Get myNumber * @return myNumber **/ - @JsonProperty("my_number") + @JsonProperty(value = "my_number") @ApiModelProperty(value = "") @Valid public BigDecimal getMyNumber() { @@ -74,7 +74,7 @@ public OuterComposite myString(String myString) { * Get myString * @return myString **/ - @JsonProperty("my_string") + @JsonProperty(value = "my_string") @ApiModelProperty(value = "") public String getMyString() { @@ -94,7 +94,7 @@ public OuterComposite myBoolean(Boolean myBoolean) { * Get myBoolean * @return myBoolean **/ - @JsonProperty("my_boolean") + @JsonProperty(value = "my_boolean") @ApiModelProperty(value = "") public Boolean getMyBoolean() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Pet.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Pet.java index adcdbf24a57d..4ed108d787e9 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Pet.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Pet.java @@ -108,7 +108,7 @@ public Pet id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -128,7 +128,7 @@ public Pet category(Category category) { * Get category * @return category **/ - @JsonProperty("category") + @JsonProperty(value = "category") @ApiModelProperty(value = "") @Valid public Category getCategory() { @@ -148,7 +148,7 @@ public Pet name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(example = "doggie", required = true, value = "") @NotNull public String getName() { @@ -173,7 +173,7 @@ public Pet addPhotoUrlsItem(String photoUrlsItem) { * Get photoUrls * @return photoUrls **/ - @JsonProperty("photoUrls") + @JsonProperty(value = "photoUrls") @ApiModelProperty(required = true, value = "") @NotNull public Set getPhotoUrls() { @@ -201,7 +201,7 @@ public Pet addTagsItem(Tag tagsItem) { * Get tags * @return tags **/ - @JsonProperty("tags") + @JsonProperty(value = "tags") @ApiModelProperty(value = "") @Valid public List getTags() { @@ -221,7 +221,7 @@ public Pet status(StatusEnum status) { * pet status in the store * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "pet status in the store") public StatusEnum getStatus() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ReadOnlyFirst.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ReadOnlyFirst.java index e2e5ea910e68..05c01064ff67 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ReadOnlyFirst.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/ReadOnlyFirst.java @@ -48,7 +48,7 @@ public ReadOnlyFirst bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -68,7 +68,7 @@ public ReadOnlyFirst baz(String baz) { * Get baz * @return baz **/ - @JsonProperty("baz") + @JsonProperty(value = "baz") @ApiModelProperty(value = "") public String getBaz() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/SpecialModelName.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/SpecialModelName.java index 48ed44ecf621..1fbc58e301e6 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/SpecialModelName.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/SpecialModelName.java @@ -43,7 +43,7 @@ public class SpecialModelName { * Get $specialPropertyName * @return $specialPropertyName **/ - @JsonProperty("$special[property.name]") + @JsonProperty(value = "$special[property.name]") @ApiModelProperty(value = "") public Long get$SpecialPropertyName() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Tag.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Tag.java index 80d098d57c16..5ac82ca92382 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Tag.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/Tag.java @@ -48,7 +48,7 @@ public Tag id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -68,7 +68,7 @@ public Tag name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/TypeHolderDefault.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/TypeHolderDefault.java index 52830413a08c..a8450d0e61d5 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/TypeHolderDefault.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/TypeHolderDefault.java @@ -66,7 +66,7 @@ public TypeHolderDefault stringItem(String stringItem) { * Get stringItem * @return stringItem **/ - @JsonProperty("string_item") + @JsonProperty(value = "string_item") @ApiModelProperty(required = true, value = "") @NotNull public String getStringItem() { @@ -86,7 +86,7 @@ public TypeHolderDefault numberItem(BigDecimal numberItem) { * Get numberItem * @return numberItem **/ - @JsonProperty("number_item") + @JsonProperty(value = "number_item") @ApiModelProperty(required = true, value = "") @NotNull @Valid public BigDecimal getNumberItem() { @@ -106,7 +106,7 @@ public TypeHolderDefault integerItem(Integer integerItem) { * Get integerItem * @return integerItem **/ - @JsonProperty("integer_item") + @JsonProperty(value = "integer_item") @ApiModelProperty(required = true, value = "") @NotNull public Integer getIntegerItem() { @@ -126,7 +126,7 @@ public TypeHolderDefault boolItem(Boolean boolItem) { * Get boolItem * @return boolItem **/ - @JsonProperty("bool_item") + @JsonProperty(value = "bool_item") @ApiModelProperty(required = true, value = "") @NotNull public Boolean getBoolItem() { @@ -151,7 +151,7 @@ public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) { * Get arrayItem * @return arrayItem **/ - @JsonProperty("array_item") + @JsonProperty(value = "array_item") @ApiModelProperty(required = true, value = "") @NotNull public List getArrayItem() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/TypeHolderExample.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/TypeHolderExample.java index 8e57cc93cef4..026943cb64e3 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/TypeHolderExample.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/TypeHolderExample.java @@ -71,7 +71,7 @@ public TypeHolderExample stringItem(String stringItem) { * Get stringItem * @return stringItem **/ - @JsonProperty("string_item") + @JsonProperty(value = "string_item") @ApiModelProperty(example = "what", required = true, value = "") @NotNull public String getStringItem() { @@ -91,7 +91,7 @@ public TypeHolderExample numberItem(BigDecimal numberItem) { * Get numberItem * @return numberItem **/ - @JsonProperty("number_item") + @JsonProperty(value = "number_item") @ApiModelProperty(example = "1.234", required = true, value = "") @NotNull @Valid public BigDecimal getNumberItem() { @@ -111,7 +111,7 @@ public TypeHolderExample floatItem(Float floatItem) { * Get floatItem * @return floatItem **/ - @JsonProperty("float_item") + @JsonProperty(value = "float_item") @ApiModelProperty(example = "1.234", required = true, value = "") @NotNull public Float getFloatItem() { @@ -131,7 +131,7 @@ public TypeHolderExample integerItem(Integer integerItem) { * Get integerItem * @return integerItem **/ - @JsonProperty("integer_item") + @JsonProperty(value = "integer_item") @ApiModelProperty(example = "-2", required = true, value = "") @NotNull public Integer getIntegerItem() { @@ -151,7 +151,7 @@ public TypeHolderExample boolItem(Boolean boolItem) { * Get boolItem * @return boolItem **/ - @JsonProperty("bool_item") + @JsonProperty(value = "bool_item") @ApiModelProperty(example = "true", required = true, value = "") @NotNull public Boolean getBoolItem() { @@ -176,7 +176,7 @@ public TypeHolderExample addArrayItemItem(Integer arrayItemItem) { * Get arrayItem * @return arrayItem **/ - @JsonProperty("array_item") + @JsonProperty(value = "array_item") @ApiModelProperty(example = "[0, 1, 2, 3]", required = true, value = "") @NotNull public List getArrayItem() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/User.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/User.java index 1e702dd070d5..37ab5453c3d2 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/User.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/User.java @@ -78,7 +78,7 @@ public User id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -98,7 +98,7 @@ public User username(String username) { * Get username * @return username **/ - @JsonProperty("username") + @JsonProperty(value = "username") @ApiModelProperty(value = "") public String getUsername() { @@ -118,7 +118,7 @@ public User firstName(String firstName) { * Get firstName * @return firstName **/ - @JsonProperty("firstName") + @JsonProperty(value = "firstName") @ApiModelProperty(value = "") public String getFirstName() { @@ -138,7 +138,7 @@ public User lastName(String lastName) { * Get lastName * @return lastName **/ - @JsonProperty("lastName") + @JsonProperty(value = "lastName") @ApiModelProperty(value = "") public String getLastName() { @@ -158,7 +158,7 @@ public User email(String email) { * Get email * @return email **/ - @JsonProperty("email") + @JsonProperty(value = "email") @ApiModelProperty(value = "") public String getEmail() { @@ -178,7 +178,7 @@ public User password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(value = "") public String getPassword() { @@ -198,7 +198,7 @@ public User phone(String phone) { * Get phone * @return phone **/ - @JsonProperty("phone") + @JsonProperty(value = "phone") @ApiModelProperty(value = "") public String getPhone() { @@ -218,7 +218,7 @@ public User userStatus(Integer userStatus) { * User Status * @return userStatus **/ - @JsonProperty("userStatus") + @JsonProperty(value = "userStatus") @ApiModelProperty(value = "User Status") public Integer getUserStatus() { diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/XmlItem.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/XmlItem.java index 8c61e3e4cc0e..46c2de9ca268 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/XmlItem.java +++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/model/XmlItem.java @@ -186,7 +186,7 @@ public XmlItem attributeString(String attributeString) { * Get attributeString * @return attributeString **/ - @JsonProperty("attribute_string") + @JsonProperty(value = "attribute_string") @ApiModelProperty(example = "string", value = "") public String getAttributeString() { @@ -206,7 +206,7 @@ public XmlItem attributeNumber(BigDecimal attributeNumber) { * Get attributeNumber * @return attributeNumber **/ - @JsonProperty("attribute_number") + @JsonProperty(value = "attribute_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getAttributeNumber() { @@ -226,7 +226,7 @@ public XmlItem attributeInteger(Integer attributeInteger) { * Get attributeInteger * @return attributeInteger **/ - @JsonProperty("attribute_integer") + @JsonProperty(value = "attribute_integer") @ApiModelProperty(example = "-2", value = "") public Integer getAttributeInteger() { @@ -246,7 +246,7 @@ public XmlItem attributeBoolean(Boolean attributeBoolean) { * Get attributeBoolean * @return attributeBoolean **/ - @JsonProperty("attribute_boolean") + @JsonProperty(value = "attribute_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getAttributeBoolean() { @@ -274,7 +274,7 @@ public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) { * Get wrappedArray * @return wrappedArray **/ - @JsonProperty("wrapped_array") + @JsonProperty(value = "wrapped_array") @ApiModelProperty(value = "") public List getWrappedArray() { @@ -294,7 +294,7 @@ public XmlItem nameString(String nameString) { * Get nameString * @return nameString **/ - @JsonProperty("name_string") + @JsonProperty(value = "name_string") @ApiModelProperty(example = "string", value = "") public String getNameString() { @@ -314,7 +314,7 @@ public XmlItem nameNumber(BigDecimal nameNumber) { * Get nameNumber * @return nameNumber **/ - @JsonProperty("name_number") + @JsonProperty(value = "name_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getNameNumber() { @@ -334,7 +334,7 @@ public XmlItem nameInteger(Integer nameInteger) { * Get nameInteger * @return nameInteger **/ - @JsonProperty("name_integer") + @JsonProperty(value = "name_integer") @ApiModelProperty(example = "-2", value = "") public Integer getNameInteger() { @@ -354,7 +354,7 @@ public XmlItem nameBoolean(Boolean nameBoolean) { * Get nameBoolean * @return nameBoolean **/ - @JsonProperty("name_boolean") + @JsonProperty(value = "name_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getNameBoolean() { @@ -382,7 +382,7 @@ public XmlItem addNameArrayItem(Integer nameArrayItem) { * Get nameArray * @return nameArray **/ - @JsonProperty("name_array") + @JsonProperty(value = "name_array") @ApiModelProperty(value = "") public List getNameArray() { @@ -410,7 +410,7 @@ public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) { * Get nameWrappedArray * @return nameWrappedArray **/ - @JsonProperty("name_wrapped_array") + @JsonProperty(value = "name_wrapped_array") @ApiModelProperty(value = "") public List getNameWrappedArray() { @@ -430,7 +430,7 @@ public XmlItem prefixString(String prefixString) { * Get prefixString * @return prefixString **/ - @JsonProperty("prefix_string") + @JsonProperty(value = "prefix_string") @ApiModelProperty(example = "string", value = "") public String getPrefixString() { @@ -450,7 +450,7 @@ public XmlItem prefixNumber(BigDecimal prefixNumber) { * Get prefixNumber * @return prefixNumber **/ - @JsonProperty("prefix_number") + @JsonProperty(value = "prefix_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getPrefixNumber() { @@ -470,7 +470,7 @@ public XmlItem prefixInteger(Integer prefixInteger) { * Get prefixInteger * @return prefixInteger **/ - @JsonProperty("prefix_integer") + @JsonProperty(value = "prefix_integer") @ApiModelProperty(example = "-2", value = "") public Integer getPrefixInteger() { @@ -490,7 +490,7 @@ public XmlItem prefixBoolean(Boolean prefixBoolean) { * Get prefixBoolean * @return prefixBoolean **/ - @JsonProperty("prefix_boolean") + @JsonProperty(value = "prefix_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getPrefixBoolean() { @@ -518,7 +518,7 @@ public XmlItem addPrefixArrayItem(Integer prefixArrayItem) { * Get prefixArray * @return prefixArray **/ - @JsonProperty("prefix_array") + @JsonProperty(value = "prefix_array") @ApiModelProperty(value = "") public List getPrefixArray() { @@ -546,7 +546,7 @@ public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) { * Get prefixWrappedArray * @return prefixWrappedArray **/ - @JsonProperty("prefix_wrapped_array") + @JsonProperty(value = "prefix_wrapped_array") @ApiModelProperty(value = "") public List getPrefixWrappedArray() { @@ -566,7 +566,7 @@ public XmlItem namespaceString(String namespaceString) { * Get namespaceString * @return namespaceString **/ - @JsonProperty("namespace_string") + @JsonProperty(value = "namespace_string") @ApiModelProperty(example = "string", value = "") public String getNamespaceString() { @@ -586,7 +586,7 @@ public XmlItem namespaceNumber(BigDecimal namespaceNumber) { * Get namespaceNumber * @return namespaceNumber **/ - @JsonProperty("namespace_number") + @JsonProperty(value = "namespace_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getNamespaceNumber() { @@ -606,7 +606,7 @@ public XmlItem namespaceInteger(Integer namespaceInteger) { * Get namespaceInteger * @return namespaceInteger **/ - @JsonProperty("namespace_integer") + @JsonProperty(value = "namespace_integer") @ApiModelProperty(example = "-2", value = "") public Integer getNamespaceInteger() { @@ -626,7 +626,7 @@ public XmlItem namespaceBoolean(Boolean namespaceBoolean) { * Get namespaceBoolean * @return namespaceBoolean **/ - @JsonProperty("namespace_boolean") + @JsonProperty(value = "namespace_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getNamespaceBoolean() { @@ -654,7 +654,7 @@ public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) { * Get namespaceArray * @return namespaceArray **/ - @JsonProperty("namespace_array") + @JsonProperty(value = "namespace_array") @ApiModelProperty(value = "") public List getNamespaceArray() { @@ -682,7 +682,7 @@ public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) { * Get namespaceWrappedArray * @return namespaceWrappedArray **/ - @JsonProperty("namespace_wrapped_array") + @JsonProperty(value = "namespace_wrapped_array") @ApiModelProperty(value = "") public List getNamespaceWrappedArray() { @@ -702,7 +702,7 @@ public XmlItem prefixNsString(String prefixNsString) { * Get prefixNsString * @return prefixNsString **/ - @JsonProperty("prefix_ns_string") + @JsonProperty(value = "prefix_ns_string") @ApiModelProperty(example = "string", value = "") public String getPrefixNsString() { @@ -722,7 +722,7 @@ public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) { * Get prefixNsNumber * @return prefixNsNumber **/ - @JsonProperty("prefix_ns_number") + @JsonProperty(value = "prefix_ns_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getPrefixNsNumber() { @@ -742,7 +742,7 @@ public XmlItem prefixNsInteger(Integer prefixNsInteger) { * Get prefixNsInteger * @return prefixNsInteger **/ - @JsonProperty("prefix_ns_integer") + @JsonProperty(value = "prefix_ns_integer") @ApiModelProperty(example = "-2", value = "") public Integer getPrefixNsInteger() { @@ -762,7 +762,7 @@ public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) { * Get prefixNsBoolean * @return prefixNsBoolean **/ - @JsonProperty("prefix_ns_boolean") + @JsonProperty(value = "prefix_ns_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getPrefixNsBoolean() { @@ -790,7 +790,7 @@ public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) { * Get prefixNsArray * @return prefixNsArray **/ - @JsonProperty("prefix_ns_array") + @JsonProperty(value = "prefix_ns_array") @ApiModelProperty(value = "") public List getPrefixNsArray() { @@ -818,7 +818,7 @@ public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) { * Get prefixNsWrappedArray * @return prefixNsWrappedArray **/ - @JsonProperty("prefix_ns_wrapped_array") + @JsonProperty(value = "prefix_ns_wrapped_array") @ApiModelProperty(value = "") public List getPrefixNsWrappedArray() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java index 94ab4ee99b59..b69405239b38 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesAnyType.java @@ -45,7 +45,7 @@ public AdditionalPropertiesAnyType name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java index 8a7cbbfa5e79..f90d93c37aec 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesArray.java @@ -46,7 +46,7 @@ public AdditionalPropertiesArray name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java index 8e5e3a7ec7cc..473358d6cda0 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesBoolean.java @@ -45,7 +45,7 @@ public AdditionalPropertiesBoolean name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java index df959efecfe6..bf846cfb6bf7 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesClass.java @@ -105,7 +105,7 @@ public AdditionalPropertiesClass putMapStringItem(String key, String mapStringIt * Get mapString * @return mapString **/ - @JsonProperty("map_string") + @JsonProperty(value = "map_string") @ApiModelProperty(value = "") public Map getMapString() { @@ -133,7 +133,7 @@ public AdditionalPropertiesClass putMapNumberItem(String key, BigDecimal mapNumb * Get mapNumber * @return mapNumber **/ - @JsonProperty("map_number") + @JsonProperty(value = "map_number") @ApiModelProperty(value = "") @Valid public Map getMapNumber() { @@ -161,7 +161,7 @@ public AdditionalPropertiesClass putMapIntegerItem(String key, Integer mapIntege * Get mapInteger * @return mapInteger **/ - @JsonProperty("map_integer") + @JsonProperty(value = "map_integer") @ApiModelProperty(value = "") public Map getMapInteger() { @@ -189,7 +189,7 @@ public AdditionalPropertiesClass putMapBooleanItem(String key, Boolean mapBoolea * Get mapBoolean * @return mapBoolean **/ - @JsonProperty("map_boolean") + @JsonProperty(value = "map_boolean") @ApiModelProperty(value = "") public Map getMapBoolean() { @@ -217,7 +217,7 @@ public AdditionalPropertiesClass putMapArrayIntegerItem(String key, List> getMapArrayInteger() { @@ -245,7 +245,7 @@ public AdditionalPropertiesClass putMapArrayAnytypeItem(String key, List * Get mapArrayAnytype * @return mapArrayAnytype **/ - @JsonProperty("map_array_anytype") + @JsonProperty(value = "map_array_anytype") @ApiModelProperty(value = "") @Valid public Map> getMapArrayAnytype() { @@ -273,7 +273,7 @@ public AdditionalPropertiesClass putMapMapStringItem(String key, Map> getMapMapString() { @@ -301,7 +301,7 @@ public AdditionalPropertiesClass putMapMapAnytypeItem(String key, Map> getMapMapAnytype() { @@ -321,7 +321,7 @@ public AdditionalPropertiesClass anytype1(Object anytype1) { * Get anytype1 * @return anytype1 **/ - @JsonProperty("anytype_1") + @JsonProperty(value = "anytype_1") @ApiModelProperty(value = "") public Object getAnytype1() { @@ -341,7 +341,7 @@ public AdditionalPropertiesClass anytype2(Object anytype2) { * Get anytype2 * @return anytype2 **/ - @JsonProperty("anytype_2") + @JsonProperty(value = "anytype_2") @ApiModelProperty(value = "") public Object getAnytype2() { @@ -361,7 +361,7 @@ public AdditionalPropertiesClass anytype3(Object anytype3) { * Get anytype3 * @return anytype3 **/ - @JsonProperty("anytype_3") + @JsonProperty(value = "anytype_3") @ApiModelProperty(value = "") public Object getAnytype3() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java index ac5f7501b3a8..29bd12be784b 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesInteger.java @@ -45,7 +45,7 @@ public AdditionalPropertiesInteger name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java index d3072f447dca..f05484cd7cc7 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesNumber.java @@ -46,7 +46,7 @@ public AdditionalPropertiesNumber name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java index 8f8b575df2a2..fb246cac6598 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesObject.java @@ -45,7 +45,7 @@ public AdditionalPropertiesObject name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java index c5d4ac7f7c1b..b7018e370e50 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/AdditionalPropertiesString.java @@ -45,7 +45,7 @@ public AdditionalPropertiesString name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Animal.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Animal.java index db142b932d90..97cdd70ab0a1 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Animal.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Animal.java @@ -56,7 +56,7 @@ public Animal className(String className) { * Get className * @return className **/ - @JsonProperty("className") + @JsonProperty(value = "className") @ApiModelProperty(required = true, value = "") @NotNull public String getClassName() { @@ -76,7 +76,7 @@ public Animal color(String color) { * Get color * @return color **/ - @JsonProperty("color") + @JsonProperty(value = "color") @ApiModelProperty(value = "") public String getColor() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java index cd6a16edb265..d277c77993f3 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayOfArrayOfNumberOnly.java @@ -54,7 +54,7 @@ public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(List arrayAr * Get arrayArrayNumber * @return arrayArrayNumber **/ - @JsonProperty("ArrayArrayNumber") + @JsonProperty(value = "ArrayArrayNumber") @ApiModelProperty(value = "") @Valid public List> getArrayArrayNumber() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java index 71d88cd5d890..f8b08e16723e 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayOfNumberOnly.java @@ -54,7 +54,7 @@ public ArrayOfNumberOnly addArrayNumberItem(BigDecimal arrayNumberItem) { * Get arrayNumber * @return arrayNumber **/ - @JsonProperty("ArrayNumber") + @JsonProperty(value = "ArrayNumber") @ApiModelProperty(value = "") @Valid public List getArrayNumber() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayTest.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayTest.java index 738fa858e7e7..dfeb88958dca 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayTest.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ArrayTest.java @@ -64,7 +64,7 @@ public ArrayTest addArrayOfStringItem(String arrayOfStringItem) { * Get arrayOfString * @return arrayOfString **/ - @JsonProperty("array_of_string") + @JsonProperty(value = "array_of_string") @ApiModelProperty(value = "") public List getArrayOfString() { @@ -92,7 +92,7 @@ public ArrayTest addArrayArrayOfIntegerItem(List arrayArrayOfIntegerItem) * Get arrayArrayOfInteger * @return arrayArrayOfInteger **/ - @JsonProperty("array_array_of_integer") + @JsonProperty(value = "array_array_of_integer") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfInteger() { @@ -120,7 +120,7 @@ public ArrayTest addArrayArrayOfModelItem(List arrayArrayOfModelI * Get arrayArrayOfModel * @return arrayArrayOfModel **/ - @JsonProperty("array_array_of_model") + @JsonProperty(value = "array_array_of_model") @ApiModelProperty(value = "") @Valid public List> getArrayArrayOfModel() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/BigCat.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/BigCat.java index 0af195ad0a72..867f51230021 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/BigCat.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/BigCat.java @@ -81,7 +81,7 @@ public BigCat kind(KindEnum kind) { * Get kind * @return kind **/ - @JsonProperty("kind") + @JsonProperty(value = "kind") @ApiModelProperty(value = "") public KindEnum getKind() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/BigCatAllOf.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/BigCatAllOf.java index eaf4e4f49f5e..ae1220fcefd1 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/BigCatAllOf.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/BigCatAllOf.java @@ -79,7 +79,7 @@ public BigCatAllOf kind(KindEnum kind) { * Get kind * @return kind **/ - @JsonProperty("kind") + @JsonProperty(value = "kind") @ApiModelProperty(value = "") public KindEnum getKind() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Capitalization.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Capitalization.java index 9b99fe2b58b3..650d2c7b790b 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Capitalization.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Capitalization.java @@ -68,7 +68,7 @@ public Capitalization smallCamel(String smallCamel) { * Get smallCamel * @return smallCamel **/ - @JsonProperty("smallCamel") + @JsonProperty(value = "smallCamel") @ApiModelProperty(value = "") public String getSmallCamel() { @@ -88,7 +88,7 @@ public Capitalization capitalCamel(String capitalCamel) { * Get capitalCamel * @return capitalCamel **/ - @JsonProperty("CapitalCamel") + @JsonProperty(value = "CapitalCamel") @ApiModelProperty(value = "") public String getCapitalCamel() { @@ -108,7 +108,7 @@ public Capitalization smallSnake(String smallSnake) { * Get smallSnake * @return smallSnake **/ - @JsonProperty("small_Snake") + @JsonProperty(value = "small_Snake") @ApiModelProperty(value = "") public String getSmallSnake() { @@ -128,7 +128,7 @@ public Capitalization capitalSnake(String capitalSnake) { * Get capitalSnake * @return capitalSnake **/ - @JsonProperty("Capital_Snake") + @JsonProperty(value = "Capital_Snake") @ApiModelProperty(value = "") public String getCapitalSnake() { @@ -148,7 +148,7 @@ public Capitalization scAETHFlowPoints(String scAETHFlowPoints) { * Get scAETHFlowPoints * @return scAETHFlowPoints **/ - @JsonProperty("SCA_ETH_Flow_Points") + @JsonProperty(value = "SCA_ETH_Flow_Points") @ApiModelProperty(value = "") public String getScAETHFlowPoints() { @@ -168,7 +168,7 @@ public Capitalization ATT_NAME(String ATT_NAME) { * Name of the pet * @return ATT_NAME **/ - @JsonProperty("ATT_NAME") + @JsonProperty(value = "ATT_NAME") @ApiModelProperty(value = "Name of the pet ") public String getATTNAME() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Cat.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Cat.java index a393506d3aa5..ef4f615bfe76 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Cat.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Cat.java @@ -45,7 +45,7 @@ public Cat declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/CatAllOf.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/CatAllOf.java index 7e2a72595950..83503a712d2b 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/CatAllOf.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/CatAllOf.java @@ -43,7 +43,7 @@ public CatAllOf declawed(Boolean declawed) { * Get declawed * @return declawed **/ - @JsonProperty("declawed") + @JsonProperty(value = "declawed") @ApiModelProperty(value = "") public Boolean getDeclawed() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Category.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Category.java index d7a5c2b2fafa..af6055dba4ea 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Category.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Category.java @@ -48,7 +48,7 @@ public Category id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -68,7 +68,7 @@ public Category name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ClassModel.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ClassModel.java index 00352ed5bce9..ccfe8e27684e 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ClassModel.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ClassModel.java @@ -44,7 +44,7 @@ public ClassModel propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("_class") + @JsonProperty(value = "_class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Client.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Client.java index 04b28287ed41..0c87d7030a57 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Client.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Client.java @@ -43,7 +43,7 @@ public Client client(String client) { * Get client * @return client **/ - @JsonProperty("client") + @JsonProperty(value = "client") @ApiModelProperty(value = "") public String getClient() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Dog.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Dog.java index 7d6059b2fc1f..e126444fd61e 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Dog.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Dog.java @@ -45,7 +45,7 @@ public Dog breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/DogAllOf.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/DogAllOf.java index 9fcfbfb92cfc..6902a980c243 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/DogAllOf.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/DogAllOf.java @@ -43,7 +43,7 @@ public DogAllOf breed(String breed) { * Get breed * @return breed **/ - @JsonProperty("breed") + @JsonProperty(value = "breed") @ApiModelProperty(value = "") public String getBreed() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/EnumArrays.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/EnumArrays.java index 526f387372ca..08e6db1ffc92 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/EnumArrays.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/EnumArrays.java @@ -113,7 +113,7 @@ public EnumArrays justSymbol(JustSymbolEnum justSymbol) { * Get justSymbol * @return justSymbol **/ - @JsonProperty("just_symbol") + @JsonProperty(value = "just_symbol") @ApiModelProperty(value = "") public JustSymbolEnum getJustSymbol() { @@ -141,7 +141,7 @@ public EnumArrays addArrayEnumItem(ArrayEnumEnum arrayEnumItem) { * Get arrayEnum * @return arrayEnum **/ - @JsonProperty("array_enum") + @JsonProperty(value = "array_enum") @ApiModelProperty(value = "") public List getArrayEnum() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/EnumTest.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/EnumTest.java index ee08eadfa8d7..937a9f7f6aeb 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/EnumTest.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/EnumTest.java @@ -193,7 +193,7 @@ public EnumTest enumString(EnumStringEnum enumString) { * Get enumString * @return enumString **/ - @JsonProperty("enum_string") + @JsonProperty(value = "enum_string") @ApiModelProperty(value = "") public EnumStringEnum getEnumString() { @@ -213,7 +213,7 @@ public EnumTest enumStringRequired(EnumStringRequiredEnum enumStringRequired) { * Get enumStringRequired * @return enumStringRequired **/ - @JsonProperty("enum_string_required") + @JsonProperty(value = "enum_string_required") @ApiModelProperty(required = true, value = "") @NotNull public EnumStringRequiredEnum getEnumStringRequired() { @@ -233,7 +233,7 @@ public EnumTest enumInteger(EnumIntegerEnum enumInteger) { * Get enumInteger * @return enumInteger **/ - @JsonProperty("enum_integer") + @JsonProperty(value = "enum_integer") @ApiModelProperty(value = "") public EnumIntegerEnum getEnumInteger() { @@ -253,7 +253,7 @@ public EnumTest enumNumber(EnumNumberEnum enumNumber) { * Get enumNumber * @return enumNumber **/ - @JsonProperty("enum_number") + @JsonProperty(value = "enum_number") @ApiModelProperty(value = "") public EnumNumberEnum getEnumNumber() { @@ -273,7 +273,7 @@ public EnumTest outerEnum(OuterEnum outerEnum) { * Get outerEnum * @return outerEnum **/ - @JsonProperty("outerEnum") + @JsonProperty(value = "outerEnum") @ApiModelProperty(value = "") @Valid public OuterEnum getOuterEnum() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/FileSchemaTestClass.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/FileSchemaTestClass.java index 4be816893906..fb40a511e446 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/FileSchemaTestClass.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/FileSchemaTestClass.java @@ -50,7 +50,7 @@ public FileSchemaTestClass file(java.io.File file) { * Get file * @return file **/ - @JsonProperty("file") + @JsonProperty(value = "file") @ApiModelProperty(value = "") @Valid public java.io.File getFile() { @@ -78,7 +78,7 @@ public FileSchemaTestClass addFilesItem(java.io.File filesItem) { * Get files * @return files **/ - @JsonProperty("files") + @JsonProperty(value = "files") @ApiModelProperty(value = "") @Valid public List getFiles() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/FormatTest.java index 9817e78712a7..d640a11342c7 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/FormatTest.java @@ -114,7 +114,7 @@ public FormatTest integer(Integer integer) { * maximum: 100 * @return integer **/ - @JsonProperty("integer") + @JsonProperty(value = "integer") @ApiModelProperty(value = "") @Min(10) @Max(100) public Integer getInteger() { @@ -136,7 +136,7 @@ public FormatTest int32(Integer int32) { * maximum: 200 * @return int32 **/ - @JsonProperty("int32") + @JsonProperty(value = "int32") @ApiModelProperty(value = "") @Min(20) @Max(200) public Integer getInt32() { @@ -156,7 +156,7 @@ public FormatTest int64(Long int64) { * Get int64 * @return int64 **/ - @JsonProperty("int64") + @JsonProperty(value = "int64") @ApiModelProperty(value = "") public Long getInt64() { @@ -178,7 +178,7 @@ public FormatTest number(BigDecimal number) { * maximum: 543.2 * @return number **/ - @JsonProperty("number") + @JsonProperty(value = "number") @ApiModelProperty(required = true, value = "") @NotNull @Valid @DecimalMin("32.1") @DecimalMax("543.2") public BigDecimal getNumber() { @@ -200,7 +200,7 @@ public FormatTest _float(Float _float) { * maximum: 987.6 * @return _float **/ - @JsonProperty("float") + @JsonProperty(value = "float") @ApiModelProperty(value = "") @DecimalMin("54.3") @DecimalMax("987.6") public Float getFloat() { @@ -222,7 +222,7 @@ public FormatTest _double(Double _double) { * maximum: 123.4 * @return _double **/ - @JsonProperty("double") + @JsonProperty(value = "double") @ApiModelProperty(value = "") @DecimalMin("67.8") @DecimalMax("123.4") public Double getDouble() { @@ -242,7 +242,7 @@ public FormatTest string(String string) { * Get string * @return string **/ - @JsonProperty("string") + @JsonProperty(value = "string") @ApiModelProperty(value = "") @Pattern(regexp="/[a-z]/i") public String getString() { @@ -262,7 +262,7 @@ public FormatTest _byte(byte[] _byte) { * Get _byte * @return _byte **/ - @JsonProperty("byte") + @JsonProperty(value = "byte") @ApiModelProperty(required = true, value = "") @NotNull public byte[] getByte() { @@ -282,7 +282,7 @@ public FormatTest binary(File binary) { * Get binary * @return binary **/ - @JsonProperty("binary") + @JsonProperty(value = "binary") @ApiModelProperty(value = "") public File getBinary() { @@ -302,7 +302,7 @@ public FormatTest date(Date date) { * Get date * @return date **/ - @JsonProperty("date") + @JsonProperty(value = "date") @ApiModelProperty(required = true, value = "") @NotNull public Date getDate() { @@ -322,7 +322,7 @@ public FormatTest dateTime(Date dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public Date getDateTime() { @@ -342,7 +342,7 @@ public FormatTest uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(example = "72f98069-206d-4f12-9f12-3d1e525a8e84", value = "") public UUID getUuid() { @@ -362,7 +362,7 @@ public FormatTest password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(required = true, value = "") @NotNull @Size(min=10,max=64) public String getPassword() { @@ -382,7 +382,7 @@ public FormatTest bigDecimal(BigDecimal bigDecimal) { * Get bigDecimal * @return bigDecimal **/ - @JsonProperty("BigDecimal") + @JsonProperty(value = "BigDecimal") @ApiModelProperty(value = "") @Valid public BigDecimal getBigDecimal() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java index 4f72442fd947..1b5042f61f59 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/HasOnlyReadOnly.java @@ -48,7 +48,7 @@ public HasOnlyReadOnly bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -68,7 +68,7 @@ public HasOnlyReadOnly foo(String foo) { * Get foo * @return foo **/ - @JsonProperty("foo") + @JsonProperty(value = "foo", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getFoo() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/MapTest.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/MapTest.java index 4db676efea2d..12516e0afba2 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/MapTest.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/MapTest.java @@ -101,7 +101,7 @@ public MapTest putMapMapOfStringItem(String key, Map mapMapOfStr * Get mapMapOfString * @return mapMapOfString **/ - @JsonProperty("map_map_of_string") + @JsonProperty(value = "map_map_of_string") @ApiModelProperty(value = "") @Valid public Map> getMapMapOfString() { @@ -129,7 +129,7 @@ public MapTest putMapOfEnumStringItem(String key, InnerEnum mapOfEnumStringItem) * Get mapOfEnumString * @return mapOfEnumString **/ - @JsonProperty("map_of_enum_string") + @JsonProperty(value = "map_of_enum_string") @ApiModelProperty(value = "") public Map getMapOfEnumString() { @@ -157,7 +157,7 @@ public MapTest putDirectMapItem(String key, Boolean directMapItem) { * Get directMap * @return directMap **/ - @JsonProperty("direct_map") + @JsonProperty(value = "direct_map") @ApiModelProperty(value = "") public Map getDirectMap() { @@ -185,7 +185,7 @@ public MapTest putIndirectMapItem(String key, Boolean indirectMapItem) { * Get indirectMap * @return indirectMap **/ - @JsonProperty("indirect_map") + @JsonProperty(value = "indirect_map") @ApiModelProperty(value = "") public Map getIndirectMap() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java index 0ba358c6b5c2..eb4fcd577811 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/MixedPropertiesAndAdditionalPropertiesClass.java @@ -59,7 +59,7 @@ public MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) { * Get uuid * @return uuid **/ - @JsonProperty("uuid") + @JsonProperty(value = "uuid") @ApiModelProperty(value = "") public UUID getUuid() { @@ -79,7 +79,7 @@ public MixedPropertiesAndAdditionalPropertiesClass dateTime(Date dateTime) { * Get dateTime * @return dateTime **/ - @JsonProperty("dateTime") + @JsonProperty(value = "dateTime") @ApiModelProperty(value = "") public Date getDateTime() { @@ -107,7 +107,7 @@ public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal * Get map * @return map **/ - @JsonProperty("map") + @JsonProperty(value = "map") @ApiModelProperty(value = "") @Valid public Map getMap() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Model200Response.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Model200Response.java index 2df0caa9725d..1a3e698983e5 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Model200Response.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Model200Response.java @@ -49,7 +49,7 @@ public Model200Response name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public Integer getName() { @@ -69,7 +69,7 @@ public Model200Response propertyClass(String propertyClass) { * Get propertyClass * @return propertyClass **/ - @JsonProperty("class") + @JsonProperty(value = "class") @ApiModelProperty(value = "") public String getPropertyClass() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ModelApiResponse.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ModelApiResponse.java index b0d01665ef6a..1552245d1dc8 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ModelApiResponse.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ModelApiResponse.java @@ -53,7 +53,7 @@ public ModelApiResponse code(Integer code) { * Get code * @return code **/ - @JsonProperty("code") + @JsonProperty(value = "code") @ApiModelProperty(value = "") public Integer getCode() { @@ -73,7 +73,7 @@ public ModelApiResponse type(String type) { * Get type * @return type **/ - @JsonProperty("type") + @JsonProperty(value = "type") @ApiModelProperty(value = "") public String getType() { @@ -93,7 +93,7 @@ public ModelApiResponse message(String message) { * Get message * @return message **/ - @JsonProperty("message") + @JsonProperty(value = "message") @ApiModelProperty(value = "") public String getMessage() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ModelReturn.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ModelReturn.java index 41a1c059f7ef..c9f4504d3f0e 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ModelReturn.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ModelReturn.java @@ -44,7 +44,7 @@ public ModelReturn _return(Integer _return) { * Get _return * @return _return **/ - @JsonProperty("return") + @JsonProperty(value = "return") @ApiModelProperty(value = "") public Integer getReturn() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Name.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Name.java index a7a189571897..cdcef856cd21 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Name.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Name.java @@ -59,7 +59,7 @@ public Name name(Integer name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(required = true, value = "") @NotNull public Integer getName() { @@ -79,7 +79,7 @@ public Name snakeCase(Integer snakeCase) { * Get snakeCase * @return snakeCase **/ - @JsonProperty("snake_case") + @JsonProperty(value = "snake_case", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer getSnakeCase() { @@ -99,7 +99,7 @@ public Name property(String property) { * Get property * @return property **/ - @JsonProperty("property") + @JsonProperty(value = "property") @ApiModelProperty(value = "") public String getProperty() { @@ -119,7 +119,7 @@ public Name _123number(Integer _123number) { * Get _123number * @return _123number **/ - @JsonProperty("123Number") + @JsonProperty(value = "123Number", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public Integer get123number() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/NumberOnly.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/NumberOnly.java index 188899dc4460..3ec25c75ae59 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/NumberOnly.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/NumberOnly.java @@ -44,7 +44,7 @@ public NumberOnly justNumber(BigDecimal justNumber) { * Get justNumber * @return justNumber **/ - @JsonProperty("JustNumber") + @JsonProperty(value = "JustNumber") @ApiModelProperty(value = "") @Valid public BigDecimal getJustNumber() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Order.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Order.java index 7ce0000199f9..b97b051ebc80 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Order.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Order.java @@ -103,7 +103,7 @@ public Order id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -123,7 +123,7 @@ public Order petId(Long petId) { * Get petId * @return petId **/ - @JsonProperty("petId") + @JsonProperty(value = "petId") @ApiModelProperty(value = "") public Long getPetId() { @@ -143,7 +143,7 @@ public Order quantity(Integer quantity) { * Get quantity * @return quantity **/ - @JsonProperty("quantity") + @JsonProperty(value = "quantity") @ApiModelProperty(value = "") public Integer getQuantity() { @@ -163,7 +163,7 @@ public Order shipDate(Date shipDate) { * Get shipDate * @return shipDate **/ - @JsonProperty("shipDate") + @JsonProperty(value = "shipDate") @ApiModelProperty(value = "") public Date getShipDate() { @@ -183,7 +183,7 @@ public Order status(StatusEnum status) { * Order Status * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "Order Status") public StatusEnum getStatus() { @@ -203,7 +203,7 @@ public Order complete(Boolean complete) { * Get complete * @return complete **/ - @JsonProperty("complete") + @JsonProperty(value = "complete") @ApiModelProperty(value = "") public Boolean getComplete() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/OuterComposite.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/OuterComposite.java index 43b69002d036..577504e1bef2 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/OuterComposite.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/OuterComposite.java @@ -54,7 +54,7 @@ public OuterComposite myNumber(BigDecimal myNumber) { * Get myNumber * @return myNumber **/ - @JsonProperty("my_number") + @JsonProperty(value = "my_number") @ApiModelProperty(value = "") @Valid public BigDecimal getMyNumber() { @@ -74,7 +74,7 @@ public OuterComposite myString(String myString) { * Get myString * @return myString **/ - @JsonProperty("my_string") + @JsonProperty(value = "my_string") @ApiModelProperty(value = "") public String getMyString() { @@ -94,7 +94,7 @@ public OuterComposite myBoolean(Boolean myBoolean) { * Get myBoolean * @return myBoolean **/ - @JsonProperty("my_boolean") + @JsonProperty(value = "my_boolean") @ApiModelProperty(value = "") public Boolean getMyBoolean() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Pet.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Pet.java index adcdbf24a57d..4ed108d787e9 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Pet.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Pet.java @@ -108,7 +108,7 @@ public Pet id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -128,7 +128,7 @@ public Pet category(Category category) { * Get category * @return category **/ - @JsonProperty("category") + @JsonProperty(value = "category") @ApiModelProperty(value = "") @Valid public Category getCategory() { @@ -148,7 +148,7 @@ public Pet name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(example = "doggie", required = true, value = "") @NotNull public String getName() { @@ -173,7 +173,7 @@ public Pet addPhotoUrlsItem(String photoUrlsItem) { * Get photoUrls * @return photoUrls **/ - @JsonProperty("photoUrls") + @JsonProperty(value = "photoUrls") @ApiModelProperty(required = true, value = "") @NotNull public Set getPhotoUrls() { @@ -201,7 +201,7 @@ public Pet addTagsItem(Tag tagsItem) { * Get tags * @return tags **/ - @JsonProperty("tags") + @JsonProperty(value = "tags") @ApiModelProperty(value = "") @Valid public List getTags() { @@ -221,7 +221,7 @@ public Pet status(StatusEnum status) { * pet status in the store * @return status **/ - @JsonProperty("status") + @JsonProperty(value = "status") @ApiModelProperty(value = "pet status in the store") public StatusEnum getStatus() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ReadOnlyFirst.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ReadOnlyFirst.java index e2e5ea910e68..05c01064ff67 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ReadOnlyFirst.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/ReadOnlyFirst.java @@ -48,7 +48,7 @@ public ReadOnlyFirst bar(String bar) { * Get bar * @return bar **/ - @JsonProperty("bar") + @JsonProperty(value = "bar", access = JsonProperty.Access.READ_ONLY) @ApiModelProperty(value = "") public String getBar() { @@ -68,7 +68,7 @@ public ReadOnlyFirst baz(String baz) { * Get baz * @return baz **/ - @JsonProperty("baz") + @JsonProperty(value = "baz") @ApiModelProperty(value = "") public String getBaz() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/SpecialModelName.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/SpecialModelName.java index 48ed44ecf621..1fbc58e301e6 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/SpecialModelName.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/SpecialModelName.java @@ -43,7 +43,7 @@ public class SpecialModelName { * Get $specialPropertyName * @return $specialPropertyName **/ - @JsonProperty("$special[property.name]") + @JsonProperty(value = "$special[property.name]") @ApiModelProperty(value = "") public Long get$SpecialPropertyName() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Tag.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Tag.java index 80d098d57c16..5ac82ca92382 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Tag.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/Tag.java @@ -48,7 +48,7 @@ public Tag id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -68,7 +68,7 @@ public Tag name(String name) { * Get name * @return name **/ - @JsonProperty("name") + @JsonProperty(value = "name") @ApiModelProperty(value = "") public String getName() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/TypeHolderDefault.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/TypeHolderDefault.java index 52830413a08c..a8450d0e61d5 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/TypeHolderDefault.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/TypeHolderDefault.java @@ -66,7 +66,7 @@ public TypeHolderDefault stringItem(String stringItem) { * Get stringItem * @return stringItem **/ - @JsonProperty("string_item") + @JsonProperty(value = "string_item") @ApiModelProperty(required = true, value = "") @NotNull public String getStringItem() { @@ -86,7 +86,7 @@ public TypeHolderDefault numberItem(BigDecimal numberItem) { * Get numberItem * @return numberItem **/ - @JsonProperty("number_item") + @JsonProperty(value = "number_item") @ApiModelProperty(required = true, value = "") @NotNull @Valid public BigDecimal getNumberItem() { @@ -106,7 +106,7 @@ public TypeHolderDefault integerItem(Integer integerItem) { * Get integerItem * @return integerItem **/ - @JsonProperty("integer_item") + @JsonProperty(value = "integer_item") @ApiModelProperty(required = true, value = "") @NotNull public Integer getIntegerItem() { @@ -126,7 +126,7 @@ public TypeHolderDefault boolItem(Boolean boolItem) { * Get boolItem * @return boolItem **/ - @JsonProperty("bool_item") + @JsonProperty(value = "bool_item") @ApiModelProperty(required = true, value = "") @NotNull public Boolean getBoolItem() { @@ -151,7 +151,7 @@ public TypeHolderDefault addArrayItemItem(Integer arrayItemItem) { * Get arrayItem * @return arrayItem **/ - @JsonProperty("array_item") + @JsonProperty(value = "array_item") @ApiModelProperty(required = true, value = "") @NotNull public List getArrayItem() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/TypeHolderExample.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/TypeHolderExample.java index 8e57cc93cef4..026943cb64e3 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/TypeHolderExample.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/TypeHolderExample.java @@ -71,7 +71,7 @@ public TypeHolderExample stringItem(String stringItem) { * Get stringItem * @return stringItem **/ - @JsonProperty("string_item") + @JsonProperty(value = "string_item") @ApiModelProperty(example = "what", required = true, value = "") @NotNull public String getStringItem() { @@ -91,7 +91,7 @@ public TypeHolderExample numberItem(BigDecimal numberItem) { * Get numberItem * @return numberItem **/ - @JsonProperty("number_item") + @JsonProperty(value = "number_item") @ApiModelProperty(example = "1.234", required = true, value = "") @NotNull @Valid public BigDecimal getNumberItem() { @@ -111,7 +111,7 @@ public TypeHolderExample floatItem(Float floatItem) { * Get floatItem * @return floatItem **/ - @JsonProperty("float_item") + @JsonProperty(value = "float_item") @ApiModelProperty(example = "1.234", required = true, value = "") @NotNull public Float getFloatItem() { @@ -131,7 +131,7 @@ public TypeHolderExample integerItem(Integer integerItem) { * Get integerItem * @return integerItem **/ - @JsonProperty("integer_item") + @JsonProperty(value = "integer_item") @ApiModelProperty(example = "-2", required = true, value = "") @NotNull public Integer getIntegerItem() { @@ -151,7 +151,7 @@ public TypeHolderExample boolItem(Boolean boolItem) { * Get boolItem * @return boolItem **/ - @JsonProperty("bool_item") + @JsonProperty(value = "bool_item") @ApiModelProperty(example = "true", required = true, value = "") @NotNull public Boolean getBoolItem() { @@ -176,7 +176,7 @@ public TypeHolderExample addArrayItemItem(Integer arrayItemItem) { * Get arrayItem * @return arrayItem **/ - @JsonProperty("array_item") + @JsonProperty(value = "array_item") @ApiModelProperty(example = "[0, 1, 2, 3]", required = true, value = "") @NotNull public List getArrayItem() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/User.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/User.java index 1e702dd070d5..37ab5453c3d2 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/User.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/User.java @@ -78,7 +78,7 @@ public User id(Long id) { * Get id * @return id **/ - @JsonProperty("id") + @JsonProperty(value = "id") @ApiModelProperty(value = "") public Long getId() { @@ -98,7 +98,7 @@ public User username(String username) { * Get username * @return username **/ - @JsonProperty("username") + @JsonProperty(value = "username") @ApiModelProperty(value = "") public String getUsername() { @@ -118,7 +118,7 @@ public User firstName(String firstName) { * Get firstName * @return firstName **/ - @JsonProperty("firstName") + @JsonProperty(value = "firstName") @ApiModelProperty(value = "") public String getFirstName() { @@ -138,7 +138,7 @@ public User lastName(String lastName) { * Get lastName * @return lastName **/ - @JsonProperty("lastName") + @JsonProperty(value = "lastName") @ApiModelProperty(value = "") public String getLastName() { @@ -158,7 +158,7 @@ public User email(String email) { * Get email * @return email **/ - @JsonProperty("email") + @JsonProperty(value = "email") @ApiModelProperty(value = "") public String getEmail() { @@ -178,7 +178,7 @@ public User password(String password) { * Get password * @return password **/ - @JsonProperty("password") + @JsonProperty(value = "password") @ApiModelProperty(value = "") public String getPassword() { @@ -198,7 +198,7 @@ public User phone(String phone) { * Get phone * @return phone **/ - @JsonProperty("phone") + @JsonProperty(value = "phone") @ApiModelProperty(value = "") public String getPhone() { @@ -218,7 +218,7 @@ public User userStatus(Integer userStatus) { * User Status * @return userStatus **/ - @JsonProperty("userStatus") + @JsonProperty(value = "userStatus") @ApiModelProperty(value = "User Status") public Integer getUserStatus() { diff --git a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/XmlItem.java b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/XmlItem.java index 8c61e3e4cc0e..46c2de9ca268 100644 --- a/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/XmlItem.java +++ b/samples/server/petstore/jaxrs/jersey2/src/gen/java/org/openapitools/model/XmlItem.java @@ -186,7 +186,7 @@ public XmlItem attributeString(String attributeString) { * Get attributeString * @return attributeString **/ - @JsonProperty("attribute_string") + @JsonProperty(value = "attribute_string") @ApiModelProperty(example = "string", value = "") public String getAttributeString() { @@ -206,7 +206,7 @@ public XmlItem attributeNumber(BigDecimal attributeNumber) { * Get attributeNumber * @return attributeNumber **/ - @JsonProperty("attribute_number") + @JsonProperty(value = "attribute_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getAttributeNumber() { @@ -226,7 +226,7 @@ public XmlItem attributeInteger(Integer attributeInteger) { * Get attributeInteger * @return attributeInteger **/ - @JsonProperty("attribute_integer") + @JsonProperty(value = "attribute_integer") @ApiModelProperty(example = "-2", value = "") public Integer getAttributeInteger() { @@ -246,7 +246,7 @@ public XmlItem attributeBoolean(Boolean attributeBoolean) { * Get attributeBoolean * @return attributeBoolean **/ - @JsonProperty("attribute_boolean") + @JsonProperty(value = "attribute_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getAttributeBoolean() { @@ -274,7 +274,7 @@ public XmlItem addWrappedArrayItem(Integer wrappedArrayItem) { * Get wrappedArray * @return wrappedArray **/ - @JsonProperty("wrapped_array") + @JsonProperty(value = "wrapped_array") @ApiModelProperty(value = "") public List getWrappedArray() { @@ -294,7 +294,7 @@ public XmlItem nameString(String nameString) { * Get nameString * @return nameString **/ - @JsonProperty("name_string") + @JsonProperty(value = "name_string") @ApiModelProperty(example = "string", value = "") public String getNameString() { @@ -314,7 +314,7 @@ public XmlItem nameNumber(BigDecimal nameNumber) { * Get nameNumber * @return nameNumber **/ - @JsonProperty("name_number") + @JsonProperty(value = "name_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getNameNumber() { @@ -334,7 +334,7 @@ public XmlItem nameInteger(Integer nameInteger) { * Get nameInteger * @return nameInteger **/ - @JsonProperty("name_integer") + @JsonProperty(value = "name_integer") @ApiModelProperty(example = "-2", value = "") public Integer getNameInteger() { @@ -354,7 +354,7 @@ public XmlItem nameBoolean(Boolean nameBoolean) { * Get nameBoolean * @return nameBoolean **/ - @JsonProperty("name_boolean") + @JsonProperty(value = "name_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getNameBoolean() { @@ -382,7 +382,7 @@ public XmlItem addNameArrayItem(Integer nameArrayItem) { * Get nameArray * @return nameArray **/ - @JsonProperty("name_array") + @JsonProperty(value = "name_array") @ApiModelProperty(value = "") public List getNameArray() { @@ -410,7 +410,7 @@ public XmlItem addNameWrappedArrayItem(Integer nameWrappedArrayItem) { * Get nameWrappedArray * @return nameWrappedArray **/ - @JsonProperty("name_wrapped_array") + @JsonProperty(value = "name_wrapped_array") @ApiModelProperty(value = "") public List getNameWrappedArray() { @@ -430,7 +430,7 @@ public XmlItem prefixString(String prefixString) { * Get prefixString * @return prefixString **/ - @JsonProperty("prefix_string") + @JsonProperty(value = "prefix_string") @ApiModelProperty(example = "string", value = "") public String getPrefixString() { @@ -450,7 +450,7 @@ public XmlItem prefixNumber(BigDecimal prefixNumber) { * Get prefixNumber * @return prefixNumber **/ - @JsonProperty("prefix_number") + @JsonProperty(value = "prefix_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getPrefixNumber() { @@ -470,7 +470,7 @@ public XmlItem prefixInteger(Integer prefixInteger) { * Get prefixInteger * @return prefixInteger **/ - @JsonProperty("prefix_integer") + @JsonProperty(value = "prefix_integer") @ApiModelProperty(example = "-2", value = "") public Integer getPrefixInteger() { @@ -490,7 +490,7 @@ public XmlItem prefixBoolean(Boolean prefixBoolean) { * Get prefixBoolean * @return prefixBoolean **/ - @JsonProperty("prefix_boolean") + @JsonProperty(value = "prefix_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getPrefixBoolean() { @@ -518,7 +518,7 @@ public XmlItem addPrefixArrayItem(Integer prefixArrayItem) { * Get prefixArray * @return prefixArray **/ - @JsonProperty("prefix_array") + @JsonProperty(value = "prefix_array") @ApiModelProperty(value = "") public List getPrefixArray() { @@ -546,7 +546,7 @@ public XmlItem addPrefixWrappedArrayItem(Integer prefixWrappedArrayItem) { * Get prefixWrappedArray * @return prefixWrappedArray **/ - @JsonProperty("prefix_wrapped_array") + @JsonProperty(value = "prefix_wrapped_array") @ApiModelProperty(value = "") public List getPrefixWrappedArray() { @@ -566,7 +566,7 @@ public XmlItem namespaceString(String namespaceString) { * Get namespaceString * @return namespaceString **/ - @JsonProperty("namespace_string") + @JsonProperty(value = "namespace_string") @ApiModelProperty(example = "string", value = "") public String getNamespaceString() { @@ -586,7 +586,7 @@ public XmlItem namespaceNumber(BigDecimal namespaceNumber) { * Get namespaceNumber * @return namespaceNumber **/ - @JsonProperty("namespace_number") + @JsonProperty(value = "namespace_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getNamespaceNumber() { @@ -606,7 +606,7 @@ public XmlItem namespaceInteger(Integer namespaceInteger) { * Get namespaceInteger * @return namespaceInteger **/ - @JsonProperty("namespace_integer") + @JsonProperty(value = "namespace_integer") @ApiModelProperty(example = "-2", value = "") public Integer getNamespaceInteger() { @@ -626,7 +626,7 @@ public XmlItem namespaceBoolean(Boolean namespaceBoolean) { * Get namespaceBoolean * @return namespaceBoolean **/ - @JsonProperty("namespace_boolean") + @JsonProperty(value = "namespace_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getNamespaceBoolean() { @@ -654,7 +654,7 @@ public XmlItem addNamespaceArrayItem(Integer namespaceArrayItem) { * Get namespaceArray * @return namespaceArray **/ - @JsonProperty("namespace_array") + @JsonProperty(value = "namespace_array") @ApiModelProperty(value = "") public List getNamespaceArray() { @@ -682,7 +682,7 @@ public XmlItem addNamespaceWrappedArrayItem(Integer namespaceWrappedArrayItem) { * Get namespaceWrappedArray * @return namespaceWrappedArray **/ - @JsonProperty("namespace_wrapped_array") + @JsonProperty(value = "namespace_wrapped_array") @ApiModelProperty(value = "") public List getNamespaceWrappedArray() { @@ -702,7 +702,7 @@ public XmlItem prefixNsString(String prefixNsString) { * Get prefixNsString * @return prefixNsString **/ - @JsonProperty("prefix_ns_string") + @JsonProperty(value = "prefix_ns_string") @ApiModelProperty(example = "string", value = "") public String getPrefixNsString() { @@ -722,7 +722,7 @@ public XmlItem prefixNsNumber(BigDecimal prefixNsNumber) { * Get prefixNsNumber * @return prefixNsNumber **/ - @JsonProperty("prefix_ns_number") + @JsonProperty(value = "prefix_ns_number") @ApiModelProperty(example = "1.234", value = "") @Valid public BigDecimal getPrefixNsNumber() { @@ -742,7 +742,7 @@ public XmlItem prefixNsInteger(Integer prefixNsInteger) { * Get prefixNsInteger * @return prefixNsInteger **/ - @JsonProperty("prefix_ns_integer") + @JsonProperty(value = "prefix_ns_integer") @ApiModelProperty(example = "-2", value = "") public Integer getPrefixNsInteger() { @@ -762,7 +762,7 @@ public XmlItem prefixNsBoolean(Boolean prefixNsBoolean) { * Get prefixNsBoolean * @return prefixNsBoolean **/ - @JsonProperty("prefix_ns_boolean") + @JsonProperty(value = "prefix_ns_boolean") @ApiModelProperty(example = "true", value = "") public Boolean getPrefixNsBoolean() { @@ -790,7 +790,7 @@ public XmlItem addPrefixNsArrayItem(Integer prefixNsArrayItem) { * Get prefixNsArray * @return prefixNsArray **/ - @JsonProperty("prefix_ns_array") + @JsonProperty(value = "prefix_ns_array") @ApiModelProperty(value = "") public List getPrefixNsArray() { @@ -818,7 +818,7 @@ public XmlItem addPrefixNsWrappedArrayItem(Integer prefixNsWrappedArrayItem) { * Get prefixNsWrappedArray * @return prefixNsWrappedArray **/ - @JsonProperty("prefix_ns_wrapped_array") + @JsonProperty(value = "prefix_ns_wrapped_array") @ApiModelProperty(value = "") public List getPrefixNsWrappedArray() { From 3929afff7d57ff9ed41e87f36f55756488f8d0cf Mon Sep 17 00:00:00 2001 From: Luca Mazzanti Date: Fri, 16 Apr 2021 16:03:07 +0200 Subject: [PATCH 022/186] [csharp][netcore-httpclient] Refactor of constructors (#9145) * Refactor on constructors Updated samples Fixed a bug of previous commit Refactor on constructors * Fixed indentation in source code * Updated samples * Marked constructors with obsolete * Updated obsolete constructors messages * Updated samples --- .../libraries/httpclient/ApiClient.mustache | 103 +++++++----------- .../libraries/httpclient/api.mustache | 91 +++------------- .../Org.OpenAPITools/Api/AnotherFakeApi.cs | 87 +++------------ .../src/Org.OpenAPITools/Api/DefaultApi.cs | 87 +++------------ .../src/Org.OpenAPITools/Api/FakeApi.cs | 87 +++------------ .../Api/FakeClassnameTags123Api.cs | 87 +++------------ .../src/Org.OpenAPITools/Api/PetApi.cs | 87 +++------------ .../src/Org.OpenAPITools/Api/StoreApi.cs | 87 +++------------ .../src/Org.OpenAPITools/Api/UserApi.cs | 87 +++------------ .../src/Org.OpenAPITools/Client/ApiClient.cs | 103 +++++++----------- 10 files changed, 214 insertions(+), 692 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache index bdc24c21a172..619bcb6bfbb5 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache @@ -168,9 +168,9 @@ namespace {{packageName}}.Client { private readonly String _baseUrl; - private readonly HttpClientHandler _httpClientHandler; - private readonly HttpClient _httpClient; - private readonly bool _disposeClient; + private readonly HttpClientHandler _httpClientHandler; + private readonly HttpClient _httpClient; + private readonly bool _disposeClient; /// /// Specifies the settings on a object. @@ -192,88 +192,63 @@ namespace {{packageName}}.Client /// /// Initializes a new instance of the , defaulting to the global configurations' base url. /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public ApiClient() : this({{packageName}}.Client.GlobalConfiguration.Instance.BasePath) - { + { } - + /// /// Initializes a new instance of the . /// /// The target service's base path in URL format. /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public ApiClient(String basePath) - { - if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); + { + if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); - _httpClientHandler = new HttpClientHandler(); - _httpClient = new HttpClient(_httpClientHandler, true); + _httpClientHandler = new HttpClientHandler(); + _httpClient = new HttpClient(_httpClientHandler, true); _disposeClient = true; - _baseUrl = basePath; + _baseUrl = basePath; } - + /// /// Initializes a new instance of the , defaulting to the global configurations' base url. /// /// An instance of HttpClient. - /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. - /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. - /// - public ApiClient(HttpClient client) : - this(client, {{packageName}}.Client.GlobalConfiguration.Instance.BasePath) - { - } - - /// - /// Initializes a new instance of the - /// - /// An instance of HttpClient. - /// The target service's base path in URL format. - /// - /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// An optional instance of HttpClientHandler that is used by HttpClient. + /// + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. - /// - public ApiClient(HttpClient client, String basePath) - { - if (client == null) throw new ArgumentNullException("client cannot be null"); - if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); - - _httpClient = client; - _baseUrl = basePath; + /// + public ApiClient(HttpClient client, HttpClientHandler handler = null) : + this(client, {{packageName}}.Client.GlobalConfiguration.Instance.BasePath, handler) + { } - - /// - /// Initializes a new instance of the , defaulting to the global configurations' base url. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// - public ApiClient(HttpClient client, HttpClientHandler handler) : - this(client, handler, {{packageName}}.Client.GlobalConfiguration.Instance.BasePath) - { - } - - /// + + /// /// Initializes a new instance of the . /// /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// The target service's base path in URL format. - /// - /// - public ApiClient(HttpClient client, HttpClientHandler handler, String basePath) - { - if (client == null) throw new ArgumentNullException("client cannot be null"); - if (handler == null) throw new ArgumentNullException("handler cannot be null"); - if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); - - _httpClientHandler = handler; - _httpClient = client; - _baseUrl = basePath; + /// The target service's base path in URL format. + /// An optional instance of HttpClientHandler that is used by HttpClient. + /// + /// + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. + /// + public ApiClient(HttpClient client, String basePath, HttpClientHandler handler = null) + { + if (client == null) throw new ArgumentNullException("client cannot be null"); + if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); + + _httpClientHandler = handler; + _httpClient = client; + _baseUrl = basePath; } /// diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/api.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/api.mustache index b71ebee0f81e..efa52cfbd418 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/api.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/api.mustache @@ -108,6 +108,7 @@ namespace {{packageName}}.{{apiPackage}} /// Initializes a new instance of the class. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public {{classname}}() : this((string)null) { } @@ -116,8 +117,9 @@ namespace {{packageName}}.{{apiPackage}} /// Initializes a new instance of the class. /// /// The target service's base path in URL format. - /// + /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public {{classname}}(String basePath) { this.Configuration = {{packageName}}.Client.Configuration.MergeConfigurations( @@ -138,6 +140,7 @@ namespace {{packageName}}.{{apiPackage}} /// An instance of Configuration. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public {{classname}}({{packageName}}.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); @@ -158,13 +161,14 @@ namespace {{packageName}}.{{apiPackage}} /// Initializes a new instance of the class. /// /// An instance of HttpClient. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public {{classname}}(HttpClient client) : this(client, (string)null) + public {{classname}}(HttpClient client, HttpClientHandler handler = null) : this(client, (string)null, handler) { } @@ -173,14 +177,15 @@ namespace {{packageName}}.{{apiPackage}} /// /// An instance of HttpClient. /// The target service's base path in URL format. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// - /// + /// /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public {{classname}}(HttpClient client, String basePath) + public {{classname}}(HttpClient client, String basePath, HttpClientHandler handler = null) { if (client == null) throw new ArgumentNullException("client"); @@ -188,7 +193,7 @@ namespace {{packageName}}.{{apiPackage}} {{packageName}}.Client.GlobalConfiguration.Instance, new {{packageName}}.Client.Configuration { BasePath = basePath } ); - this.ApiClient = new {{packageName}}.Client.ApiClient(client, this.Configuration.BasePath); + this.ApiClient = new {{packageName}}.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; {{#supportsAsync}} this.AsynchronousClient = this.ApiClient; @@ -201,85 +206,23 @@ namespace {{packageName}}.{{apiPackage}} /// /// An instance of HttpClient. /// An instance of Configuration. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public {{classname}}(HttpClient client, {{packageName}}.Client.Configuration configuration) + public {{classname}}(HttpClient client, {{packageName}}.Client.Configuration configuration, HttpClientHandler handler = null) { if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - - this.Configuration = {{packageName}}.Client.Configuration.MergeConfigurations( - {{packageName}}.Client.GlobalConfiguration.Instance, - configuration - ); - this.ApiClient = new {{packageName}}.Client.ApiClient(client, this.Configuration.BasePath); - this.Client = this.ApiClient; - {{#supportsAsync}} - this.AsynchronousClient = this.ApiClient; - {{/supportsAsync}} - ExceptionFactory = {{packageName}}.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// - /// - public {{classname}}(HttpClient client, HttpClientHandler handler) : this(client, handler, (string)null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// The target service's base path in URL format. - /// - /// - /// - public {{classname}}(HttpClient client, HttpClientHandler handler, String basePath) - { if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); - - this.Configuration = {{packageName}}.Client.Configuration.MergeConfigurations( - {{packageName}}.Client.GlobalConfiguration.Instance, - new {{packageName}}.Client.Configuration { BasePath = basePath } - ); - this.ApiClient = new {{packageName}}.Client.ApiClient(client, handler, this.Configuration.BasePath); - this.Client = this.ApiClient; - {{#supportsAsync}} - this.AsynchronousClient = this.ApiClient; - {{/supportsAsync}} - this.ExceptionFactory = {{packageName}}.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class using Configuration object. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// An instance of Configuration. - /// - /// - public {{classname}}(HttpClient client, HttpClientHandler handler, {{packageName}}.Client.Configuration configuration) - { - if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); this.Configuration = {{packageName}}.Client.Configuration.MergeConfigurations( {{packageName}}.Client.GlobalConfiguration.Instance, configuration ); - this.ApiClient = new {{packageName}}.Client.ApiClient(client, handler, this.Configuration.BasePath); + this.ApiClient = new {{packageName}}.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; {{#supportsAsync}} this.AsynchronousClient = this.ApiClient; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs index 6ee69d73cd39..83a938cf365d 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -102,6 +102,7 @@ public partial class AnotherFakeApi : IDisposable, IAnotherFakeApi /// Initializes a new instance of the class. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public AnotherFakeApi() : this((string)null) { } @@ -110,8 +111,9 @@ public AnotherFakeApi() : this((string)null) /// Initializes a new instance of the class. /// /// The target service's base path in URL format. - /// + /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public AnotherFakeApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -130,6 +132,7 @@ public AnotherFakeApi(String basePath) /// An instance of Configuration. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public AnotherFakeApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); @@ -148,13 +151,14 @@ public AnotherFakeApi(Org.OpenAPITools.Client.Configuration configuration) /// Initializes a new instance of the class. /// /// An instance of HttpClient. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public AnotherFakeApi(HttpClient client) : this(client, (string)null) + public AnotherFakeApi(HttpClient client, HttpClientHandler handler = null) : this(client, (string)null, handler) { } @@ -163,14 +167,15 @@ public AnotherFakeApi(HttpClient client) : this(client, (string)null) /// /// An instance of HttpClient. /// The target service's base path in URL format. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// - /// + /// /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public AnotherFakeApi(HttpClient client, String basePath) + public AnotherFakeApi(HttpClient client, String basePath, HttpClientHandler handler = null) { if (client == null) throw new ArgumentNullException("client"); @@ -178,7 +183,7 @@ public AnotherFakeApi(HttpClient client, String basePath) Org.OpenAPITools.Client.GlobalConfiguration.Instance, new Org.OpenAPITools.Client.Configuration { BasePath = basePath } ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; @@ -189,81 +194,23 @@ public AnotherFakeApi(HttpClient client, String basePath) /// /// An instance of HttpClient. /// An instance of Configuration. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public AnotherFakeApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration) + public AnotherFakeApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration, HttpClientHandler handler = null) { if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - configuration - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// - /// - public AnotherFakeApi(HttpClient client, HttpClientHandler handler) : this(client, handler, (string)null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// The target service's base path in URL format. - /// - /// - /// - public AnotherFakeApi(HttpClient client, HttpClientHandler handler, String basePath) - { if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - new Org.OpenAPITools.Client.Configuration { BasePath = basePath } - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class using Configuration object. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// An instance of Configuration. - /// - /// - public AnotherFakeApi(HttpClient client, HttpClientHandler handler, Org.OpenAPITools.Client.Configuration configuration) - { - if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( Org.OpenAPITools.Client.GlobalConfiguration.Instance, configuration ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/DefaultApi.cs index f79f629815a8..84b91a9a1712 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -95,6 +95,7 @@ public partial class DefaultApi : IDisposable, IDefaultApi /// Initializes a new instance of the class. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public DefaultApi() : this((string)null) { } @@ -103,8 +104,9 @@ public DefaultApi() : this((string)null) /// Initializes a new instance of the class. /// /// The target service's base path in URL format. - /// + /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public DefaultApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -123,6 +125,7 @@ public DefaultApi(String basePath) /// An instance of Configuration. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public DefaultApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); @@ -141,13 +144,14 @@ public DefaultApi(Org.OpenAPITools.Client.Configuration configuration) /// Initializes a new instance of the class. /// /// An instance of HttpClient. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public DefaultApi(HttpClient client) : this(client, (string)null) + public DefaultApi(HttpClient client, HttpClientHandler handler = null) : this(client, (string)null, handler) { } @@ -156,14 +160,15 @@ public DefaultApi(HttpClient client) : this(client, (string)null) /// /// An instance of HttpClient. /// The target service's base path in URL format. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// - /// + /// /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public DefaultApi(HttpClient client, String basePath) + public DefaultApi(HttpClient client, String basePath, HttpClientHandler handler = null) { if (client == null) throw new ArgumentNullException("client"); @@ -171,7 +176,7 @@ public DefaultApi(HttpClient client, String basePath) Org.OpenAPITools.Client.GlobalConfiguration.Instance, new Org.OpenAPITools.Client.Configuration { BasePath = basePath } ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; @@ -182,81 +187,23 @@ public DefaultApi(HttpClient client, String basePath) /// /// An instance of HttpClient. /// An instance of Configuration. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public DefaultApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration) + public DefaultApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration, HttpClientHandler handler = null) { if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - configuration - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// - /// - public DefaultApi(HttpClient client, HttpClientHandler handler) : this(client, handler, (string)null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// The target service's base path in URL format. - /// - /// - /// - public DefaultApi(HttpClient client, HttpClientHandler handler, String basePath) - { if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - new Org.OpenAPITools.Client.Configuration { BasePath = basePath } - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class using Configuration object. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// An instance of Configuration. - /// - /// - public DefaultApi(HttpClient client, HttpClientHandler handler, Org.OpenAPITools.Client.Configuration configuration) - { - if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( Org.OpenAPITools.Client.GlobalConfiguration.Instance, configuration ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs index 96d3df634d2f..305a59a6b5bd 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs @@ -819,6 +819,7 @@ public partial class FakeApi : IDisposable, IFakeApi /// Initializes a new instance of the class. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeApi() : this((string)null) { } @@ -827,8 +828,9 @@ public FakeApi() : this((string)null) /// Initializes a new instance of the class. /// /// The target service's base path in URL format. - /// + /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -847,6 +849,7 @@ public FakeApi(String basePath) /// An instance of Configuration. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); @@ -865,13 +868,14 @@ public FakeApi(Org.OpenAPITools.Client.Configuration configuration) /// Initializes a new instance of the class. /// /// An instance of HttpClient. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public FakeApi(HttpClient client) : this(client, (string)null) + public FakeApi(HttpClient client, HttpClientHandler handler = null) : this(client, (string)null, handler) { } @@ -880,14 +884,15 @@ public FakeApi(HttpClient client) : this(client, (string)null) /// /// An instance of HttpClient. /// The target service's base path in URL format. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// - /// + /// /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public FakeApi(HttpClient client, String basePath) + public FakeApi(HttpClient client, String basePath, HttpClientHandler handler = null) { if (client == null) throw new ArgumentNullException("client"); @@ -895,7 +900,7 @@ public FakeApi(HttpClient client, String basePath) Org.OpenAPITools.Client.GlobalConfiguration.Instance, new Org.OpenAPITools.Client.Configuration { BasePath = basePath } ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; @@ -906,81 +911,23 @@ public FakeApi(HttpClient client, String basePath) /// /// An instance of HttpClient. /// An instance of Configuration. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public FakeApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration) + public FakeApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration, HttpClientHandler handler = null) { if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - configuration - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// - /// - public FakeApi(HttpClient client, HttpClientHandler handler) : this(client, handler, (string)null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// The target service's base path in URL format. - /// - /// - /// - public FakeApi(HttpClient client, HttpClientHandler handler, String basePath) - { if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - new Org.OpenAPITools.Client.Configuration { BasePath = basePath } - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class using Configuration object. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// An instance of Configuration. - /// - /// - public FakeApi(HttpClient client, HttpClientHandler handler, Org.OpenAPITools.Client.Configuration configuration) - { - if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( Org.OpenAPITools.Client.GlobalConfiguration.Instance, configuration ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs index 1aa57d4b4e26..f9c9d3b33cea 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs @@ -102,6 +102,7 @@ public partial class FakeClassnameTags123Api : IDisposable, IFakeClassnameTags12 /// Initializes a new instance of the class. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeClassnameTags123Api() : this((string)null) { } @@ -110,8 +111,9 @@ public FakeClassnameTags123Api() : this((string)null) /// Initializes a new instance of the class. /// /// The target service's base path in URL format. - /// + /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeClassnameTags123Api(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -130,6 +132,7 @@ public FakeClassnameTags123Api(String basePath) /// An instance of Configuration. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeClassnameTags123Api(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); @@ -148,13 +151,14 @@ public FakeClassnameTags123Api(Org.OpenAPITools.Client.Configuration configurati /// Initializes a new instance of the class. /// /// An instance of HttpClient. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public FakeClassnameTags123Api(HttpClient client) : this(client, (string)null) + public FakeClassnameTags123Api(HttpClient client, HttpClientHandler handler = null) : this(client, (string)null, handler) { } @@ -163,14 +167,15 @@ public FakeClassnameTags123Api(HttpClient client) : this(client, (string)null) /// /// An instance of HttpClient. /// The target service's base path in URL format. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// - /// + /// /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public FakeClassnameTags123Api(HttpClient client, String basePath) + public FakeClassnameTags123Api(HttpClient client, String basePath, HttpClientHandler handler = null) { if (client == null) throw new ArgumentNullException("client"); @@ -178,7 +183,7 @@ public FakeClassnameTags123Api(HttpClient client, String basePath) Org.OpenAPITools.Client.GlobalConfiguration.Instance, new Org.OpenAPITools.Client.Configuration { BasePath = basePath } ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; @@ -189,81 +194,23 @@ public FakeClassnameTags123Api(HttpClient client, String basePath) /// /// An instance of HttpClient. /// An instance of Configuration. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public FakeClassnameTags123Api(HttpClient client, Org.OpenAPITools.Client.Configuration configuration) + public FakeClassnameTags123Api(HttpClient client, Org.OpenAPITools.Client.Configuration configuration, HttpClientHandler handler = null) { if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - configuration - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// - /// - public FakeClassnameTags123Api(HttpClient client, HttpClientHandler handler) : this(client, handler, (string)null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// The target service's base path in URL format. - /// - /// - /// - public FakeClassnameTags123Api(HttpClient client, HttpClientHandler handler, String basePath) - { if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - new Org.OpenAPITools.Client.Configuration { BasePath = basePath } - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class using Configuration object. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// An instance of Configuration. - /// - /// - public FakeClassnameTags123Api(HttpClient client, HttpClientHandler handler, Org.OpenAPITools.Client.Configuration configuration) - { - if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( Org.OpenAPITools.Client.GlobalConfiguration.Instance, configuration ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs index ab82da44ef0f..b43e10ad1ffb 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs @@ -464,6 +464,7 @@ public partial class PetApi : IDisposable, IPetApi /// Initializes a new instance of the class. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public PetApi() : this((string)null) { } @@ -472,8 +473,9 @@ public PetApi() : this((string)null) /// Initializes a new instance of the class. /// /// The target service's base path in URL format. - /// + /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public PetApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -492,6 +494,7 @@ public PetApi(String basePath) /// An instance of Configuration. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public PetApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); @@ -510,13 +513,14 @@ public PetApi(Org.OpenAPITools.Client.Configuration configuration) /// Initializes a new instance of the class. /// /// An instance of HttpClient. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public PetApi(HttpClient client) : this(client, (string)null) + public PetApi(HttpClient client, HttpClientHandler handler = null) : this(client, (string)null, handler) { } @@ -525,14 +529,15 @@ public PetApi(HttpClient client) : this(client, (string)null) /// /// An instance of HttpClient. /// The target service's base path in URL format. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// - /// + /// /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public PetApi(HttpClient client, String basePath) + public PetApi(HttpClient client, String basePath, HttpClientHandler handler = null) { if (client == null) throw new ArgumentNullException("client"); @@ -540,7 +545,7 @@ public PetApi(HttpClient client, String basePath) Org.OpenAPITools.Client.GlobalConfiguration.Instance, new Org.OpenAPITools.Client.Configuration { BasePath = basePath } ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; @@ -551,81 +556,23 @@ public PetApi(HttpClient client, String basePath) /// /// An instance of HttpClient. /// An instance of Configuration. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public PetApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration) + public PetApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration, HttpClientHandler handler = null) { if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - configuration - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// - /// - public PetApi(HttpClient client, HttpClientHandler handler) : this(client, handler, (string)null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// The target service's base path in URL format. - /// - /// - /// - public PetApi(HttpClient client, HttpClientHandler handler, String basePath) - { if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - new Org.OpenAPITools.Client.Configuration { BasePath = basePath } - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class using Configuration object. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// An instance of Configuration. - /// - /// - public PetApi(HttpClient client, HttpClientHandler handler, Org.OpenAPITools.Client.Configuration configuration) - { - if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( Org.OpenAPITools.Client.GlobalConfiguration.Instance, configuration ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/StoreApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/StoreApi.cs index 760576e1ec06..f174edf50628 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/StoreApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/StoreApi.cs @@ -227,6 +227,7 @@ public partial class StoreApi : IDisposable, IStoreApi /// Initializes a new instance of the class. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public StoreApi() : this((string)null) { } @@ -235,8 +236,9 @@ public StoreApi() : this((string)null) /// Initializes a new instance of the class. /// /// The target service's base path in URL format. - /// + /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public StoreApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -255,6 +257,7 @@ public StoreApi(String basePath) /// An instance of Configuration. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public StoreApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); @@ -273,13 +276,14 @@ public StoreApi(Org.OpenAPITools.Client.Configuration configuration) /// Initializes a new instance of the class. /// /// An instance of HttpClient. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public StoreApi(HttpClient client) : this(client, (string)null) + public StoreApi(HttpClient client, HttpClientHandler handler = null) : this(client, (string)null, handler) { } @@ -288,14 +292,15 @@ public StoreApi(HttpClient client) : this(client, (string)null) /// /// An instance of HttpClient. /// The target service's base path in URL format. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// - /// + /// /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public StoreApi(HttpClient client, String basePath) + public StoreApi(HttpClient client, String basePath, HttpClientHandler handler = null) { if (client == null) throw new ArgumentNullException("client"); @@ -303,7 +308,7 @@ public StoreApi(HttpClient client, String basePath) Org.OpenAPITools.Client.GlobalConfiguration.Instance, new Org.OpenAPITools.Client.Configuration { BasePath = basePath } ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; @@ -314,81 +319,23 @@ public StoreApi(HttpClient client, String basePath) /// /// An instance of HttpClient. /// An instance of Configuration. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public StoreApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration) + public StoreApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration, HttpClientHandler handler = null) { if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - configuration - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// - /// - public StoreApi(HttpClient client, HttpClientHandler handler) : this(client, handler, (string)null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// The target service's base path in URL format. - /// - /// - /// - public StoreApi(HttpClient client, HttpClientHandler handler, String basePath) - { if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - new Org.OpenAPITools.Client.Configuration { BasePath = basePath } - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class using Configuration object. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// An instance of Configuration. - /// - /// - public StoreApi(HttpClient client, HttpClientHandler handler, Org.OpenAPITools.Client.Configuration configuration) - { - if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( Org.OpenAPITools.Client.GlobalConfiguration.Instance, configuration ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/UserApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/UserApi.cs index c1174daeadfb..0426a00745eb 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/UserApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/UserApi.cs @@ -399,6 +399,7 @@ public partial class UserApi : IDisposable, IUserApi /// Initializes a new instance of the class. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public UserApi() : this((string)null) { } @@ -407,8 +408,9 @@ public UserApi() : this((string)null) /// Initializes a new instance of the class. /// /// The target service's base path in URL format. - /// + /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public UserApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -427,6 +429,7 @@ public UserApi(String basePath) /// An instance of Configuration. /// /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public UserApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); @@ -445,13 +448,14 @@ public UserApi(Org.OpenAPITools.Client.Configuration configuration) /// Initializes a new instance of the class. /// /// An instance of HttpClient. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public UserApi(HttpClient client) : this(client, (string)null) + public UserApi(HttpClient client, HttpClientHandler handler = null) : this(client, (string)null, handler) { } @@ -460,14 +464,15 @@ public UserApi(HttpClient client) : this(client, (string)null) /// /// An instance of HttpClient. /// The target service's base path in URL format. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// - /// + /// /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public UserApi(HttpClient client, String basePath) + public UserApi(HttpClient client, String basePath, HttpClientHandler handler = null) { if (client == null) throw new ArgumentNullException("client"); @@ -475,7 +480,7 @@ public UserApi(HttpClient client, String basePath) Org.OpenAPITools.Client.GlobalConfiguration.Instance, new Org.OpenAPITools.Client.Configuration { BasePath = basePath } ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; @@ -486,81 +491,23 @@ public UserApi(HttpClient client, String basePath) /// /// An instance of HttpClient. /// An instance of Configuration. + /// An optional instance of HttpClientHandler that is used by HttpClient. /// /// /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. /// - public UserApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration) + public UserApi(HttpClient client, Org.OpenAPITools.Client.Configuration configuration, HttpClientHandler handler = null) { if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - configuration - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// - /// - public UserApi(HttpClient client, HttpClientHandler handler) : this(client, handler, (string)null) - { - } - - /// - /// Initializes a new instance of the class. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// The target service's base path in URL format. - /// - /// - /// - public UserApi(HttpClient client, HttpClientHandler handler, String basePath) - { if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); - - this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( - Org.OpenAPITools.Client.GlobalConfiguration.Instance, - new Org.OpenAPITools.Client.Configuration { BasePath = basePath } - ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); - this.Client = this.ApiClient; - this.AsynchronousClient = this.ApiClient; - this.ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class using Configuration object. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// An instance of Configuration. - /// - /// - public UserApi(HttpClient client, HttpClientHandler handler, Org.OpenAPITools.Client.Configuration configuration) - { - if (configuration == null) throw new ArgumentNullException("configuration"); - if (client == null) throw new ArgumentNullException("client"); - if (handler == null) throw new ArgumentNullException("handler"); this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( Org.OpenAPITools.Client.GlobalConfiguration.Instance, configuration ); - this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, handler, this.Configuration.BasePath); + this.ApiClient = new Org.OpenAPITools.Client.ApiClient(client, this.Configuration.BasePath, handler); this.Client = this.ApiClient; this.AsynchronousClient = this.ApiClient; ExceptionFactory = Org.OpenAPITools.Client.Configuration.DefaultExceptionFactory; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs index 6cf20d594436..26695dd48d45 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs @@ -168,9 +168,9 @@ public partial class ApiClient : IDisposable, ISynchronousClient, IAsynchronousC { private readonly String _baseUrl; - private readonly HttpClientHandler _httpClientHandler; - private readonly HttpClient _httpClient; - private readonly bool _disposeClient; + private readonly HttpClientHandler _httpClientHandler; + private readonly HttpClient _httpClient; + private readonly bool _disposeClient; /// /// Specifies the settings on a object. @@ -192,88 +192,63 @@ public partial class ApiClient : IDisposable, ISynchronousClient, IAsynchronousC /// /// Initializes a new instance of the , defaulting to the global configurations' base url. /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public ApiClient() : this(Org.OpenAPITools.Client.GlobalConfiguration.Instance.BasePath) - { + { } - + /// /// Initializes a new instance of the . /// /// The target service's base path in URL format. /// + [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public ApiClient(String basePath) - { - if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); + { + if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); - _httpClientHandler = new HttpClientHandler(); - _httpClient = new HttpClient(_httpClientHandler, true); + _httpClientHandler = new HttpClientHandler(); + _httpClient = new HttpClient(_httpClientHandler, true); _disposeClient = true; - _baseUrl = basePath; + _baseUrl = basePath; } - + /// /// Initializes a new instance of the , defaulting to the global configurations' base url. /// /// An instance of HttpClient. - /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. - /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. - /// - public ApiClient(HttpClient client) : - this(client, Org.OpenAPITools.Client.GlobalConfiguration.Instance.BasePath) - { - } - - /// - /// Initializes a new instance of the - /// - /// An instance of HttpClient. - /// The target service's base path in URL format. - /// - /// - /// - /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// An optional instance of HttpClientHandler that is used by HttpClient. + /// + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. - /// - public ApiClient(HttpClient client, String basePath) - { - if (client == null) throw new ArgumentNullException("client cannot be null"); - if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); - - _httpClient = client; - _baseUrl = basePath; + /// + public ApiClient(HttpClient client, HttpClientHandler handler = null) : + this(client, Org.OpenAPITools.Client.GlobalConfiguration.Instance.BasePath, handler) + { } - - /// - /// Initializes a new instance of the , defaulting to the global configurations' base url. - /// - /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// - public ApiClient(HttpClient client, HttpClientHandler handler) : - this(client, handler, Org.OpenAPITools.Client.GlobalConfiguration.Instance.BasePath) - { - } - - /// + + /// /// Initializes a new instance of the . /// /// An instance of HttpClient. - /// An instance of HttpClientHandler that is used by HttpClient. - /// The target service's base path in URL format. - /// - /// - public ApiClient(HttpClient client, HttpClientHandler handler, String basePath) - { - if (client == null) throw new ArgumentNullException("client cannot be null"); - if (handler == null) throw new ArgumentNullException("handler cannot be null"); - if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); - - _httpClientHandler = handler; - _httpClient = client; - _baseUrl = basePath; + /// The target service's base path in URL format. + /// An optional instance of HttpClientHandler that is used by HttpClient. + /// + /// + /// + /// Some configuration settings will not be applied without passing an HttpClientHandler. + /// The features affected are: Setting and Retrieving Cookies, Client Certificates, Proxy settings. + /// + public ApiClient(HttpClient client, String basePath, HttpClientHandler handler = null) + { + if (client == null) throw new ArgumentNullException("client cannot be null"); + if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); + + _httpClientHandler = handler; + _httpClient = client; + _baseUrl = basePath; } /// From b5dac429590f24d72cc0a8b87727ca3fa86b8f07 Mon Sep 17 00:00:00 2001 From: Cody Mikol Date: Fri, 16 Apr 2021 10:24:10 -0400 Subject: [PATCH 023/186] feat(adapter): add BigDecimal kotlin support (#8880) * feat(adapter): add BigDecimal kotlin support this allows the kotlin client generator to support BigDecimal values Fixes #7196 * update samples Co-authored-by: William Cheng --- .../languages/KotlinClientCodegen.java | 2 ++ .../BigDecimalAdapter.kt.mustache | 22 +++++++++++++++---- .../BigIntegerAdapter.kt.mustache | 21 +++++++++++++++--- .../infrastructure/Serializer.kt.mustache | 2 ++ .../codegen/DefaultGeneratorTest.java | 8 +++---- .../.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ .../.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ .../kotlin-nonpublic/.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ .../kotlin-nullable/.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ .../kotlin-okhttp3/.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 2 -- .../infrastructure/BigIntegerAdapter.kt | 1 - .../.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ .../kotlin-retrofit2/.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ .../kotlin-string/.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ .../.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ .../.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ .../petstore/kotlin/.openapi-generator/FILES | 2 ++ .../infrastructure/BigDecimalAdapter.kt | 17 ++++++++++++++ .../infrastructure/BigIntegerAdapter.kt | 17 ++++++++++++++ .../client/infrastructure/Serializer.kt | 2 ++ 51 files changed, 462 insertions(+), 14 deletions(-) create mode 100644 samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt create mode 100644 samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt create mode 100644 samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt create mode 100644 samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt create mode 100644 samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt create mode 100644 samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt create mode 100644 samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt create mode 100644 samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt create mode 100644 samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt create mode 100644 samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt create mode 100644 samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt create mode 100644 samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index 17afe550c709..a083965a0a39 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -463,6 +463,8 @@ private void addSupportingSerializerAdapters(final String infrastructureFolder) supportingFiles.add(new SupportingFile("jvm-common/infrastructure/LocalDateAdapter.kt.mustache", infrastructureFolder, "LocalDateAdapter.kt")); supportingFiles.add(new SupportingFile("jvm-common/infrastructure/LocalDateTimeAdapter.kt.mustache", infrastructureFolder, "LocalDateTimeAdapter.kt")); supportingFiles.add(new SupportingFile("jvm-common/infrastructure/OffsetDateTimeAdapter.kt.mustache", infrastructureFolder, "OffsetDateTimeAdapter.kt")); + supportingFiles.add(new SupportingFile("jvm-common/infrastructure/BigDecimalAdapter.kt.mustache", infrastructureFolder, "BigDecimalAdapter.kt")); + supportingFiles.add(new SupportingFile("jvm-common/infrastructure/BigIntegerAdapter.kt.mustache", infrastructureFolder, "BigIntegerAdapter.kt")); break; case gson: diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/BigDecimalAdapter.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/BigDecimalAdapter.kt.mustache index 5efc613a20e5..609d15a34d3c 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/BigDecimalAdapter.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/BigDecimalAdapter.kt.mustache @@ -1,5 +1,6 @@ package {{packageName}}.infrastructure +{{#kotlinx_serialization}} import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializer import kotlinx.serialization.encoding.Decoder @@ -7,13 +8,26 @@ import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.SerialDescriptor +{{/kotlinx_serialization}} +{{#moshi}} +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +{{/moshi}} import java.math.BigDecimal -@Serializer(forClass = BigDecimal::class) +{{#kotlinx_serialization}}@Serializer(forClass = BigDecimal::class) object BigDecimalAdapter : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING) - override fun deserialize(decoder: Decoder): BigDecimal = BigDecimal(decoder.decodeString()) - override fun serialize(encoder: Encoder, value: BigDecimal) = encoder.encodeString(value.toPlainString()) -} \ No newline at end of file +}{{/kotlinx_serialization}}{{#moshi}}{{#nonPublicApi}}internal {{/nonPublicApi}}class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +}{{/moshi}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/BigIntegerAdapter.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/BigIntegerAdapter.kt.mustache index bd2b4d3c8e9b..2924e8f63a2b 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/BigIntegerAdapter.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/BigIntegerAdapter.kt.mustache @@ -1,5 +1,6 @@ package {{packageName}}.infrastructure +{{#kotlinx_serialization}} import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializer import kotlinx.serialization.encoding.Decoder @@ -7,12 +8,16 @@ import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.SerialDescriptor +{{/kotlinx_serialization}} +{{#moshi}} +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +{{/moshi}} import java.math.BigInteger -@Serializer(forClass = BigInteger::class) +{{#kotlinx_serialization}}@Serializer(forClass = BigInteger::class) object BigIntegerAdapter : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigInteger", PrimitiveKind.STRING) - override fun deserialize(decoder: Decoder): BigInteger { return BigInteger(decoder.decodeString()) } @@ -20,4 +25,14 @@ object BigIntegerAdapter : KSerializer { override fun serialize(encoder: Encoder, value: BigInteger) { encoder.encodeString(value.toString()) } -} \ No newline at end of file +}{{/kotlinx_serialization}}{{#moshi}}{{#nonPublicApi}}internal {{/nonPublicApi}}class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +}{{/moshi}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache index e9ed019095e0..beef3fc2bf38 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache @@ -63,6 +63,8 @@ import java.util.concurrent.atomic.AtomicLong {{^moshiCodeGen}} .add(KotlinJsonAdapterFactory()) {{/moshiCodeGen}} + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java index 1dee6ced3017..7e6a986bb324 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java @@ -459,7 +459,7 @@ public void testBuiltinLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 24); + Assert.assertEquals(files.size(), 26); // Generator should report a library templated file as a generated file TestUtils.ensureContainsFile(files, output, "src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt"); @@ -501,7 +501,7 @@ public void testBuiltinNonLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 24); + Assert.assertEquals(files.size(), 26); // Generator should report README.md as a generated file TestUtils.ensureContainsFile(files, output, "README.md"); @@ -566,7 +566,7 @@ public void testCustomLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 24); + Assert.assertEquals(files.size(), 26); // Generator should report a library templated file as a generated file TestUtils.ensureContainsFile(files, output, "src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt"); @@ -620,7 +620,7 @@ public void testCustomNonLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 24); + Assert.assertEquals(files.size(), 26); // Generator should report README.md as a generated file TestUtils.ensureContainsFile(files, output, "README.md"); diff --git a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES index 8182d28d1951..3f4610174ccc 100644 --- a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES @@ -21,6 +21,8 @@ src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..fb2c972cf8d4 --- /dev/null +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..4b6963110c9e --- /dev/null +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 9a45b67d9b1a..3d0a6c32566a 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -13,6 +13,8 @@ object Serializer { .add(UUIDAdapter()) .add(ByteArrayAdapter()) .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES index 8182d28d1951..3f4610174ccc 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES @@ -21,6 +21,8 @@ src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..fb2c972cf8d4 --- /dev/null +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..4b6963110c9e --- /dev/null +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 25447c818e66..1ac7a1908fa6 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -11,6 +11,8 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES index 8182d28d1951..3f4610174ccc 100644 --- a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES @@ -21,6 +21,8 @@ src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..8aa11ef98577 --- /dev/null +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +internal class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..fbd0beed7f28 --- /dev/null +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +internal class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 7265f7591428..54e21400c43f 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -13,6 +13,8 @@ internal object Serializer { .add(UUIDAdapter()) .add(ByteArrayAdapter()) .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES b/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES index 8182d28d1951..3f4610174ccc 100644 --- a/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES @@ -21,6 +21,8 @@ src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..fb2c972cf8d4 --- /dev/null +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..4b6963110c9e --- /dev/null +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 9a45b67d9b1a..3d0a6c32566a 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -13,6 +13,8 @@ object Serializer { .add(UUIDAdapter()) .add(ByteArrayAdapter()) .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES index 8182d28d1951..3f4610174ccc 100644 --- a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES @@ -21,6 +21,8 @@ src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..fb2c972cf8d4 --- /dev/null +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..4b6963110c9e --- /dev/null +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 9a45b67d9b1a..3d0a6c32566a 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -13,6 +13,8 @@ object Serializer { .add(UUIDAdapter()) .add(ByteArrayAdapter()) .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt index cf19653787d5..f0bedb18ea86 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -12,8 +12,6 @@ import java.math.BigDecimal @Serializer(forClass = BigDecimal::class) object BigDecimalAdapter : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING) - override fun deserialize(decoder: Decoder): BigDecimal = BigDecimal(decoder.decodeString()) - override fun serialize(encoder: Encoder, value: BigDecimal) = encoder.encodeString(value.toPlainString()) } \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt index a904de643a74..ca8cc56f0643 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -12,7 +12,6 @@ import java.math.BigInteger @Serializer(forClass = BigInteger::class) object BigIntegerAdapter : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigInteger", PrimitiveKind.STRING) - override fun deserialize(decoder: Decoder): BigInteger { return BigInteger(decoder.decodeString()) } diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/FILES b/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/FILES index 11915fbe03f5..871f0c1d09cb 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/FILES @@ -22,6 +22,8 @@ src/main/kotlin/org/openapitools/client/auth/OAuth.kt src/main/kotlin/org/openapitools/client/auth/OAuthFlow.kt src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/CollectionFormats.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..fb2c972cf8d4 --- /dev/null +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..4b6963110c9e --- /dev/null +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 9a45b67d9b1a..3d0a6c32566a 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -13,6 +13,8 @@ object Serializer { .add(UUIDAdapter()) .add(ByteArrayAdapter()) .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/samples/client/petstore/kotlin-retrofit2/.openapi-generator/FILES b/samples/client/petstore/kotlin-retrofit2/.openapi-generator/FILES index 11915fbe03f5..871f0c1d09cb 100644 --- a/samples/client/petstore/kotlin-retrofit2/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-retrofit2/.openapi-generator/FILES @@ -22,6 +22,8 @@ src/main/kotlin/org/openapitools/client/auth/OAuth.kt src/main/kotlin/org/openapitools/client/auth/OAuthFlow.kt src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/CollectionFormats.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..fb2c972cf8d4 --- /dev/null +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..4b6963110c9e --- /dev/null +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 9a45b67d9b1a..3d0a6c32566a 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -13,6 +13,8 @@ object Serializer { .add(UUIDAdapter()) .add(ByteArrayAdapter()) .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/samples/client/petstore/kotlin-string/.openapi-generator/FILES b/samples/client/petstore/kotlin-string/.openapi-generator/FILES index 8182d28d1951..3f4610174ccc 100644 --- a/samples/client/petstore/kotlin-string/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-string/.openapi-generator/FILES @@ -21,6 +21,8 @@ src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..fb2c972cf8d4 --- /dev/null +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..4b6963110c9e --- /dev/null +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 9a45b67d9b1a..3d0a6c32566a 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -13,6 +13,8 @@ object Serializer { .add(UUIDAdapter()) .add(ByteArrayAdapter()) .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES index 8182d28d1951..3f4610174ccc 100644 --- a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES @@ -21,6 +21,8 @@ src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..fb2c972cf8d4 --- /dev/null +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..4b6963110c9e --- /dev/null +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 9a45b67d9b1a..3d0a6c32566a 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -13,6 +13,8 @@ object Serializer { .add(UUIDAdapter()) .add(ByteArrayAdapter()) .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES index 1b9665590f2e..7619fbe8f8eb 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES @@ -12,6 +12,8 @@ src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..fb2c972cf8d4 --- /dev/null +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..4b6963110c9e --- /dev/null +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 9a45b67d9b1a..3d0a6c32566a 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -13,6 +13,8 @@ object Serializer { .add(UUIDAdapter()) .add(ByteArrayAdapter()) .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { diff --git a/samples/client/petstore/kotlin/.openapi-generator/FILES b/samples/client/petstore/kotlin/.openapi-generator/FILES index 8182d28d1951..3f4610174ccc 100644 --- a/samples/client/petstore/kotlin/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin/.openapi-generator/FILES @@ -21,6 +21,8 @@ src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt +src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt src/main/kotlin/org/openapitools/client/infrastructure/LocalDateAdapter.kt diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt new file mode 100644 index 000000000000..fb2c972cf8d4 --- /dev/null +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigDecimal + +class BigDecimalAdapter { + @ToJson + fun toJson(value: BigDecimal): String { + return value.toPlainString() + } + + @FromJson + fun fromJson(value: String): BigDecimal { + return BigDecimal(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt new file mode 100644 index 000000000000..4b6963110c9e --- /dev/null +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt @@ -0,0 +1,17 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.math.BigInteger + +class BigIntegerAdapter { + @ToJson + fun toJson(value: BigInteger): String { + return value.toString() + } + + @FromJson + fun fromJson(value: String): BigInteger { + return BigInteger(value) + } +} \ No newline at end of file diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 9a45b67d9b1a..3d0a6c32566a 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -13,6 +13,8 @@ object Serializer { .add(UUIDAdapter()) .add(ByteArrayAdapter()) .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .add(BigIntegerAdapter()) @JvmStatic val moshi: Moshi by lazy { From 032911990d6f7f60a23b2547bbbdc7608fa6b731 Mon Sep 17 00:00:00 2001 From: Emmanuel Roux <1926413+EmmanuelRoux@users.noreply.github.com> Date: Fri, 16 Apr 2021 16:54:58 +0200 Subject: [PATCH 024/186] typescript-angular: Fix Cannot read property 'apiKey' of undefined (#9260) * fix #9259 * avoid optional chaining operator --- .../resources/typescript-angular/configuration.mustache | 6 +++++- .../builds/default/configuration.ts | 6 +++++- .../builds/with-npm/configuration.ts | 6 +++++- .../builds/default/configuration.ts | 6 +++++- .../builds/with-npm/configuration.ts | 6 +++++- .../builds/default/configuration.ts | 6 +++++- .../builds/with-npm/configuration.ts | 6 +++++- .../builds/default/configuration.ts | 6 +++++- .../builds/with-npm/configuration.ts | 6 +++++- .../builds/default/configuration.ts | 6 +++++- .../builds/with-npm/configuration.ts | 6 +++++- .../builds/default/configuration.ts | 6 +++++- .../builds/with-npm/configuration.ts | 6 +++++- .../builds/single-request-parameter/configuration.ts | 6 +++++- .../builds/with-npm/configuration.ts | 6 +++++- .../builds/with-prefixed-module-name/configuration.ts | 6 +++++- .../builds/default/configuration.ts | 6 +++++- .../builds/default/configuration.ts | 6 +++++- .../builds/with-npm/configuration.ts | 6 +++++- 19 files changed, 95 insertions(+), 19 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-angular/configuration.mustache b/modules/openapi-generator/src/main/resources/typescript-angular/configuration.mustache index 02632f0c64c7..40aaec67f477 100644 --- a/modules/openapi-generator/src/main/resources/typescript-angular/configuration.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-angular/configuration.mustache @@ -64,7 +64,11 @@ export class {{configurationClassName}} { {{#isApiKey}} this.credentials['{{name}}'] = () => { {{! Fallback behaviour may be removed for 5.0 release. See #5062 }} - return this.apiKeys['{{name}}'] || this.apiKeys['{{keyParamName}}']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['{{name}}'] || this.apiKeys['{{keyParamName}}']; + } }; {{/isApiKey}} {{#isBasic}} diff --git a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/configuration.ts b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/configuration.ts +++ b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/configuration.ts b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/configuration.ts +++ b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/configuration.ts b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/configuration.ts +++ b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/configuration.ts b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/configuration.ts +++ b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/configuration.ts b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/configuration.ts +++ b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/configuration.ts b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/configuration.ts +++ b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/configuration.ts b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/configuration.ts +++ b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/configuration.ts b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/configuration.ts +++ b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/configuration.ts b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/configuration.ts +++ b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/configuration.ts b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/configuration.ts +++ b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/configuration.ts b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/configuration.ts +++ b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/configuration.ts b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/configuration.ts +++ b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/configuration.ts b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/configuration.ts +++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/configuration.ts b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/configuration.ts +++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/configuration.ts b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/configuration.ts index 1bd306a523eb..900c26d8ebfe 100644 --- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/configuration.ts +++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/configuration.ts @@ -61,7 +61,11 @@ export class PetStoreConfiguration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/configuration.ts b/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/configuration.ts +++ b/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/configuration.ts b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/configuration.ts +++ b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/configuration.ts b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/configuration.ts index 38126642420d..6fc0f80d973f 100644 --- a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/configuration.ts +++ b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/configuration.ts @@ -61,7 +61,11 @@ export class Configuration { // init default api_key credential if (!this.credentials['api_key']) { this.credentials['api_key'] = () => { - return this.apiKeys['api_key'] || this.apiKeys['api_key']; + if (this.apiKeys === null || this.apiKeys === undefined) { + return undefined; + } else { + return this.apiKeys['api_key'] || this.apiKeys['api_key']; + } }; } From a9c7644c326d9157c9f9f856bf8475f70559264e Mon Sep 17 00:00:00 2001 From: Themi Tsiotas von Pfaler Date: Sat, 17 Apr 2021 09:14:55 +0200 Subject: [PATCH 025/186] [typescript-axios] add missing baseName when using set or append on FormData (#9273) --- .../src/main/resources/typescript-axios/apiInner.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache b/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache index ddcbbbb86e99..0550c77b4d8c 100644 --- a/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache @@ -158,7 +158,7 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur }) {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - localVarFormParams.{{#multipartFormData}}append{{/multipartFormData}}{{^multipartFormData}}set{{/multipartFormData}}({{paramName}}.join(COLLECTION_FORMATS.{{collectionFormat}})); + localVarFormParams.{{#multipartFormData}}append{{/multipartFormData}}{{^multipartFormData}}set{{/multipartFormData}}('{{baseName}}', {{paramName}}.join(COLLECTION_FORMATS.{{collectionFormat}})); {{/isCollectionFormatMulti}} }{{/isArray}} {{^isArray}} From 77dfd40681d19681435a5b5a6df42aaebd0e2e65 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sat, 17 Apr 2021 18:24:59 +0800 Subject: [PATCH 026/186] [Enhancement] added support for custom type & format mapping (#9285) * resolve merge conflicts * use + in type mapping, add tests * add new test spec --- .../openapitools/codegen/DefaultCodegen.java | 4 ++ .../codegen/ruby/RubyClientCodegenTest.java | 25 ++++++++++++ .../test/resources/3_0/type_mapping_test.yaml | 38 +++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 modules/openapi-generator/src/test/resources/3_0/type_mapping_test.yaml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 4993420c5e3b..38345e24fe0a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -2043,6 +2043,10 @@ protected String getSingleSchemaType(Schema schema) { private String getPrimitiveType(Schema schema) { if (schema == null) { throw new RuntimeException("schema cannot be null in getPrimitiveType"); + } else if (typeMapping.containsKey(schema.getType() + "+" + schema.getFormat())) { + // allows custom type_format mapping. + // use {type}+{format} + return typeMapping.get(schema.getType() + "+" + schema.getFormat()); } else if (ModelUtils.isNullType(schema)) { // The 'null' type is allowed in OAS 3.1 and above. It is not supported by OAS 3.0.x, // though this tooling supports it. diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/ruby/RubyClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/ruby/RubyClientCodegenTest.java index 3981f3f60780..f50f20ac135d 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/ruby/RubyClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/ruby/RubyClientCodegenTest.java @@ -677,4 +677,29 @@ public void exampleRegexParameterValidationOAS3Test() { // pattern_dont_escape_backslash '/^pattern\d{3}$/i' NOTE: the double \ is to escape \ in string but is read as single \ Assert.assertEquals(op.allParams.get(2).pattern, "/^pattern\\d{3}$/i"); } + + /** + * We want to make sure that the type mapping works as expect + */ + @Test(description = "test type mapping to handle special format, e.g. string+special") + public void typeMappingTest() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/type_mapping_test.yaml"); + final RubyClientCodegen codegen = new RubyClientCodegen(); + codegen.typeMapping().put("string+special", "VerySpecialStringInRuby"); + + codegen.setOpenAPI(openAPI); + final String path = "/animals"; + final Operation p = openAPI.getPaths().get(path).getGet(); + final CodegenOperation op = codegen.fromOperation(path, "get", p, null); + Assert.assertEquals(op.allParams.get(0).dataType, "VerySpecialStringInRuby"); + + final Schema schema = openAPI.getComponents().getSchemas().get("Animal"); + codegen.setOpenAPI(openAPI); + CodegenModel animal = codegen.fromModel("Animal", schema); + Assert.assertNotNull(animal); + CodegenProperty cp2 = animal.getVars().get(2); + Assert.assertEquals(cp2.name, "mapping_test"); + Assert.assertFalse(cp2.required); + Assert.assertEquals(cp2.dataType, "VerySpecialStringInRuby"); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/type_mapping_test.yaml b/modules/openapi-generator/src/test/resources/3_0/type_mapping_test.yaml new file mode 100644 index 000000000000..4954771e8948 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/type_mapping_test.yaml @@ -0,0 +1,38 @@ +openapi: 3.0.0 +info: + title: Sample API to test type mapping + description: API description in Markdown. + version: 1.0.0 +paths: + /animals: + get: + summary: Returns all animals. + description: Optional extended description in Markdown. + parameters: + - in: query + name: parameter_type_mapping + schema: + type: string + format: special + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Animal' +components: + schemas: + Animal: + type: object + required: + - className + properties: + className: + type: string + color: + type: string + default: red + mapping_test: + type: string + format: special From da37e980d3fffb379bd8b7683dc08a4a8eebd671 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sat, 17 Apr 2021 18:25:32 +0800 Subject: [PATCH 027/186] [Kotlin]] add support for binary response (#9284) * Support File responses for Kotlin client * Regen samples * Reset version * Fix file class check * Add imports * use Files.createTempFile instead * better tmp file naming Co-authored-by: Mischa Spiegelmock --- .../jvm-okhttp/infrastructure/ApiClient.kt.mustache | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ .../openapitools/client/infrastructure/ApiClient.kt | 12 ++++++++++++ 13 files changed, 156 insertions(+) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache index 0d834b1e55c0..aa5a275a9f37 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache @@ -25,7 +25,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date {{^threetenbp}} import java.time.LocalDate @@ -171,6 +174,15 @@ import org.threeten.bp.OffsetTime if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.{{packageName}}", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> {{#moshi}}Serializer.moshi.adapter(T::class.java).fromJson(bodyContent){{/moshi}}{{#gson}}Serializer.gson.fromJson(bodyContent, T::class.java){{/gson}}{{#jackson}}Serializer.jacksonObjectMapper.readValue(bodyContent, T::class.java){{/jackson}} else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bcbb1cf86273..8ffe54035961 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.gson.fromJson(bodyContent, T::class.java) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 637ca64c247b..0ea33dc522cc 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.jacksonObjectMapper.readValue(bodyContent, T::class.java) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index e1d5bc9c412c..cd2898923dd3 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bcbb1cf86273..8ffe54035961 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.gson.fromJson(bodyContent, T::class.java) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 7a8dcc91cd4b..bc9ed02c0f16 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index c4da8e3989b8..d43c0c614d57 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ internal open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 7a8dcc91cd4b..bc9ed02c0f16 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 9d526273d7ac..8fad7b08960f 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -11,7 +11,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -112,6 +115,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 7a8dcc91cd4b..bc9ed02c0f16 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 135bcdc790e1..bd6833418965 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import org.threeten.bp.LocalDate import org.threeten.bp.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index c34e9e42d08c..a9f5f6ce2a23 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 7a8dcc91cd4b..bc9ed02c0f16 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,7 +13,10 @@ import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody import java.io.File +import java.io.BufferedWriter +import java.io.FileWriter import java.net.URLConnection +import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -114,6 +117,15 @@ open class ApiClient(val baseUrl: String) { if (bodyContent.isEmpty()) { return null } + if (T::class.java == File::class.java) { + // return tempfile + val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + f.deleteOnExit() + val out = BufferedWriter(FileWriter(f)) + out.write(bodyContent) + out.close() + return f as T + } return when(mediaType) { JsonMediaType -> Serializer.moshi.adapter(T::class.java).fromJson(bodyContent) else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") From aa5adbf3f59a8fd29addeac35c370fc2847985d5 Mon Sep 17 00:00:00 2001 From: Esteban Gehring Date: Mon, 19 Apr 2021 08:11:00 +0200 Subject: [PATCH 028/186] update samples (#9288) --- .../api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts index 44ad2dc5a0a3..832e63b1f4e6 100644 --- a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts @@ -1961,7 +1961,7 @@ export const FakeApiAxiosParamCreator = function (configuration?: Configuration) } if (enumFormStringArray) { - localVarFormParams.set(enumFormStringArray.join(COLLECTION_FORMATS.csv)); + localVarFormParams.set('enum_form_string_array', enumFormStringArray.join(COLLECTION_FORMATS.csv)); } From 51028f0c1bb23320ad3e8001ca6aed91b7ced25f Mon Sep 17 00:00:00 2001 From: William Cheng Date: Tue, 20 Apr 2021 15:05:34 +0800 Subject: [PATCH 029/186] prevent NPE in constructing oneOf example (#9231) --- .../codegen/languages/RubyClientCodegen.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java index 40b2d9c22eed..96a5f5d7c3f1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubyClientCodegen.java @@ -748,8 +748,14 @@ private String constructExampleCode(CodegenModel codegenModel, HashMap Date: Tue, 20 Apr 2021 06:23:36 -0700 Subject: [PATCH 030/186] Support FGuid with helpers (#9291) --- .../resources/cpp-ue4/helpers-header.mustache | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-header.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-header.mustache index eb178e890af6..67d605359874 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/helpers-header.mustache @@ -105,6 +105,11 @@ inline FStringFormatArg ToStringFormatArg(const FDateTime& Value) return FStringFormatArg(Value.ToIso8601()); } +inline FStringFormatArg ToStringFormatArg(const FGuid& Value) +{ + return FStringFormatArg(Value.ToString(EGuidFormats::DigitsWithHyphens)); +} + inline FStringFormatArg ToStringFormatArg(const TArray& Value) { return FStringFormatArg(Base64UrlEncode(Value)); @@ -220,6 +225,11 @@ inline void WriteJsonValue(JsonWriter& Writer, const FDateTime& Value) Writer->WriteValue(Value.ToIso8601()); } +inline void WriteJsonValue(JsonWriter& Writer, const FGuid& Value) +{ + Writer->WriteValue(Value.ToString(EGuidFormats::DigitsWithHyphens)); +} + inline void WriteJsonValue(JsonWriter& Writer, const Model& Value) { Value.WriteJson(Writer); @@ -281,6 +291,17 @@ inline bool TryGetJsonValue(const TSharedPtr& JsonValue, FDateTime& return false; } +inline bool TryGetJsonValue(const TSharedPtr& JsonValue, FGuid& Value) +{ + FString TmpValue; + if (JsonValue->TryGetString(TmpValue)) + { + return FGuid::Parse(TmpValue, Value); + } + else + return false; +} + inline bool TryGetJsonValue(const TSharedPtr& JsonValue, bool& Value) { bool TmpValue; From 41f586bede6cf821dab27c9b288a01d49adcfaa3 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Tue, 20 Apr 2021 21:47:12 +0800 Subject: [PATCH 031/186] update cpp ue4 samples --- .../cpp-ue4/.openapi-generator/VERSION | 2 +- .../petstore/cpp-ue4/Public/OpenAPIHelpers.h | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION b/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION index c30f0ec2be7f..d509cc92aa80 100644 --- a/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION +++ b/samples/client/petstore/cpp-ue4/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.0-SNAPSHOT \ No newline at end of file +5.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIHelpers.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIHelpers.h index e4f58b19c66e..cd804d34245f 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIHelpers.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIHelpers.h @@ -114,6 +114,11 @@ inline FStringFormatArg ToStringFormatArg(const FDateTime& Value) return FStringFormatArg(Value.ToIso8601()); } +inline FStringFormatArg ToStringFormatArg(const FGuid& Value) +{ + return FStringFormatArg(Value.ToString(EGuidFormats::DigitsWithHyphens)); +} + inline FStringFormatArg ToStringFormatArg(const TArray& Value) { return FStringFormatArg(Base64UrlEncode(Value)); @@ -229,6 +234,11 @@ inline void WriteJsonValue(JsonWriter& Writer, const FDateTime& Value) Writer->WriteValue(Value.ToIso8601()); } +inline void WriteJsonValue(JsonWriter& Writer, const FGuid& Value) +{ + Writer->WriteValue(Value.ToString(EGuidFormats::DigitsWithHyphens)); +} + inline void WriteJsonValue(JsonWriter& Writer, const Model& Value) { Value.WriteJson(Writer); @@ -290,6 +300,17 @@ inline bool TryGetJsonValue(const TSharedPtr& JsonValue, FDateTime& return false; } +inline bool TryGetJsonValue(const TSharedPtr& JsonValue, FGuid& Value) +{ + FString TmpValue; + if (JsonValue->TryGetString(TmpValue)) + { + return FGuid::Parse(TmpValue, Value); + } + else + return false; +} + inline bool TryGetJsonValue(const TSharedPtr& JsonValue, bool& Value) { bool TmpValue; From ef2299ad65868bf199cf48955bdff44c16276c8b Mon Sep 17 00:00:00 2001 From: Sean Kelly Date: Tue, 20 Apr 2021 18:55:30 -0700 Subject: [PATCH 032/186] Qt5 support date format enum (#9283) * initial commit * Update sample and make sure it builds * PR feedback * Limit scope of struct to within the class and fix whitespace --- .../cpp-qt5-client/helpers-body.mustache | 85 ++++++++++++++++--- .../cpp-qt5-client/helpers-header.mustache | 3 +- .../petstore/cpp-qt5/client/PFXHelpers.cpp | 85 ++++++++++++++++--- .../petstore/cpp-qt5/client/PFXHelpers.h | 3 +- 4 files changed, 148 insertions(+), 28 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-body.mustache index a4c04a8951c0..0661117b0abf 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-body.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-body.mustache @@ -9,47 +9,83 @@ namespace {{this}} { class {{prefix}}SerializerSettings { public: - static void setDateTimeFormat(const QString & dtFormat){ - getInstance()->dateTimeFormat = dtFormat; + struct CustomDateTimeFormat{ + bool isStringSet = false; + QString formatString; + bool isEnumSet = false; + Qt::DateFormat formatEnum; + }; + + static CustomDateTimeFormat getCustomDateTimeFormat() { + return getInstance()->customDateTimeFormat; } - static QString getDateTimeFormat() { - return getInstance()->dateTimeFormat; + + static void setDateTimeFormatString(const QString &dtFormat){ + getInstance()->customDateTimeFormat.isStringSet = true; + getInstance()->customDateTimeFormat.isEnumSet = false; + getInstance()->customDateTimeFormat.formatString = dtFormat; + } + + static void setDateTimeFormatEnum(const Qt::DateFormat &dtFormat){ + getInstance()->customDateTimeFormat.isEnumSet = true; + getInstance()->customDateTimeFormat.isStringSet = false; + getInstance()->customDateTimeFormat.formatEnum = dtFormat; } + static {{prefix}}SerializerSettings *getInstance(){ if(instance == nullptr){ instance = new {{prefix}}SerializerSettings(); } return instance; } + private: explicit {{prefix}}SerializerSettings(){ instance = this; - dateTimeFormat.clear(); + customDateTimeFormat.isStringSet = false; + customDateTimeFormat.isEnumSet = false; } static {{prefix}}SerializerSettings *instance; - QString dateTimeFormat; + CustomDateTimeFormat customDateTimeFormat; }; {{prefix}}SerializerSettings * {{prefix}}SerializerSettings::instance = nullptr; -bool setDateTimeFormat(const QString& dateTimeFormat){ +bool setDateTimeFormat(const QString &dateTimeFormat){ bool success = false; auto dt = QDateTime::fromString(QDateTime::currentDateTime().toString(dateTimeFormat), dateTimeFormat); - if(dt.isValid()){ + if (dt.isValid()) { success = true; - {{prefix}}SerializerSettings::setDateTimeFormat(dateTimeFormat); + {{prefix}}SerializerSettings::setDateTimeFormatString(dateTimeFormat); } return success; } +bool setDateTimeFormat(const Qt::DateFormat &dateTimeFormat){ + bool success = false; + auto dt = QDateTime::fromString(QDateTime::currentDateTime().toString(dateTimeFormat), dateTimeFormat); + if (dt.isValid()) { + success = true; + {{prefix}}SerializerSettings::setDateTimeFormatEnum(dateTimeFormat); + } + return success; +} QString toStringValue(const QString &value) { return value; } QString toStringValue(const QDateTime &value) { + if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) { + return value.toString({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatString); + } + + if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) { + return value.toString({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum); + } + // ISO 8601 - return {{prefix}}SerializerSettings::getInstance()->getDateTimeFormat().isEmpty()? value.toString(Qt::ISODate):value.toString({{prefix}}SerializerSettings::getInstance()->getDateTimeFormat()); + return value.toString(Qt::ISODate); } QString toStringValue(const QByteArray &value) { @@ -98,7 +134,16 @@ QJsonValue toJsonValue(const QString &value) { } QJsonValue toJsonValue(const QDateTime &value) { - return QJsonValue(value.toString({{prefix}}SerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?value.toString(Qt::ISODate):value.toString({{prefix}}SerializerSettings::getInstance()->getDateTimeFormat()))); + if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) { + return QJsonValue(value.toString({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatString)); + } + + if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) { + return QJsonValue(value.toString({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum)); + } + + // ISO 8601 + return QJsonValue(value.toString(Qt::ISODate)); } QJsonValue toJsonValue(const QByteArray &value) { @@ -151,7 +196,15 @@ bool fromStringValue(const QString &inStr, QDateTime &value) { if (inStr.isEmpty()) { return false; } else { - auto dateTime = {{prefix}}SerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?QDateTime::fromString(inStr, Qt::ISODate) :QDateTime::fromString(inStr, {{prefix}}SerializerSettings::getInstance()->getDateTimeFormat()); + QDateTime dateTime; + if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) { + dateTime = QDateTime::fromString(inStr, {{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatString); + } else if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) { + dateTime = QDateTime::fromString(inStr, {{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum); + } else { + dateTime = QDateTime::fromString(inStr, Qt::ISODate); + } + if (dateTime.isValid()) { value.setDate(dateTime.date()); value.setTime(dateTime.time()); @@ -256,7 +309,13 @@ bool fromJsonValue(QString &value, const QJsonValue &jval) { bool fromJsonValue(QDateTime &value, const QJsonValue &jval) { bool ok = true; if (!jval.isUndefined() && !jval.isNull() && jval.isString()) { - value = {{prefix}}SerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?QDateTime::fromString(jval.toString(), Qt::ISODate): QDateTime::fromString(jval.toString(), {{prefix}}SerializerSettings::getInstance()->getDateTimeFormat()); + if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) { + value = QDateTime::fromString(jval.toString(), {{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatString); + } else if ({{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) { + value = QDateTime::fromString(jval.toString(), {{prefix}}SerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum); + } else { + value = QDateTime::fromString(jval.toString(), Qt::ISODate); + } ok = value.isValid(); } else { ok = false; diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-header.mustache index 96e3349fa475..6b0ad489b1cb 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-header.mustache @@ -42,7 +42,8 @@ public: } }; -bool setDateTimeFormat(const QString&); +bool setDateTimeFormat(const QString &format); +bool setDateTimeFormat(const Qt::DateFormat &format); template QString toStringValue(const QList &val); diff --git a/samples/client/petstore/cpp-qt5/client/PFXHelpers.cpp b/samples/client/petstore/cpp-qt5/client/PFXHelpers.cpp index b3b36c83be8b..7245de9007fe 100644 --- a/samples/client/petstore/cpp-qt5/client/PFXHelpers.cpp +++ b/samples/client/petstore/cpp-qt5/client/PFXHelpers.cpp @@ -17,47 +17,83 @@ namespace test_namespace { class PFXSerializerSettings { public: - static void setDateTimeFormat(const QString & dtFormat){ - getInstance()->dateTimeFormat = dtFormat; + struct CustomDateTimeFormat{ + bool isStringSet = false; + QString formatString; + bool isEnumSet = false; + Qt::DateFormat formatEnum; + }; + + static CustomDateTimeFormat getCustomDateTimeFormat() { + return getInstance()->customDateTimeFormat; } - static QString getDateTimeFormat() { - return getInstance()->dateTimeFormat; + + static void setDateTimeFormatString(const QString &dtFormat){ + getInstance()->customDateTimeFormat.isStringSet = true; + getInstance()->customDateTimeFormat.isEnumSet = false; + getInstance()->customDateTimeFormat.formatString = dtFormat; + } + + static void setDateTimeFormatEnum(const Qt::DateFormat &dtFormat){ + getInstance()->customDateTimeFormat.isEnumSet = true; + getInstance()->customDateTimeFormat.isStringSet = false; + getInstance()->customDateTimeFormat.formatEnum = dtFormat; } + static PFXSerializerSettings *getInstance(){ if(instance == nullptr){ instance = new PFXSerializerSettings(); } return instance; } + private: explicit PFXSerializerSettings(){ instance = this; - dateTimeFormat.clear(); + customDateTimeFormat.isStringSet = false; + customDateTimeFormat.isEnumSet = false; } static PFXSerializerSettings *instance; - QString dateTimeFormat; + CustomDateTimeFormat customDateTimeFormat; }; PFXSerializerSettings * PFXSerializerSettings::instance = nullptr; -bool setDateTimeFormat(const QString& dateTimeFormat){ +bool setDateTimeFormat(const QString &dateTimeFormat){ bool success = false; auto dt = QDateTime::fromString(QDateTime::currentDateTime().toString(dateTimeFormat), dateTimeFormat); - if(dt.isValid()){ + if (dt.isValid()) { success = true; - PFXSerializerSettings::setDateTimeFormat(dateTimeFormat); + PFXSerializerSettings::setDateTimeFormatString(dateTimeFormat); } return success; } +bool setDateTimeFormat(const Qt::DateFormat &dateTimeFormat){ + bool success = false; + auto dt = QDateTime::fromString(QDateTime::currentDateTime().toString(dateTimeFormat), dateTimeFormat); + if (dt.isValid()) { + success = true; + PFXSerializerSettings::setDateTimeFormatEnum(dateTimeFormat); + } + return success; +} QString toStringValue(const QString &value) { return value; } QString toStringValue(const QDateTime &value) { + if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) { + return value.toString(PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatString); + } + + if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) { + return value.toString(PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum); + } + // ISO 8601 - return PFXSerializerSettings::getInstance()->getDateTimeFormat().isEmpty()? value.toString(Qt::ISODate):value.toString(PFXSerializerSettings::getInstance()->getDateTimeFormat()); + return value.toString(Qt::ISODate); } QString toStringValue(const QByteArray &value) { @@ -106,7 +142,16 @@ QJsonValue toJsonValue(const QString &value) { } QJsonValue toJsonValue(const QDateTime &value) { - return QJsonValue(value.toString(PFXSerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?value.toString(Qt::ISODate):value.toString(PFXSerializerSettings::getInstance()->getDateTimeFormat()))); + if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) { + return QJsonValue(value.toString(PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatString)); + } + + if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) { + return QJsonValue(value.toString(PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum)); + } + + // ISO 8601 + return QJsonValue(value.toString(Qt::ISODate)); } QJsonValue toJsonValue(const QByteArray &value) { @@ -159,7 +204,15 @@ bool fromStringValue(const QString &inStr, QDateTime &value) { if (inStr.isEmpty()) { return false; } else { - auto dateTime = PFXSerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?QDateTime::fromString(inStr, Qt::ISODate) :QDateTime::fromString(inStr, PFXSerializerSettings::getInstance()->getDateTimeFormat()); + QDateTime dateTime; + if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) { + dateTime = QDateTime::fromString(inStr, PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatString); + } else if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) { + dateTime = QDateTime::fromString(inStr, PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum); + } else { + dateTime = QDateTime::fromString(inStr, Qt::ISODate); + } + if (dateTime.isValid()) { value.setDate(dateTime.date()); value.setTime(dateTime.time()); @@ -264,7 +317,13 @@ bool fromJsonValue(QString &value, const QJsonValue &jval) { bool fromJsonValue(QDateTime &value, const QJsonValue &jval) { bool ok = true; if (!jval.isUndefined() && !jval.isNull() && jval.isString()) { - value = PFXSerializerSettings::getInstance()->getDateTimeFormat().isEmpty()?QDateTime::fromString(jval.toString(), Qt::ISODate): QDateTime::fromString(jval.toString(), PFXSerializerSettings::getInstance()->getDateTimeFormat()); + if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isStringSet) { + value = QDateTime::fromString(jval.toString(), PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatString); + } else if (PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().isEnumSet) { + value = QDateTime::fromString(jval.toString(), PFXSerializerSettings::getInstance()->getCustomDateTimeFormat().formatEnum); + } else { + value = QDateTime::fromString(jval.toString(), Qt::ISODate); + } ok = value.isValid(); } else { ok = false; diff --git a/samples/client/petstore/cpp-qt5/client/PFXHelpers.h b/samples/client/petstore/cpp-qt5/client/PFXHelpers.h index bebd7b94690d..3980b8ac2f16 100644 --- a/samples/client/petstore/cpp-qt5/client/PFXHelpers.h +++ b/samples/client/petstore/cpp-qt5/client/PFXHelpers.h @@ -50,7 +50,8 @@ class OptionalParam { } }; -bool setDateTimeFormat(const QString&); +bool setDateTimeFormat(const QString &format); +bool setDateTimeFormat(const Qt::DateFormat &format); template QString toStringValue(const QList &val); From ebc98ec848fb53ca28e07a20d83b7cad72d8aea6 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 21 Apr 2021 10:01:41 +0800 Subject: [PATCH 033/186] [PowerShell] improve return type documentation (#9295) * revise return type doc * revise return type doc --- .../resources/powershell/api_doc.mustache | 4 +-- .../petstore/powershell/docs/PSPetApi.md | 28 +++++++++---------- .../petstore/powershell/docs/PSStoreApi.md | 12 ++++---- .../petstore/powershell/docs/PSUserApi.md | 18 ++++++------ 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/powershell/api_doc.mustache b/modules/openapi-generator/src/main/resources/powershell/api_doc.mustache index c892573091e6..7903ec98afed 100644 --- a/modules/openapi-generator/src/main/resources/powershell/api_doc.mustache +++ b/modules/openapi-generator/src/main/resources/powershell/api_doc.mustache @@ -78,8 +78,8 @@ Name | Type | Description | Notes {{/allParams}} ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type -{{#returnType}}{{#returnTypeIsPrimitive}}**{{{returnType}}}**{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}[**{{{returnType}}}**]({{returnBaseType}}.md){{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}void (empty response body){{/returnType}} + +{{#returnType}}{{#returnTypeIsPrimitive}}**{{{returnType}}}**{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}[**{{{returnType}}}**]({{returnBaseType}}.md) (PSCustomObject){{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}void (empty response body){{/returnType}} ### Authorization diff --git a/samples/client/petstore/powershell/docs/PSPetApi.md b/samples/client/petstore/powershell/docs/PSPetApi.md index 3cebe2ba2687..5b8c2a0f2e3e 100644 --- a/samples/client/petstore/powershell/docs/PSPetApi.md +++ b/samples/client/petstore/powershell/docs/PSPetApi.md @@ -46,8 +46,8 @@ Name | Type | Description | Notes **Pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type -[**Pet**](Pet.md) + +[**Pet**](Pet.md) (PSCustomObject) ### Authorization @@ -95,7 +95,7 @@ Name | Type | Description | Notes **ApiKey** | **String**| | [optional] ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + void (empty response body) ### Authorization @@ -143,8 +143,8 @@ Name | Type | Description | Notes **Status** | [**String[]**](String.md)| Status values that need to be considered for filter | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type -[**Pet[]**](Pet.md) + +[**Pet[]**](Pet.md) (PSCustomObject) ### Authorization @@ -191,8 +191,8 @@ Name | Type | Description | Notes **Tags** | [**String[]**](String.md)| Tags to filter by | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type -[**Pet[]**](Pet.md) + +[**Pet[]**](Pet.md) (PSCustomObject) ### Authorization @@ -241,8 +241,8 @@ Name | Type | Description | Notes **PetId** | **Int64**| ID of pet to return | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type -[**Pet**](Pet.md) + +[**Pet**](Pet.md) (PSCustomObject) ### Authorization @@ -287,8 +287,8 @@ Name | Type | Description | Notes **Pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type -[**Pet**](Pet.md) + +[**Pet**](Pet.md) (PSCustomObject) ### Authorization @@ -339,7 +339,7 @@ Name | Type | Description | Notes **Status** | **String**| Updated status of the pet | [optional] ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + void (empty response body) ### Authorization @@ -391,8 +391,8 @@ Name | Type | Description | Notes **File** | **System.IO.FileInfo****System.IO.FileInfo**| file to upload | [optional] ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type -[**ApiResponse**](ApiResponse.md) + +[**ApiResponse**](ApiResponse.md) (PSCustomObject) ### Authorization diff --git a/samples/client/petstore/powershell/docs/PSStoreApi.md b/samples/client/petstore/powershell/docs/PSStoreApi.md index 65d14db7eb41..33b3541ced6c 100644 --- a/samples/client/petstore/powershell/docs/PSStoreApi.md +++ b/samples/client/petstore/powershell/docs/PSStoreApi.md @@ -39,7 +39,7 @@ Name | Type | Description | Notes **OrderId** | **String**| ID of the order that needs to be deleted | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + void (empty response body) ### Authorization @@ -84,7 +84,7 @@ try { This endpoint does not need any parameter. ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + **System.Collections.Hashtable** ### Authorization @@ -127,8 +127,8 @@ Name | Type | Description | Notes **OrderId** | **Int64**| ID of pet that needs to be fetched | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type -[**Order**](Order.md) + +[**Order**](Order.md) (PSCustomObject) ### Authorization @@ -168,8 +168,8 @@ Name | Type | Description | Notes **Order** | [**Order**](Order.md)| order placed for purchasing the pet | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type -[**Order**](Order.md) + +[**Order**](Order.md) (PSCustomObject) ### Authorization diff --git a/samples/client/petstore/powershell/docs/PSUserApi.md b/samples/client/petstore/powershell/docs/PSUserApi.md index be51a6c6f43e..f008e292f2cf 100644 --- a/samples/client/petstore/powershell/docs/PSUserApi.md +++ b/samples/client/petstore/powershell/docs/PSUserApi.md @@ -50,7 +50,7 @@ Name | Type | Description | Notes **User** | [**User**](User.md)| Created user object | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + void (empty response body) ### Authorization @@ -98,7 +98,7 @@ Name | Type | Description | Notes **User** | [**User[]**](User.md)| List of user object | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + void (empty response body) ### Authorization @@ -146,7 +146,7 @@ Name | Type | Description | Notes **User** | [**User[]**](User.md)| List of user object | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + void (empty response body) ### Authorization @@ -196,7 +196,7 @@ Name | Type | Description | Notes **Username** | **String**| The name that needs to be deleted | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + void (empty response body) ### Authorization @@ -237,8 +237,8 @@ Name | Type | Description | Notes **Username** | **String**| The name that needs to be fetched. Use user1 for testing. | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type -[**User**](User.md) + +[**User**](User.md) (PSCustomObject) ### Authorization @@ -281,7 +281,7 @@ Name | Type | Description | Notes **Password** | **String**| The password for login in clear text | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + **String** ### Authorization @@ -324,7 +324,7 @@ try { This endpoint does not need any parameter. ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + void (empty response body) ### Authorization @@ -377,7 +377,7 @@ Name | Type | Description | Notes **User** | [**User**](User.md)| Updated user object | ### Return type -# cmdlet returns PSCustomObject, the return object contains the properties of below type + void (empty response body) ### Authorization From d4748a7a20558451071d2579e1c31c1fed13b11c Mon Sep 17 00:00:00 2001 From: Yasuhiro ABE Date: Wed, 21 Apr 2021 16:46:56 +0900 Subject: [PATCH 034/186] Dockerfile for the Ruby-Sinatra generator (#9299) * add the Dockerfile and updated the README and others. Signed-off-by: Yasuhiro ABE * fixed the indent to follow the coding style guide. Signed-off-by: Yasuhiro ABE * revised. Signed-off-by: Yasuhiro ABE --- .../languages/RubySinatraServerCodegen.java | 1 + .../resources/ruby-sinatra-server/Dockerfile | 32 ++++++++++++ .../resources/ruby-sinatra-server/Gemfile | 3 +- .../resources/ruby-sinatra-server/README.md | 52 ++++++++++++++++--- 4 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/ruby-sinatra-server/Dockerfile diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubySinatraServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubySinatraServerCodegen.java index 12f8f9a2a703..c81426eb0170 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubySinatraServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RubySinatraServerCodegen.java @@ -87,6 +87,7 @@ public void processOpts() { supportingFiles.add(new SupportingFile("Gemfile", "", "Gemfile")); supportingFiles.add(new SupportingFile("README.md", "", "README.md")); supportingFiles.add(new SupportingFile("openapi.mustache", "", "openapi.yaml")); + supportingFiles.add(new SupportingFile("Dockerfile", "", "Dockerfile")); } @Override diff --git a/modules/openapi-generator/src/main/resources/ruby-sinatra-server/Dockerfile b/modules/openapi-generator/src/main/resources/ruby-sinatra-server/Dockerfile new file mode 100644 index 000000000000..41be83d48ece --- /dev/null +++ b/modules/openapi-generator/src/main/resources/ruby-sinatra-server/Dockerfile @@ -0,0 +1,32 @@ +## Build libraries +FROM ruby:3.0-alpine as rubydev + +## for thin or falcon +#RUN apk --no-cache add make g++ libc-dev +## for puma +#RUN apk --no-cache add make gcc libc-dev + +ADD . /app +WORKDIR /app + +RUN bundle config set path lib +RUN bundle install + +## Build Runtime image +FROM ruby:3.0-alpine + +RUN apk --no-cache add tzdata ## ca-certificates + +COPY --from=rubydev /app /app +WORKDIR /app + +ENV SINATRA_HOST 0.0.0.0 +ENV SINATRA_PORT 8080 +EXPOSE $SINATRA_PORT + +RUN addgroup sinatra +RUN adduser -S -G sinatra sinatra +USER sinatra +RUN bundle config set path lib + +CMD bundle exec rackup --host $SINATRA_HOST -p $SINATRA_PORT diff --git a/modules/openapi-generator/src/main/resources/ruby-sinatra-server/Gemfile b/modules/openapi-generator/src/main/resources/ruby-sinatra-server/Gemfile index be9c3168ea6f..90d7b0e3bcdc 100644 --- a/modules/openapi-generator/src/main/resources/ruby-sinatra-server/Gemfile +++ b/modules/openapi-generator/src/main/resources/ruby-sinatra-server/Gemfile @@ -1,4 +1,5 @@ source 'https://rubygems.org' +gem "webrick" gem "sinatra" -gem "sinatra-cross_origin" \ No newline at end of file +gem "sinatra-cross_origin" diff --git a/modules/openapi-generator/src/main/resources/ruby-sinatra-server/README.md b/modules/openapi-generator/src/main/resources/ruby-sinatra-server/README.md index bf132cb042a2..aecb705a1946 100644 --- a/modules/openapi-generator/src/main/resources/ruby-sinatra-server/README.md +++ b/modules/openapi-generator/src/main/resources/ruby-sinatra-server/README.md @@ -1,4 +1,4 @@ -# Swagger for Sinatra +# OpenAPI for Sinatra ## Overview This is a project to provide Swagger support inside the [Sinatra](http://www.sinatrarb.com/) framework. You can find @@ -6,24 +6,60 @@ out more about both the spec and the framework at http://swagger.io. For more i Wordnik's APIs, please visit http://developer.wordnik.com. ## Prerequisites -You need to install ruby 1.9.3 and the following gems: +As of ruby 3.0.0, the webrick web server library was removed. +You need to install a rack-supported web server, such as webrick and thin. + +The default Gemfile is as follows. +Update the name of the web server as your prefer. ``` -sinatra -sinatra-cross_origin +source 'https://rubygems.org' + +gem "webrick" +gem "sinatra" +gem "sinatra-cross_origin" ``` ## Getting started -This sample was generated with the [OpenAPI Generator](https://github.com/openapitools/openapi-generator) project. +To generate a ruby-sinatra server for petstore.yaml, please run the following: + +``` +openapi-generator-cli generate \ + -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml \ + -g ruby-sinatra -o code +``` + +To run the generated server, please run the following: + +``` +cd code/ +bundle config set path lib +bundle install +bundle exec rackup -p 8080 +``` + +You can access the application by the following URL: + +``` +http://localhost:8080/v2/store/inventory +``` + +## Docker +If you want to use a web server other than webrick, you need to edit the generated Dockerfile to prepare the compiler and the make command. Please check the comment of the Dockerfile. + +To run the code on docker, you can use the Dockerfile as follows: + +### Build the docker image +The "container_name" can be changed for your preferences. ``` -rackup -p 4567 config.ru +docker build . --tag "container_name" ``` -In your [swagger ui](https://github.com/swagger-api/swagger-ui), put in the following URL: +### Run the docker image ``` -http://localhost:4567/resources.json +docker run -it --rm -p 8080:8080 "container_name" ``` Voila! From 92561085ba4853887edf42fa16f59d7a47ad4e20 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 21 Apr 2021 16:00:23 +0800 Subject: [PATCH 035/186] update ruby sinatra samples --- .../ruby-sinatra/.openapi-generator/FILES | 10 + .../ruby-sinatra/.openapi-generator/VERSION | 2 +- .../server/petstore/ruby-sinatra/Dockerfile | 32 + samples/server/petstore/ruby-sinatra/Gemfile | 3 +- .../server/petstore/ruby-sinatra/README.md | 52 +- .../petstore/ruby-sinatra/api/pet_api.rb | 4 +- .../server/petstore/ruby-sinatra/openapi.yaml | 100 +-- .../server/petstore/ruby-sinatra/swagger.yaml | 713 ------------------ 8 files changed, 148 insertions(+), 768 deletions(-) create mode 100644 samples/server/petstore/ruby-sinatra/.openapi-generator/FILES create mode 100644 samples/server/petstore/ruby-sinatra/Dockerfile delete mode 100644 samples/server/petstore/ruby-sinatra/swagger.yaml diff --git a/samples/server/petstore/ruby-sinatra/.openapi-generator/FILES b/samples/server/petstore/ruby-sinatra/.openapi-generator/FILES new file mode 100644 index 000000000000..573dd33a9b2b --- /dev/null +++ b/samples/server/petstore/ruby-sinatra/.openapi-generator/FILES @@ -0,0 +1,10 @@ +Dockerfile +Gemfile +README.md +api/pet_api.rb +api/store_api.rb +api/user_api.rb +config.ru +lib/openapiing.rb +my_app.rb +openapi.yaml diff --git a/samples/server/petstore/ruby-sinatra/.openapi-generator/VERSION b/samples/server/petstore/ruby-sinatra/.openapi-generator/VERSION index d168f1d8bdaa..d509cc92aa80 100644 --- a/samples/server/petstore/ruby-sinatra/.openapi-generator/VERSION +++ b/samples/server/petstore/ruby-sinatra/.openapi-generator/VERSION @@ -1 +1 @@ -4.2.1-SNAPSHOT \ No newline at end of file +5.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/ruby-sinatra/Dockerfile b/samples/server/petstore/ruby-sinatra/Dockerfile new file mode 100644 index 000000000000..41be83d48ece --- /dev/null +++ b/samples/server/petstore/ruby-sinatra/Dockerfile @@ -0,0 +1,32 @@ +## Build libraries +FROM ruby:3.0-alpine as rubydev + +## for thin or falcon +#RUN apk --no-cache add make g++ libc-dev +## for puma +#RUN apk --no-cache add make gcc libc-dev + +ADD . /app +WORKDIR /app + +RUN bundle config set path lib +RUN bundle install + +## Build Runtime image +FROM ruby:3.0-alpine + +RUN apk --no-cache add tzdata ## ca-certificates + +COPY --from=rubydev /app /app +WORKDIR /app + +ENV SINATRA_HOST 0.0.0.0 +ENV SINATRA_PORT 8080 +EXPOSE $SINATRA_PORT + +RUN addgroup sinatra +RUN adduser -S -G sinatra sinatra +USER sinatra +RUN bundle config set path lib + +CMD bundle exec rackup --host $SINATRA_HOST -p $SINATRA_PORT diff --git a/samples/server/petstore/ruby-sinatra/Gemfile b/samples/server/petstore/ruby-sinatra/Gemfile index be9c3168ea6f..90d7b0e3bcdc 100644 --- a/samples/server/petstore/ruby-sinatra/Gemfile +++ b/samples/server/petstore/ruby-sinatra/Gemfile @@ -1,4 +1,5 @@ source 'https://rubygems.org' +gem "webrick" gem "sinatra" -gem "sinatra-cross_origin" \ No newline at end of file +gem "sinatra-cross_origin" diff --git a/samples/server/petstore/ruby-sinatra/README.md b/samples/server/petstore/ruby-sinatra/README.md index bf132cb042a2..aecb705a1946 100644 --- a/samples/server/petstore/ruby-sinatra/README.md +++ b/samples/server/petstore/ruby-sinatra/README.md @@ -1,4 +1,4 @@ -# Swagger for Sinatra +# OpenAPI for Sinatra ## Overview This is a project to provide Swagger support inside the [Sinatra](http://www.sinatrarb.com/) framework. You can find @@ -6,24 +6,60 @@ out more about both the spec and the framework at http://swagger.io. For more i Wordnik's APIs, please visit http://developer.wordnik.com. ## Prerequisites -You need to install ruby 1.9.3 and the following gems: +As of ruby 3.0.0, the webrick web server library was removed. +You need to install a rack-supported web server, such as webrick and thin. + +The default Gemfile is as follows. +Update the name of the web server as your prefer. ``` -sinatra -sinatra-cross_origin +source 'https://rubygems.org' + +gem "webrick" +gem "sinatra" +gem "sinatra-cross_origin" ``` ## Getting started -This sample was generated with the [OpenAPI Generator](https://github.com/openapitools/openapi-generator) project. +To generate a ruby-sinatra server for petstore.yaml, please run the following: + +``` +openapi-generator-cli generate \ + -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml \ + -g ruby-sinatra -o code +``` + +To run the generated server, please run the following: + +``` +cd code/ +bundle config set path lib +bundle install +bundle exec rackup -p 8080 +``` + +You can access the application by the following URL: + +``` +http://localhost:8080/v2/store/inventory +``` + +## Docker +If you want to use a web server other than webrick, you need to edit the generated Dockerfile to prepare the compiler and the make command. Please check the comment of the Dockerfile. + +To run the code on docker, you can use the Dockerfile as follows: + +### Build the docker image +The "container_name" can be changed for your preferences. ``` -rackup -p 4567 config.ru +docker build . --tag "container_name" ``` -In your [swagger ui](https://github.com/swagger-api/swagger-ui), put in the following URL: +### Run the docker image ``` -http://localhost:4567/resources.json +docker run -it --rm -p 8080:8080 "container_name" ``` Voila! diff --git a/samples/server/petstore/ruby-sinatra/api/pet_api.rb b/samples/server/petstore/ruby-sinatra/api/pet_api.rb index f17047e217b8..c92b77b099c9 100644 --- a/samples/server/petstore/ruby-sinatra/api/pet_api.rb +++ b/samples/server/petstore/ruby-sinatra/api/pet_api.rb @@ -5,7 +5,7 @@ "resourcePath" => "/Pet", "summary" => "Add a new pet to the store", "nickname" => "add_pet", - "responseClass" => "void", + "responseClass" => "Pet", "endpoint" => "/pet", "notes" => "", "parameters" => [ @@ -123,7 +123,7 @@ "resourcePath" => "/Pet", "summary" => "Update an existing pet", "nickname" => "update_pet", - "responseClass" => "void", + "responseClass" => "Pet", "endpoint" => "/pet", "notes" => "", "parameters" => [ diff --git a/samples/server/petstore/ruby-sinatra/openapi.yaml b/samples/server/petstore/ruby-sinatra/openapi.yaml index 2a48cecf82bb..26aaeac34b7d 100644 --- a/samples/server/petstore/ruby-sinatra/openapi.yaml +++ b/samples/server/petstore/ruby-sinatra/openapi.yaml @@ -26,7 +26,16 @@ paths: requestBody: $ref: '#/components/requestBodies/Pet' responses: - 405: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + description: successful operation + "405": description: Invalid input security: - petstore_auth: @@ -40,11 +49,20 @@ paths: requestBody: $ref: '#/components/requestBodies/Pet' responses: - 400: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + description: successful operation + "400": description: Invalid ID supplied - 404: + "404": description: Pet not found - 405: + "405": description: Validation exception security: - petstore_auth: @@ -74,7 +92,7 @@ paths: type: array style: form responses: - 200: + "200": content: application/xml: schema: @@ -87,7 +105,7 @@ paths: $ref: '#/components/schemas/Pet' type: array description: successful operation - 400: + "400": description: Invalid status value security: - petstore_auth: @@ -113,7 +131,7 @@ paths: type: array style: form responses: - 200: + "200": content: application/xml: schema: @@ -126,7 +144,7 @@ paths: $ref: '#/components/schemas/Pet' type: array description: successful operation - 400: + "400": description: Invalid tag value security: - petstore_auth: @@ -155,7 +173,7 @@ paths: type: integer style: simple responses: - 400: + "400": description: Invalid pet value security: - petstore_auth: @@ -178,7 +196,7 @@ paths: type: integer style: simple responses: - 200: + "200": content: application/xml: schema: @@ -187,9 +205,9 @@ paths: schema: $ref: '#/components/schemas/Pet' description: successful operation - 400: + "400": description: Invalid ID supplied - 404: + "404": description: Pet not found security: - api_key: [] @@ -222,7 +240,7 @@ paths: type: string type: object responses: - 405: + "405": description: Invalid input security: - petstore_auth: @@ -259,7 +277,7 @@ paths: type: string type: object responses: - 200: + "200": content: application/json: schema: @@ -277,7 +295,7 @@ paths: description: Returns a map of status codes to quantities operationId: getInventory responses: - 200: + "200": content: application/json: schema: @@ -302,7 +320,7 @@ paths: description: order placed for purchasing the pet required: true responses: - 200: + "200": content: application/xml: schema: @@ -311,7 +329,7 @@ paths: schema: $ref: '#/components/schemas/Order' description: successful operation - 400: + "400": description: Invalid Order summary: Place an order for a pet tags: @@ -331,9 +349,9 @@ paths: type: string style: simple responses: - 400: + "400": description: Invalid ID supplied - 404: + "404": description: Order not found summary: Delete purchase order by ID tags: @@ -355,7 +373,7 @@ paths: type: integer style: simple responses: - 200: + "200": content: application/xml: schema: @@ -364,9 +382,9 @@ paths: schema: $ref: '#/components/schemas/Order' description: successful operation - 400: + "400": description: Invalid ID supplied - 404: + "404": description: Order not found summary: Find purchase order by ID tags: @@ -386,7 +404,7 @@ paths: default: description: successful operation security: - - auth_cookie: [] + - api_key: [] summary: Create user tags: - user @@ -399,7 +417,7 @@ paths: default: description: successful operation security: - - auth_cookie: [] + - api_key: [] summary: Creates list of users with given input array tags: - user @@ -412,7 +430,7 @@ paths: default: description: successful operation security: - - auth_cookie: [] + - api_key: [] summary: Creates list of users with given input array tags: - user @@ -438,7 +456,7 @@ paths: type: string style: form responses: - 200: + "200": content: application/xml: schema: @@ -449,8 +467,8 @@ paths: description: successful operation headers: Set-Cookie: - description: Cookie authentication key for use with the `auth_cookie` - apiKey authentication. + description: Cookie authentication key for use with the `api_key` apiKey + authentication. explode: false schema: example: AUTH_KEY=abcde12345; Path=/; HttpOnly @@ -470,7 +488,7 @@ paths: format: date-time type: string style: simple - 400: + "400": description: Invalid username/password supplied summary: Logs user into the system tags: @@ -482,7 +500,7 @@ paths: default: description: successful operation security: - - auth_cookie: [] + - api_key: [] summary: Logs out current logged in user session tags: - user @@ -500,12 +518,12 @@ paths: type: string style: simple responses: - 400: + "400": description: Invalid username supplied - 404: + "404": description: User not found security: - - auth_cookie: [] + - api_key: [] summary: Delete user tags: - user @@ -521,7 +539,7 @@ paths: type: string style: simple responses: - 200: + "200": content: application/xml: schema: @@ -530,9 +548,9 @@ paths: schema: $ref: '#/components/schemas/User' description: successful operation - 400: + "400": description: Invalid username supplied - 404: + "404": description: User not found summary: Get user by user name tags: @@ -557,12 +575,12 @@ paths: description: Updated user object required: true responses: - 400: + "400": description: Invalid user supplied - 404: + "404": description: User not found security: - - auth_cookie: [] + - api_key: [] summary: Updated user tags: - user @@ -802,7 +820,3 @@ components: in: header name: api_key type: apiKey - auth_cookie: - in: cookie - name: AUTH_KEY - type: apiKey diff --git a/samples/server/petstore/ruby-sinatra/swagger.yaml b/samples/server/petstore/ruby-sinatra/swagger.yaml deleted file mode 100644 index bc7c6e9ae1d5..000000000000 --- a/samples/server/petstore/ruby-sinatra/swagger.yaml +++ /dev/null @@ -1,713 +0,0 @@ ---- -swagger: "2.0" -info: - description: "This is a sample server Petstore server. You can find out more about\ - \ Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).\ - \ For this sample, you can use the api key `special-key` to test the authorization\ - \ filters." - version: "1.0.0" - title: "Swagger Petstore" - termsOfService: "http://swagger.io/terms/" - contact: - email: "apiteam@swagger.io" - license: - name: "Apache 2.0" - url: "https://www.apache.org/licenses/LICENSE-2.0.html" -host: "petstore.swagger.io" -basePath: "/v2" -tags: -- name: "pet" - description: "Everything about your Pets" - externalDocs: - description: "Find out more" - url: "http://swagger.io" -- name: "store" - description: "Access to Petstore orders" -- name: "user" - description: "Operations about user" - externalDocs: - description: "Find out more about our store" - url: "http://swagger.io" -schemes: -- "http" -paths: - /pet: - post: - tags: - - "pet" - summary: "Add a new pet to the store" - description: "" - operationId: "addPet" - consumes: - - "application/json" - - "application/xml" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Pet object that needs to be added to the store" - required: true - schema: - $ref: "#/definitions/Pet" - responses: - 405: - description: "Invalid input" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - put: - tags: - - "pet" - summary: "Update an existing pet" - description: "" - operationId: "updatePet" - consumes: - - "application/json" - - "application/xml" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Pet object that needs to be added to the store" - required: true - schema: - $ref: "#/definitions/Pet" - responses: - 400: - description: "Invalid ID supplied" - 404: - description: "Pet not found" - 405: - description: "Validation exception" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/findByStatus: - get: - tags: - - "pet" - summary: "Finds Pets by status" - description: "Multiple status values can be provided with comma separated strings" - operationId: "findPetsByStatus" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "status" - in: "query" - description: "Status values that need to be considered for filter" - required: true - type: "array" - items: - type: "string" - enum: - - "available" - - "pending" - - "sold" - default: "available" - collectionFormat: "csv" - responses: - 200: - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Pet" - 400: - description: "Invalid status value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/findByTags: - get: - tags: - - "pet" - summary: "Finds Pets by tags" - description: "Multiple tags can be provided with comma separated strings. Use\ - \ tag1, tag2, tag3 for testing." - operationId: "findPetsByTags" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "tags" - in: "query" - description: "Tags to filter by" - required: true - type: "array" - items: - type: "string" - collectionFormat: "csv" - responses: - 200: - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Pet" - 400: - description: "Invalid tag value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/{petId}: - get: - tags: - - "pet" - summary: "Find pet by ID" - description: "Returns a single pet" - operationId: "getPetById" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet to return" - required: true - type: "integer" - format: "int64" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Pet" - 400: - description: "Invalid ID supplied" - 404: - description: "Pet not found" - security: - - api_key: [] - post: - tags: - - "pet" - summary: "Updates a pet in the store with form data" - description: "" - operationId: "updatePetWithForm" - consumes: - - "application/x-www-form-urlencoded" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet that needs to be updated" - required: true - type: "integer" - format: "int64" - - name: "name" - in: "formData" - description: "Updated name of the pet" - required: false - type: "string" - - name: "status" - in: "formData" - description: "Updated status of the pet" - required: false - type: "string" - responses: - 405: - description: "Invalid input" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - delete: - tags: - - "pet" - summary: "Deletes a pet" - description: "" - operationId: "deletePet" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "api_key" - in: "header" - required: false - type: "string" - - name: "petId" - in: "path" - description: "Pet id to delete" - required: true - type: "integer" - format: "int64" - responses: - 400: - description: "Invalid pet value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /pet/{petId}/uploadImage: - post: - tags: - - "pet" - summary: "uploads an image" - description: "" - operationId: "uploadFile" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet to update" - required: true - type: "integer" - format: "int64" - - name: "additionalMetadata" - in: "formData" - description: "Additional data to pass to server" - required: false - type: "string" - - name: "file" - in: "formData" - description: "file to upload" - required: false - type: "file" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/ApiResponse" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - /store/inventory: - get: - tags: - - "store" - summary: "Returns pet inventories by status" - description: "Returns a map of status codes to quantities" - operationId: "getInventory" - produces: - - "application/json" - parameters: [] - responses: - 200: - description: "successful operation" - schema: - type: "object" - additionalProperties: - type: "integer" - format: "int32" - security: - - api_key: [] - /store/order: - post: - tags: - - "store" - summary: "Place an order for a pet" - description: "" - operationId: "placeOrder" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "order placed for purchasing the pet" - required: true - schema: - $ref: "#/definitions/Order" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Order" - 400: - description: "Invalid Order" - /store/order/{orderId}: - get: - tags: - - "store" - summary: "Find purchase order by ID" - description: "For valid response try integer IDs with value <= 5 or > 10. Other\ - \ values will generated exceptions" - operationId: "getOrderById" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "orderId" - in: "path" - description: "ID of pet that needs to be fetched" - required: true - type: "integer" - maximum: 5 - minimum: 1 - format: "int64" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Order" - 400: - description: "Invalid ID supplied" - 404: - description: "Order not found" - delete: - tags: - - "store" - summary: "Delete purchase order by ID" - description: "For valid response try integer IDs with value < 1000. Anything\ - \ above 1000 or nonintegers will generate API errors" - operationId: "deleteOrder" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "orderId" - in: "path" - description: "ID of the order that needs to be deleted" - required: true - type: "string" - responses: - 400: - description: "Invalid ID supplied" - 404: - description: "Order not found" - /user: - post: - tags: - - "user" - summary: "Create user" - description: "This can only be done by the logged in user." - operationId: "createUser" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Created user object" - required: true - schema: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - /user/createWithArray: - post: - tags: - - "user" - summary: "Creates list of users with given input array" - description: "" - operationId: "createUsersWithArrayInput" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "List of user object" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - /user/createWithList: - post: - tags: - - "user" - summary: "Creates list of users with given input array" - description: "" - operationId: "createUsersWithListInput" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "List of user object" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - /user/login: - get: - tags: - - "user" - summary: "Logs user into the system" - description: "" - operationId: "loginUser" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "query" - description: "The user name for login" - required: true - type: "string" - - name: "password" - in: "query" - description: "The password for login in clear text" - required: true - type: "string" - responses: - 200: - description: "successful operation" - schema: - type: "string" - headers: - X-Rate-Limit: - type: "integer" - format: "int32" - description: "calls per hour allowed by the user" - X-Expires-After: - type: "string" - format: "date-time" - description: "date in UTC when toekn expires" - 400: - description: "Invalid username/password supplied" - /user/logout: - get: - tags: - - "user" - summary: "Logs out current logged in user session" - description: "" - operationId: "logoutUser" - produces: - - "application/xml" - - "application/json" - parameters: [] - responses: - default: - description: "successful operation" - /user/{username}: - get: - tags: - - "user" - summary: "Get user by user name" - description: "" - operationId: "getUserByName" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "The name that needs to be fetched. Use user1 for testing. " - required: true - type: "string" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/User" - 400: - description: "Invalid username supplied" - 404: - description: "User not found" - put: - tags: - - "user" - summary: "Updated user" - description: "This can only be done by the logged in user." - operationId: "updateUser" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "name that need to be deleted" - required: true - type: "string" - - in: "body" - name: "body" - description: "Updated user object" - required: true - schema: - $ref: "#/definitions/User" - responses: - 400: - description: "Invalid user supplied" - 404: - description: "User not found" - delete: - tags: - - "user" - summary: "Delete user" - description: "This can only be done by the logged in user." - operationId: "deleteUser" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "The name that needs to be deleted" - required: true - type: "string" - responses: - 400: - description: "Invalid username supplied" - 404: - description: "User not found" -securityDefinitions: - petstore_auth: - type: "oauth2" - authorizationUrl: "http://petstore.swagger.io/api/oauth/dialog" - flow: "implicit" - scopes: - write:pets: "modify pets in your account" - read:pets: "read your pets" - api_key: - type: "apiKey" - name: "api_key" - in: "header" -definitions: - Order: - type: "object" - properties: - id: - type: "integer" - format: "int64" - petId: - type: "integer" - format: "int64" - quantity: - type: "integer" - format: "int32" - shipDate: - type: "string" - format: "date-time" - status: - type: "string" - description: "Order Status" - enum: - - "placed" - - "approved" - - "delivered" - complete: - type: "boolean" - default: false - title: "Pet Order" - description: "An order for a pets from the pet store" - xml: - name: "Order" - Category: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - title: "Pet category" - description: "A category for a pet" - xml: - name: "Category" - User: - type: "object" - properties: - id: - type: "integer" - format: "int64" - username: - type: "string" - firstName: - type: "string" - lastName: - type: "string" - email: - type: "string" - password: - type: "string" - phone: - type: "string" - userStatus: - type: "integer" - format: "int32" - description: "User Status" - title: "a User" - description: "A User who is purchasing from the pet store" - xml: - name: "User" - Tag: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - title: "Pet Tag" - description: "A tag for a pet" - xml: - name: "Tag" - Pet: - type: "object" - required: - - "name" - - "photoUrls" - properties: - id: - type: "integer" - format: "int64" - category: - $ref: "#/definitions/Category" - name: - type: "string" - example: "doggie" - photoUrls: - type: "array" - xml: - name: "photoUrl" - wrapped: true - items: - type: "string" - tags: - type: "array" - xml: - name: "tag" - wrapped: true - items: - $ref: "#/definitions/Tag" - status: - type: "string" - description: "pet status in the store" - enum: - - "available" - - "pending" - - "sold" - title: "a Pet" - description: "A pet for sale in the pet store" - xml: - name: "Pet" - ApiResponse: - type: "object" - properties: - code: - type: "integer" - format: "int32" - type: - type: "string" - message: - type: "string" - title: "An uploaded response" - description: "Describes the result of uploading an image resource" -externalDocs: - description: "Find out more about Swagger" - url: "http://swagger.io" From 733a180a629adc8fd3a440d3014ab7847aa654e7 Mon Sep 17 00:00:00 2001 From: Farshad Nematdoust Date: Wed, 21 Apr 2021 10:22:10 +0200 Subject: [PATCH 036/186] Add Go echo server codegen (#9224) * Update codegen config * Add templates for Go Echo openapi-codegen * Add the yaml config file! * Add GoEchoServerCodegen.java. This is the first iteration, it works but probably needs a lot of improvements. * Update codegen, adds some comments. * Update GoEchoServerCodegen.java * Update GoEchoServerCodegen.java * Update GoEchoServerCodegen.java and related yaml file * Add the result of generate-samples.sh for CI purposes. * Add the result of bin/utils/ensure-up-to-date for CI purposes. * Update go-echo-server-petstore-new.yaml Fix the outputdir * Update in regard to result of ./bin/generate-samples.sh * Update in regard to result of ./bin/generate-samples.sh * Remove wrongly generated files * Add correct generated files. * Add changes regarding /bin/utils/ensure-up-to-date * Update templates to include comments. * Update/add result of ./bin/generate-samples.sh and ./bin/utils/export_docs_generators.sh --- bin/configs/go-echo-server-petstore-new.yaml | 6 + docs/generators.md | 1 + docs/generators/go-echo-server.md | 206 +++++ .../languages/GoEchoServerCodegen.java | 162 ++++ .../org.openapitools.codegen.CodegenConfig | 1 + .../go-echo-server/Dockerfile.mustache | 11 + .../resources/go-echo-server/README.mustache | 44 + .../resources/go-echo-server/api.mustache | 15 + .../resources/go-echo-server/go-mod.mustache | 5 + .../go-echo-server/handler-container.mustache | 11 + .../go-echo-server/hello-world.mustache | 6 + .../resources/go-echo-server/main.mustache | 26 + .../resources/go-echo-server/model.mustache | 23 + .../resources/go-echo-server/openapi.mustache | 1 + .../go-echo-server/.docs/api/openapi.yaml | 822 ++++++++++++++++++ .../go-echo-server/.openapi-generator-ignore | 23 + .../go-echo-server/.openapi-generator/FILES | 16 + .../go-echo-server/.openapi-generator/VERSION | 1 + .../server/petstore/go-echo-server/Dockerfile | 11 + .../server/petstore/go-echo-server/README.md | 38 + samples/server/petstore/go-echo-server/go.mod | 5 + .../go-echo-server/handlers/api_pet.go | 69 ++ .../go-echo-server/handlers/api_store.go | 37 + .../go-echo-server/handlers/api_user.go | 69 ++ .../go-echo-server/handlers/container.go | 11 + .../server/petstore/go-echo-server/main.go | 83 ++ .../go-echo-server/models/hello-world.go | 6 + .../models/model_api_response.go | 11 + .../go-echo-server/models/model_category.go | 9 + .../go-echo-server/models/model_order.go | 22 + .../go-echo-server/models/model_pet.go | 18 + .../go-echo-server/models/model_tag.go | 9 + .../go-echo-server/models/model_user.go | 22 + 33 files changed, 1800 insertions(+) create mode 100644 bin/configs/go-echo-server-petstore-new.yaml create mode 100644 docs/generators/go-echo-server.md create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoEchoServerCodegen.java create mode 100644 modules/openapi-generator/src/main/resources/go-echo-server/Dockerfile.mustache create mode 100644 modules/openapi-generator/src/main/resources/go-echo-server/README.mustache create mode 100644 modules/openapi-generator/src/main/resources/go-echo-server/api.mustache create mode 100644 modules/openapi-generator/src/main/resources/go-echo-server/go-mod.mustache create mode 100644 modules/openapi-generator/src/main/resources/go-echo-server/handler-container.mustache create mode 100644 modules/openapi-generator/src/main/resources/go-echo-server/hello-world.mustache create mode 100644 modules/openapi-generator/src/main/resources/go-echo-server/main.mustache create mode 100644 modules/openapi-generator/src/main/resources/go-echo-server/model.mustache create mode 100644 modules/openapi-generator/src/main/resources/go-echo-server/openapi.mustache create mode 100644 samples/server/petstore/go-echo-server/.docs/api/openapi.yaml create mode 100644 samples/server/petstore/go-echo-server/.openapi-generator-ignore create mode 100644 samples/server/petstore/go-echo-server/.openapi-generator/FILES create mode 100644 samples/server/petstore/go-echo-server/.openapi-generator/VERSION create mode 100644 samples/server/petstore/go-echo-server/Dockerfile create mode 100644 samples/server/petstore/go-echo-server/README.md create mode 100644 samples/server/petstore/go-echo-server/go.mod create mode 100644 samples/server/petstore/go-echo-server/handlers/api_pet.go create mode 100644 samples/server/petstore/go-echo-server/handlers/api_store.go create mode 100644 samples/server/petstore/go-echo-server/handlers/api_user.go create mode 100644 samples/server/petstore/go-echo-server/handlers/container.go create mode 100644 samples/server/petstore/go-echo-server/main.go create mode 100644 samples/server/petstore/go-echo-server/models/hello-world.go create mode 100644 samples/server/petstore/go-echo-server/models/model_api_response.go create mode 100644 samples/server/petstore/go-echo-server/models/model_category.go create mode 100644 samples/server/petstore/go-echo-server/models/model_order.go create mode 100644 samples/server/petstore/go-echo-server/models/model_pet.go create mode 100644 samples/server/petstore/go-echo-server/models/model_tag.go create mode 100644 samples/server/petstore/go-echo-server/models/model_user.go diff --git a/bin/configs/go-echo-server-petstore-new.yaml b/bin/configs/go-echo-server-petstore-new.yaml new file mode 100644 index 000000000000..bfc2e946c586 --- /dev/null +++ b/bin/configs/go-echo-server-petstore-new.yaml @@ -0,0 +1,6 @@ +generatorName: go-echo-server +outputDir: samples/server/petstore/go-echo-server +inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml +templateDir: modules/openapi-generator/src/main/resources/go-echo-server +additionalProperties: + hideGenerationTimestamp: "true" diff --git a/docs/generators.md b/docs/generators.md index e581cc54fb1a..00a114c52ec1 100644 --- a/docs/generators.md +++ b/docs/generators.md @@ -86,6 +86,7 @@ The following generators are available: * [erlang-server](generators/erlang-server.md) * [fsharp-functions (beta)](generators/fsharp-functions.md) * [fsharp-giraffe-server (beta)](generators/fsharp-giraffe-server.md) +* [go-echo-server](generators/go-echo-server.md) * [go-gin-server](generators/go-gin-server.md) * [go-server](generators/go-server.md) * [graphql-nodejs-express-server](generators/graphql-nodejs-express-server.md) diff --git a/docs/generators/go-echo-server.md b/docs/generators/go-echo-server.md new file mode 100644 index 000000000000..53c726fb85e8 --- /dev/null +++ b/docs/generators/go-echo-server.md @@ -0,0 +1,206 @@ +--- +title: Config Options for go-echo-server +sidebar_label: go-echo-server +--- + +These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. + +| Option | Description | Values | Default | +| ------ | ----------- | ------ | ------- | +|hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true| +|packageName|Go package name (convention: lowercase).| |openapi| +|packageVersion|Go package version.| |1.0.0| +|serverPort|The network port the generated server binds to| |8080| + +## IMPORT MAPPING + +| Type/Alias | Imports | +| ---------- | ------- | + + +## INSTANTIATION TYPES + +| Type/Alias | Instantiated By | +| ---------- | --------------- | + + +## LANGUAGE PRIMITIVES + +
    +
  • bool
  • +
  • byte
  • +
  • complex128
  • +
  • complex64
  • +
  • float32
  • +
  • float64
  • +
  • int
  • +
  • int32
  • +
  • int64
  • +
  • interface{}
  • +
  • map[string]interface{}
  • +
  • rune
  • +
  • string
  • +
  • uint
  • +
  • uint32
  • +
  • uint64
  • +
+ +## RESERVED WORDS + +
    +
  • bool
  • +
  • break
  • +
  • byte
  • +
  • case
  • +
  • chan
  • +
  • complex128
  • +
  • complex64
  • +
  • const
  • +
  • continue
  • +
  • default
  • +
  • defer
  • +
  • else
  • +
  • error
  • +
  • fallthrough
  • +
  • float32
  • +
  • float64
  • +
  • for
  • +
  • func
  • +
  • go
  • +
  • goto
  • +
  • if
  • +
  • import
  • +
  • int
  • +
  • int16
  • +
  • int32
  • +
  • int64
  • +
  • int8
  • +
  • interface
  • +
  • map
  • +
  • nil
  • +
  • package
  • +
  • range
  • +
  • return
  • +
  • rune
  • +
  • select
  • +
  • string
  • +
  • struct
  • +
  • switch
  • +
  • type
  • +
  • uint
  • +
  • uint16
  • +
  • uint32
  • +
  • uint64
  • +
  • uint8
  • +
  • uintptr
  • +
  • var
  • +
+ +## FEATURE SET + + +### Client Modification Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasePath|✗|ToolingExtension +|Authorizations|✗|ToolingExtension +|UserAgent|✗|ToolingExtension +|MockServer|✗|ToolingExtension + +### Data Type Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Custom|✗|OAS2,OAS3 +|Int32|✓|OAS2,OAS3 +|Int64|✓|OAS2,OAS3 +|Float|✓|OAS2,OAS3 +|Double|✓|OAS2,OAS3 +|Decimal|✓|ToolingExtension +|String|✓|OAS2,OAS3 +|Byte|✓|OAS2,OAS3 +|Binary|✓|OAS2,OAS3 +|Boolean|✓|OAS2,OAS3 +|Date|✓|OAS2,OAS3 +|DateTime|✓|OAS2,OAS3 +|Password|✓|OAS2,OAS3 +|File|✓|OAS2 +|Array|✓|OAS2,OAS3 +|Maps|✓|ToolingExtension +|CollectionFormat|✓|OAS2 +|CollectionFormatMulti|✓|OAS2 +|Enum|✓|OAS2,OAS3 +|ArrayOfEnum|✓|ToolingExtension +|ArrayOfModel|✓|ToolingExtension +|ArrayOfCollectionOfPrimitives|✓|ToolingExtension +|ArrayOfCollectionOfModel|✓|ToolingExtension +|ArrayOfCollectionOfEnum|✓|ToolingExtension +|MapOfEnum|✓|ToolingExtension +|MapOfModel|✓|ToolingExtension +|MapOfCollectionOfPrimitives|✓|ToolingExtension +|MapOfCollectionOfModel|✓|ToolingExtension +|MapOfCollectionOfEnum|✓|ToolingExtension + +### Documentation Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Readme|✓|ToolingExtension +|Model|✓|ToolingExtension +|Api|✓|ToolingExtension + +### Global Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Host|✓|OAS2,OAS3 +|BasePath|✓|OAS2,OAS3 +|Info|✓|OAS2,OAS3 +|Schemes|✗|OAS2,OAS3 +|PartialSchemes|✓|OAS2,OAS3 +|Consumes|✓|OAS2 +|Produces|✓|OAS2 +|ExternalDocumentation|✓|OAS2,OAS3 +|Examples|✓|OAS2,OAS3 +|XMLStructureDefinitions|✗|OAS2,OAS3 +|MultiServer|✗|OAS3 +|ParameterizedServer|✗|OAS3 +|ParameterStyling|✗|OAS3 +|Callbacks|✗|OAS3 +|LinkObjects|✗|OAS3 + +### Parameter Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Path|✓|OAS2,OAS3 +|Query|✓|OAS2,OAS3 +|Header|✓|OAS2,OAS3 +|Body|✓|OAS2 +|FormUnencoded|✓|OAS2 +|FormMultipart|✓|OAS2 +|Cookie|✗|OAS3 + +### Schema Support Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Simple|✓|OAS2,OAS3 +|Composite|✓|OAS2,OAS3 +|Polymorphism|✗|OAS2,OAS3 +|Union|✗|OAS3 + +### Security Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasicAuth|✗|OAS2,OAS3 +|ApiKey|✗|OAS2,OAS3 +|OpenIDConnect|✗|OAS3 +|BearerToken|✗|OAS3 +|OAuth2_Implicit|✗|OAS2,OAS3 +|OAuth2_Password|✗|OAS2,OAS3 +|OAuth2_ClientCredentials|✗|OAS2,OAS3 +|OAuth2_AuthorizationCode|✗|OAS2,OAS3 + +### Wire Format Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|JSON|✓|OAS2,OAS3 +|XML|✓|OAS2,OAS3 +|PROTOBUF|✗|ToolingExtension +|Custom|✗|OAS2,OAS3 diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoEchoServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoEchoServerCodegen.java new file mode 100644 index 000000000000..093818d74254 --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoEchoServerCodegen.java @@ -0,0 +1,162 @@ +package org.openapitools.codegen.languages; + +import org.openapitools.codegen.*; + +import java.io.File; +import java.util.*; + +import org.openapitools.codegen.meta.features.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class GoEchoServerCodegen extends AbstractGoCodegen { + static final Logger LOGGER = LoggerFactory.getLogger(GoEchoServerCodegen.class); + + protected String apiVersion = "1.0.0"; + protected int serverPort = 8080; + protected String projectName = "openapi-go-echo-server"; + protected String apiPath = "go"; + + private static final String MODEL_PACKAGE_NAME = "models"; + private static final String API_PACKAGE_NAME = "handlers"; + private static final String OUTPUT_PATH = "generated-code" + File.separator + "go-echo-server"; + + public CodegenType getTag() { + return CodegenType.SERVER; + } + + public String getName() { + return "go-echo-server"; + } + + public String getHelp() { + return "Generates a go-echo server. (Beta)"; + } + + public GoEchoServerCodegen() { + super(); + + modifyFeatureSet(features -> features + .includeDocumentationFeatures(DocumentationFeature.Readme) + .wireFormatFeatures(EnumSet.of(WireFormatFeature.JSON, WireFormatFeature.XML)) + .securityFeatures(EnumSet.noneOf( + SecurityFeature.class + )) + .excludeGlobalFeatures( + GlobalFeature.XMLStructureDefinitions, + GlobalFeature.Callbacks, + GlobalFeature.LinkObjects, + GlobalFeature.ParameterStyling + ) + .excludeSchemaSupportFeatures( + SchemaSupportFeature.Polymorphism + ) + .excludeParameterFeatures( + ParameterFeature.Cookie + ) + ); + + outputFolder = OUTPUT_PATH; + modelTemplateFiles.put("model.mustache", ".go"); + setModelPackage(MODEL_PACKAGE_NAME); + apiTemplateFiles.put("api.mustache", ".go"); + embeddedTemplateDir = templateDir = "go-echo-server"; + + /* + * Reserved words. Override this with reserved words specific to your language + */ + setReservedWordsLowerCase( + Arrays.asList( + // data type + "string", "bool", "uint", "uint8", "uint16", "uint32", "uint64", + "int", "int8", "int16", "int32", "int64", "float32", "float64", + "complex64", "complex128", "rune", "byte", "uintptr", + "break", "default", "func", "interface", "select", + "case", "defer", "go", "map", "struct", + "chan", "else", "goto", "package", "switch", + "const", "fallthrough", "if", "range", "type", + "continue", "for", "import", "return", "var", "error", "nil") + // Added "error" as it's used so frequently that it may as well be a keyword + ); + + CliOption optServerPort = new CliOption("serverPort", "The network port the generated server binds to"); + optServerPort.setType("int"); + optServerPort.defaultValue(Integer.toString(serverPort)); + cliOptions.add(optServerPort); + } + + @Override + public Map postProcessOperationsWithModels(Map objs, List allModels) { + objs = super.postProcessOperationsWithModels(objs, allModels); + + Map operations = (Map) objs.get("operations"); + List operationList = (List) operations.get("operation"); + for (CodegenOperation op : operationList) { + if (op.path != null) { + op.path = op.path.replaceAll("\\{(.*?)\\}", ":$1"); + } + } + return objs; + } + + @Override + public void processOpts() { + super.processOpts(); + + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { + setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); + } else { + setPackageName("openapi"); + additionalProperties.put(CodegenConstants.PACKAGE_NAME, this.packageName); + } + + /* + * Additional Properties. These values can be passed to the templates and + * are available in models, apis, and supporting files + */ + if (additionalProperties.containsKey("apiVersion")) { + this.apiVersion = (String) additionalProperties.get("apiVersion"); + } else { + additionalProperties.put("apiVersion", apiVersion); + } + + if (additionalProperties.containsKey("serverPort")) { + this.serverPort = Integer.parseInt((String) additionalProperties.get("serverPort")); + } else { + additionalProperties.put("serverPort", serverPort); + } + + if (additionalProperties.containsKey("apiPath")) { + this.apiPath = (String) additionalProperties.get("apiPath"); + } else { + additionalProperties.put("apiPath", apiPath); + } + + if (additionalProperties.containsKey(CodegenConstants.ENUM_CLASS_PREFIX)) { + setEnumClassPrefix(Boolean.parseBoolean(additionalProperties.get(CodegenConstants.ENUM_CLASS_PREFIX).toString())); + if (enumClassPrefix) { + additionalProperties.put(CodegenConstants.ENUM_CLASS_PREFIX, true); + } + } + + /* + set model and package names, this is mainly used inside the templates. + */ + modelPackage = MODEL_PACKAGE_NAME; + apiPackage = API_PACKAGE_NAME; + + /* + * Supporting Files. You can write single files for the generator with the + * entire object tree available. If the input file has a suffix of `.mustache + * it will be processed by the template engine. Otherwise, it will be copied + */ + supportingFiles.add(new SupportingFile("openapi.mustache", ".docs/api", "openapi.yaml")); + supportingFiles.add(new SupportingFile("hello-world.mustache", "models", "hello-world.go")); + supportingFiles.add(new SupportingFile("go-mod.mustache", "", "go.mod")); + supportingFiles.add(new SupportingFile("handler-container.mustache", "handlers", "container.go")); + supportingFiles.add(new SupportingFile("main.mustache", "", "main.go")); + supportingFiles.add(new SupportingFile("Dockerfile.mustache", "", "Dockerfile")); + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md") + .doNotOverwrite()); + } +} diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig index 886c41c7f4e2..87ab2b5e352c 100644 --- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig +++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig @@ -131,3 +131,4 @@ org.openapitools.codegen.languages.TypeScriptNestjsClientCodegen org.openapitools.codegen.languages.TypeScriptNodeClientCodegen org.openapitools.codegen.languages.TypeScriptReduxQueryClientCodegen org.openapitools.codegen.languages.TypeScriptRxjsClientCodegen +org.openapitools.codegen.languages.GoEchoServerCodegen diff --git a/modules/openapi-generator/src/main/resources/go-echo-server/Dockerfile.mustache b/modules/openapi-generator/src/main/resources/go-echo-server/Dockerfile.mustache new file mode 100644 index 000000000000..bd60366b27fb --- /dev/null +++ b/modules/openapi-generator/src/main/resources/go-echo-server/Dockerfile.mustache @@ -0,0 +1,11 @@ +FROM golang:1.16-alpine3.13 as build-env +RUN apk add --no-cache git gcc +RUN mkdir /app +WORKDIR /app +COPY . . +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o {{packageName}} +FROM alpine:3.13 +COPY --from=build-env /app/{{packageName}} . +EXPOSE 8080/tcp +USER 1001 +ENTRYPOINT ["./{{packageName}}"] \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/go-echo-server/README.mustache b/modules/openapi-generator/src/main/resources/go-echo-server/README.mustache new file mode 100644 index 000000000000..9ff2b9aeb19f --- /dev/null +++ b/modules/openapi-generator/src/main/resources/go-echo-server/README.mustache @@ -0,0 +1,44 @@ +# Go Echo API Server for {{packageName}} + +{{#appDescriptionWithNewLines}} +{{{appDescriptionWithNewLines}}} +{{/appDescriptionWithNewLines}} + +## Overview +This server was generated by the [openapi-generator] +(https://openapi-generator.tech) project. +By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub. +- + +To see how to make this your own, look here: + +[README](https://openapi-generator.tech) + +- API version: {{appVersion}}{{^hideGenerationTimestamp}} +- Build date: {{generatedDate}}{{/hideGenerationTimestamp}} +{{#infoUrl}} +For more information, please visit [{{{infoUrl}}}]({{{infoUrl}}}) +{{/infoUrl}} + +### Running the server + +To run the server, follow these simple steps: + +``` +go mod download +go build -o app +``` + +To run the server in a docker container +``` +docker build --network=host -t {{{packageName}}} . +``` + +Once the image is built, just run +``` +docker run --rm -it {{{packageName}}} +``` + +### Known Issue + +TBA \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/go-echo-server/api.mustache b/modules/openapi-generator/src/main/resources/go-echo-server/api.mustache new file mode 100644 index 000000000000..9ac9ad29838a --- /dev/null +++ b/modules/openapi-generator/src/main/resources/go-echo-server/api.mustache @@ -0,0 +1,15 @@ +package handlers +{{#operations}} +import ( + "github.com/{{{gitUserId}}}/{{{gitRepoId}}}/models" + "github.com/labstack/echo/v4" + "net/http" +){{#operation}} + +// {{nickname}} - {{{summary}}} +func (c *Container) {{operationId}}(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} +{{/operation}}{{/operations}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/go-echo-server/go-mod.mustache b/modules/openapi-generator/src/main/resources/go-echo-server/go-mod.mustache new file mode 100644 index 000000000000..4b31aa41c83c --- /dev/null +++ b/modules/openapi-generator/src/main/resources/go-echo-server/go-mod.mustache @@ -0,0 +1,5 @@ +module github.com/{{{gitUserId}}}/{{{gitRepoId}}} + +go 1.16 + +require github.com/labstack/echo/v4 v4.2.0 diff --git a/modules/openapi-generator/src/main/resources/go-echo-server/handler-container.mustache b/modules/openapi-generator/src/main/resources/go-echo-server/handler-container.mustache new file mode 100644 index 000000000000..330a32f51534 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/go-echo-server/handler-container.mustache @@ -0,0 +1,11 @@ +package handlers + +// Container will hold all dependencies for your application. +type Container struct { +} + +// NewContainer returns an empty or an initialized container for your handlers. +func NewContainer() (Container, error) { + c := Container{} + return c, nil +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/go-echo-server/hello-world.mustache b/modules/openapi-generator/src/main/resources/go-echo-server/hello-world.mustache new file mode 100644 index 000000000000..98b4d20cb613 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/go-echo-server/hello-world.mustache @@ -0,0 +1,6 @@ +package models + +// HelloWorld is a sample data structure to make sure each endpoint return something. +type HelloWorld struct { + Message string `json:"message"` +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/go-echo-server/main.mustache b/modules/openapi-generator/src/main/resources/go-echo-server/main.mustache new file mode 100644 index 000000000000..ef0421cdd111 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/go-echo-server/main.mustache @@ -0,0 +1,26 @@ +package main + +import ( + "github.com/{{{gitUserId}}}/{{{gitRepoId}}}/handlers" + "github.com/labstack/echo/v4" + "github.com/labstack/echo/v4/middleware" +) + +func main() { + e := echo.New() + + //todo: handle the error! + c, _ := handlers.NewContainer() + + // Middleware + e.Use(middleware.Logger()) + e.Use(middleware.Recover()) + +{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}} + // {{nickname}} - {{{summary}}} + e.{{httpMethod.toUpperCase}}("{{{basePathWithoutHost}}}{{{path}}}", c.{{operationId}}) +{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} + + // Start server + e.Logger.Fatal(e.Start(":{{serverPort}}")) +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/go-echo-server/model.mustache b/modules/openapi-generator/src/main/resources/go-echo-server/model.mustache new file mode 100644 index 000000000000..ef59462f11ea --- /dev/null +++ b/modules/openapi-generator/src/main/resources/go-echo-server/model.mustache @@ -0,0 +1,23 @@ +package models +{{#models}}{{#imports}} +{{#-first}}import ( +{{/-first}} "{{import}}"{{#-last}} +) +{{/-last}}{{/imports}}{{#model}}{{#isEnum}}{{#description}}// {{{classname}}} : {{{description}}}{{/description}} +type {{{classname}}} {{^format}}{{dataType}}{{/format}}{{#format}}{{{format}}}{{/format}} + +// List of {{{classname}}} +const ( + {{#allowableValues}} + {{#enumVars}} + {{#enumClassPrefix}}{{{classname.toUpperCase}}}_{{/enumClassPrefix}}{{name}} {{{classname}}} = {{{value}}} + {{/enumVars}} + {{/allowableValues}} +){{/isEnum}}{{^isEnum}}{{#description}} +// {{classname}} - {{{description}}}{{/description}} +type {{classname}} struct { +{{#vars}}{{#description}} + // {{{description}}}{{/description}} + {{name}} {{#isNullable}}*{{/isNullable}}{{{dataType}}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}` +{{/vars}} +}{{/isEnum}}{{/model}}{{/models}} diff --git a/modules/openapi-generator/src/main/resources/go-echo-server/openapi.mustache b/modules/openapi-generator/src/main/resources/go-echo-server/openapi.mustache new file mode 100644 index 000000000000..51ebafb0187d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/go-echo-server/openapi.mustache @@ -0,0 +1 @@ +{{{openapi-yaml}}} \ No newline at end of file diff --git a/samples/server/petstore/go-echo-server/.docs/api/openapi.yaml b/samples/server/petstore/go-echo-server/.docs/api/openapi.yaml new file mode 100644 index 000000000000..26aaeac34b7d --- /dev/null +++ b/samples/server/petstore/go-echo-server/.docs/api/openapi.yaml @@ -0,0 +1,822 @@ +openapi: 3.0.0 +info: + description: This is a sample server Petstore server. For this sample, you can use + the api key `special-key` to test the authorization filters. + license: + name: Apache-2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + title: OpenAPI Petstore + version: 1.0.0 +externalDocs: + description: Find out more about Swagger + url: http://swagger.io +servers: +- url: http://petstore.swagger.io/v2 +tags: +- description: Everything about your Pets + name: pet +- description: Access to Petstore orders + name: store +- description: Operations about user + name: user +paths: + /pet: + post: + operationId: addPet + requestBody: + $ref: '#/components/requestBodies/Pet' + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + description: successful operation + "405": + description: Invalid input + security: + - petstore_auth: + - write:pets + - read:pets + summary: Add a new pet to the store + tags: + - pet + put: + operationId: updatePet + requestBody: + $ref: '#/components/requestBodies/Pet' + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + description: successful operation + "400": + description: Invalid ID supplied + "404": + description: Pet not found + "405": + description: Validation exception + security: + - petstore_auth: + - write:pets + - read:pets + summary: Update an existing pet + tags: + - pet + /pet/findByStatus: + get: + description: Multiple status values can be provided with comma separated strings + operationId: findPetsByStatus + parameters: + - description: Status values that need to be considered for filter + explode: false + in: query + name: status + required: true + schema: + items: + default: available + enum: + - available + - pending + - sold + type: string + type: array + style: form + responses: + "200": + content: + application/xml: + schema: + items: + $ref: '#/components/schemas/Pet' + type: array + application/json: + schema: + items: + $ref: '#/components/schemas/Pet' + type: array + description: successful operation + "400": + description: Invalid status value + security: + - petstore_auth: + - read:pets + summary: Finds Pets by status + tags: + - pet + /pet/findByTags: + get: + deprecated: true + description: Multiple tags can be provided with comma separated strings. Use + tag1, tag2, tag3 for testing. + operationId: findPetsByTags + parameters: + - description: Tags to filter by + explode: false + in: query + name: tags + required: true + schema: + items: + type: string + type: array + style: form + responses: + "200": + content: + application/xml: + schema: + items: + $ref: '#/components/schemas/Pet' + type: array + application/json: + schema: + items: + $ref: '#/components/schemas/Pet' + type: array + description: successful operation + "400": + description: Invalid tag value + security: + - petstore_auth: + - read:pets + summary: Finds Pets by tags + tags: + - pet + /pet/{petId}: + delete: + operationId: deletePet + parameters: + - explode: false + in: header + name: api_key + required: false + schema: + type: string + style: simple + - description: Pet id to delete + explode: false + in: path + name: petId + required: true + schema: + format: int64 + type: integer + style: simple + responses: + "400": + description: Invalid pet value + security: + - petstore_auth: + - write:pets + - read:pets + summary: Deletes a pet + tags: + - pet + get: + description: Returns a single pet + operationId: getPetById + parameters: + - description: ID of pet to return + explode: false + in: path + name: petId + required: true + schema: + format: int64 + type: integer + style: simple + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + description: successful operation + "400": + description: Invalid ID supplied + "404": + description: Pet not found + security: + - api_key: [] + summary: Find pet by ID + tags: + - pet + post: + operationId: updatePetWithForm + parameters: + - description: ID of pet that needs to be updated + explode: false + in: path + name: petId + required: true + schema: + format: int64 + type: integer + style: simple + requestBody: + $ref: '#/components/requestBodies/inline_object' + content: + application/x-www-form-urlencoded: + schema: + properties: + name: + description: Updated name of the pet + type: string + status: + description: Updated status of the pet + type: string + type: object + responses: + "405": + description: Invalid input + security: + - petstore_auth: + - write:pets + - read:pets + summary: Updates a pet in the store with form data + tags: + - pet + /pet/{petId}/uploadImage: + post: + operationId: uploadFile + parameters: + - description: ID of pet to update + explode: false + in: path + name: petId + required: true + schema: + format: int64 + type: integer + style: simple + requestBody: + $ref: '#/components/requestBodies/inline_object_1' + content: + multipart/form-data: + schema: + properties: + additionalMetadata: + description: Additional data to pass to server + type: string + file: + description: file to upload + format: binary + type: string + type: object + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' + description: successful operation + security: + - petstore_auth: + - write:pets + - read:pets + summary: uploads an image + tags: + - pet + /store/inventory: + get: + description: Returns a map of status codes to quantities + operationId: getInventory + responses: + "200": + content: + application/json: + schema: + additionalProperties: + format: int32 + type: integer + type: object + description: successful operation + security: + - api_key: [] + summary: Returns pet inventories by status + tags: + - store + /store/order: + post: + operationId: placeOrder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Order' + description: order placed for purchasing the pet + required: true + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + description: successful operation + "400": + description: Invalid Order + summary: Place an order for a pet + tags: + - store + /store/order/{orderId}: + delete: + description: For valid response try integer IDs with value < 1000. Anything + above 1000 or nonintegers will generate API errors + operationId: deleteOrder + parameters: + - description: ID of the order that needs to be deleted + explode: false + in: path + name: orderId + required: true + schema: + type: string + style: simple + responses: + "400": + description: Invalid ID supplied + "404": + description: Order not found + summary: Delete purchase order by ID + tags: + - store + get: + description: For valid response try integer IDs with value <= 5 or > 10. Other + values will generated exceptions + operationId: getOrderById + parameters: + - description: ID of pet that needs to be fetched + explode: false + in: path + name: orderId + required: true + schema: + format: int64 + maximum: 5 + minimum: 1 + type: integer + style: simple + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + description: successful operation + "400": + description: Invalid ID supplied + "404": + description: Order not found + summary: Find purchase order by ID + tags: + - store + /user: + post: + description: This can only be done by the logged in user. + operationId: createUser + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: Created user object + required: true + responses: + default: + description: successful operation + security: + - api_key: [] + summary: Create user + tags: + - user + /user/createWithArray: + post: + operationId: createUsersWithArrayInput + requestBody: + $ref: '#/components/requestBodies/UserArray' + responses: + default: + description: successful operation + security: + - api_key: [] + summary: Creates list of users with given input array + tags: + - user + /user/createWithList: + post: + operationId: createUsersWithListInput + requestBody: + $ref: '#/components/requestBodies/UserArray' + responses: + default: + description: successful operation + security: + - api_key: [] + summary: Creates list of users with given input array + tags: + - user + /user/login: + get: + operationId: loginUser + parameters: + - description: The user name for login + explode: true + in: query + name: username + required: true + schema: + pattern: ^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$ + type: string + style: form + - description: The password for login in clear text + explode: true + in: query + name: password + required: true + schema: + type: string + style: form + responses: + "200": + content: + application/xml: + schema: + type: string + application/json: + schema: + type: string + description: successful operation + headers: + Set-Cookie: + description: Cookie authentication key for use with the `api_key` apiKey + authentication. + explode: false + schema: + example: AUTH_KEY=abcde12345; Path=/; HttpOnly + type: string + style: simple + X-Rate-Limit: + description: calls per hour allowed by the user + explode: false + schema: + format: int32 + type: integer + style: simple + X-Expires-After: + description: date in UTC when toekn expires + explode: false + schema: + format: date-time + type: string + style: simple + "400": + description: Invalid username/password supplied + summary: Logs user into the system + tags: + - user + /user/logout: + get: + operationId: logoutUser + responses: + default: + description: successful operation + security: + - api_key: [] + summary: Logs out current logged in user session + tags: + - user + /user/{username}: + delete: + description: This can only be done by the logged in user. + operationId: deleteUser + parameters: + - description: The name that needs to be deleted + explode: false + in: path + name: username + required: true + schema: + type: string + style: simple + responses: + "400": + description: Invalid username supplied + "404": + description: User not found + security: + - api_key: [] + summary: Delete user + tags: + - user + get: + operationId: getUserByName + parameters: + - description: The name that needs to be fetched. Use user1 for testing. + explode: false + in: path + name: username + required: true + schema: + type: string + style: simple + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/User' + application/json: + schema: + $ref: '#/components/schemas/User' + description: successful operation + "400": + description: Invalid username supplied + "404": + description: User not found + summary: Get user by user name + tags: + - user + put: + description: This can only be done by the logged in user. + operationId: updateUser + parameters: + - description: name that need to be deleted + explode: false + in: path + name: username + required: true + schema: + type: string + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: Updated user object + required: true + responses: + "400": + description: Invalid user supplied + "404": + description: User not found + security: + - api_key: [] + summary: Updated user + tags: + - user +components: + requestBodies: + UserArray: + content: + application/json: + schema: + items: + $ref: '#/components/schemas/User' + type: array + description: List of user object + required: true + Pet: + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + description: Pet object that needs to be added to the store + required: true + inline_object: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/inline_object' + inline_object_1: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/inline_object_1' + schemas: + Order: + description: An order for a pets from the pet store + example: + petId: 6 + quantity: 1 + id: 0 + shipDate: 2000-01-23T04:56:07.000+00:00 + complete: false + status: placed + properties: + id: + format: int64 + type: integer + petId: + format: int64 + type: integer + quantity: + format: int32 + type: integer + shipDate: + format: date-time + type: string + status: + description: Order Status + enum: + - placed + - approved + - delivered + type: string + complete: + default: false + type: boolean + title: Pet Order + type: object + xml: + name: Order + Category: + description: A category for a pet + example: + name: name + id: 6 + properties: + id: + format: int64 + type: integer + name: + pattern: ^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$ + type: string + title: Pet category + type: object + xml: + name: Category + User: + description: A User who is purchasing from the pet store + example: + firstName: firstName + lastName: lastName + password: password + userStatus: 6 + phone: phone + id: 0 + email: email + username: username + properties: + id: + format: int64 + type: integer + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + description: User Status + format: int32 + type: integer + title: a User + type: object + xml: + name: User + Tag: + description: A tag for a pet + example: + name: name + id: 1 + properties: + id: + format: int64 + type: integer + name: + type: string + title: Pet Tag + type: object + xml: + name: Tag + Pet: + description: A pet for sale in the pet store + example: + photoUrls: + - photoUrls + - photoUrls + name: doggie + id: 0 + category: + name: name + id: 6 + tags: + - name: name + id: 1 + - name: name + id: 1 + status: available + properties: + id: + format: int64 + type: integer + category: + $ref: '#/components/schemas/Category' + name: + example: doggie + type: string + photoUrls: + items: + type: string + type: array + xml: + name: photoUrl + wrapped: true + tags: + items: + $ref: '#/components/schemas/Tag' + type: array + xml: + name: tag + wrapped: true + status: + description: pet status in the store + enum: + - available + - pending + - sold + type: string + required: + - name + - photoUrls + title: a Pet + type: object + xml: + name: Pet + ApiResponse: + description: Describes the result of uploading an image resource + example: + code: 0 + type: type + message: message + properties: + code: + format: int32 + type: integer + type: + type: string + message: + type: string + title: An uploaded response + type: object + inline_object: + properties: + name: + description: Updated name of the pet + type: string + status: + description: Updated status of the pet + type: string + type: object + inline_object_1: + properties: + additionalMetadata: + description: Additional data to pass to server + type: string + file: + description: file to upload + format: binary + type: string + type: object + securitySchemes: + petstore_auth: + flows: + implicit: + authorizationUrl: http://petstore.swagger.io/api/oauth/dialog + scopes: + write:pets: modify pets in your account + read:pets: read your pets + type: oauth2 + api_key: + in: header + name: api_key + type: apiKey diff --git a/samples/server/petstore/go-echo-server/.openapi-generator-ignore b/samples/server/petstore/go-echo-server/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/server/petstore/go-echo-server/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/server/petstore/go-echo-server/.openapi-generator/FILES b/samples/server/petstore/go-echo-server/.openapi-generator/FILES new file mode 100644 index 000000000000..1197d5a46ff0 --- /dev/null +++ b/samples/server/petstore/go-echo-server/.openapi-generator/FILES @@ -0,0 +1,16 @@ +.docs/api/openapi.yaml +Dockerfile +README.md +go.mod +handlers/api_pet.go +handlers/api_store.go +handlers/api_user.go +handlers/container.go +main.go +models/hello-world.go +models/model_api_response.go +models/model_category.go +models/model_order.go +models/model_pet.go +models/model_tag.go +models/model_user.go diff --git a/samples/server/petstore/go-echo-server/.openapi-generator/VERSION b/samples/server/petstore/go-echo-server/.openapi-generator/VERSION new file mode 100644 index 000000000000..d509cc92aa80 --- /dev/null +++ b/samples/server/petstore/go-echo-server/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/go-echo-server/Dockerfile b/samples/server/petstore/go-echo-server/Dockerfile new file mode 100644 index 000000000000..da7cf24944f9 --- /dev/null +++ b/samples/server/petstore/go-echo-server/Dockerfile @@ -0,0 +1,11 @@ +FROM golang:1.16-alpine3.13 as build-env +RUN apk add --no-cache git gcc +RUN mkdir /app +WORKDIR /app +COPY . . +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o openapi +FROM alpine:3.13 +COPY --from=build-env /app/openapi . +EXPOSE 8080/tcp +USER 1001 +ENTRYPOINT ["./openapi"] \ No newline at end of file diff --git a/samples/server/petstore/go-echo-server/README.md b/samples/server/petstore/go-echo-server/README.md new file mode 100644 index 000000000000..d0c7ad18acee --- /dev/null +++ b/samples/server/petstore/go-echo-server/README.md @@ -0,0 +1,38 @@ +# Go Echo API Server for openapi + +This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + +## Overview +This server was generated by the [openapi-generator] +(https://openapi-generator.tech) project. +By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub. +- + +To see how to make this your own, look here: + +[README](https://openapi-generator.tech) + +- API version: 1.0.0 + +### Running the server + +To run the server, follow these simple steps: + +``` +go mod download +go build -o app +``` + +To run the server in a docker container +``` +docker build --network=host -t openapi . +``` + +Once the image is built, just run +``` +docker run --rm -it openapi +``` + +### Known Issue + +TBA \ No newline at end of file diff --git a/samples/server/petstore/go-echo-server/go.mod b/samples/server/petstore/go-echo-server/go.mod new file mode 100644 index 000000000000..a7d3a57f6197 --- /dev/null +++ b/samples/server/petstore/go-echo-server/go.mod @@ -0,0 +1,5 @@ +module github.com/GIT_USER_ID/GIT_REPO_ID + +go 1.16 + +require github.com/labstack/echo/v4 v4.2.0 diff --git a/samples/server/petstore/go-echo-server/handlers/api_pet.go b/samples/server/petstore/go-echo-server/handlers/api_pet.go new file mode 100644 index 000000000000..0fd09f1ff5c2 --- /dev/null +++ b/samples/server/petstore/go-echo-server/handlers/api_pet.go @@ -0,0 +1,69 @@ +package handlers +import ( + "github.com/GIT_USER_ID/GIT_REPO_ID/models" + "github.com/labstack/echo/v4" + "net/http" +) + +// AddPet - Add a new pet to the store +func (c *Container) AddPet(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// DeletePet - Deletes a pet +func (c *Container) DeletePet(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// FindPetsByStatus - Finds Pets by status +func (c *Container) FindPetsByStatus(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// FindPetsByTags - Finds Pets by tags +func (c *Container) FindPetsByTags(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// GetPetById - Find pet by ID +func (c *Container) GetPetById(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// UpdatePet - Update an existing pet +func (c *Container) UpdatePet(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// UpdatePetWithForm - Updates a pet in the store with form data +func (c *Container) UpdatePetWithForm(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// UploadFile - uploads an image +func (c *Container) UploadFile(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} diff --git a/samples/server/petstore/go-echo-server/handlers/api_store.go b/samples/server/petstore/go-echo-server/handlers/api_store.go new file mode 100644 index 000000000000..90cf94597ead --- /dev/null +++ b/samples/server/petstore/go-echo-server/handlers/api_store.go @@ -0,0 +1,37 @@ +package handlers +import ( + "github.com/GIT_USER_ID/GIT_REPO_ID/models" + "github.com/labstack/echo/v4" + "net/http" +) + +// DeleteOrder - Delete purchase order by ID +func (c *Container) DeleteOrder(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// GetInventory - Returns pet inventories by status +func (c *Container) GetInventory(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// GetOrderById - Find purchase order by ID +func (c *Container) GetOrderById(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// PlaceOrder - Place an order for a pet +func (c *Container) PlaceOrder(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} diff --git a/samples/server/petstore/go-echo-server/handlers/api_user.go b/samples/server/petstore/go-echo-server/handlers/api_user.go new file mode 100644 index 000000000000..c7893a407efb --- /dev/null +++ b/samples/server/petstore/go-echo-server/handlers/api_user.go @@ -0,0 +1,69 @@ +package handlers +import ( + "github.com/GIT_USER_ID/GIT_REPO_ID/models" + "github.com/labstack/echo/v4" + "net/http" +) + +// CreateUser - Create user +func (c *Container) CreateUser(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// CreateUsersWithArrayInput - Creates list of users with given input array +func (c *Container) CreateUsersWithArrayInput(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// CreateUsersWithListInput - Creates list of users with given input array +func (c *Container) CreateUsersWithListInput(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// DeleteUser - Delete user +func (c *Container) DeleteUser(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// GetUserByName - Get user by user name +func (c *Container) GetUserByName(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// LoginUser - Logs user into the system +func (c *Container) LoginUser(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// LogoutUser - Logs out current logged in user session +func (c *Container) LogoutUser(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} + + +// UpdateUser - Updated user +func (c *Container) UpdateUser(ctx echo.Context) error { + return ctx.JSON(http.StatusOK, models.HelloWorld { + Message: "Hello World", + }) +} diff --git a/samples/server/petstore/go-echo-server/handlers/container.go b/samples/server/petstore/go-echo-server/handlers/container.go new file mode 100644 index 000000000000..330a32f51534 --- /dev/null +++ b/samples/server/petstore/go-echo-server/handlers/container.go @@ -0,0 +1,11 @@ +package handlers + +// Container will hold all dependencies for your application. +type Container struct { +} + +// NewContainer returns an empty or an initialized container for your handlers. +func NewContainer() (Container, error) { + c := Container{} + return c, nil +} \ No newline at end of file diff --git a/samples/server/petstore/go-echo-server/main.go b/samples/server/petstore/go-echo-server/main.go new file mode 100644 index 000000000000..2d4c212e23c3 --- /dev/null +++ b/samples/server/petstore/go-echo-server/main.go @@ -0,0 +1,83 @@ +package main + +import ( + "github.com/GIT_USER_ID/GIT_REPO_ID/handlers" + "github.com/labstack/echo/v4" + "github.com/labstack/echo/v4/middleware" +) + +func main() { + e := echo.New() + + //todo: handle the error! + c, _ := handlers.NewContainer() + + // Middleware + e.Use(middleware.Logger()) + e.Use(middleware.Recover()) + + + // AddPet - Add a new pet to the store + e.POST("/v2/pet", c.AddPet) + + // DeletePet - Deletes a pet + e.DELETE("/v2/pet/:petId", c.DeletePet) + + // FindPetsByStatus - Finds Pets by status + e.GET("/v2/pet/findByStatus", c.FindPetsByStatus) + + // FindPetsByTags - Finds Pets by tags + e.GET("/v2/pet/findByTags", c.FindPetsByTags) + + // GetPetById - Find pet by ID + e.GET("/v2/pet/:petId", c.GetPetById) + + // UpdatePet - Update an existing pet + e.PUT("/v2/pet", c.UpdatePet) + + // UpdatePetWithForm - Updates a pet in the store with form data + e.POST("/v2/pet/:petId", c.UpdatePetWithForm) + + // UploadFile - uploads an image + e.POST("/v2/pet/:petId/uploadImage", c.UploadFile) + + // DeleteOrder - Delete purchase order by ID + e.DELETE("/v2/store/order/:orderId", c.DeleteOrder) + + // GetInventory - Returns pet inventories by status + e.GET("/v2/store/inventory", c.GetInventory) + + // GetOrderById - Find purchase order by ID + e.GET("/v2/store/order/:orderId", c.GetOrderById) + + // PlaceOrder - Place an order for a pet + e.POST("/v2/store/order", c.PlaceOrder) + + // CreateUser - Create user + e.POST("/v2/user", c.CreateUser) + + // CreateUsersWithArrayInput - Creates list of users with given input array + e.POST("/v2/user/createWithArray", c.CreateUsersWithArrayInput) + + // CreateUsersWithListInput - Creates list of users with given input array + e.POST("/v2/user/createWithList", c.CreateUsersWithListInput) + + // DeleteUser - Delete user + e.DELETE("/v2/user/:username", c.DeleteUser) + + // GetUserByName - Get user by user name + e.GET("/v2/user/:username", c.GetUserByName) + + // LoginUser - Logs user into the system + e.GET("/v2/user/login", c.LoginUser) + + // LogoutUser - Logs out current logged in user session + e.GET("/v2/user/logout", c.LogoutUser) + + // UpdateUser - Updated user + e.PUT("/v2/user/:username", c.UpdateUser) + + + // Start server + e.Logger.Fatal(e.Start(":8080")) +} \ No newline at end of file diff --git a/samples/server/petstore/go-echo-server/models/hello-world.go b/samples/server/petstore/go-echo-server/models/hello-world.go new file mode 100644 index 000000000000..98b4d20cb613 --- /dev/null +++ b/samples/server/petstore/go-echo-server/models/hello-world.go @@ -0,0 +1,6 @@ +package models + +// HelloWorld is a sample data structure to make sure each endpoint return something. +type HelloWorld struct { + Message string `json:"message"` +} \ No newline at end of file diff --git a/samples/server/petstore/go-echo-server/models/model_api_response.go b/samples/server/petstore/go-echo-server/models/model_api_response.go new file mode 100644 index 000000000000..1d897b50181d --- /dev/null +++ b/samples/server/petstore/go-echo-server/models/model_api_response.go @@ -0,0 +1,11 @@ +package models + +// ApiResponse - Describes the result of uploading an image resource +type ApiResponse struct { + + Code int32 `json:"code,omitempty"` + + Type string `json:"type,omitempty"` + + Message string `json:"message,omitempty"` +} diff --git a/samples/server/petstore/go-echo-server/models/model_category.go b/samples/server/petstore/go-echo-server/models/model_category.go new file mode 100644 index 000000000000..e165eb44563c --- /dev/null +++ b/samples/server/petstore/go-echo-server/models/model_category.go @@ -0,0 +1,9 @@ +package models + +// Category - A category for a pet +type Category struct { + + Id int64 `json:"id,omitempty"` + + Name string `json:"name,omitempty"` +} diff --git a/samples/server/petstore/go-echo-server/models/model_order.go b/samples/server/petstore/go-echo-server/models/model_order.go new file mode 100644 index 000000000000..c58f51887118 --- /dev/null +++ b/samples/server/petstore/go-echo-server/models/model_order.go @@ -0,0 +1,22 @@ +package models + +import ( + "time" +) + +// Order - An order for a pets from the pet store +type Order struct { + + Id int64 `json:"id,omitempty"` + + PetId int64 `json:"petId,omitempty"` + + Quantity int32 `json:"quantity,omitempty"` + + ShipDate time.Time `json:"shipDate,omitempty"` + + // Order Status + Status string `json:"status,omitempty"` + + Complete bool `json:"complete,omitempty"` +} diff --git a/samples/server/petstore/go-echo-server/models/model_pet.go b/samples/server/petstore/go-echo-server/models/model_pet.go new file mode 100644 index 000000000000..a315672b3bd0 --- /dev/null +++ b/samples/server/petstore/go-echo-server/models/model_pet.go @@ -0,0 +1,18 @@ +package models + +// Pet - A pet for sale in the pet store +type Pet struct { + + Id int64 `json:"id,omitempty"` + + Category Category `json:"category,omitempty"` + + Name string `json:"name"` + + PhotoUrls []string `json:"photoUrls"` + + Tags []Tag `json:"tags,omitempty"` + + // pet status in the store + Status string `json:"status,omitempty"` +} diff --git a/samples/server/petstore/go-echo-server/models/model_tag.go b/samples/server/petstore/go-echo-server/models/model_tag.go new file mode 100644 index 000000000000..9be526bd051e --- /dev/null +++ b/samples/server/petstore/go-echo-server/models/model_tag.go @@ -0,0 +1,9 @@ +package models + +// Tag - A tag for a pet +type Tag struct { + + Id int64 `json:"id,omitempty"` + + Name string `json:"name,omitempty"` +} diff --git a/samples/server/petstore/go-echo-server/models/model_user.go b/samples/server/petstore/go-echo-server/models/model_user.go new file mode 100644 index 000000000000..608e7518b451 --- /dev/null +++ b/samples/server/petstore/go-echo-server/models/model_user.go @@ -0,0 +1,22 @@ +package models + +// User - A User who is purchasing from the pet store +type User struct { + + Id int64 `json:"id,omitempty"` + + Username string `json:"username,omitempty"` + + FirstName string `json:"firstName,omitempty"` + + LastName string `json:"lastName,omitempty"` + + Email string `json:"email,omitempty"` + + Password string `json:"password,omitempty"` + + Phone string `json:"phone,omitempty"` + + // User Status + UserStatus int32 `json:"userStatus,omitempty"` +} From b4f174753c8c067d8213a874f70382b6be3ba198 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 21 Apr 2021 18:18:02 +0800 Subject: [PATCH 037/186] [PS] minor improvements to the auto-generated appveyor.yml (#9300) * appveyor improvement * update samples --- .../resources/powershell/appveyor.mustache | 20 ++++++++++--------- .../client/petstore/powershell/appveyor.yml | 20 ++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/powershell/appveyor.mustache b/modules/openapi-generator/src/main/resources/powershell/appveyor.mustache index bf3770e187a6..d1047879e53b 100644 --- a/modules/openapi-generator/src/main/resources/powershell/appveyor.mustache +++ b/modules/openapi-generator/src/main/resources/powershell/appveyor.mustache @@ -1,24 +1,26 @@ {{> partial_header}} version: 1.0.{build} image: - - Visual Studio 2019 # PS 6.x - #- Visual Studio 2017 # PS 5.x - #- Ubuntu # PS 6.x - # ref: https://www.appveyor.com/docs/build-environment/#build-worker-images + - Visual Studio 2019 # PWSH 7.x + #- Visual Studio 2017 # PS 5.x, PWSH 6.x + #- Ubuntu # PWSH 6.x + # ref: https://www.appveyor.com/docs/windows-images-software/ install: - - ps: $PSVersionTable.PSVersion - - ps: Install-Module Pester -Force -Scope CurrentUser + - pwsh: $PSVersionTable.PSVersion + - pwsh: Install-Module Pester -Force -Scope CurrentUser build: off test_script: - - ps: | + - pwsh: | + .\Build.ps1 + Import-Module -Name '.\src\{{{packageName}}}' $Result = Invoke-Pester -PassThru if ($Result.FailedCount -gt 0) { $host.SetShouldExit($Result.FailedCount) exit $Result.FailedCount } deploy_script: - - ps: | - if ($env:APPVEYOR_REPO_TAG -eq $true -and $env:NuGetApiKey -ne $null -and $env:APPVEYOR_BUILD_WORKER_IMAGE -eq "Visual Studio 2019") { + - pwsh: | + if ($env:APPVEYOR_REPO_TAG -eq $true -and $env:NuGetApiKey -ne $null) { .\Build.ps1 try { Publish-Module -NuGetApiKey $env:NuGetApiKey -Path .\src\{{{packageName}}}\ -Confirm:$False -Verbose diff --git a/samples/client/petstore/powershell/appveyor.yml b/samples/client/petstore/powershell/appveyor.yml index 9a8973b0d6eb..b6967a7c7b6f 100644 --- a/samples/client/petstore/powershell/appveyor.yml +++ b/samples/client/petstore/powershell/appveyor.yml @@ -7,24 +7,26 @@ version: 1.0.{build} image: - - Visual Studio 2019 # PS 6.x - #- Visual Studio 2017 # PS 5.x - #- Ubuntu # PS 6.x - # ref: https://www.appveyor.com/docs/build-environment/#build-worker-images + - Visual Studio 2019 # PWSH 7.x + #- Visual Studio 2017 # PS 5.x, PWSH 6.x + #- Ubuntu # PWSH 6.x + # ref: https://www.appveyor.com/docs/windows-images-software/ install: - - ps: $PSVersionTable.PSVersion - - ps: Install-Module Pester -Force -Scope CurrentUser + - pwsh: $PSVersionTable.PSVersion + - pwsh: Install-Module Pester -Force -Scope CurrentUser build: off test_script: - - ps: | + - pwsh: | + .\Build.ps1 + Import-Module -Name '.\src\PSPetstore' $Result = Invoke-Pester -PassThru if ($Result.FailedCount -gt 0) { $host.SetShouldExit($Result.FailedCount) exit $Result.FailedCount } deploy_script: - - ps: | - if ($env:APPVEYOR_REPO_TAG -eq $true -and $env:NuGetApiKey -ne $null -and $env:APPVEYOR_BUILD_WORKER_IMAGE -eq "Visual Studio 2019") { + - pwsh: | + if ($env:APPVEYOR_REPO_TAG -eq $true -and $env:NuGetApiKey -ne $null) { .\Build.ps1 try { Publish-Module -NuGetApiKey $env:NuGetApiKey -Path .\src\PSPetstore\ -Confirm:$False -Verbose From 139e9e458fd4f21426c10e0a843b7c724c54269e Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 21 Apr 2021 21:11:05 +0800 Subject: [PATCH 038/186] Minor improvements to go-echo server (#9303) * minor improvements to go-echo server * update go tech comm --- README.md | 5 +- docs/generators.md | 2 +- .../languages/GoEchoServerCodegen.java | 22 +++++++ pom.xml | 1 + .../server/petstore/go-echo-server/pom.xml | 63 +++++++++++++++++++ 5 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 samples/server/petstore/go-echo-server/pom.xml diff --git a/README.md b/README.md index 84a876cf0b80..72ed9fbc4102 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ OpenAPI Generator allows generation of API client libraries (SDK generation), se | | Languages/Frameworks | | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **API clients** | **ActionScript**, **Ada**, **Apex**, **Bash**, **C**, **C#** (.net 2.0, 3.5 or later, .NET Standard 1.3 - 2.0, .NET Core 2.0, .NET 5.0. Libraries: RestSharp, HttpClient), **C++** (cpp-restsdk, Qt5, Tizen, Unreal Engine 4), **Clojure**, **Crystal**, **Dart**, **Elixir**, **Elm**, **Eiffel**, **Erlang**, **Go**, **Groovy**, **Haskell** (http-client, Servant), **Java** (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx, Google API Client Library for Java, Rest-assured, Spring 5 Web Client, MicroProfile Rest Client), **k6**, **Kotlin**, **Lua**, **Nim**, **Node.js/JavaScript** (ES5, ES6, AngularJS with Google Closure Compiler annotations, Flow types, Apollo GraphQL DataStore), **Objective-C**, **OCaml**, **Perl**, **PHP**, **PowerShell**, **Python**, **R**, **Ruby**, **Rust** (hyper, reqwest, rust-server), **Scala** (akka, http4s, scalaz, sttp, swagger-async-httpclient), **Swift** (2.x, 3.x, 4.x, 5.x), **Typescript** (AngularJS, Angular (2.x - 11.x), Aurelia, Axios, Fetch, Inversify, jQuery, Nestjs, Node, redux-query, Rxjs) | -| **Server stubs** | **Ada**, **C#** (ASP.NET Core, NancyFx), **C++** (Pistache, Restbed, Qt5 QHTTPEngine), **Erlang**, **F#** (Giraffe), **Go** (net/http, Gin), **Haskell** (Servant), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, Jersey, RestEasy, Play Framework, [PKMST](https://github.com/ProKarma-Inc/pkmst-getting-started-examples), [Vert.x](https://vertx.io/)), **Kotlin** (Spring Boot, Ktor, Vertx), **PHP** (Laravel, Lumen, Slim, Silex, [Symfony](https://symfony.com/), [Zend Expressive](https://github.com/zendframework/zend-expressive)), **Python** (Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Rust** (rust-server), **Scala** (Akka, [Finch](https://github.com/finagle/finch), [Lagom](https://github.com/lagom/lagom), [Play](https://www.playframework.com/), Scalatra) | +| **Server stubs** | **Ada**, **C#** (ASP.NET Core, NancyFx), **C++** (Pistache, Restbed, Qt5 QHTTPEngine), **Erlang**, **F#** (Giraffe), **Go** (net/http, Gin, Echo), **Haskell** (Servant), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, Jersey, RestEasy, Play Framework, [PKMST](https://github.com/ProKarma-Inc/pkmst-getting-started-examples), [Vert.x](https://vertx.io/)), **Kotlin** (Spring Boot, Ktor, Vertx), **PHP** (Laravel, Lumen, Slim, Silex, [Symfony](https://symfony.com/), [Zend Expressive](https://github.com/zendframework/zend-expressive)), **Python** (Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Rust** (rust-server), **Scala** (Akka, [Finch](https://github.com/finagle/finch), [Lagom](https://github.com/lagom/lagom), [Play](https://www.playframework.com/), Scalatra) | | **API documentation generators** | **HTML**, **Confluence Wiki**, **Asciidoc**, **Markdown**, **PlantUML** | | **Configuration files** | [**Apache2**](https://httpd.apache.org/) | | **Others** | **GraphQL**, **JMeter**, **Ktorm**, **MySQL Schema**, **Protocol Buffer** | @@ -932,6 +932,7 @@ Here is a list of template creators: * Erlang Server: @galaxie * F# (Giraffe) Server: @nmfisher * Go Server: @guohuang + * Go (Echo) Server: @ph4r5h4d * Go (Gin) Server: @kemokemo * GraphQL Express Server: @renepardon * Haskell Servant: @algas @@ -1024,7 +1025,7 @@ If you want to join the committee, please kindly apply by sending an email to te | Elm | @eriktim (2018/09) | | Erlang | @tsloughter (2017/11) @jfacorro (2018/10) @robertoaloi (2018/10) | | F# | @nmfisher (2019/05) | -| Go | @antihax (2017/11) @grokify (2018/07) @kemokemo (2018/09) @jirikuncar (2021/01) | +| Go | @antihax (2017/11) @grokify (2018/07) @kemokemo (2018/09) @jirikuncar (2021/01) @ph4r5h4d (2021/04) | | GraphQL | @renepardon (2018/12) | | Groovy | | | Haskell | | diff --git a/docs/generators.md b/docs/generators.md index 00a114c52ec1..521bdc3dbf0e 100644 --- a/docs/generators.md +++ b/docs/generators.md @@ -86,7 +86,7 @@ The following generators are available: * [erlang-server](generators/erlang-server.md) * [fsharp-functions (beta)](generators/fsharp-functions.md) * [fsharp-giraffe-server (beta)](generators/fsharp-giraffe-server.md) -* [go-echo-server](generators/go-echo-server.md) +* [go-echo-server (beta)](generators/go-echo-server.md) * [go-gin-server](generators/go-gin-server.md) * [go-server](generators/go-server.md) * [graphql-nodejs-express-server](generators/graphql-nodejs-express-server.md) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoEchoServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoEchoServerCodegen.java index 093818d74254..3bd2a37a5e5b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoEchoServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoEchoServerCodegen.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.openapitools.codegen.languages; import org.openapitools.codegen.*; @@ -6,6 +22,8 @@ import java.util.*; import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.meta.GeneratorMetadata; +import org.openapitools.codegen.meta.Stability; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,6 +54,10 @@ public String getHelp() { public GoEchoServerCodegen() { super(); + generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata) + .stability(Stability.BETA) + .build(); + modifyFeatureSet(features -> features .includeDocumentationFeatures(DocumentationFeature.Readme) .wireFormatFeatures(EnumSet.of(WireFormatFeature.JSON, WireFormatFeature.XML)) diff --git a/pom.xml b/pom.xml index c1365e6aee74..24c6442c9663 100644 --- a/pom.xml +++ b/pom.xml @@ -1352,6 +1352,7 @@ samples/client/petstore/javascript-promise-es6 samples/server/petstore/go-api-server samples/server/petstore/go-gin-api-server + samples/server/petstore/go-echo-server diff --git a/samples/server/petstore/go-echo-server/pom.xml b/samples/server/petstore/go-echo-server/pom.xml new file mode 100644 index 000000000000..df4dbbf47023 --- /dev/null +++ b/samples/server/petstore/go-echo-server/pom.xml @@ -0,0 +1,63 @@ + + 4.0.0 + org.openapitools + GoEchoServer + pom + 1.0-SNAPSHOT + Go Gin Server + + + + maven-dependency-plugin + + + package + + copy-dependencies + + + ${project.build.directory} + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + go-get + integration-test + + exec + + + go + + go + mod + download + + + + + go-test + integration-test + + exec + + + go + + build + -o + app + + + + + + + + From 3894aa47591f71406bed4c8da70bc01b6823023e Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 21 Apr 2021 12:43:33 -0400 Subject: [PATCH 039/186] [swift5] Add useSPMFileStructure (#9074) * [swift5] Add useSPMFileStructure Signed-off-by: Ayman Bagabas * [swift5] Add swiftPackagePath Prioritize swiftPackagePath over useSPMFileStructure * [swift5] Add cli options and update docs * [swift5] Fix tests * [swift5] Update XcodeGen source path * [swift5] Update samples and docs Add useSPMFileStructure to URLSession library --- bin/configs/swift5-urlsessionLibrary.yaml | 1 + docs/generators/swift5.md | 2 + .../languages/Swift5ClientCodegen.java | 30 +- .../resources/swift5/Package.swift.mustache | 2 +- .../main/resources/swift5/Podspec.mustache | 2 +- .../main/resources/swift5/XcodeGen.mustache | 2 +- .../options/Swift5OptionsProvider.java | 5 + .../.openapi-generator/FILES | 114 +-- .../swift5/urlsessionLibrary/Package.swift | 2 +- .../urlsessionLibrary/PetstoreClient.podspec | 2 +- .../OpenAPIs => Sources}/APIHelper.swift | 0 .../Classes/OpenAPIs => Sources}/APIs.swift | 0 .../APIs/AnotherFakeAPI.swift | 0 .../OpenAPIs => Sources}/APIs/FakeAPI.swift | 0 .../APIs/FakeClassnameTags123API.swift | 0 .../OpenAPIs => Sources}/APIs/PetAPI.swift | 0 .../OpenAPIs => Sources}/APIs/StoreAPI.swift | 0 .../OpenAPIs => Sources}/APIs/UserAPI.swift | 0 .../OpenAPIs => Sources}/CodableHelper.swift | 0 .../OpenAPIs => Sources}/Configuration.swift | 0 .../OpenAPIs => Sources}/Extensions.swift | 0 .../JSONDataEncoding.swift | 0 .../JSONEncodingHelper.swift | 0 .../Classes/OpenAPIs => Sources}/Models.swift | 0 .../Models/AdditionalPropertiesClass.swift | 0 .../OpenAPIs => Sources}/Models/Animal.swift | 0 .../Models/AnimalFarm.swift | 0 .../Models/ApiResponse.swift | 0 .../Models/ArrayOfArrayOfNumberOnly.swift | 0 .../Models/ArrayOfNumberOnly.swift | 0 .../Models/ArrayTest.swift | 0 .../Models/Capitalization.swift | 0 .../OpenAPIs => Sources}/Models/Cat.swift | 0 .../Models/CatAllOf.swift | 0 .../Models/Category.swift | 0 .../Sources/Models/ClassModel.swift | 23 + .../OpenAPIs => Sources}/Models/Client.swift | 0 .../OpenAPIs => Sources}/Models/Dog.swift | 0 .../Models/DogAllOf.swift | 0 .../Models/EnumArrays.swift | 0 .../Models/EnumClass.swift | 0 .../Models/EnumTest.swift | 0 .../OpenAPIs => Sources}/Models/File.swift | 0 .../Models/FileSchemaTestClass.swift | 0 .../Models/FormatTest.swift | 0 .../Models/HasOnlyReadOnly.swift | 0 .../OpenAPIs => Sources}/Models/List.swift | 0 .../OpenAPIs => Sources}/Models/MapTest.swift | 0 ...opertiesAndAdditionalPropertiesClass.swift | 0 .../Sources/Models/Model200Response.swift | 26 + .../OpenAPIs => Sources}/Models/Name.swift | 0 .../Models/NumberOnly.swift | 0 .../OpenAPIs => Sources}/Models/Order.swift | 0 .../Models/OuterComposite.swift | 0 .../Models/OuterEnum.swift | 0 .../OpenAPIs => Sources}/Models/Pet.swift | 0 .../Models/ReadOnlyFirst.swift | 0 .../Sources/Models/Return.swift | 23 + .../Models/SpecialModelName.swift | 0 .../Models/StringBooleanMap.swift | 0 .../OpenAPIs => Sources}/Models/Tag.swift | 0 .../Models/TypeHolderDefault.swift | 0 .../Models/TypeHolderExample.swift | 0 .../OpenAPIs => Sources}/Models/User.swift | 0 .../OpenISO8601DateFormatter.swift | 0 .../Sources/PetstoreClient/APIHelper.swift | 71 ++ .../Sources/PetstoreClient/APIs.swift | 62 ++ .../PetstoreClient/APIs/AnotherFakeAPI.swift | 54 ++ .../Sources/PetstoreClient/APIs/FakeAPI.swift | 684 ++++++++++++++++++ .../APIs/FakeClassnameTags123API.swift | 57 ++ .../Sources/PetstoreClient/APIs/PetAPI.swift | 483 +++++++++++++ .../PetstoreClient/APIs/StoreAPI.swift | 189 +++++ .../Sources/PetstoreClient/APIs/UserAPI.swift | 366 ++++++++++ .../PetstoreClient/CodableHelper.swift | 49 ++ .../PetstoreClient/Configuration.swift | 14 + .../Sources/PetstoreClient/Extensions.swift | 179 +++++ .../PetstoreClient/JSONDataEncoding.swift | 53 ++ .../PetstoreClient/JSONEncodingHelper.swift | 45 ++ .../Sources/PetstoreClient/Models.swift | 54 ++ .../Models/AdditionalPropertiesClass.swift | 25 + .../PetstoreClient/Models/Animal.swift | 20 + .../PetstoreClient/Models/AnimalFarm.swift | 10 + .../PetstoreClient/Models/ApiResponse.swift | 22 + .../Models/ArrayOfArrayOfNumberOnly.swift | 22 + .../Models/ArrayOfNumberOnly.swift | 22 + .../PetstoreClient/Models/ArrayTest.swift | 28 + .../Models/Capitalization.swift | 38 + .../Sources/PetstoreClient/Models/Cat.swift | 22 + .../PetstoreClient/Models/CatAllOf.swift | 18 + .../PetstoreClient/Models/Category.swift | 20 + .../PetstoreClient}/Models/ClassModel.swift | 0 .../PetstoreClient/Models/Client.swift | 18 + .../Sources/PetstoreClient/Models/Dog.swift | 22 + .../PetstoreClient/Models/DogAllOf.swift | 18 + .../PetstoreClient/Models/EnumArrays.swift | 33 + .../PetstoreClient/Models/EnumClass.swift | 14 + .../PetstoreClient/Models/EnumTest.swift | 52 ++ .../Sources/PetstoreClient/Models/File.swift | 20 + .../Models/FileSchemaTestClass.swift | 20 + .../PetstoreClient/Models/FormatTest.swift | 42 ++ .../Models/HasOnlyReadOnly.swift | 20 + .../Sources/PetstoreClient/Models/List.swift | 22 + .../PetstoreClient/Models/MapTest.swift | 35 + ...opertiesAndAdditionalPropertiesClass.swift | 22 + .../Models/Model200Response.swift | 0 .../Sources/PetstoreClient/Models/Name.swift | 32 + .../PetstoreClient/Models/NumberOnly.swift | 22 + .../Sources/PetstoreClient/Models/Order.swift | 34 + .../Models/OuterComposite.swift | 28 + .../PetstoreClient/Models/OuterEnum.swift | 14 + .../Sources/PetstoreClient/Models/Pet.swift | 34 + .../PetstoreClient/Models/ReadOnlyFirst.swift | 20 + .../PetstoreClient}/Models/Return.swift | 0 .../Models/SpecialModelName.swift | 22 + .../Models/StringBooleanMap.swift | 45 ++ .../Sources/PetstoreClient/Models/Tag.swift | 20 + .../Models/TypeHolderDefault.swift | 34 + .../Models/TypeHolderExample.swift | 34 + .../Sources/PetstoreClient/Models/User.swift | 33 + .../OpenISO8601DateFormatter.swift | 44 ++ .../SynchronizedDictionary.swift | 0 .../URLSessionImplementations.swift | 0 .../Sources/SynchronizedDictionary.swift | 36 + .../Sources/URLSessionImplementations.swift | 606 ++++++++++++++++ .../swift5/urlsessionLibrary/project.yml | 2 +- 125 files changed, 4174 insertions(+), 65 deletions(-) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/APIHelper.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/APIs.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/APIs/AnotherFakeAPI.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/APIs/FakeAPI.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/APIs/FakeClassnameTags123API.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/APIs/PetAPI.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/APIs/StoreAPI.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/APIs/UserAPI.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/CodableHelper.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Configuration.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Extensions.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/JSONDataEncoding.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/JSONEncodingHelper.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/AdditionalPropertiesClass.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/Animal.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/AnimalFarm.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/ApiResponse.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/ArrayOfArrayOfNumberOnly.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/ArrayOfNumberOnly.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/ArrayTest.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/Capitalization.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/Cat.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/CatAllOf.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/Category.swift (100%) create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ClassModel.swift rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/Client.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/Dog.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/DogAllOf.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/EnumArrays.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/EnumClass.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/EnumTest.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/File.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/FileSchemaTestClass.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/FormatTest.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/HasOnlyReadOnly.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/List.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/MapTest.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/MixedPropertiesAndAdditionalPropertiesClass.swift (100%) create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Model200Response.swift rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/Name.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/NumberOnly.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/Order.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/OuterComposite.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/OuterEnum.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/Pet.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/ReadOnlyFirst.swift (100%) create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Return.swift rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/SpecialModelName.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/StringBooleanMap.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/Tag.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/TypeHolderDefault.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/TypeHolderExample.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/Models/User.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources}/OpenISO8601DateFormatter.swift (100%) create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIHelper.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/CodableHelper.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Configuration.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/JSONDataEncoding.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/JSONEncodingHelper.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources/PetstoreClient}/Models/ClassModel.swift (100%) create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources/PetstoreClient}/Models/Model200Response.swift (100%) create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources/PetstoreClient}/Models/Return.swift (100%) create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/OpenISO8601DateFormatter.swift rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources/PetstoreClient}/SynchronizedDictionary.swift (100%) rename samples/client/petstore/swift5/urlsessionLibrary/{PetstoreClient/Classes/OpenAPIs => Sources/PetstoreClient}/URLSessionImplementations.swift (100%) create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/SynchronizedDictionary.swift create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/URLSessionImplementations.swift diff --git a/bin/configs/swift5-urlsessionLibrary.yaml b/bin/configs/swift5-urlsessionLibrary.yaml index 2fe5ecca0c7b..00bc36a58539 100644 --- a/bin/configs/swift5-urlsessionLibrary.yaml +++ b/bin/configs/swift5-urlsessionLibrary.yaml @@ -9,3 +9,4 @@ additionalProperties: podSummary: PetstoreClient projectName: PetstoreClient podHomepage: https://github.com/openapitools/openapi-generator + useSPMFileStructure: true diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index ebf6f2b0e86a..3c557e4b015c 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -33,7 +33,9 @@ These options may be applied as additional-properties (cli) or configOptions (pl |responseAs|Optionally use libraries to manage response. Currently PromiseKit, RxSwift, Result, Combine are available.| |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| +|swiftPackagePath|Set a custom source path instead of OpenAPIClient/Classes/OpenAPIs.| |null| |swiftUseApiNamespace|Flag to make all the API classes inner-class of {{projectName}}API| |null| +|useSPMFileStructure|Use SPM file structure and set the source path to Sources/{{projectName}} (default: false).| |null| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index 5d563656b581..a21123c10181 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -61,6 +61,8 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig public static final String SWIFT_USE_API_NAMESPACE = "swiftUseApiNamespace"; public static final String DEFAULT_POD_AUTHORS = "OpenAPI Generator"; public static final String LENIENT_TYPE_CAST = "lenientTypeCast"; + public static final String USE_SPM_FILE_STRUCTURE = "useSPMFileStructure"; + public static final String SWIFT_PACKAGE_PATH = "swiftPackagePath"; protected static final String LIBRARY_ALAMOFIRE = "alamofire"; protected static final String LIBRARY_URLSESSION = "urlsession"; protected static final String RESPONSE_LIBRARY_PROMISE_KIT = "PromiseKit"; @@ -73,9 +75,11 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig protected boolean objcCompatible = false; protected boolean lenientTypeCast = false; protected boolean readonlyProperties = false; - protected boolean swiftUseApiNamespace; + protected boolean swiftUseApiNamespace = false; + protected boolean useSPMFileStructure = false; + protected String swiftPackagePath = "Classes" + File.separator + "OpenAPIs"; protected String[] responseAs = new String[0]; - protected String sourceFolder = "Classes" + File.separator + "OpenAPIs"; + protected String sourceFolder = swiftPackagePath; protected HashSet objcReservedWords; protected String apiDocPath = "docs/"; protected String modelDocPath = "docs/"; @@ -261,6 +265,10 @@ public Swift5ClientCodegen() { .defaultValue(Boolean.FALSE.toString())); cliOptions.add(new CliOption(CodegenConstants.API_NAME_PREFIX, CodegenConstants.API_NAME_PREFIX_DESC)); + cliOptions.add(new CliOption(USE_SPM_FILE_STRUCTURE, "Use SPM file structure" + + " and set the source path to Sources" + File.separator + "{{projectName}} (default: false).")); + cliOptions.add(new CliOption(SWIFT_PACKAGE_PATH, "Set a custom source path instead of " + + projectName + File.separator + "Classes" + File.separator + "OpenAPIs" + ".")); supportedLibraries.put(LIBRARY_URLSESSION, "[DEFAULT] HTTP client: URLSession"); supportedLibraries.put(LIBRARY_ALAMOFIRE, "HTTP client: Alamofire"); @@ -414,6 +422,16 @@ public void processOpts() { additionalProperties.put(POD_AUTHORS, DEFAULT_POD_AUTHORS); } + if (additionalProperties.containsKey(USE_SPM_FILE_STRUCTURE)) { + setUseSPMFileStructure(convertPropertyToBooleanAndWriteBack(USE_SPM_FILE_STRUCTURE)); + sourceFolder = "Sources" + File.separator + projectName; + } + + if (additionalProperties.containsKey(SWIFT_PACKAGE_PATH) && ((String)additionalProperties.get(SWIFT_PACKAGE_PATH)).length() > 0) { + setSwiftPackagePath((String)additionalProperties.get(SWIFT_PACKAGE_PATH)); + sourceFolder = swiftPackagePath; + } + setLenientTypeCast(convertPropertyToBooleanAndWriteBack(LENIENT_TYPE_CAST)); // make api and model doc path available in mustache template @@ -806,6 +824,14 @@ public void setSwiftUseApiNamespace(boolean swiftUseApiNamespace) { this.swiftUseApiNamespace = swiftUseApiNamespace; } + public void setUseSPMFileStructure(boolean useSPMFileStructure) { + this.useSPMFileStructure = useSPMFileStructure; + } + + public void setSwiftPackagePath(String swiftPackagePath) { + this.swiftPackagePath = swiftPackagePath; + } + @Override public String toEnumValue(String value, String datatype) { // for string, array of string diff --git a/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache b/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache index d173f21077b2..d64f11089b7b 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache @@ -35,7 +35,7 @@ let package = Package( .target( name: "{{projectName}}", dependencies: [{{#useAlamofire}}"Alamofire", {{/useAlamofire}}{{#usePromiseKit}}"PromiseKit", {{/usePromiseKit}}{{#useRxSwift}}"RxSwift"{{/useRxSwift}}], - path: "{{projectName}}/Classes" + path: "{{#swiftPackagePath}}{{swiftPackagePath}}{{/swiftPackagePath}}{{^swiftPackagePath}}{{#useSPMFileStructure}}Sources/{{projectName}}{{/useSPMFileStructure}}{{^useSPMFileStructure}}{{projectName}}/Classes{{/useSPMFileStructure}}{{/swiftPackagePath}}" ), ] ) diff --git a/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache b/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache index c0539662ce75..d791e5a26ad5 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache @@ -25,7 +25,7 @@ Pod::Spec.new do |s| {{#podDocumentationURL}} s.documentation_url = '{{podDocumentationURL}}' {{/podDocumentationURL}} - s.source_files = '{{projectName}}/Classes/**/*.swift' + s.source_files = '{{#swiftPackagePath}}{{swiftPackagePath}}{{/swiftPackagePath}}{{^swiftPackagePath}}{{#useSPMFileStructure}}Sources/{{projectName}}{{/useSPMFileStructure}}{{^useSPMFileStructure}}{{projectName}}/Classes{{/useSPMFileStructure}}{{/swiftPackagePath}}/**/*.swift' {{#usePromiseKit}} s.dependency 'PromiseKit/CorePromise', '~> 6.13.1' {{/usePromiseKit}} diff --git a/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache b/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache index a81137ae138e..8cdfc166552d 100644 --- a/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache @@ -4,7 +4,7 @@ targets: type: framework platform: iOS deploymentTarget: "9.0" - sources: [{{projectName}}] + sources: [{{#swiftPackagePath}}{{swiftPackagePath}}{{/swiftPackagePath}}{{^swiftPackagePath}}{{#useSPMFileStructure}}Sources{{/useSPMFileStructure}}{{^useSPMFileStructure}}{{projectName}}{{/useSPMFileStructure}}{{/swiftPackagePath}}] info: path: ./Info.plist version: {{#podVersion}}{{podVersion}}{{/podVersion}}{{^podVersion}}{{#apiInfo}}{{version}}{{/apiInfo}}{{^apiInfo}}}0.0.1{{/apiInfo}}{{/podVersion}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java index e432b326d1c1..54bc03f40d2d 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java @@ -21,6 +21,7 @@ import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.languages.Swift5ClientCodegen; +import java.io.File; import java.util.Map; public class Swift5OptionsProvider implements OptionsProvider { @@ -48,6 +49,8 @@ public class Swift5OptionsProvider 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 LIBRARY_VALUE = "alamofire"; + public static final String USE_SPM_FILE_STRUCTURE_VALUE = "false"; + public static final String SWIFT_PACKAGE_PATH_VALUE = ""; @Override public String getLanguage() { @@ -84,6 +87,8 @@ public Map createOptions() { .put(CodegenConstants.LIBRARY, LIBRARY_VALUE) .put(CodegenConstants.LEGACY_DISCRIMINATOR_BEHAVIOR, "true") .put(CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT, "true") + .put(Swift5ClientCodegen.USE_SPM_FILE_STRUCTURE, USE_SPM_FILE_STRUCTURE_VALUE) + .put(Swift5ClientCodegen.SWIFT_PACKAGE_PATH, SWIFT_PACKAGE_PATH_VALUE) .build(); } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/FILES b/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/FILES index c81943baf2af..27a85ba47e60 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/FILES +++ b/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/FILES @@ -2,64 +2,64 @@ Cartfile Package.swift PetstoreClient.podspec -PetstoreClient/Classes/OpenAPIs/APIHelper.swift -PetstoreClient/Classes/OpenAPIs/APIs.swift -PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift -PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift -PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift -PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift -PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift -PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift -PetstoreClient/Classes/OpenAPIs/CodableHelper.swift -PetstoreClient/Classes/OpenAPIs/Configuration.swift -PetstoreClient/Classes/OpenAPIs/Extensions.swift -PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift -PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift -PetstoreClient/Classes/OpenAPIs/Models.swift -PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift -PetstoreClient/Classes/OpenAPIs/Models/Animal.swift -PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift -PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift -PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift -PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift -PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift -PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift -PetstoreClient/Classes/OpenAPIs/Models/Cat.swift -PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift -PetstoreClient/Classes/OpenAPIs/Models/Category.swift -PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift -PetstoreClient/Classes/OpenAPIs/Models/Client.swift -PetstoreClient/Classes/OpenAPIs/Models/Dog.swift -PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift -PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift -PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift -PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift -PetstoreClient/Classes/OpenAPIs/Models/File.swift -PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift -PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift -PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift -PetstoreClient/Classes/OpenAPIs/Models/List.swift -PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift -PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift -PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift -PetstoreClient/Classes/OpenAPIs/Models/Name.swift -PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift -PetstoreClient/Classes/OpenAPIs/Models/Order.swift -PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift -PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift -PetstoreClient/Classes/OpenAPIs/Models/Pet.swift -PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift -PetstoreClient/Classes/OpenAPIs/Models/Return.swift -PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift -PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift -PetstoreClient/Classes/OpenAPIs/Models/Tag.swift -PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift -PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift -PetstoreClient/Classes/OpenAPIs/Models/User.swift -PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift -PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift -PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift README.md +Sources/PetstoreClient/APIHelper.swift +Sources/PetstoreClient/APIs.swift +Sources/PetstoreClient/APIs/AnotherFakeAPI.swift +Sources/PetstoreClient/APIs/FakeAPI.swift +Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift +Sources/PetstoreClient/APIs/PetAPI.swift +Sources/PetstoreClient/APIs/StoreAPI.swift +Sources/PetstoreClient/APIs/UserAPI.swift +Sources/PetstoreClient/CodableHelper.swift +Sources/PetstoreClient/Configuration.swift +Sources/PetstoreClient/Extensions.swift +Sources/PetstoreClient/JSONDataEncoding.swift +Sources/PetstoreClient/JSONEncodingHelper.swift +Sources/PetstoreClient/Models.swift +Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift +Sources/PetstoreClient/Models/Animal.swift +Sources/PetstoreClient/Models/AnimalFarm.swift +Sources/PetstoreClient/Models/ApiResponse.swift +Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift +Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift +Sources/PetstoreClient/Models/ArrayTest.swift +Sources/PetstoreClient/Models/Capitalization.swift +Sources/PetstoreClient/Models/Cat.swift +Sources/PetstoreClient/Models/CatAllOf.swift +Sources/PetstoreClient/Models/Category.swift +Sources/PetstoreClient/Models/ClassModel.swift +Sources/PetstoreClient/Models/Client.swift +Sources/PetstoreClient/Models/Dog.swift +Sources/PetstoreClient/Models/DogAllOf.swift +Sources/PetstoreClient/Models/EnumArrays.swift +Sources/PetstoreClient/Models/EnumClass.swift +Sources/PetstoreClient/Models/EnumTest.swift +Sources/PetstoreClient/Models/File.swift +Sources/PetstoreClient/Models/FileSchemaTestClass.swift +Sources/PetstoreClient/Models/FormatTest.swift +Sources/PetstoreClient/Models/HasOnlyReadOnly.swift +Sources/PetstoreClient/Models/List.swift +Sources/PetstoreClient/Models/MapTest.swift +Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +Sources/PetstoreClient/Models/Model200Response.swift +Sources/PetstoreClient/Models/Name.swift +Sources/PetstoreClient/Models/NumberOnly.swift +Sources/PetstoreClient/Models/Order.swift +Sources/PetstoreClient/Models/OuterComposite.swift +Sources/PetstoreClient/Models/OuterEnum.swift +Sources/PetstoreClient/Models/Pet.swift +Sources/PetstoreClient/Models/ReadOnlyFirst.swift +Sources/PetstoreClient/Models/Return.swift +Sources/PetstoreClient/Models/SpecialModelName.swift +Sources/PetstoreClient/Models/StringBooleanMap.swift +Sources/PetstoreClient/Models/Tag.swift +Sources/PetstoreClient/Models/TypeHolderDefault.swift +Sources/PetstoreClient/Models/TypeHolderExample.swift +Sources/PetstoreClient/Models/User.swift +Sources/PetstoreClient/OpenISO8601DateFormatter.swift +Sources/PetstoreClient/SynchronizedDictionary.swift +Sources/PetstoreClient/URLSessionImplementations.swift docs/AdditionalPropertiesClass.md docs/Animal.md docs/AnimalFarm.md diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Package.swift b/samples/client/petstore/swift5/urlsessionLibrary/Package.swift index b7fe4734aa8a..b00b504b3ce7 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Package.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Package.swift @@ -26,7 +26,7 @@ let package = Package( .target( name: "PetstoreClient", dependencies: [], - path: "PetstoreClient/Classes" + path: "Sources/PetstoreClient" ), ] ) diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec index b61285f6b25e..826cfbe106be 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec @@ -10,5 +10,5 @@ Pod::Spec.new do |s| s.license = 'Proprietary' s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' - s.source_files = 'PetstoreClient/Classes/**/*.swift' + s.source_files = 'Sources/PetstoreClient/**/*.swift' end diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIHelper.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIHelper.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIHelper.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/APIHelper.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/AnotherFakeAPI.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/AnotherFakeAPI.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeAPI.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeAPI.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeClassnameTags123API.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeClassnameTags123API.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/PetAPI.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/PetAPI.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/StoreAPI.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/StoreAPI.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/UserAPI.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/UserAPI.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/CodableHelper.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/CodableHelper.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Configuration.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Configuration.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Configuration.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Configuration.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Extensions.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Extensions.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONDataEncoding.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONDataEncoding.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONEncodingHelper.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONEncodingHelper.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AnimalFarm.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AnimalFarm.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ClassModel.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ClassModel.swift new file mode 100644 index 000000000000..1b54393ed9fd --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ClassModel.swift @@ -0,0 +1,23 @@ +// +// ClassModel.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +/** Model for testing model with \"_class\" property */ +public struct ClassModel: Codable, Hashable { + + public var `class`: String? + + public init(`class`: String? = nil) { + self.`class` = `class` + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case `class` = "_class" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumClass.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumClass.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Model200Response.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Model200Response.swift new file mode 100644 index 000000000000..034d4d2979bf --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Model200Response.swift @@ -0,0 +1,26 @@ +// +// Model200Response.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +/** Model for testing model name starting with number */ +public struct Model200Response: Codable, Hashable { + + public var name: Int? + public var `class`: String? + + public init(name: Int? = nil, `class`: String? = nil) { + self.name = name + self.`class` = `class` + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + case `class` = "class" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterEnum.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterEnum.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Return.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Return.swift new file mode 100644 index 000000000000..2831cd656be0 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Return.swift @@ -0,0 +1,23 @@ +// +// Return.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +/** Model for testing reserved words */ +public struct Return: Codable, Hashable { + + public var `return`: Int? + + public init(`return`: Int? = nil) { + self.`return` = `return` + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case `return` = "return" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/OpenISO8601DateFormatter.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/OpenISO8601DateFormatter.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIHelper.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIHelper.swift new file mode 100644 index 000000000000..f7bb5274bd98 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIHelper.swift @@ -0,0 +1,71 @@ +// APIHelper.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct APIHelper { + public static func rejectNil(_ source: [String: Any?]) -> [String: Any]? { + let destination = source.reduce(into: [String: Any]()) { result, item in + if let value = item.value { + result[item.key] = value + } + } + + if destination.isEmpty { + return nil + } + return destination + } + + public static func rejectNilHeaders(_ source: [String: Any?]) -> [String: String] { + return source.reduce(into: [String: String]()) { result, item in + if let collection = item.value as? [Any?] { + result[item.key] = collection.filter { $0 != nil }.map { "\($0!)" }.joined(separator: ",") + } else if let value: Any = item.value { + result[item.key] = "\(value)" + } + } + } + + public static func convertBoolToString(_ source: [String: Any]?) -> [String: Any]? { + guard let source = source else { + return nil + } + + return source.reduce(into: [String: Any]()) { result, item in + switch item.value { + case let x as Bool: + result[item.key] = x.description + default: + result[item.key] = item.value + } + } + } + + public static func mapValueToPathItem(_ source: Any) -> Any { + if let collection = source as? [Any?] { + return collection.filter { $0 != nil }.map { "\($0!)" }.joined(separator: ",") + } + return source + } + + public static func mapValuesToQueryItems(_ source: [String: Any?]) -> [URLQueryItem]? { + let destination = source.filter { $0.value != nil }.reduce(into: [URLQueryItem]()) { result, item in + if let collection = item.value as? [Any?] { + collection.filter { $0 != nil }.map { "\($0!)" }.forEach { value in + result.append(URLQueryItem(name: item.key, value: value)) + } + } else if let value = item.value { + result.append(URLQueryItem(name: item.key, value: "\(value)")) + } + } + + if destination.isEmpty { + return nil + } + return destination + } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs.swift new file mode 100644 index 000000000000..dbdab491ff7d --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs.swift @@ -0,0 +1,62 @@ +// APIs.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class PetstoreClientAPI { + public static var basePath = "http://petstore.swagger.io:80/v2" + public static var credential: URLCredential? + public static var customHeaders: [String: String] = [:] + public static var requestBuilderFactory: RequestBuilderFactory = URLSessionRequestBuilderFactory() + public static var apiResponseQueue: DispatchQueue = .main +} + +open class RequestBuilder { + var credential: URLCredential? + var headers: [String: String] + public let parameters: [String: Any]? + public let method: String + public let URLString: String + + /// Optional block to obtain a reference to the request's progress instance when available. + /// With the URLSession http client the request's progress only works on iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0. + /// If you need to get the request's progress in older OS versions, please use Alamofire http client. + public var onProgressReady: ((Progress) -> Void)? + + required public init(method: String, URLString: String, parameters: [String: Any]?, headers: [String: String] = [:]) { + self.method = method + self.URLString = URLString + self.parameters = parameters + self.headers = headers + + addHeaders(PetstoreClientAPI.customHeaders) + } + + open func addHeaders(_ aHeaders: [String: String]) { + for (header, value) in aHeaders { + headers[header] = value + } + } + + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + + public func addHeader(name: String, value: String) -> Self { + if !value.isEmpty { + headers[name] = value + } + return self + } + + open func addCredential() -> Self { + credential = PetstoreClientAPI.credential + return self + } +} + +public protocol RequestBuilderFactory { + func getNonDecodableBuilder() -> RequestBuilder.Type + func getBuilder() -> RequestBuilder.Type +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift new file mode 100644 index 000000000000..24b0015a270d --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift @@ -0,0 +1,54 @@ +// +// AnotherFakeAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class AnotherFakeAPI { + /** + To test special tags + + - parameter body: (body) client model + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + To test special tags + - PATCH /another-fake/dummy + - To test special tags and operation ID starting with number + - parameter body: (body) client model + - returns: RequestBuilder + */ + open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { + let path = "/another-fake/dummy" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift new file mode 100644 index 000000000000..58c4b8a093ce --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift @@ -0,0 +1,684 @@ +// +// FakeAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class FakeAPI { + /** + + - parameter body: (body) Input boolean as post body (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { + fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - POST /fake/outer/boolean + - Test serialization of outer boolean types + - parameter body: (body) Input boolean as post body (optional) + - returns: RequestBuilder + */ + open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { + let path = "/fake/outer/boolean" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter body: (body) Input composite as post body (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { + fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - POST /fake/outer/composite + - Test serialization of object with outer number type + - parameter body: (body) Input composite as post body (optional) + - returns: RequestBuilder + */ + open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { + let path = "/fake/outer/composite" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter body: (body) Input number as post body (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { + fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - POST /fake/outer/number + - Test serialization of outer number types + - parameter body: (body) Input number as post body (optional) + - returns: RequestBuilder + */ + open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { + let path = "/fake/outer/number" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter body: (body) Input string as post body (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - POST /fake/outer/string + - Test serialization of outer string types + - parameter body: (body) Input string as post body (optional) + - returns: RequestBuilder + */ + open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { + let path = "/fake/outer/string" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter body: (body) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - PUT /fake/body-with-file-schema + - For this test, the body for this request much reference a schema named `File`. + - parameter body: (body) + - returns: RequestBuilder + */ + open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { + let path = "/fake/body-with-file-schema" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter query: (query) + - parameter body: (body) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - PUT /fake/body-with-query-params + - parameter query: (query) + - parameter body: (body) + - returns: RequestBuilder + */ + open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { + let path = "/fake/body-with-query-params" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + var url = URLComponents(string: URLString) + url?.queryItems = APIHelper.mapValuesToQueryItems([ + "query": query.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + To test \"client\" model + + - parameter body: (body) client model + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + To test \"client\" model + - PATCH /fake + - To test \"client\" model + - parameter body: (body) client model + - returns: RequestBuilder + */ + open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { + let path = "/fake" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + + - parameter number: (form) None + - parameter double: (form) None + - parameter patternWithoutDelimiter: (form) None + - parameter byte: (form) None + - parameter integer: (form) None (optional) + - parameter int32: (form) None (optional) + - parameter int64: (form) None (optional) + - parameter float: (form) None (optional) + - parameter string: (form) None (optional) + - parameter binary: (form) None (optional) + - parameter date: (form) None (optional) + - parameter dateTime: (form) None (optional) + - parameter password: (form) None (optional) + - parameter callback: (form) None (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + - POST /fake + - Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + - BASIC: + - type: http + - name: http_basic_test + - parameter number: (form) None + - parameter double: (form) None + - parameter patternWithoutDelimiter: (form) None + - parameter byte: (form) None + - parameter integer: (form) None (optional) + - parameter int32: (form) None (optional) + - parameter int64: (form) None (optional) + - parameter float: (form) None (optional) + - parameter string: (form) None (optional) + - parameter binary: (form) None (optional) + - parameter date: (form) None (optional) + - parameter dateTime: (form) None (optional) + - parameter password: (form) None (optional) + - parameter callback: (form) None (optional) + - returns: RequestBuilder + */ + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + let path = "/fake" + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "integer": integer?.encodeToJSON(), + "int32": int32?.encodeToJSON(), + "int64": int64?.encodeToJSON(), + "number": number.encodeToJSON(), + "float": float?.encodeToJSON(), + "double": double.encodeToJSON(), + "string": string?.encodeToJSON(), + "pattern_without_delimiter": patternWithoutDelimiter.encodeToJSON(), + "byte": byte.encodeToJSON(), + "binary": binary?.encodeToJSON(), + "date": date?.encodeToJSON(), + "dateTime": dateTime?.encodeToJSON(), + "password": password?.encodeToJSON(), + "callback": callback?.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "application/x-www-form-urlencoded", + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + * enum for parameter enumHeaderStringArray + */ + public enum EnumHeaderStringArray_testEnumParameters: String, CaseIterable { + case greaterThan = ">" + case dollar = "$" + } + + /** + * enum for parameter enumHeaderString + */ + public enum EnumHeaderString_testEnumParameters: String, CaseIterable { + case abc = "_abc" + case efg = "-efg" + case xyz = "(xyz)" + } + + /** + * enum for parameter enumQueryStringArray + */ + public enum EnumQueryStringArray_testEnumParameters: String, CaseIterable { + case greaterThan = ">" + case dollar = "$" + } + + /** + * enum for parameter enumQueryString + */ + public enum EnumQueryString_testEnumParameters: String, CaseIterable { + case abc = "_abc" + case efg = "-efg" + case xyz = "(xyz)" + } + + /** + * enum for parameter enumQueryInteger + */ + public enum EnumQueryInteger_testEnumParameters: Int, CaseIterable { + case _1 = 1 + case number2 = -2 + } + + /** + * enum for parameter enumQueryDouble + */ + public enum EnumQueryDouble_testEnumParameters: Double, CaseIterable { + case _11 = 1.1 + case number12 = -1.2 + } + + /** + * enum for parameter enumFormStringArray + */ + public enum EnumFormStringArray_testEnumParameters: String, CaseIterable { + case greaterThan = ">" + case dollar = "$" + } + + /** + * enum for parameter enumFormString + */ + public enum EnumFormString_testEnumParameters: String, CaseIterable { + case abc = "_abc" + case efg = "-efg" + case xyz = "(xyz)" + } + + /** + To test enum parameters + + - parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional) + - parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg) + - parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional) + - parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg) + - parameter enumQueryInteger: (query) Query parameter enum test (double) (optional) + - parameter enumQueryDouble: (query) Query parameter enum test (double) (optional) + - parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar) + - parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + To test enum parameters + - GET /fake + - To test enum parameters + - parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional) + - parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg) + - parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional) + - parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg) + - parameter enumQueryInteger: (query) Query parameter enum test (double) (optional) + - parameter enumQueryDouble: (query) Query parameter enum test (double) (optional) + - parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar) + - parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg) + - returns: RequestBuilder + */ + open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { + let path = "/fake" + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "enum_form_string_array": enumFormStringArray?.encodeToJSON(), + "enum_form_string": enumFormString?.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + var url = URLComponents(string: URLString) + url?.queryItems = APIHelper.mapValuesToQueryItems([ + "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), + "enum_query_string": enumQueryString?.encodeToJSON(), + "enum_query_integer": enumQueryInteger?.encodeToJSON(), + "enum_query_double": enumQueryDouble?.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "application/x-www-form-urlencoded", + "enum_header_string_array": enumHeaderStringArray?.encodeToJSON(), + "enum_header_string": enumHeaderString?.encodeToJSON(), + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Fake endpoint to test group parameters (optional) + + - parameter requiredStringGroup: (query) Required String in group parameters + - parameter requiredBooleanGroup: (header) Required Boolean in group parameters + - parameter requiredInt64Group: (query) Required Integer in group parameters + - parameter stringGroup: (query) String in group parameters (optional) + - parameter booleanGroup: (header) Boolean in group parameters (optional) + - parameter int64Group: (query) Integer in group parameters (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Fake endpoint to test group parameters (optional) + - DELETE /fake + - Fake endpoint to test group parameters (optional) + - parameter requiredStringGroup: (query) Required String in group parameters + - parameter requiredBooleanGroup: (header) Required Boolean in group parameters + - parameter requiredInt64Group: (query) Required Integer in group parameters + - parameter stringGroup: (query) String in group parameters (optional) + - parameter booleanGroup: (header) Boolean in group parameters (optional) + - parameter int64Group: (query) Integer in group parameters (optional) + - returns: RequestBuilder + */ + open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { + let path = "/fake" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + var url = URLComponents(string: URLString) + url?.queryItems = APIHelper.mapValuesToQueryItems([ + "required_string_group": requiredStringGroup.encodeToJSON(), + "required_int64_group": requiredInt64Group.encodeToJSON(), + "string_group": stringGroup?.encodeToJSON(), + "int64_group": int64Group?.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + "required_boolean_group": requiredBooleanGroup.encodeToJSON(), + "boolean_group": booleanGroup?.encodeToJSON(), + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + test inline additionalProperties + + - parameter param: (body) request body + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + test inline additionalProperties + - POST /fake/inline-additionalProperties + - parameter param: (body) request body + - returns: RequestBuilder + */ + open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { + let path = "/fake/inline-additionalProperties" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + test json serialization of form data + + - parameter param: (form) field1 + - parameter param2: (form) field2 + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + test json serialization of form data + - GET /fake/jsonFormData + - parameter param: (form) field1 + - parameter param2: (form) field2 + - returns: RequestBuilder + */ + open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { + let path = "/fake/jsonFormData" + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "param": param.encodeToJSON(), + "param2": param2.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "application/x-www-form-urlencoded", + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift new file mode 100644 index 000000000000..fb3bb8ce00a7 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift @@ -0,0 +1,57 @@ +// +// FakeClassnameTags123API.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class FakeClassnameTags123API { + /** + To test class name in snake case + + - parameter body: (body) client model + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + To test class name in snake case + - PATCH /fake_classname_test + - To test class name in snake case + - API Key: + - type: apiKey api_key_query (QUERY) + - name: api_key_query + - parameter body: (body) client model + - returns: RequestBuilder + */ + open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { + let path = "/fake_classname_test" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift new file mode 100644 index 000000000000..5cd3629127bf --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift @@ -0,0 +1,483 @@ +// +// PetAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class PetAPI { + /** + Add a new pet to the store + + - parameter body: (body) Pet object that needs to be added to the store + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Add a new pet to the store + - POST /pet + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter body: (body) Pet object that needs to be added to the store + - returns: RequestBuilder + */ + open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { + let path = "/pet" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Deletes a pet + + - parameter petId: (path) Pet id to delete + - parameter apiKey: (header) (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Deletes a pet + - DELETE /pet/{petId} + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter petId: (path) Pet id to delete + - parameter apiKey: (header) (optional) + - returns: RequestBuilder + */ + open class func deletePetWithRequestBuilder(petId: Int64, apiKey: String? = nil) -> RequestBuilder { + var path = "/pet/{petId}" + let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" + let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "api_key": apiKey?.encodeToJSON(), + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + * enum for parameter status + */ + public enum Status_findPetsByStatus: String, CaseIterable { + case available = "available" + case pending = "pending" + case sold = "sold" + } + + /** + Finds Pets by status + + - parameter status: (query) Status values that need to be considered for filter + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Finds Pets by status + - GET /pet/findByStatus + - Multiple status values can be provided with comma separated strings + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter status: (query) Status values that need to be considered for filter + - returns: RequestBuilder<[Pet]> + */ + open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { + let path = "/pet/findByStatus" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + var url = URLComponents(string: URLString) + url?.queryItems = APIHelper.mapValuesToQueryItems([ + "status": status.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Finds Pets by tags + + - parameter tags: (query) Tags to filter by + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + @available(*, deprecated, message: "This operation is deprecated.") + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Finds Pets by tags + - GET /pet/findByTags + - Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter tags: (query) Tags to filter by + - returns: RequestBuilder<[Pet]> + */ + @available(*, deprecated, message: "This operation is deprecated.") + open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { + let path = "/pet/findByTags" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + var url = URLComponents(string: URLString) + url?.queryItems = APIHelper.mapValuesToQueryItems([ + "tags": tags.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Find pet by ID + + - parameter petId: (path) ID of pet to return + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { + getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Find pet by ID + - GET /pet/{petId} + - Returns a single pet + - API Key: + - type: apiKey api_key + - name: api_key + - parameter petId: (path) ID of pet to return + - returns: RequestBuilder + */ + open class func getPetByIdWithRequestBuilder(petId: Int64) -> RequestBuilder { + var path = "/pet/{petId}" + let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" + let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Update an existing pet + + - parameter body: (body) Pet object that needs to be added to the store + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Update an existing pet + - PUT /pet + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter body: (body) Pet object that needs to be added to the store + - returns: RequestBuilder + */ + open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { + let path = "/pet" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Updates a pet in the store with form data + + - parameter petId: (path) ID of pet that needs to be updated + - parameter name: (form) Updated name of the pet (optional) + - parameter status: (form) Updated status of the pet (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Updates a pet in the store with form data + - POST /pet/{petId} + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter petId: (path) ID of pet that needs to be updated + - parameter name: (form) Updated name of the pet (optional) + - parameter status: (form) Updated status of the pet (optional) + - returns: RequestBuilder + */ + open class func updatePetWithFormWithRequestBuilder(petId: Int64, name: String? = nil, status: String? = nil) -> RequestBuilder { + var path = "/pet/{petId}" + let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" + let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "name": name?.encodeToJSON(), + "status": status?.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "application/x-www-form-urlencoded", + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + uploads an image + + - parameter petId: (path) ID of pet to update + - parameter additionalMetadata: (form) Additional data to pass to server (optional) + - parameter file: (form) file to upload (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + uploads an image + - POST /pet/{petId}/uploadImage + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter petId: (path) ID of pet to update + - parameter additionalMetadata: (form) Additional data to pass to server (optional) + - parameter file: (form) file to upload (optional) + - returns: RequestBuilder + */ + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + var path = "/pet/{petId}/uploadImage" + let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" + let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "additionalMetadata": additionalMetadata?.encodeToJSON(), + "file": file?.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "multipart/form-data", + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + uploads an image (required) + + - parameter petId: (path) ID of pet to update + - parameter requiredFile: (form) file to upload + - parameter additionalMetadata: (form) Additional data to pass to server (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + uploads an image (required) + - POST /fake/{petId}/uploadImageWithRequiredFile + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter petId: (path) ID of pet to update + - parameter requiredFile: (form) file to upload + - parameter additionalMetadata: (form) Additional data to pass to server (optional) + - returns: RequestBuilder + */ + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + var path = "/fake/{petId}/uploadImageWithRequiredFile" + let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" + let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "additionalMetadata": additionalMetadata?.encodeToJSON(), + "requiredFile": requiredFile.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "multipart/form-data", + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift new file mode 100644 index 000000000000..95adcc200ae0 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift @@ -0,0 +1,189 @@ +// +// StoreAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class StoreAPI { + /** + Delete purchase order by ID + + - parameter orderId: (path) ID of the order that needs to be deleted + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Delete purchase order by ID + - DELETE /store/order/{order_id} + - For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + - parameter orderId: (path) ID of the order that needs to be deleted + - returns: RequestBuilder + */ + open class func deleteOrderWithRequestBuilder(orderId: String) -> RequestBuilder { + var path = "/store/order/{order_id}" + let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" + let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Returns pet inventories by status + + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { + getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Returns pet inventories by status + - GET /store/inventory + - Returns a map of status codes to quantities + - API Key: + - type: apiKey api_key + - name: api_key + - returns: RequestBuilder<[String: Int]> + */ + open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { + let path = "/store/inventory" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Find purchase order by ID + + - parameter orderId: (path) ID of pet that needs to be fetched + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Find purchase order by ID + - GET /store/order/{order_id} + - For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + - parameter orderId: (path) ID of pet that needs to be fetched + - returns: RequestBuilder + */ + open class func getOrderByIdWithRequestBuilder(orderId: Int64) -> RequestBuilder { + var path = "/store/order/{order_id}" + let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" + let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Place an order for a pet + + - parameter body: (body) order placed for purchasing the pet + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Place an order for a pet + - POST /store/order + - parameter body: (body) order placed for purchasing the pet + - returns: RequestBuilder + */ + open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { + let path = "/store/order" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift new file mode 100644 index 000000000000..cfd30068a9db --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift @@ -0,0 +1,366 @@ +// +// UserAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class UserAPI { + /** + Create user + + - parameter body: (body) Created user object + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Create user + - POST /user + - This can only be done by the logged in user. + - parameter body: (body) Created user object + - returns: RequestBuilder + */ + open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { + let path = "/user" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Creates list of users with given input array + + - parameter body: (body) List of user object + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Creates list of users with given input array + - POST /user/createWithArray + - parameter body: (body) List of user object + - returns: RequestBuilder + */ + open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { + let path = "/user/createWithArray" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Creates list of users with given input array + + - parameter body: (body) List of user object + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Creates list of users with given input array + - POST /user/createWithList + - parameter body: (body) List of user object + - returns: RequestBuilder + */ + open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { + let path = "/user/createWithList" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Delete user + + - parameter username: (path) The name that needs to be deleted + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Delete user + - DELETE /user/{username} + - This can only be done by the logged in user. + - parameter username: (path) The name that needs to be deleted + - returns: RequestBuilder + */ + open class func deleteUserWithRequestBuilder(username: String) -> RequestBuilder { + var path = "/user/{username}" + let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" + let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Get user by user name + + - parameter username: (path) The name that needs to be fetched. Use user1 for testing. + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { + getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Get user by user name + - GET /user/{username} + - parameter username: (path) The name that needs to be fetched. Use user1 for testing. + - returns: RequestBuilder + */ + open class func getUserByNameWithRequestBuilder(username: String) -> RequestBuilder { + var path = "/user/{username}" + let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" + let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Logs user into the system + + - parameter username: (query) The user name for login + - parameter password: (query) The password for login in clear text + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Logs user into the system + - GET /user/login + - responseHeaders: [X-Rate-Limit(Int), X-Expires-After(Date)] + - parameter username: (query) The user name for login + - parameter password: (query) The password for login in clear text + - returns: RequestBuilder + */ + open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { + let path = "/user/login" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + var url = URLComponents(string: URLString) + url?.queryItems = APIHelper.mapValuesToQueryItems([ + "username": username.encodeToJSON(), + "password": password.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Logs out current logged in user session + + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Logs out current logged in user session + - GET /user/logout + - returns: RequestBuilder + */ + open class func logoutUserWithRequestBuilder() -> RequestBuilder { + let path = "/user/logout" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Updated user + + - parameter username: (path) name that need to be deleted + - parameter body: (body) Updated user object + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Updated user + - PUT /user/{username} + - This can only be done by the logged in user. + - parameter username: (path) name that need to be deleted + - parameter body: (body) Updated user object + - returns: RequestBuilder + */ + open class func updateUserWithRequestBuilder(username: String, body: User) -> RequestBuilder { + var path = "/user/{username}" + let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" + let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let url = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/CodableHelper.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/CodableHelper.swift new file mode 100644 index 000000000000..09c82e53e132 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/CodableHelper.swift @@ -0,0 +1,49 @@ +// +// CodableHelper.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class CodableHelper { + private static var customDateFormatter: DateFormatter? + private static var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter() + + private static var customJSONDecoder: JSONDecoder? + private static var defaultJSONDecoder: JSONDecoder = { + let decoder = JSONDecoder() + decoder.dateDecodingStrategy = .formatted(CodableHelper.dateFormatter) + return decoder + }() + + private static var customJSONEncoder: JSONEncoder? + private static var defaultJSONEncoder: JSONEncoder = { + let encoder = JSONEncoder() + encoder.dateEncodingStrategy = .formatted(CodableHelper.dateFormatter) + encoder.outputFormatting = .prettyPrinted + return encoder + }() + + public static var dateFormatter: DateFormatter { + get { return customDateFormatter ?? defaultDateFormatter } + set { customDateFormatter = newValue } + } + public static var jsonDecoder: JSONDecoder { + get { return customJSONDecoder ?? defaultJSONDecoder } + set { customJSONDecoder = newValue } + } + public static var jsonEncoder: JSONEncoder { + get { return customJSONEncoder ?? defaultJSONEncoder } + set { customJSONEncoder = newValue } + } + + open class func decode(_ type: T.Type, from data: Data) -> Swift.Result where T: Decodable { + return Swift.Result { try jsonDecoder.decode(type, from: data) } + } + + open class func encode(_ value: T) -> Swift.Result where T: Encodable { + return Swift.Result { try jsonEncoder.encode(value) } + } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Configuration.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Configuration.swift new file mode 100644 index 000000000000..18edabbed782 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Configuration.swift @@ -0,0 +1,14 @@ +// Configuration.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class Configuration { + // This value is used to configure the date formatter that is used to serialize dates into JSON format. + // You must set it prior to encoding any dates, and it will only be read once. + @available(*, unavailable, message: "To set a different date format, use CodableHelper.dateFormatter instead.") + public static var dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift new file mode 100644 index 000000000000..93ed6b90b376 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift @@ -0,0 +1,179 @@ +// Extensions.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +extension Bool: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension Float: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension Int: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension Int32: JSONEncodable { + func encodeToJSON() -> Any { return NSNumber(value: self as Int32) } +} + +extension Int64: JSONEncodable { + func encodeToJSON() -> Any { return NSNumber(value: self as Int64) } +} + +extension Double: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension String: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension RawRepresentable where RawValue: JSONEncodable { + func encodeToJSON() -> Any { return self.rawValue as Any } +} + +private func encodeIfPossible(_ object: T) -> Any { + if let encodableObject = object as? JSONEncodable { + return encodableObject.encodeToJSON() + } else { + return object as Any + } +} + +extension Array: JSONEncodable { + func encodeToJSON() -> Any { + return self.map(encodeIfPossible) + } +} + +extension Dictionary: JSONEncodable { + func encodeToJSON() -> Any { + var dictionary = [AnyHashable: Any]() + for (key, value) in self { + dictionary[key] = encodeIfPossible(value) + } + return dictionary as Any + } +} + +extension Data: JSONEncodable { + func encodeToJSON() -> Any { + return self.base64EncodedString(options: Data.Base64EncodingOptions()) + } +} + +extension Date: JSONEncodable { + func encodeToJSON() -> Any { + return CodableHelper.dateFormatter.string(from: self) as Any + } +} + +extension URL: JSONEncodable { + func encodeToJSON() -> Any { + return self + } +} + +extension UUID: JSONEncodable { + func encodeToJSON() -> Any { + return self.uuidString + } +} + +extension String: CodingKey { + + public var stringValue: String { + return self + } + + public init?(stringValue: String) { + self.init(stringLiteral: stringValue) + } + + public var intValue: Int? { + return nil + } + + public init?(intValue: Int) { + return nil + } + +} + +extension KeyedEncodingContainerProtocol { + + public mutating func encodeArray(_ values: [T], forKey key: Self.Key) throws where T: Encodable { + var arrayContainer = nestedUnkeyedContainer(forKey: key) + try arrayContainer.encode(contentsOf: values) + } + + public mutating func encodeArrayIfPresent(_ values: [T]?, forKey key: Self.Key) throws where T: Encodable { + if let values = values { + try encodeArray(values, forKey: key) + } + } + + public mutating func encodeMap(_ pairs: [Self.Key: T]) throws where T: Encodable { + for (key, value) in pairs { + try encode(value, forKey: key) + } + } + + public mutating func encodeMapIfPresent(_ pairs: [Self.Key: T]?) throws where T: Encodable { + if let pairs = pairs { + try encodeMap(pairs) + } + } + +} + +extension KeyedDecodingContainerProtocol { + + public func decodeArray(_ type: T.Type, forKey key: Self.Key) throws -> [T] where T: Decodable { + var tmpArray = [T]() + + var nestedContainer = try nestedUnkeyedContainer(forKey: key) + while !nestedContainer.isAtEnd { + let arrayValue = try nestedContainer.decode(T.self) + tmpArray.append(arrayValue) + } + + return tmpArray + } + + public func decodeArrayIfPresent(_ type: T.Type, forKey key: Self.Key) throws -> [T]? where T: Decodable { + var tmpArray: [T]? + + if contains(key) { + tmpArray = try decodeArray(T.self, forKey: key) + } + + return tmpArray + } + + public func decodeMap(_ type: T.Type, excludedKeys: Set) throws -> [Self.Key: T] where T: Decodable { + var map: [Self.Key: T] = [:] + + for key in allKeys { + if !excludedKeys.contains(key) { + let value = try decode(T.self, forKey: key) + map[key] = value + } + } + + return map + } + +} + +extension HTTPURLResponse { + var isStatusCodeSuccessful: Bool { + return Array(200 ..< 300).contains(statusCode) + } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/JSONDataEncoding.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/JSONDataEncoding.swift new file mode 100644 index 000000000000..b79e9f5e64d5 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/JSONDataEncoding.swift @@ -0,0 +1,53 @@ +// +// JSONDataEncoding.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct JSONDataEncoding { + + // MARK: Properties + + private static let jsonDataKey = "jsonData" + + // MARK: Encoding + + /// Creates a URL request by encoding parameters and applying them onto an existing request. + /// + /// - parameter urlRequest: The request to have parameters applied. + /// - parameter parameters: The parameters to apply. This should have a single key/value + /// pair with "jsonData" as the key and a Data object as the value. + /// + /// - throws: An `Error` if the encoding process encounters an error. + /// + /// - returns: The encoded request. + public func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) -> URLRequest { + var urlRequest = urlRequest + + guard let jsonData = parameters?[JSONDataEncoding.jsonDataKey] as? Data, !jsonData.isEmpty else { + return urlRequest + } + + if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { + urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + } + + urlRequest.httpBody = jsonData + + return urlRequest + } + + public static func encodingParameters(jsonData: Data?) -> [String: Any]? { + var returnedParams: [String: Any]? + if let jsonData = jsonData, !jsonData.isEmpty { + var params: [String: Any] = [:] + params[jsonDataKey] = jsonData + returnedParams = params + } + return returnedParams + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/JSONEncodingHelper.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/JSONEncodingHelper.swift new file mode 100644 index 000000000000..02f78ffb4705 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/JSONEncodingHelper.swift @@ -0,0 +1,45 @@ +// +// JSONEncodingHelper.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class JSONEncodingHelper { + + open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? { + var params: [String: Any]? + + // Encode the Encodable object + if let encodableObj = encodableObj { + let encodeResult = CodableHelper.encode(encodableObj) + do { + let data = try encodeResult.get() + params = JSONDataEncoding.encodingParameters(jsonData: data) + } catch { + print(error.localizedDescription) + } + } + + return params + } + + open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? { + var params: [String: Any]? + + if let encodableObj = encodableObj { + do { + let data = try JSONSerialization.data(withJSONObject: encodableObj, options: .prettyPrinted) + params = JSONDataEncoding.encodingParameters(jsonData: data) + } catch { + print(error.localizedDescription) + return nil + } + } + + return params + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models.swift new file mode 100644 index 000000000000..96e26a20f7d6 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models.swift @@ -0,0 +1,54 @@ +// Models.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +protocol JSONEncodable { + func encodeToJSON() -> Any +} + +public enum ErrorResponse: Error { + case error(Int, Data?, URLResponse?, Error) +} + +public enum DownloadException: Error { + case responseDataMissing + case responseFailed + case requestMissing + case requestMissingPath + case requestMissingURL +} + +public enum DecodableRequestBuilderError: Error { + case emptyDataResponse + case nilHTTPResponse + case unsuccessfulHTTPStatusCode + case jsonDecoding(DecodingError) + case generalError(Error) +} + +open class Response { + public let statusCode: Int + public let header: [String: String] + public let body: T? + + public init(statusCode: Int, header: [String: String], body: T?) { + self.statusCode = statusCode + self.header = header + self.body = body + } + + public convenience init(response: HTTPURLResponse, body: T?) { + let rawHeader = response.allHeaderFields + var header = [String: String]() + for (key, value) in rawHeader { + if let key = key.base as? String, let value = value as? String { + header[key] = value + } + } + self.init(statusCode: response.statusCode, header: header, body: body) + } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift new file mode 100644 index 000000000000..733b7bc51594 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift @@ -0,0 +1,25 @@ +// +// AdditionalPropertiesClass.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct AdditionalPropertiesClass: Codable, Hashable { + + public var mapString: [String: String]? + public var mapMapString: [String: [String: String]]? + + public init(mapString: [String: String]? = nil, mapMapString: [String: [String: String]]? = nil) { + self.mapString = mapString + self.mapMapString = mapMapString + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case mapString = "map_string" + case mapMapString = "map_map_string" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift new file mode 100644 index 000000000000..e57c8b471765 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift @@ -0,0 +1,20 @@ +// +// Animal.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct Animal: Codable, Hashable { + + public var className: String + public var color: String? = "red" + + public init(className: String, color: String? = "red") { + self.className = className + self.color = color + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift new file mode 100644 index 000000000000..e09b0e9efdc8 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift @@ -0,0 +1,10 @@ +// +// AnimalFarm.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift new file mode 100644 index 000000000000..630992f6231e --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift @@ -0,0 +1,22 @@ +// +// ApiResponse.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct ApiResponse: Codable, Hashable { + + public var code: Int? + public var type: String? + public var message: String? + + public init(code: Int? = nil, type: String? = nil, message: String? = nil) { + self.code = code + self.type = type + self.message = message + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift new file mode 100644 index 000000000000..4710793fc9a6 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift @@ -0,0 +1,22 @@ +// +// ArrayOfArrayOfNumberOnly.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { + + public var arrayArrayNumber: [[Double]]? + + public init(arrayArrayNumber: [[Double]]? = nil) { + self.arrayArrayNumber = arrayArrayNumber + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case arrayArrayNumber = "ArrayArrayNumber" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift new file mode 100644 index 000000000000..a41968d9b199 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift @@ -0,0 +1,22 @@ +// +// ArrayOfNumberOnly.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct ArrayOfNumberOnly: Codable, Hashable { + + public var arrayNumber: [Double]? + + public init(arrayNumber: [Double]? = nil) { + self.arrayNumber = arrayNumber + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case arrayNumber = "ArrayNumber" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift new file mode 100644 index 000000000000..f442ea725451 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift @@ -0,0 +1,28 @@ +// +// ArrayTest.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct ArrayTest: Codable, Hashable { + + public var arrayOfString: [String]? + public var arrayArrayOfInteger: [[Int64]]? + public var arrayArrayOfModel: [[ReadOnlyFirst]]? + + public init(arrayOfString: [String]? = nil, arrayArrayOfInteger: [[Int64]]? = nil, arrayArrayOfModel: [[ReadOnlyFirst]]? = nil) { + self.arrayOfString = arrayOfString + self.arrayArrayOfInteger = arrayArrayOfInteger + self.arrayArrayOfModel = arrayArrayOfModel + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case arrayOfString = "array_of_string" + case arrayArrayOfInteger = "array_array_of_integer" + case arrayArrayOfModel = "array_array_of_model" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift new file mode 100644 index 000000000000..44b50bbe0063 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift @@ -0,0 +1,38 @@ +// +// Capitalization.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct Capitalization: Codable, Hashable { + + public var smallCamel: String? + public var capitalCamel: String? + public var smallSnake: String? + public var capitalSnake: String? + public var sCAETHFlowPoints: String? + /** Name of the pet */ + public var ATT_NAME: String? + + public init(smallCamel: String? = nil, capitalCamel: String? = nil, smallSnake: String? = nil, capitalSnake: String? = nil, sCAETHFlowPoints: String? = nil, ATT_NAME: String? = nil) { + self.smallCamel = smallCamel + self.capitalCamel = capitalCamel + self.smallSnake = smallSnake + self.capitalSnake = capitalSnake + self.sCAETHFlowPoints = sCAETHFlowPoints + self.ATT_NAME = ATT_NAME + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case smallCamel + case capitalCamel = "CapitalCamel" + case smallSnake = "small_Snake" + case capitalSnake = "Capital_Snake" + case sCAETHFlowPoints = "SCA_ETH_Flow_Points" + case ATT_NAME + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift new file mode 100644 index 000000000000..c6bf4460da6e --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift @@ -0,0 +1,22 @@ +// +// Cat.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct Cat: Codable, Hashable { + + public var className: String + public var color: String? = "red" + public var declawed: Bool? + + public init(className: String, color: String? = "red", declawed: Bool? = nil) { + self.className = className + self.color = color + self.declawed = declawed + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift new file mode 100644 index 000000000000..f9484f9bc8fd --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift @@ -0,0 +1,18 @@ +// +// CatAllOf.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct CatAllOf: Codable, Hashable { + + public var declawed: Bool? + + public init(declawed: Bool? = nil) { + self.declawed = declawed + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift new file mode 100644 index 000000000000..6a19bb02d0df --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift @@ -0,0 +1,20 @@ +// +// Category.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct Category: Codable, Hashable { + + public var id: Int64? + public var name: String = "default-name" + + public init(id: Int64? = nil, name: String = "default-name") { + self.id = id + self.name = name + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift new file mode 100644 index 000000000000..1464b047c06a --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift @@ -0,0 +1,18 @@ +// +// Client.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct Client: Codable, Hashable { + + public var client: String? + + public init(client: String? = nil) { + self.client = client + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift new file mode 100644 index 000000000000..5aed7834d537 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift @@ -0,0 +1,22 @@ +// +// Dog.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct Dog: Codable, Hashable { + + public var className: String + public var color: String? = "red" + public var breed: String? + + public init(className: String, color: String? = "red", breed: String? = nil) { + self.className = className + self.color = color + self.breed = breed + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift new file mode 100644 index 000000000000..716776261d30 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift @@ -0,0 +1,18 @@ +// +// DogAllOf.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct DogAllOf: Codable, Hashable { + + public var breed: String? + + public init(breed: String? = nil) { + self.breed = breed + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift new file mode 100644 index 000000000000..aa13aa59f86a --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift @@ -0,0 +1,33 @@ +// +// EnumArrays.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct EnumArrays: Codable, Hashable { + + public enum JustSymbol: String, Codable, CaseIterable { + case greaterThanOrEqualTo = ">=" + case dollar = "$" + } + public enum ArrayEnum: String, Codable, CaseIterable { + case fish = "fish" + case crab = "crab" + } + public var justSymbol: JustSymbol? + public var arrayEnum: [ArrayEnum]? + + public init(justSymbol: JustSymbol? = nil, arrayEnum: [ArrayEnum]? = nil) { + self.justSymbol = justSymbol + self.arrayEnum = arrayEnum + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case justSymbol = "just_symbol" + case arrayEnum = "array_enum" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift new file mode 100644 index 000000000000..d4029d73f8af --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift @@ -0,0 +1,14 @@ +// +// EnumClass.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public enum EnumClass: String, Codable, CaseIterable { + case abc = "_abc" + case efg = "-efg" + case xyz = "(xyz)" +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift new file mode 100644 index 000000000000..8b62febdc959 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift @@ -0,0 +1,52 @@ +// +// EnumTest.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct EnumTest: Codable, Hashable { + + public enum EnumString: String, Codable, CaseIterable { + case upper = "UPPER" + case lower = "lower" + case empty = "" + } + public enum EnumStringRequired: String, Codable, CaseIterable { + case upper = "UPPER" + case lower = "lower" + case empty = "" + } + public enum EnumInteger: Int, Codable, CaseIterable { + case _1 = 1 + case number1 = -1 + } + public enum EnumNumber: Double, Codable, CaseIterable { + case _11 = 1.1 + case number12 = -1.2 + } + public var enumString: EnumString? + public var enumStringRequired: EnumStringRequired + public var enumInteger: EnumInteger? + public var enumNumber: EnumNumber? + public var outerEnum: OuterEnum? + + public init(enumString: EnumString? = nil, enumStringRequired: EnumStringRequired, enumInteger: EnumInteger? = nil, enumNumber: EnumNumber? = nil, outerEnum: OuterEnum? = nil) { + self.enumString = enumString + self.enumStringRequired = enumStringRequired + self.enumInteger = enumInteger + self.enumNumber = enumNumber + self.outerEnum = outerEnum + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case enumString = "enum_string" + case enumStringRequired = "enum_string_required" + case enumInteger = "enum_integer" + case enumNumber = "enum_number" + case outerEnum + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift new file mode 100644 index 000000000000..aa14d762394d --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift @@ -0,0 +1,20 @@ +// +// File.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +/** Must be named `File` for test. */ +public struct File: Codable, Hashable { + + /** Test capitalization */ + public var sourceURI: String? + + public init(sourceURI: String? = nil) { + self.sourceURI = sourceURI + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift new file mode 100644 index 000000000000..85987709776e --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift @@ -0,0 +1,20 @@ +// +// FileSchemaTestClass.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct FileSchemaTestClass: Codable, Hashable { + + public var file: File? + public var files: [File]? + + public init(file: File? = nil, files: [File]? = nil) { + self.file = file + self.files = files + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift new file mode 100644 index 000000000000..f09cb471b360 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift @@ -0,0 +1,42 @@ +// +// FormatTest.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct FormatTest: Codable, Hashable { + + public var integer: Int? + public var int32: Int? + public var int64: Int64? + public var number: Double + public var float: Float? + public var double: Double? + public var string: String? + public var byte: Data + public var binary: URL? + public var date: Date + public var dateTime: Date? + public var uuid: UUID? + public var password: String + + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + self.integer = integer + self.int32 = int32 + self.int64 = int64 + self.number = number + self.float = float + self.double = double + self.string = string + self.byte = byte + self.binary = binary + self.date = date + self.dateTime = dateTime + self.uuid = uuid + self.password = password + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift new file mode 100644 index 000000000000..03d35274a4ee --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift @@ -0,0 +1,20 @@ +// +// HasOnlyReadOnly.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct HasOnlyReadOnly: Codable, Hashable { + + public var bar: String? + public var foo: String? + + public init(bar: String? = nil, foo: String? = nil) { + self.bar = bar + self.foo = foo + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift new file mode 100644 index 000000000000..f8f08e4c6c44 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift @@ -0,0 +1,22 @@ +// +// List.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct List: Codable, Hashable { + + public var _123list: String? + + public init(_123list: String? = nil) { + self._123list = _123list + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case _123list = "123-list" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift new file mode 100644 index 000000000000..bd4e7b97e81b --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift @@ -0,0 +1,35 @@ +// +// MapTest.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct MapTest: Codable, Hashable { + + public enum MapOfEnumString: String, Codable, CaseIterable { + case upper = "UPPER" + case lower = "lower" + } + public var mapMapOfString: [String: [String: String]]? + public var mapOfEnumString: [String: String]? + public var directMap: [String: Bool]? + public var indirectMap: StringBooleanMap? + + public init(mapMapOfString: [String: [String: String]]? = nil, mapOfEnumString: [String: String]? = nil, directMap: [String: Bool]? = nil, indirectMap: StringBooleanMap? = nil) { + self.mapMapOfString = mapMapOfString + self.mapOfEnumString = mapOfEnumString + self.directMap = directMap + self.indirectMap = indirectMap + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case mapMapOfString = "map_map_of_string" + case mapOfEnumString = "map_of_enum_string" + case directMap = "direct_map" + case indirectMap = "indirect_map" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift new file mode 100644 index 000000000000..80c1781a2bfc --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -0,0 +1,22 @@ +// +// MixedPropertiesAndAdditionalPropertiesClass.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { + + public var uuid: UUID? + public var dateTime: Date? + public var map: [String: Animal]? + + public init(uuid: UUID? = nil, dateTime: Date? = nil, map: [String: Animal]? = nil) { + self.uuid = uuid + self.dateTime = dateTime + self.map = map + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift new file mode 100644 index 000000000000..49cc57544179 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift @@ -0,0 +1,32 @@ +// +// Name.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +/** Model for testing model name same as property name */ +public struct Name: Codable, Hashable { + + public var name: Int + public var snakeCase: Int? + public var property: String? + public var _123number: Int? + + public init(name: Int, snakeCase: Int? = nil, property: String? = nil, _123number: Int? = nil) { + self.name = name + self.snakeCase = snakeCase + self.property = property + self._123number = _123number + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + case snakeCase = "snake_case" + case property + case _123number = "123Number" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift new file mode 100644 index 000000000000..6b024294e288 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift @@ -0,0 +1,22 @@ +// +// NumberOnly.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct NumberOnly: Codable, Hashable { + + public var justNumber: Double? + + public init(justNumber: Double? = nil) { + self.justNumber = justNumber + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case justNumber = "JustNumber" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift new file mode 100644 index 000000000000..8ef7cb79e2c8 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift @@ -0,0 +1,34 @@ +// +// Order.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct Order: Codable, Hashable { + + public enum Status: String, Codable, CaseIterable { + case placed = "placed" + case approved = "approved" + case delivered = "delivered" + } + public var id: Int64? + public var petId: Int64? + public var quantity: Int? + public var shipDate: Date? + /** Order Status */ + public var status: Status? + public var complete: Bool? = false + + public init(id: Int64? = nil, petId: Int64? = nil, quantity: Int? = nil, shipDate: Date? = nil, status: Status? = nil, complete: Bool? = false) { + self.id = id + self.petId = petId + self.quantity = quantity + self.shipDate = shipDate + self.status = status + self.complete = complete + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift new file mode 100644 index 000000000000..9865764ff9bb --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift @@ -0,0 +1,28 @@ +// +// OuterComposite.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct OuterComposite: Codable, Hashable { + + public var myNumber: Double? + public var myString: String? + public var myBoolean: Bool? + + public init(myNumber: Double? = nil, myString: String? = nil, myBoolean: Bool? = nil) { + self.myNumber = myNumber + self.myString = myString + self.myBoolean = myBoolean + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case myNumber = "my_number" + case myString = "my_string" + case myBoolean = "my_boolean" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift new file mode 100644 index 000000000000..c3b778cbbed4 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift @@ -0,0 +1,14 @@ +// +// OuterEnum.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public enum OuterEnum: String, Codable, CaseIterable { + case placed = "placed" + case approved = "approved" + case delivered = "delivered" +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift new file mode 100644 index 000000000000..1bc823d3e960 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift @@ -0,0 +1,34 @@ +// +// Pet.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct Pet: Codable, Hashable { + + public enum Status: String, Codable, CaseIterable { + case available = "available" + case pending = "pending" + case sold = "sold" + } + public var id: Int64? + public var category: Category? + public var name: String + public var photoUrls: [String] + public var tags: [Tag]? + /** pet status in the store */ + public var status: Status? + + public init(id: Int64? = nil, category: Category? = nil, name: String, photoUrls: [String], tags: [Tag]? = nil, status: Status? = nil) { + self.id = id + self.category = category + self.name = name + self.photoUrls = photoUrls + self.tags = tags + self.status = status + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift new file mode 100644 index 000000000000..03b5b0dbf02b --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift @@ -0,0 +1,20 @@ +// +// ReadOnlyFirst.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct ReadOnlyFirst: Codable, Hashable { + + public var bar: String? + public var baz: String? + + public init(bar: String? = nil, baz: String? = nil) { + self.bar = bar + self.baz = baz + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift new file mode 100644 index 000000000000..cb82d2ae3adc --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift @@ -0,0 +1,22 @@ +// +// SpecialModelName.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct SpecialModelName: Codable, Hashable { + + public var specialPropertyName: Int64? + + public init(specialPropertyName: Int64? = nil) { + self.specialPropertyName = specialPropertyName + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case specialPropertyName = "$special[property.name]" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift new file mode 100644 index 000000000000..77ab81f5f341 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift @@ -0,0 +1,45 @@ +// +// StringBooleanMap.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct StringBooleanMap: Codable, Hashable { + + public var additionalProperties: [String: Bool] = [:] + + public subscript(key: String) -> Bool? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + + var container = encoder.container(keyedBy: String.self) + + try container.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + var nonAdditionalPropertyKeys = Set() + additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift new file mode 100644 index 000000000000..8b8e24fc39c0 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift @@ -0,0 +1,20 @@ +// +// Tag.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct Tag: Codable, Hashable { + + public var id: Int64? + public var name: String? + + public init(id: Int64? = nil, name: String? = nil) { + self.id = id + self.name = name + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift new file mode 100644 index 000000000000..f1920ef37788 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift @@ -0,0 +1,34 @@ +// +// TypeHolderDefault.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct TypeHolderDefault: Codable, Hashable { + + public var stringItem: String = "what" + public var numberItem: Double + public var integerItem: Int + public var boolItem: Bool = true + public var arrayItem: [Int] + + public init(stringItem: String = "what", numberItem: Double, integerItem: Int, boolItem: Bool = true, arrayItem: [Int]) { + self.stringItem = stringItem + self.numberItem = numberItem + self.integerItem = integerItem + self.boolItem = boolItem + self.arrayItem = arrayItem + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case stringItem = "string_item" + case numberItem = "number_item" + case integerItem = "integer_item" + case boolItem = "bool_item" + case arrayItem = "array_item" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift new file mode 100644 index 000000000000..1a23c1b486b8 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift @@ -0,0 +1,34 @@ +// +// TypeHolderExample.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct TypeHolderExample: Codable, Hashable { + + public var stringItem: String + public var numberItem: Double + public var integerItem: Int + public var boolItem: Bool + public var arrayItem: [Int] + + public init(stringItem: String, numberItem: Double, integerItem: Int, boolItem: Bool, arrayItem: [Int]) { + self.stringItem = stringItem + self.numberItem = numberItem + self.integerItem = integerItem + self.boolItem = boolItem + self.arrayItem = arrayItem + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case stringItem = "string_item" + case numberItem = "number_item" + case integerItem = "integer_item" + case boolItem = "bool_item" + case arrayItem = "array_item" + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift new file mode 100644 index 000000000000..f3b4f6bb958a --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift @@ -0,0 +1,33 @@ +// +// User.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct User: Codable, Hashable { + + public var id: Int64? + public var username: String? + public var firstName: String? + public var lastName: String? + public var email: String? + public var password: String? + public var phone: String? + /** User Status */ + public var userStatus: Int? + + public init(id: Int64? = nil, username: String? = nil, firstName: String? = nil, lastName: String? = nil, email: String? = nil, password: String? = nil, phone: String? = nil, userStatus: Int? = nil) { + self.id = id + self.username = username + self.firstName = firstName + self.lastName = lastName + self.email = email + self.password = password + self.phone = phone + self.userStatus = userStatus + } + +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/OpenISO8601DateFormatter.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/OpenISO8601DateFormatter.swift new file mode 100644 index 000000000000..e06208074cd9 --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/OpenISO8601DateFormatter.swift @@ -0,0 +1,44 @@ +// +// OpenISO8601DateFormatter.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +// https://stackoverflow.com/a/50281094/976628 +public class OpenISO8601DateFormatter: DateFormatter { + static let withoutSeconds: DateFormatter = { + let formatter = DateFormatter() + formatter.calendar = Calendar(identifier: .iso8601) + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.timeZone = TimeZone(secondsFromGMT: 0) + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" + return formatter + }() + + private func setup() { + calendar = Calendar(identifier: .iso8601) + locale = Locale(identifier: "en_US_POSIX") + timeZone = TimeZone(secondsFromGMT: 0) + dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" + } + + override init() { + super.init() + setup() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + setup() + } + + override public func date(from string: String) -> Date? { + if let result = super.date(from: string) { + return result + } + return OpenISO8601DateFormatter.withoutSeconds.date(from: string) + } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/SynchronizedDictionary.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/SynchronizedDictionary.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift similarity index 100% rename from samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift rename to samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/SynchronizedDictionary.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/SynchronizedDictionary.swift new file mode 100644 index 000000000000..acf7ff4031bd --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/SynchronizedDictionary.swift @@ -0,0 +1,36 @@ +// SynchronizedDictionary.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +internal struct SynchronizedDictionary { + + private var dictionary = [K: V]() + private let queue = DispatchQueue( + label: "SynchronizedDictionary", + qos: DispatchQoS.userInitiated, + attributes: [DispatchQueue.Attributes.concurrent], + autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, + target: nil + ) + + internal subscript(key: K) -> V? { + get { + var value: V? + + queue.sync { + value = self.dictionary[key] + } + + return value + } + set { + queue.sync(flags: DispatchWorkItemFlags.barrier) { + self.dictionary[key] = newValue + } + } + } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/URLSessionImplementations.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/URLSessionImplementations.swift new file mode 100644 index 000000000000..52b2071ec1aa --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/URLSessionImplementations.swift @@ -0,0 +1,606 @@ +// URLSessionImplementations.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +#if !os(macOS) +import MobileCoreServices +#endif + +class URLSessionRequestBuilderFactory: RequestBuilderFactory { + func getNonDecodableBuilder() -> RequestBuilder.Type { + return URLSessionRequestBuilder.self + } + + func getBuilder() -> RequestBuilder.Type { + return URLSessionDecodableRequestBuilder.self + } +} + +// Store the URLSession to retain its reference +private var urlSessionStore = SynchronizedDictionary() + +open class URLSessionRequestBuilder: RequestBuilder { + + /** + May be assigned if you want to control the authentication challenges. + */ + public var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? + + /** + May be assigned if you want to do any of those things: + - control the task completion + - intercept and handle errors like authorization + - retry the request. + */ + @available(*, deprecated, message: "Please override execute() method to intercept and handle errors like authorization or retry the request. Check the Wiki for more info. https://github.com/OpenAPITools/openapi-generator/wiki/FAQ#how-do-i-implement-bearer-token-authentication-with-urlsession-on-the-swift-api-client") + public var taskCompletionShouldRetry: ((Data?, URLResponse?, Error?, @escaping (Bool) -> Void) -> Void)? + + required public init(method: String, URLString: String, parameters: [String: Any]?, headers: [String: String] = [:]) { + super.init(method: method, URLString: URLString, parameters: parameters, headers: headers) + } + + /** + May be overridden by a subclass if you want to control the URLSession + configuration. + */ + open func createURLSession() -> URLSession { + let configuration = URLSessionConfiguration.default + configuration.httpAdditionalHeaders = buildHeaders() + let sessionDelegate = SessionDelegate() + sessionDelegate.credential = credential + sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge + return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil) + } + + /** + May be overridden by a subclass if you want to control the Content-Type + that is given to an uploaded form part. + + Return nil to use the default behavior (inferring the Content-Type from + the file extension). Return the desired Content-Type otherwise. + */ + open func contentTypeForFormPart(fileURL: URL) -> String? { + return nil + } + + /** + May be overridden by a subclass if you want to control the URLRequest + configuration (e.g. to override the cache policy). + */ + open func createURLRequest(urlSession: URLSession, method: HTTPMethod, encoding: ParameterEncoding, headers: [String: String]) throws -> URLRequest { + + guard let url = URL(string: URLString) else { + throw DownloadException.requestMissingURL + } + + var originalRequest = URLRequest(url: url) + + originalRequest.httpMethod = method.rawValue + + headers.forEach { key, value in + originalRequest.setValue(value, forHTTPHeaderField: key) + } + + buildHeaders().forEach { key, value in + originalRequest.setValue(value, forHTTPHeaderField: key) + } + + let modifiedRequest = try encoding.encode(originalRequest, with: parameters) + + return modifiedRequest + } + + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + let urlSessionId = UUID().uuidString + // Create a new manager for each request to customize its request header + let urlSession = createURLSession() + urlSessionStore[urlSessionId] = urlSession + + guard let xMethod = HTTPMethod(rawValue: method) else { + fatalError("Unsuported Http method - \(method)") + } + + let encoding: ParameterEncoding + + switch xMethod { + case .get, .head: + encoding = URLEncoding() + + case .options, .post, .put, .patch, .delete, .trace, .connect: + let contentType = headers["Content-Type"] ?? "application/json" + + if contentType == "application/json" { + encoding = JSONDataEncoding() + } else if contentType == "multipart/form-data" { + encoding = FormDataEncoding(contentTypeForFormPart: contentTypeForFormPart(fileURL:)) + } else if contentType == "application/x-www-form-urlencoded" { + encoding = FormURLEncoding() + } else { + fatalError("Unsuported Media Type - \(contentType)") + } + } + + let cleanupRequest = { + urlSessionStore[urlSessionId]?.finishTasksAndInvalidate() + urlSessionStore[urlSessionId] = nil + } + + do { + let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) + + let dataTask = urlSession.dataTask(with: request) { data, response, error in + + if let taskCompletionShouldRetry = self.taskCompletionShouldRetry { + + taskCompletionShouldRetry(data, response, error) { shouldRetry in + + if shouldRetry { + cleanupRequest() + self.execute(apiResponseQueue, completion) + } else { + apiResponseQueue.async { + self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion) + cleanupRequest() + } + } + } + } else { + apiResponseQueue.async { + self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion) + cleanupRequest() + } + } + } + + if #available(iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0, *) { + onProgressReady?(dataTask.progress) + } + + dataTask.resume() + + } catch { + apiResponseQueue.async { + cleanupRequest() + completion(.failure(ErrorResponse.error(415, nil, nil, error))) + } + } + } + + fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + + if let error = error { + completion(.failure(ErrorResponse.error(-1, data, response, error))) + return + } + + guard let httpResponse = response as? HTTPURLResponse else { + completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse))) + return + } + + guard httpResponse.isStatusCodeSuccessful else { + completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) + return + } + + switch T.self { + case is String.Type: + + let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? "" + + completion(.success(Response(response: httpResponse, body: body as? T))) + + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } + + let filePath = documentsDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + + case is Void.Type: + + completion(.success(Response(response: httpResponse, body: nil))) + + default: + + completion(.success(Response(response: httpResponse, body: data as? T))) + } + + } + + open func buildHeaders() -> [String: String] { + var httpHeaders: [String: String] = [:] + for (key, value) in headers { + httpHeaders[key] = value + } + for (key, value) in PetstoreClientAPI.customHeaders { + httpHeaders[key] = value + } + return httpHeaders + } + + fileprivate func getFileName(fromContentDisposition contentDisposition: String?) -> String? { + + guard let contentDisposition = contentDisposition else { + return nil + } + + let items = contentDisposition.components(separatedBy: ";") + + var filename: String? + + for contentItem in items { + + let filenameKey = "filename=" + guard let range = contentItem.range(of: filenameKey) else { + break + } + + filename = contentItem + return filename? + .replacingCharacters(in: range, with: "") + .replacingOccurrences(of: "\"", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) + } + + return filename + + } + + fileprivate func getPath(from url: URL) throws -> String { + + guard var path = URLComponents(url: url, resolvingAgainstBaseURL: true)?.path else { + throw DownloadException.requestMissingPath + } + + if path.hasPrefix("/") { + path.remove(at: path.startIndex) + } + + return path + + } + + fileprivate func getURL(from urlRequest: URLRequest) throws -> URL { + + guard let url = urlRequest.url else { + throw DownloadException.requestMissingURL + } + + return url + } + +} + +open class URLSessionDecodableRequestBuilder: URLSessionRequestBuilder { + override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + + if let error = error { + completion(.failure(ErrorResponse.error(-1, data, response, error))) + return + } + + guard let httpResponse = response as? HTTPURLResponse else { + completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse))) + return + } + + guard httpResponse.isStatusCodeSuccessful else { + completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) + return + } + + switch T.self { + case is String.Type: + + let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? "" + + completion(.success(Response(response: httpResponse, body: body as? T))) + + case is Void.Type: + + completion(.success(Response(response: httpResponse, body: nil))) + + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + + default: + + guard let data = data, !data.isEmpty else { + completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse))) + return + } + + let decodeResult = CodableHelper.decode(T.self, from: data) + + switch decodeResult { + case let .success(decodableObj): + completion(.success(Response(response: httpResponse, body: decodableObj))) + case let .failure(error): + completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error))) + } + } + } +} + +private class SessionDelegate: NSObject, URLSessionDelegate, URLSessionDataDelegate { + + var credential: URLCredential? + + var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? + + func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + + var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling + + var credential: URLCredential? + + if let taskDidReceiveChallenge = taskDidReceiveChallenge { + (disposition, credential) = taskDidReceiveChallenge(session, task, challenge) + } else { + if challenge.previousFailureCount > 0 { + disposition = .rejectProtectionSpace + } else { + credential = self.credential ?? session.configuration.urlCredentialStorage?.defaultCredential(for: challenge.protectionSpace) + + if credential != nil { + disposition = .useCredential + } + } + } + + completionHandler(disposition, credential) + } +} + +public enum HTTPMethod: String { + case options = "OPTIONS" + case get = "GET" + case head = "HEAD" + case post = "POST" + case put = "PUT" + case patch = "PATCH" + case delete = "DELETE" + case trace = "TRACE" + case connect = "CONNECT" +} + +public protocol ParameterEncoding { + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest +} + +private class URLEncoding: ParameterEncoding { + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { + + var urlRequest = urlRequest + + guard let parameters = parameters else { return urlRequest } + + guard let url = urlRequest.url else { + throw DownloadException.requestMissingURL + } + + if var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false), !parameters.isEmpty { + urlComponents.queryItems = APIHelper.mapValuesToQueryItems(parameters) + urlRequest.url = urlComponents.url + } + + return urlRequest + } +} + +private class FormDataEncoding: ParameterEncoding { + + let contentTypeForFormPart: (_ fileURL: URL) -> String? + + init(contentTypeForFormPart: @escaping (_ fileURL: URL) -> String?) { + self.contentTypeForFormPart = contentTypeForFormPart + } + + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { + + var urlRequest = urlRequest + + guard let parameters = parameters, !parameters.isEmpty else { + return urlRequest + } + + let boundary = "Boundary-\(UUID().uuidString)" + + urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") + + for (key, value) in parameters { + switch value { + case let fileURL as URL: + + urlRequest = try configureFileUploadRequest( + urlRequest: urlRequest, + boundary: boundary, + name: key, + fileURL: fileURL + ) + + case let string as String: + + if let data = string.data(using: .utf8) { + urlRequest = configureDataUploadRequest( + urlRequest: urlRequest, + boundary: boundary, + name: key, + data: data + ) + } + + case let number as NSNumber: + + if let data = number.stringValue.data(using: .utf8) { + urlRequest = configureDataUploadRequest( + urlRequest: urlRequest, + boundary: boundary, + name: key, + data: data + ) + } + + default: + fatalError("Unprocessable value \(value) with key \(key)") + } + } + + var body = urlRequest.httpBody.orEmpty + + body.append("\r\n--\(boundary)--\r\n") + + urlRequest.httpBody = body + + return urlRequest + } + + private func configureFileUploadRequest(urlRequest: URLRequest, boundary: String, name: String, fileURL: URL) throws -> URLRequest { + + var urlRequest = urlRequest + + var body = urlRequest.httpBody.orEmpty + + let fileData = try Data(contentsOf: fileURL) + + let mimetype = contentTypeForFormPart(fileURL) ?? mimeType(for: fileURL) + + let fileName = fileURL.lastPathComponent + + // If we already added something then we need an additional newline. + if body.count > 0 { + body.append("\r\n") + } + + // Value boundary. + body.append("--\(boundary)\r\n") + + // Value headers. + body.append("Content-Disposition: form-data; name=\"\(name)\"; filename=\"\(fileName)\"\r\n") + body.append("Content-Type: \(mimetype)\r\n") + + // Separate headers and body. + body.append("\r\n") + + // The value data. + body.append(fileData) + + urlRequest.httpBody = body + + return urlRequest + } + + private func configureDataUploadRequest(urlRequest: URLRequest, boundary: String, name: String, data: Data) -> URLRequest { + + var urlRequest = urlRequest + + var body = urlRequest.httpBody.orEmpty + + // If we already added something then we need an additional newline. + if body.count > 0 { + body.append("\r\n") + } + + // Value boundary. + body.append("--\(boundary)\r\n") + + // Value headers. + body.append("Content-Disposition: form-data; name=\"\(name)\"\r\n") + + // Separate headers and body. + body.append("\r\n") + + // The value data. + body.append(data) + + urlRequest.httpBody = body + + return urlRequest + + } + + func mimeType(for url: URL) -> String { + let pathExtension = url.pathExtension + + if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() { + if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() { + return mimetype as String + } + } + return "application/octet-stream" + } + +} + +private class FormURLEncoding: ParameterEncoding { + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { + + var urlRequest = urlRequest + + var requestBodyComponents = URLComponents() + requestBodyComponents.queryItems = APIHelper.mapValuesToQueryItems(parameters ?? [:]) + + if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { + urlRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") + } + + urlRequest.httpBody = requestBodyComponents.query?.data(using: .utf8) + + return urlRequest + } +} + +private extension Data { + /// Append string to Data + /// + /// Rather than littering my code with calls to `dataUsingEncoding` to convert strings to Data, and then add that data to the Data, this wraps it in a nice convenient little extension to Data. This converts using UTF-8. + /// + /// - parameter string: The string to be added to the `Data`. + + mutating func append(_ string: String) { + if let data = string.data(using: .utf8) { + append(data) + } + } +} + +private extension Optional where Wrapped == Data { + var orEmpty: Data { + self ?? Data() + } +} + +extension JSONDataEncoding: ParameterEncoding {} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/project.yml b/samples/client/petstore/swift5/urlsessionLibrary/project.yml index 8e7102001b8d..8d7dc23858cd 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/project.yml +++ b/samples/client/petstore/swift5/urlsessionLibrary/project.yml @@ -4,7 +4,7 @@ targets: type: framework platform: iOS deploymentTarget: "9.0" - sources: [PetstoreClient] + sources: [Sources] info: path: ./Info.plist version: 1.0.0 From b38166305f6dfc5f8865b78ff8091df9df838ad8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Apr 2021 08:38:02 +0800 Subject: [PATCH 040/186] Bump actions/cache from v2.1.4 to v2.1.5 (#9249) Bumps [actions/cache](https://github.com/actions/cache) from v2.1.4 to v2.1.5. - [Release notes](https://github.com/actions/cache/releases) - [Commits](https://github.com/actions/cache/compare/v2.1.4...1a9e2138d905efd099035b49d8b7a3888c653ca8) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/check-supported-versions.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check-supported-versions.yaml b/.github/workflows/check-supported-versions.yaml index 35c95b5b2aa5..897321f49bbb 100644 --- a/.github/workflows/check-supported-versions.yaml +++ b/.github/workflows/check-supported-versions.yaml @@ -28,14 +28,14 @@ jobs: with: java-version: ${{ matrix.java }} - - uses: actions/cache@v2.1.4 + - uses: actions/cache@v2.1.5 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('pom.xml', 'modules/**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- - - uses: actions/cache@v2.1.4 + - uses: actions/cache@v2.1.5 with: path: | ~/.gradle/caches From 347a4cef474d6a45f94c62b9300b8e1597369af9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Apr 2021 08:44:07 +0800 Subject: [PATCH 041/186] Bump actions/upload-artifact from v2.2.2 to v2.2.3 (#9198) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from v2.2.2 to v2.2.3. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v2.2.2...ee69f02b3dfdecd58bb31b4d133da38ba6fe3700) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/check-supported-versions.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-supported-versions.yaml b/.github/workflows/check-supported-versions.yaml index 897321f49bbb..3ae0d5bbd91e 100644 --- a/.github/workflows/check-supported-versions.yaml +++ b/.github/workflows/check-supported-versions.yaml @@ -49,7 +49,7 @@ jobs: run: mvn -nsu -B --quiet -Djacoco.skip=true -Dorg.slf4j.simpleLogger.defaultLogLevel=error --no-transfer-progress clean install --file pom.xml ${{ matrix.flags }} - name: Upload Maven build artifact - uses: actions/upload-artifact@v2.2.2 + uses: actions/upload-artifact@v2.2.3 if: matrix.java == '8' && matrix.os == 'ubuntu-latest' with: name: artifact From d44d9a3907c321b2fcf98906c99be9501710daf9 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 22 Apr 2021 12:17:07 +0800 Subject: [PATCH 042/186] Add a link to blog post in unibuddy tech blog (#9311) * Add a link to blog post in unibuddy tech blog * minor change * fix link --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 72ed9fbc4102..853d474b7709 100644 --- a/README.md +++ b/README.md @@ -820,6 +820,7 @@ Here are some companies/projects (alphabetical order) using OpenAPI Generator in - 2021-03-28 - [Trying out NestJS part 4: Generate Typescript clients from OpenAPI documents](https://dev.to/arnaudcortisse/trying-out-nestjs-part-4-generate-typescript-clients-from-openapi-documents-28mk) by [Arnaud Cortisse](https://dev.to/arnaudcortisse) - 2021-03-31 - [Open API Server Implementation Using OpenAPI Generator](https://www.baeldung.com/java-openapi-generator-server) at [Baeldung](https://www.baeldung.com/) - 2021-03-31 - [使用OpenAPI Generator實現Open API Server](https://www.1ju.org/article/java-openapi-generator-server) at [億聚網](https://www.1ju.org/) +- 2022-04-22 - [Leveraging OpenApi strengths in a Micro-Service environment](https://medium.com/unibuddy-technology-blog/leveraging-openapi-strengths-in-a-micro-service-environment-3d7f9e7c26ff) by Nicolas Jellab at [Unibuddy Technology Blog](Unibuddy Technology Blog) ## [6 - About Us](#table-of-contents) From d7736366b772acf6a8baa9533c4e558c50e80314 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 22 Apr 2021 12:28:17 +0800 Subject: [PATCH 043/186] add a link to twilio blog (#9312) --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 853d474b7709..18f2fde65254 100644 --- a/README.md +++ b/README.md @@ -820,7 +820,8 @@ Here are some companies/projects (alphabetical order) using OpenAPI Generator in - 2021-03-28 - [Trying out NestJS part 4: Generate Typescript clients from OpenAPI documents](https://dev.to/arnaudcortisse/trying-out-nestjs-part-4-generate-typescript-clients-from-openapi-documents-28mk) by [Arnaud Cortisse](https://dev.to/arnaudcortisse) - 2021-03-31 - [Open API Server Implementation Using OpenAPI Generator](https://www.baeldung.com/java-openapi-generator-server) at [Baeldung](https://www.baeldung.com/) - 2021-03-31 - [使用OpenAPI Generator實現Open API Server](https://www.1ju.org/article/java-openapi-generator-server) at [億聚網](https://www.1ju.org/) -- 2022-04-22 - [Leveraging OpenApi strengths in a Micro-Service environment](https://medium.com/unibuddy-technology-blog/leveraging-openapi-strengths-in-a-micro-service-environment-3d7f9e7c26ff) by Nicolas Jellab at [Unibuddy Technology Blog](Unibuddy Technology Blog) +- 2022-04-19 - [Introducing Twilio’s OpenAPI Specification Beta](https://www.twilio.com/blog/introducing-twilio-open-api-specification-beta) by [GARETH PAUL JONES](https://www.twilio.com/blog/author/gpj) at [Twilio Blog](https://www.twilio.com/blog) +- 2022-04-22 - [Leveraging OpenApi strengths in a Micro-Service environment](https://medium.com/unibuddy-technology-blog/leveraging-openapi-strengths-in-a-micro-service-environment-3d7f9e7c26ff) by Nicolas Jellab at [Unibuddy Technology Blog](https://medium.com/unibuddy-technology-blog) ## [6 - About Us](#table-of-contents) From 946d145d30436a9f27b5285d78090cdba6997146 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 22 Apr 2021 15:02:38 +0800 Subject: [PATCH 044/186] [bash] Update Bash Client Dockerfile.mustache (#9310) * Update Dockerfile.mustache Using alpine instead of ubuntu for leaner Docker images. Small fix for welcome message. Changing default shell to `zsh` and fixing entrypoint. * update samples * move config, add new files Co-authored-by: avbenavides <62693723+avbenavides@users.noreply.github.com> --- bin/configs/{other => }/bash.yaml | 0 .../main/resources/bash/Dockerfile.mustache | 18 +- .../petstore/bash/.openapi-generator/FILES | 59 +++ .../petstore/bash/.openapi-generator/VERSION | 2 +- samples/client/petstore/bash/Dockerfile | 19 +- samples/client/petstore/bash/README.md | 42 +- samples/client/petstore/bash/_petstore-cli | 19 +- .../bash/docs/AdditionalPropertiesClass.md | 13 +- .../petstore/bash/docs/AnotherFakeApi.md | 2 +- samples/client/petstore/bash/docs/BigCat.md | 13 + .../client/petstore/bash/docs/BigCatAllOf.md | 10 + samples/client/petstore/bash/docs/EnumTest.md | 3 - samples/client/petstore/bash/docs/FakeApi.md | 63 +-- .../bash/docs/FakeClassnameTags123Api.md | 2 +- samples/client/petstore/bash/docs/File.md | 10 + .../client/petstore/bash/docs/FormatTest.md | 3 +- samples/client/petstore/bash/docs/List.md | 10 + samples/client/petstore/bash/docs/Pet.md | 2 +- samples/client/petstore/bash/docs/PetApi.md | 8 +- samples/client/petstore/bash/docs/StoreApi.md | 4 +- samples/client/petstore/bash/docs/UserApi.md | 16 +- samples/client/petstore/bash/petstore-cli | 365 +++++++----------- .../bash/petstore-cli.bash-completion | 6 +- 23 files changed, 357 insertions(+), 332 deletions(-) rename bin/configs/{other => }/bash.yaml (100%) create mode 100644 samples/client/petstore/bash/.openapi-generator/FILES create mode 100644 samples/client/petstore/bash/docs/BigCat.md create mode 100644 samples/client/petstore/bash/docs/BigCatAllOf.md create mode 100644 samples/client/petstore/bash/docs/File.md create mode 100644 samples/client/petstore/bash/docs/List.md diff --git a/bin/configs/other/bash.yaml b/bin/configs/bash.yaml similarity index 100% rename from bin/configs/other/bash.yaml rename to bin/configs/bash.yaml diff --git a/modules/openapi-generator/src/main/resources/bash/Dockerfile.mustache b/modules/openapi-generator/src/main/resources/bash/Dockerfile.mustache index b59e5a3665ac..d5d8a907a310 100644 --- a/modules/openapi-generator/src/main/resources/bash/Dockerfile.mustache +++ b/modules/openapi-generator/src/main/resources/bash/Dockerfile.mustache @@ -1,7 +1,6 @@ -FROM ubuntu:16.10 +FROM alpine:3.12.0 -RUN apt-get update -y && apt-get full-upgrade -y -RUN apt-get install -y bash-completion zsh curl cowsay git vim bsdmainutils +RUN apk add --update --no-cache curl ca-certificates bash bash-completion zsh curl git vim ncurses util-linux ADD {{scriptName}} /usr/bin/{{scriptName}} ADD _{{scriptName}} /usr/local/share/zsh/site-functions/_{{scriptName}} @@ -30,7 +29,7 @@ RUN echo 'export PROMPT="[{{appName}}] \$ "' >> ~/.zshrc # # Setup a welcome message with basic instruction # -RUN echo 'cat << EOF\n\ +RUN echo -e 'echo "\ \n\ This Docker provides preconfigured environment for running the command\n\ line REST client for $(tput setaf 6){{appName}}$(tput sgr0).\n\ @@ -63,7 +62,14 @@ $ {{scriptName}} -h\n\ By default you are logged into Zsh with full autocompletion for your REST API,\n\ but you can switch to Bash, where basic autocompletion is also supported.\n\ \n\ -EOF\n\ +"\ ' | tee -a ~/.bashrc ~/.zshrc -ENTRYPOINT ["zsh"] +# +# Poormans chsh & cleanup to make image as compact as possible +# + +RUN sed -i 's/root:x:0:0:root:\/root:\/bin\/ash/root:x:0:0:root:\/root:\/bin\/zsh/' /etc/passwd +RUN apk del git vim && rm -f /var/cache/apk/* + +ENTRYPOINT ["/bin/zsh"] diff --git a/samples/client/petstore/bash/.openapi-generator/FILES b/samples/client/petstore/bash/.openapi-generator/FILES new file mode 100644 index 000000000000..918b7a49c26a --- /dev/null +++ b/samples/client/petstore/bash/.openapi-generator/FILES @@ -0,0 +1,59 @@ +Dockerfile +README.md +_petstore-cli +docs/$special[modelName].md +docs/200Response.md +docs/AdditionalPropertiesAnyType.md +docs/AdditionalPropertiesArray.md +docs/AdditionalPropertiesBoolean.md +docs/AdditionalPropertiesClass.md +docs/AdditionalPropertiesInteger.md +docs/AdditionalPropertiesNumber.md +docs/AdditionalPropertiesObject.md +docs/AdditionalPropertiesString.md +docs/Animal.md +docs/AnotherFakeApi.md +docs/ApiResponse.md +docs/ArrayOfArrayOfNumberOnly.md +docs/ArrayOfNumberOnly.md +docs/ArrayTest.md +docs/BigCat.md +docs/BigCatAllOf.md +docs/Capitalization.md +docs/Cat.md +docs/CatAllOf.md +docs/Category.md +docs/ClassModel.md +docs/Client.md +docs/Dog.md +docs/DogAllOf.md +docs/EnumArrays.md +docs/EnumClass.md +docs/EnumTest.md +docs/FakeApi.md +docs/FakeClassnameTags123Api.md +docs/File.md +docs/FileSchemaTestClass.md +docs/FormatTest.md +docs/HasOnlyReadOnly.md +docs/List.md +docs/MapTest.md +docs/MixedPropertiesAndAdditionalPropertiesClass.md +docs/Name.md +docs/NumberOnly.md +docs/Order.md +docs/OuterComposite.md +docs/OuterEnum.md +docs/Pet.md +docs/PetApi.md +docs/ReadOnlyFirst.md +docs/Return.md +docs/StoreApi.md +docs/Tag.md +docs/TypeHolderDefault.md +docs/TypeHolderExample.md +docs/User.md +docs/UserApi.md +docs/XmlItem.md +petstore-cli +petstore-cli.bash-completion diff --git a/samples/client/petstore/bash/.openapi-generator/VERSION b/samples/client/petstore/bash/.openapi-generator/VERSION index e4955748d3e7..d509cc92aa80 100644 --- a/samples/client/petstore/bash/.openapi-generator/VERSION +++ b/samples/client/petstore/bash/.openapi-generator/VERSION @@ -1 +1 @@ -4.2.2-SNAPSHOT \ No newline at end of file +5.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/bash/Dockerfile b/samples/client/petstore/bash/Dockerfile index 77df27f36614..451c6a916f96 100644 --- a/samples/client/petstore/bash/Dockerfile +++ b/samples/client/petstore/bash/Dockerfile @@ -1,7 +1,6 @@ -FROM ubuntu:16.10 +FROM alpine:3.12.0 -RUN apt-get update -y && apt-get full-upgrade -y -RUN apt-get install -y bash-completion zsh curl cowsay git vim bsdmainutils +RUN apk add --update --no-cache curl ca-certificates bash bash-completion zsh curl git vim ncurses util-linux ADD petstore-cli /usr/bin/petstore-cli ADD _petstore-cli /usr/local/share/zsh/site-functions/_petstore-cli @@ -30,7 +29,7 @@ RUN echo 'export PROMPT="[OpenAPI Petstore] \$ "' >> ~/.zshrc # # Setup a welcome message with basic instruction # -RUN echo 'cat << EOF\n\ +RUN echo -e 'echo "\ \n\ This Docker provides preconfigured environment for running the command\n\ line REST client for $(tput setaf 6)OpenAPI Petstore$(tput sgr0).\n\ @@ -41,7 +40,6 @@ $(tput setaf 3)PETSTORE_HOST$(tput sgr0) - server URL, e.g. https://example.com: $(tput setaf 3)PETSTORE_API_KEY$(tput sgr0) - access token, e.g. "ASDASHJDG63456asdASSD"\n\ $(tput setaf 3)PETSTORE_API_KEY$(tput sgr0) - access token, e.g. "ASDASHJDG63456asdASSD"\n\ $(tput setaf 3)PETSTORE_BASIC_AUTH$(tput sgr0) - basic authentication credentials, e.g.: "username:password"\n\ -$(tput setaf 3)PETSTORE_BASIC_AUTH$(tput sgr0) - basic authentication credentials, e.g.: "username:password"\n\ \n\ $(tput setaf 7)Basic usage:$(tput sgr0)\n\ \n\ @@ -57,7 +55,14 @@ $ petstore-cli -h\n\ By default you are logged into Zsh with full autocompletion for your REST API,\n\ but you can switch to Bash, where basic autocompletion is also supported.\n\ \n\ -EOF\n\ +"\ ' | tee -a ~/.bashrc ~/.zshrc -ENTRYPOINT ["zsh"] +# +# Poormans chsh & cleanup to make image as compact as possible +# + +RUN sed -i 's/root:x:0:0:root:\/root:\/bin\/ash/root:x:0:0:root:\/root:\/bin\/zsh/' /etc/passwd +RUN apk del git vim && rm -f /var/cache/apk/* + +ENTRYPOINT ["/bin/zsh"] diff --git a/samples/client/petstore/bash/README.md b/samples/client/petstore/bash/README.md index 8179fa5a2a91..a89e54917f43 100644 --- a/samples/client/petstore/bash/README.md +++ b/samples/client/petstore/bash/README.md @@ -101,8 +101,7 @@ All URIs are relative to */v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- *AnotherFakeApi* | [**call123TestSpecialTags**](docs/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](docs/DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](docs/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**createXmlItem**](docs/FakeApi.md#createxmlitem) | **POST** /fake/create_xml_item | creates an XmlItem *FakeApi* | [**fakeOuterBooleanSerialize**](docs/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | *FakeApi* | [**fakeOuterCompositeSerialize**](docs/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | *FakeApi* | [**fakeOuterNumberSerialize**](docs/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | @@ -111,9 +110,9 @@ Class | Method | HTTP request | Description *FakeApi* | [**testBodyWithQueryParams**](docs/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | *FakeApi* | [**testClientModel**](docs/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model *FakeApi* | [**testEndpointParameters**](docs/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters -假端點 -偽のエンドポイント -가짜 엔드 포인트 + 假端點 + 偽のエンドポイント + 가짜 엔드 포인트 *FakeApi* | [**testEnumParameters**](docs/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters *FakeApi* | [**testGroupParameters**](docs/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) *FakeApi* | [**testInlineAdditionalProperties**](docs/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties @@ -145,13 +144,23 @@ Class | Method | HTTP request | Description ## Documentation For Models + - [$special[modelName]](docs/$special[modelName].md) - [200Response](docs/200Response.md) + - [AdditionalPropertiesAnyType](docs/AdditionalPropertiesAnyType.md) + - [AdditionalPropertiesArray](docs/AdditionalPropertiesArray.md) + - [AdditionalPropertiesBoolean](docs/AdditionalPropertiesBoolean.md) - [AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md) + - [AdditionalPropertiesInteger](docs/AdditionalPropertiesInteger.md) + - [AdditionalPropertiesNumber](docs/AdditionalPropertiesNumber.md) + - [AdditionalPropertiesObject](docs/AdditionalPropertiesObject.md) + - [AdditionalPropertiesString](docs/AdditionalPropertiesString.md) - [Animal](docs/Animal.md) - [ApiResponse](docs/ApiResponse.md) - [ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md) - [ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md) - [ArrayTest](docs/ArrayTest.md) + - [BigCat](docs/BigCat.md) + - [BigCatAllOf](docs/BigCatAllOf.md) - [Capitalization](docs/Capitalization.md) - [Cat](docs/Cat.md) - [CatAllOf](docs/CatAllOf.md) @@ -163,35 +172,26 @@ Class | Method | HTTP request | Description - [EnumArrays](docs/EnumArrays.md) - [EnumClass](docs/EnumClass.md) - [EnumTest](docs/EnumTest.md) + - [File](docs/File.md) - [FileSchemaTestClass](docs/FileSchemaTestClass.md) - - [Foo](docs/Foo.md) - [FormatTest](docs/FormatTest.md) - [HasOnlyReadOnly](docs/HasOnlyReadOnly.md) - - [HealthCheckResult](docs/HealthCheckResult.md) - - [InlineObject](docs/InlineObject.md) - - [InlineObject1](docs/InlineObject1.md) - - [InlineObject2](docs/InlineObject2.md) - - [InlineObject3](docs/InlineObject3.md) - - [InlineObject4](docs/InlineObject4.md) - - [InlineObject5](docs/InlineObject5.md) - - [InlineResponseDefault](docs/InlineResponseDefault.md) + - [List](docs/List.md) - [MapTest](docs/MapTest.md) - [MixedPropertiesAndAdditionalPropertiesClass](docs/MixedPropertiesAndAdditionalPropertiesClass.md) - [Name](docs/Name.md) - - [NullableClass](docs/NullableClass.md) - [NumberOnly](docs/NumberOnly.md) - [Order](docs/Order.md) - [OuterComposite](docs/OuterComposite.md) - [OuterEnum](docs/OuterEnum.md) - - [OuterEnumDefaultValue](docs/OuterEnumDefaultValue.md) - - [OuterEnumInteger](docs/OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](docs/OuterEnumIntegerDefaultValue.md) - [Pet](docs/Pet.md) - [ReadOnlyFirst](docs/ReadOnlyFirst.md) - [Return](docs/Return.md) - - [SpecialModelName](docs/SpecialModelName.md) - [Tag](docs/Tag.md) + - [TypeHolderDefault](docs/TypeHolderDefault.md) + - [TypeHolderExample](docs/TypeHolderExample.md) - [User](docs/User.md) + - [XmlItem](docs/XmlItem.md) ## Documentation For Authorization @@ -211,10 +211,6 @@ Class | Method | HTTP request | Description - **API key parameter name**: api_key_query - **Location**: URL query string -## bearer_test - -- **Type**: HTTP basic authentication - ## http_basic_test - **Type**: HTTP basic authentication diff --git a/samples/client/petstore/bash/_petstore-cli b/samples/client/petstore/bash/_petstore-cli index 323b934de071..b5dfdf2084f0 100644 --- a/samples/client/petstore/bash/_petstore-cli +++ b/samples/client/petstore/bash/_petstore-cli @@ -296,7 +296,7 @@ case $state in ops) # Operations _values "Operations" \ - "call123TestSpecialTags[To test special tags]" "fooGet[]" "fakeHealthGet[Health check endpoint]" \ + "call123TestSpecialTags[To test special tags]" "createXmlItem[creates an XmlItem]" \ "fakeOuterBooleanSerialize[]" \ "fakeOuterCompositeSerialize[]" \ "fakeOuterNumberSerialize[]" \ @@ -305,9 +305,9 @@ case $state in "testBodyWithQueryParams[]" \ "testClientModel[To test \"client\" model]" \ "testEndpointParameters[Fake endpoint for testing various parameters -假端點 -偽のエンドポイント -가짜 엔드 포인트]" \ + 假端點 + 偽のエンドポイント + 가짜 엔드 포인트]" \ "testEnumParameters[To test enum parameters]" \ "testGroupParameters[Fake endpoint to test group parameters (optional)]" \ "testInlineAdditionalProperties[test inline additionalProperties]" \ @@ -330,7 +330,8 @@ case $state in "getUserByName[Get user by user name]" \ "loginUser[Logs user into the system]" \ "logoutUser[Logs out current logged in user session]" \ - "updateUser[Updated user]" + "updateUser[Updated user]" \ + _arguments "(--help)--help[Print information about operation]" ret=0 @@ -343,13 +344,7 @@ case $state in ) _describe -t actions 'operations' _op_arguments -S '' && ret=0 ;; - fooGet) - local -a _op_arguments - _op_arguments=( - ) - _describe -t actions 'operations' _op_arguments -S '' && ret=0 - ;; - fakeHealthGet) + createXmlItem) local -a _op_arguments _op_arguments=( ) diff --git a/samples/client/petstore/bash/docs/AdditionalPropertiesClass.md b/samples/client/petstore/bash/docs/AdditionalPropertiesClass.md index 0b452819e9e1..4ae0a677ac93 100644 --- a/samples/client/petstore/bash/docs/AdditionalPropertiesClass.md +++ b/samples/client/petstore/bash/docs/AdditionalPropertiesClass.md @@ -3,8 +3,17 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**mapUnderscoreproperty** | **map[String, string]** | | [optional] [default to null] -**mapUnderscoreofUnderscoremapUnderscoreproperty** | **map[String, map[String, string]]** | | [optional] [default to null] +**mapUnderscorestring** | **map[String, string]** | | [optional] [default to null] +**mapUnderscorenumber** | **map[String, integer]** | | [optional] [default to null] +**mapUnderscoreinteger** | **map[String, integer]** | | [optional] [default to null] +**mapUnderscoreboolean** | **map[String, boolean]** | | [optional] [default to null] +**mapUnderscorearrayUnderscoreinteger** | **map[String, array[integer]]** | | [optional] [default to null] +**mapUnderscorearrayUnderscoreanytype** | **map[String, array[map]]** | | [optional] [default to null] +**mapUnderscoremapUnderscorestring** | **map[String, map[String, string]]** | | [optional] [default to null] +**mapUnderscoremapUnderscoreanytype** | **map[String, map[String, map]]** | | [optional] [default to null] +**anytypeUnderscore1** | **map** | | [optional] [default to null] +**anytypeUnderscore2** | **map** | | [optional] [default to null] +**anytypeUnderscore3** | **map** | | [optional] [default to null] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/bash/docs/AnotherFakeApi.md b/samples/client/petstore/bash/docs/AnotherFakeApi.md index 8eda10a25080..e17a9e75d006 100644 --- a/samples/client/petstore/bash/docs/AnotherFakeApi.md +++ b/samples/client/petstore/bash/docs/AnotherFakeApi.md @@ -25,7 +25,7 @@ petstore-cli call123TestSpecialTags Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **client** | [**Client**](Client.md) | client model | + **body** | [**Client**](Client.md) | client model | ### Return type diff --git a/samples/client/petstore/bash/docs/BigCat.md b/samples/client/petstore/bash/docs/BigCat.md new file mode 100644 index 000000000000..5bb6378f0770 --- /dev/null +++ b/samples/client/petstore/bash/docs/BigCat.md @@ -0,0 +1,13 @@ +# BigCat + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**className** | **string** | | [default to null] +**color** | **string** | | [optional] [default to red] +**declawed** | **boolean** | | [optional] [default to null] +**kind** | **string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/bash/docs/BigCatAllOf.md b/samples/client/petstore/bash/docs/BigCatAllOf.md new file mode 100644 index 000000000000..644efd8d6794 --- /dev/null +++ b/samples/client/petstore/bash/docs/BigCatAllOf.md @@ -0,0 +1,10 @@ +# BigCat_allOf + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**kind** | **string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/bash/docs/EnumTest.md b/samples/client/petstore/bash/docs/EnumTest.md index 3f70a0a0667a..30b30efa7307 100644 --- a/samples/client/petstore/bash/docs/EnumTest.md +++ b/samples/client/petstore/bash/docs/EnumTest.md @@ -8,9 +8,6 @@ Name | Type | Description | Notes **enumUnderscoreinteger** | **integer** | | [optional] [default to null] **enumUnderscorenumber** | **float** | | [optional] [default to null] **outerEnum** | [**OuterEnum**](OuterEnum.md) | | [optional] [default to null] -**outerEnumInteger** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional] [default to null] -**outerEnumDefaultValue** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional] [default to null] -**outerEnumIntegerDefaultValue** | [**OuterEnumIntegerDefaultValue**](OuterEnumIntegerDefaultValue.md) | | [optional] [default to null] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/bash/docs/FakeApi.md b/samples/client/petstore/bash/docs/FakeApi.md index 905f6e2cd088..075407dede6d 100644 --- a/samples/client/petstore/bash/docs/FakeApi.md +++ b/samples/client/petstore/bash/docs/FakeApi.md @@ -4,7 +4,7 @@ All URIs are relative to */v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**fakeHealthGet**](FakeApi.md#fakeHealthGet) | **GET** /fake/health | Health check endpoint +[**createXmlItem**](FakeApi.md#createXmlItem) | **POST** /fake/create_xml_item | creates an XmlItem [**fakeOuterBooleanSerialize**](FakeApi.md#fakeOuterBooleanSerialize) | **POST** /fake/outer/boolean | [**fakeOuterCompositeSerialize**](FakeApi.md#fakeOuterCompositeSerialize) | **POST** /fake/outer/composite | [**fakeOuterNumberSerialize**](FakeApi.md#fakeOuterNumberSerialize) | **POST** /fake/outer/number | @@ -13,9 +13,9 @@ Method | HTTP request | Description [**testBodyWithQueryParams**](FakeApi.md#testBodyWithQueryParams) | **PUT** /fake/body-with-query-params | [**testClientModel**](FakeApi.md#testClientModel) | **PATCH** /fake | To test \"client\" model [**testEndpointParameters**](FakeApi.md#testEndpointParameters) | **POST** /fake | Fake endpoint for testing various parameters -假端點 -偽のエンドポイント -가짜 엔드 포인트 + 假端點 + 偽のエンドポイント + 가짜 엔드 포인트 [**testEnumParameters**](FakeApi.md#testEnumParameters) | **GET** /fake | To test enum parameters [**testGroupParameters**](FakeApi.md#testGroupParameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) [**testInlineAdditionalProperties**](FakeApi.md#testInlineAdditionalProperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties @@ -24,23 +24,28 @@ Method | HTTP request | Description -## fakeHealthGet +## createXmlItem -Health check endpoint +creates an XmlItem + +this route creates an XmlItem ### Example ```bash -petstore-cli fakeHealthGet +petstore-cli createXmlItem ``` ### Parameters -This endpoint does not need any parameter. + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **xmlItem** | [**XmlItem**](XmlItem.md) | XmlItem Body | ### Return type -[**HealthCheckResult**](HealthCheckResult.md) +(empty response body) ### Authorization @@ -48,8 +53,8 @@ No authorization required ### HTTP request headers -- **Content-Type**: Not Applicable -- **Accept**: application/json +- **Content-Type**: application/xml, application/xml; charset=utf-8, application/xml; charset=utf-16, text/xml, text/xml; charset=utf-8, text/xml; charset=utf-16 +- **Accept**: Not Applicable [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -83,7 +88,7 @@ No authorization required ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not Applicable - **Accept**: */* [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -106,7 +111,7 @@ petstore-cli fakeOuterCompositeSerialize Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **outerComposite** | [**OuterComposite**](OuterComposite.md) | Input composite as post body | [optional] + **body** | [**OuterComposite**](OuterComposite.md) | Input composite as post body | [optional] ### Return type @@ -118,7 +123,7 @@ No authorization required ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not Applicable - **Accept**: */* [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -153,7 +158,7 @@ No authorization required ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not Applicable - **Accept**: */* [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -188,7 +193,7 @@ No authorization required ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not Applicable - **Accept**: */* [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -211,7 +216,7 @@ petstore-cli testBodyWithFileSchema Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **fileSchemaTestClass** | [**FileSchemaTestClass**](FileSchemaTestClass.md) | | + **body** | [**FileSchemaTestClass**](FileSchemaTestClass.md) | | ### Return type @@ -245,7 +250,7 @@ petstore-cli testBodyWithQueryParams query=value Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **query** | **string** | | [default to null] - **user** | [**User**](User.md) | | + **body** | [**User**](User.md) | | ### Return type @@ -280,7 +285,7 @@ petstore-cli testClientModel Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **client** | [**Client**](Client.md) | client model | + **body** | [**Client**](Client.md) | client model | ### Return type @@ -301,14 +306,14 @@ No authorization required ## testEndpointParameters Fake endpoint for testing various parameters -假端點 -偽のエンドポイント -가짜 엔드 포인트 + 假端點 + 偽のエンドポイント + 가짜 엔드 포인트 Fake endpoint for testing various parameters -假端點 -偽のエンドポイント -가짜 엔드 포인트 + 假端點 + 偽のエンドポイント + 가짜 엔드 포인트 ### Example @@ -361,7 +366,7 @@ To test enum parameters ### Example ```bash -petstore-cli testEnumParameters enum_header_string_array:value enum_header_string:value Specify as: enum_query_string_array=value1 enum_query_string_array=value2 enum_query_string_array=... enum_query_string=value enum_query_integer=value enum_query_double=value +petstore-cli testEnumParameters enum_header_string_array:value enum_header_string:value Specify as: enum_query_string_array="value1,value2,..." enum_query_string=value enum_query_integer=value enum_query_double=value ``` ### Parameters @@ -424,7 +429,7 @@ Name | Type | Description | Notes ### Authorization -[bearer_test](../README.md#bearer_test) +No authorization required ### HTTP request headers @@ -449,7 +454,7 @@ petstore-cli testInlineAdditionalProperties Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **requestBody** | [**map[String, string]**](string.md) | request body | + **param** | [**map[String, string]**](string.md) | request body | ### Return type @@ -510,7 +515,7 @@ To test the collection format in query parameters ### Example ```bash -petstore-cli testQueryParameterCollectionFormat Specify as: pipe=value1 pipe=value2 pipe=... Specify as: ioutil="value1,value2,..." Specify as: Specify as: url="value1,value2,..." Specify as: context=value1 context=value2 context=... +petstore-cli testQueryParameterCollectionFormat Specify as: pipe="value1,value2,..." Specify as: ioutil="value1,value2,..." Specify as: http="value1 value2 ..." Specify as: url="value1,value2,..." Specify as: context=value1 context=value2 context=... ``` ### Parameters diff --git a/samples/client/petstore/bash/docs/FakeClassnameTags123Api.md b/samples/client/petstore/bash/docs/FakeClassnameTags123Api.md index f670ef5f7b9a..19b3d386d383 100644 --- a/samples/client/petstore/bash/docs/FakeClassnameTags123Api.md +++ b/samples/client/petstore/bash/docs/FakeClassnameTags123Api.md @@ -25,7 +25,7 @@ petstore-cli testClassname Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **client** | [**Client**](Client.md) | client model | + **body** | [**Client**](Client.md) | client model | ### Return type diff --git a/samples/client/petstore/bash/docs/File.md b/samples/client/petstore/bash/docs/File.md new file mode 100644 index 000000000000..17f714698588 --- /dev/null +++ b/samples/client/petstore/bash/docs/File.md @@ -0,0 +1,10 @@ +# File + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**sourceURI** | **string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/bash/docs/FormatTest.md b/samples/client/petstore/bash/docs/FormatTest.md index 8fe26118a9dd..8c182123a627 100644 --- a/samples/client/petstore/bash/docs/FormatTest.md +++ b/samples/client/petstore/bash/docs/FormatTest.md @@ -16,8 +16,7 @@ Name | Type | Description | Notes **dateTime** | **string** | | [optional] [default to null] **uuid** | **string** | | [optional] [default to null] **password** | **string** | | [default to null] -**patternUnderscorewithUnderscoredigits** | **string** | | [optional] [default to null] -**patternUnderscorewithUnderscoredigitsUnderscoreandUnderscoredelimiter** | **string** | | [optional] [default to null] +**BigDecimal** | [**Decimal**](Decimal.md) | | [optional] [default to null] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/bash/docs/List.md b/samples/client/petstore/bash/docs/List.md new file mode 100644 index 000000000000..c73851d7f7b1 --- /dev/null +++ b/samples/client/petstore/bash/docs/List.md @@ -0,0 +1,10 @@ +# List + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**123Minuslist** | **string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/bash/docs/Pet.md b/samples/client/petstore/bash/docs/Pet.md index b86df96bb598..5dc9328bd911 100644 --- a/samples/client/petstore/bash/docs/Pet.md +++ b/samples/client/petstore/bash/docs/Pet.md @@ -6,7 +6,7 @@ Name | Type | Description | Notes **id** | **integer** | | [optional] [default to null] **category** | [**Category**](Category.md) | | [optional] [default to null] **name** | **string** | | [default to null] -**photoUrls** | **array[string]** | | [default to null] +**photoUrls** | **Set[string]** | | [default to null] **tags** | [**array[Tag]**](Tag.md) | | [optional] [default to null] **status** | **string** | | [optional] [default to null] diff --git a/samples/client/petstore/bash/docs/PetApi.md b/samples/client/petstore/bash/docs/PetApi.md index ddc4f21bffcd..f59b24393606 100644 --- a/samples/client/petstore/bash/docs/PetApi.md +++ b/samples/client/petstore/bash/docs/PetApi.md @@ -31,7 +31,7 @@ petstore-cli addPet Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **pet** | [**Pet**](Pet.md) | Pet object that needs to be added to the store | + **body** | [**Pet**](Pet.md) | Pet object that needs to be added to the store | ### Return type @@ -135,11 +135,11 @@ petstore-cli findPetsByTags Specify as: tags="value1,value2,..." Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **tags** | [**array[string]**](string.md) | Tags to filter by | [default to null] + **tags** | [**Set[string]**](string.md) | Tags to filter by | [default to null] ### Return type -[**array[Pet]**](Pet.md) +[**Set[Pet]**](Pet.md) ### Authorization @@ -203,7 +203,7 @@ petstore-cli updatePet Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **pet** | [**Pet**](Pet.md) | Pet object that needs to be added to the store | + **body** | [**Pet**](Pet.md) | Pet object that needs to be added to the store | ### Return type diff --git a/samples/client/petstore/bash/docs/StoreApi.md b/samples/client/petstore/bash/docs/StoreApi.md index 58ee002b7b86..56b2934562b5 100644 --- a/samples/client/petstore/bash/docs/StoreApi.md +++ b/samples/client/petstore/bash/docs/StoreApi.md @@ -128,7 +128,7 @@ petstore-cli placeOrder Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **order** | [**Order**](Order.md) | order placed for purchasing the pet | + **body** | [**Order**](Order.md) | order placed for purchasing the pet | ### Return type @@ -140,7 +140,7 @@ No authorization required ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not Applicable - **Accept**: application/xml, application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/samples/client/petstore/bash/docs/UserApi.md b/samples/client/petstore/bash/docs/UserApi.md index f36e39d38ee6..9663a425b732 100644 --- a/samples/client/petstore/bash/docs/UserApi.md +++ b/samples/client/petstore/bash/docs/UserApi.md @@ -32,7 +32,7 @@ petstore-cli createUser Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **user** | [**User**](User.md) | Created user object | + **body** | [**User**](User.md) | Created user object | ### Return type @@ -44,7 +44,7 @@ No authorization required ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not Applicable - **Accept**: Not Applicable [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -65,7 +65,7 @@ petstore-cli createUsersWithArrayInput Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **user** | [**array[User]**](User.md) | List of user object | + **body** | [**array[User]**](User.md) | List of user object | ### Return type @@ -77,7 +77,7 @@ No authorization required ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not Applicable - **Accept**: Not Applicable [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -98,7 +98,7 @@ petstore-cli createUsersWithListInput Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **user** | [**array[User]**](User.md) | List of user object | + **body** | [**array[User]**](User.md) | List of user object | ### Return type @@ -110,7 +110,7 @@ No authorization required ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not Applicable - **Accept**: Not Applicable [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -266,7 +266,7 @@ petstore-cli updateUser username=value Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **username** | **string** | name that need to be deleted | [default to null] - **user** | [**User**](User.md) | Updated user object | + **body** | [**User**](User.md) | Updated user object | ### Return type @@ -278,7 +278,7 @@ No authorization required ### HTTP request headers -- **Content-Type**: application/json +- **Content-Type**: Not Applicable - **Accept**: Not Applicable [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/samples/client/petstore/bash/petstore-cli b/samples/client/petstore/bash/petstore-cli index 7e496f60eeca..26e7a817e235 100755 --- a/samples/client/petstore/bash/petstore-cli +++ b/samples/client/petstore/bash/petstore-cli @@ -95,15 +95,16 @@ declare -a result_color_table=( "$WHITE" "$WHITE" "$GREEN" "$YELLOW" "$WHITE" "$ # 0 - optional # 1 - required declare -A operation_parameters_minimum_occurrences -operation_parameters_minimum_occurrences["call123TestSpecialTags:::Client"]=1 +operation_parameters_minimum_occurrences["call123TestSpecialTags:::body"]=1 +operation_parameters_minimum_occurrences["createXmlItem:::XmlItem"]=1 operation_parameters_minimum_occurrences["fakeOuterBooleanSerialize:::body"]=0 -operation_parameters_minimum_occurrences["fakeOuterCompositeSerialize:::OuterComposite"]=0 +operation_parameters_minimum_occurrences["fakeOuterCompositeSerialize:::body"]=0 operation_parameters_minimum_occurrences["fakeOuterNumberSerialize:::body"]=0 operation_parameters_minimum_occurrences["fakeOuterStringSerialize:::body"]=0 -operation_parameters_minimum_occurrences["testBodyWithFileSchema:::FileSchemaTestClass"]=1 +operation_parameters_minimum_occurrences["testBodyWithFileSchema:::body"]=1 operation_parameters_minimum_occurrences["testBodyWithQueryParams:::query"]=1 -operation_parameters_minimum_occurrences["testBodyWithQueryParams:::User"]=1 -operation_parameters_minimum_occurrences["testClientModel:::Client"]=1 +operation_parameters_minimum_occurrences["testBodyWithQueryParams:::body"]=1 +operation_parameters_minimum_occurrences["testClientModel:::body"]=1 operation_parameters_minimum_occurrences["testEndpointParameters:::number"]=1 operation_parameters_minimum_occurrences["testEndpointParameters:::double"]=1 operation_parameters_minimum_occurrences["testEndpointParameters:::pattern_without_delimiter"]=1 @@ -132,7 +133,7 @@ operation_parameters_minimum_occurrences["testGroupParameters:::required_int64_g operation_parameters_minimum_occurrences["testGroupParameters:::string_group"]=0 operation_parameters_minimum_occurrences["testGroupParameters:::boolean_group"]=0 operation_parameters_minimum_occurrences["testGroupParameters:::int64_group"]=0 -operation_parameters_minimum_occurrences["testInlineAdditionalProperties:::request_body"]=1 +operation_parameters_minimum_occurrences["testInlineAdditionalProperties:::param"]=1 operation_parameters_minimum_occurrences["testJsonFormData:::param"]=1 operation_parameters_minimum_occurrences["testJsonFormData:::param2"]=1 operation_parameters_minimum_occurrences["testQueryParameterCollectionFormat:::pipe"]=1 @@ -140,14 +141,14 @@ operation_parameters_minimum_occurrences["testQueryParameterCollectionFormat:::i operation_parameters_minimum_occurrences["testQueryParameterCollectionFormat:::http"]=1 operation_parameters_minimum_occurrences["testQueryParameterCollectionFormat:::url"]=1 operation_parameters_minimum_occurrences["testQueryParameterCollectionFormat:::context"]=1 -operation_parameters_minimum_occurrences["testClassname:::Client"]=1 -operation_parameters_minimum_occurrences["addPet:::Pet"]=1 +operation_parameters_minimum_occurrences["testClassname:::body"]=1 +operation_parameters_minimum_occurrences["addPet:::body"]=1 operation_parameters_minimum_occurrences["deletePet:::petId"]=1 operation_parameters_minimum_occurrences["deletePet:::api_key"]=0 operation_parameters_minimum_occurrences["findPetsByStatus:::status"]=1 operation_parameters_minimum_occurrences["findPetsByTags:::tags"]=1 operation_parameters_minimum_occurrences["getPetById:::petId"]=1 -operation_parameters_minimum_occurrences["updatePet:::Pet"]=1 +operation_parameters_minimum_occurrences["updatePet:::body"]=1 operation_parameters_minimum_occurrences["updatePetWithForm:::petId"]=1 operation_parameters_minimum_occurrences["updatePetWithForm:::name"]=0 operation_parameters_minimum_occurrences["updatePetWithForm:::status"]=0 @@ -159,16 +160,16 @@ operation_parameters_minimum_occurrences["uploadFileWithRequiredFile:::requiredF operation_parameters_minimum_occurrences["uploadFileWithRequiredFile:::additionalMetadata"]=0 operation_parameters_minimum_occurrences["deleteOrder:::order_id"]=1 operation_parameters_minimum_occurrences["getOrderById:::order_id"]=1 -operation_parameters_minimum_occurrences["placeOrder:::Order"]=1 -operation_parameters_minimum_occurrences["createUser:::User"]=1 -operation_parameters_minimum_occurrences["createUsersWithArrayInput:::User"]=1 -operation_parameters_minimum_occurrences["createUsersWithListInput:::User"]=1 +operation_parameters_minimum_occurrences["placeOrder:::body"]=1 +operation_parameters_minimum_occurrences["createUser:::body"]=1 +operation_parameters_minimum_occurrences["createUsersWithArrayInput:::body"]=1 +operation_parameters_minimum_occurrences["createUsersWithListInput:::body"]=1 operation_parameters_minimum_occurrences["deleteUser:::username"]=1 operation_parameters_minimum_occurrences["getUserByName:::username"]=1 operation_parameters_minimum_occurrences["loginUser:::username"]=1 operation_parameters_minimum_occurrences["loginUser:::password"]=1 operation_parameters_minimum_occurrences["updateUser:::username"]=1 -operation_parameters_minimum_occurrences["updateUser:::User"]=1 +operation_parameters_minimum_occurrences["updateUser:::body"]=1 ## # This array stores the maximum number of allowed occurrences for parameter @@ -177,15 +178,16 @@ operation_parameters_minimum_occurrences["updateUser:::User"]=1 # N - N values # 0 - unlimited declare -A operation_parameters_maximum_occurrences -operation_parameters_maximum_occurrences["call123TestSpecialTags:::Client"]=0 +operation_parameters_maximum_occurrences["call123TestSpecialTags:::body"]=0 +operation_parameters_maximum_occurrences["createXmlItem:::XmlItem"]=0 operation_parameters_maximum_occurrences["fakeOuterBooleanSerialize:::body"]=0 -operation_parameters_maximum_occurrences["fakeOuterCompositeSerialize:::OuterComposite"]=0 +operation_parameters_maximum_occurrences["fakeOuterCompositeSerialize:::body"]=0 operation_parameters_maximum_occurrences["fakeOuterNumberSerialize:::body"]=0 operation_parameters_maximum_occurrences["fakeOuterStringSerialize:::body"]=0 -operation_parameters_maximum_occurrences["testBodyWithFileSchema:::FileSchemaTestClass"]=0 +operation_parameters_maximum_occurrences["testBodyWithFileSchema:::body"]=0 operation_parameters_maximum_occurrences["testBodyWithQueryParams:::query"]=0 -operation_parameters_maximum_occurrences["testBodyWithQueryParams:::User"]=0 -operation_parameters_maximum_occurrences["testClientModel:::Client"]=0 +operation_parameters_maximum_occurrences["testBodyWithQueryParams:::body"]=0 +operation_parameters_maximum_occurrences["testClientModel:::body"]=0 operation_parameters_maximum_occurrences["testEndpointParameters:::number"]=0 operation_parameters_maximum_occurrences["testEndpointParameters:::double"]=0 operation_parameters_maximum_occurrences["testEndpointParameters:::pattern_without_delimiter"]=0 @@ -214,7 +216,7 @@ operation_parameters_maximum_occurrences["testGroupParameters:::required_int64_g operation_parameters_maximum_occurrences["testGroupParameters:::string_group"]=0 operation_parameters_maximum_occurrences["testGroupParameters:::boolean_group"]=0 operation_parameters_maximum_occurrences["testGroupParameters:::int64_group"]=0 -operation_parameters_maximum_occurrences["testInlineAdditionalProperties:::request_body"]=0 +operation_parameters_maximum_occurrences["testInlineAdditionalProperties:::param"]=0 operation_parameters_maximum_occurrences["testJsonFormData:::param"]=0 operation_parameters_maximum_occurrences["testJsonFormData:::param2"]=0 operation_parameters_maximum_occurrences["testQueryParameterCollectionFormat:::pipe"]=0 @@ -222,14 +224,14 @@ operation_parameters_maximum_occurrences["testQueryParameterCollectionFormat:::i operation_parameters_maximum_occurrences["testQueryParameterCollectionFormat:::http"]=0 operation_parameters_maximum_occurrences["testQueryParameterCollectionFormat:::url"]=0 operation_parameters_maximum_occurrences["testQueryParameterCollectionFormat:::context"]=0 -operation_parameters_maximum_occurrences["testClassname:::Client"]=0 -operation_parameters_maximum_occurrences["addPet:::Pet"]=0 +operation_parameters_maximum_occurrences["testClassname:::body"]=0 +operation_parameters_maximum_occurrences["addPet:::body"]=0 operation_parameters_maximum_occurrences["deletePet:::petId"]=0 operation_parameters_maximum_occurrences["deletePet:::api_key"]=0 operation_parameters_maximum_occurrences["findPetsByStatus:::status"]=0 operation_parameters_maximum_occurrences["findPetsByTags:::tags"]=0 operation_parameters_maximum_occurrences["getPetById:::petId"]=0 -operation_parameters_maximum_occurrences["updatePet:::Pet"]=0 +operation_parameters_maximum_occurrences["updatePet:::body"]=0 operation_parameters_maximum_occurrences["updatePetWithForm:::petId"]=0 operation_parameters_maximum_occurrences["updatePetWithForm:::name"]=0 operation_parameters_maximum_occurrences["updatePetWithForm:::status"]=0 @@ -241,30 +243,31 @@ operation_parameters_maximum_occurrences["uploadFileWithRequiredFile:::requiredF operation_parameters_maximum_occurrences["uploadFileWithRequiredFile:::additionalMetadata"]=0 operation_parameters_maximum_occurrences["deleteOrder:::order_id"]=0 operation_parameters_maximum_occurrences["getOrderById:::order_id"]=0 -operation_parameters_maximum_occurrences["placeOrder:::Order"]=0 -operation_parameters_maximum_occurrences["createUser:::User"]=0 -operation_parameters_maximum_occurrences["createUsersWithArrayInput:::User"]=0 -operation_parameters_maximum_occurrences["createUsersWithListInput:::User"]=0 +operation_parameters_maximum_occurrences["placeOrder:::body"]=0 +operation_parameters_maximum_occurrences["createUser:::body"]=0 +operation_parameters_maximum_occurrences["createUsersWithArrayInput:::body"]=0 +operation_parameters_maximum_occurrences["createUsersWithListInput:::body"]=0 operation_parameters_maximum_occurrences["deleteUser:::username"]=0 operation_parameters_maximum_occurrences["getUserByName:::username"]=0 operation_parameters_maximum_occurrences["loginUser:::username"]=0 operation_parameters_maximum_occurrences["loginUser:::password"]=0 operation_parameters_maximum_occurrences["updateUser:::username"]=0 -operation_parameters_maximum_occurrences["updateUser:::User"]=0 +operation_parameters_maximum_occurrences["updateUser:::body"]=0 ## # The type of collection for specifying multiple values for parameter: # - multi, csv, ssv, tsv declare -A operation_parameters_collection_type -operation_parameters_collection_type["call123TestSpecialTags:::Client"]="" +operation_parameters_collection_type["call123TestSpecialTags:::body"]="" +operation_parameters_collection_type["createXmlItem:::XmlItem"]="" operation_parameters_collection_type["fakeOuterBooleanSerialize:::body"]="" -operation_parameters_collection_type["fakeOuterCompositeSerialize:::OuterComposite"]="" +operation_parameters_collection_type["fakeOuterCompositeSerialize:::body"]="" operation_parameters_collection_type["fakeOuterNumberSerialize:::body"]="" operation_parameters_collection_type["fakeOuterStringSerialize:::body"]="" -operation_parameters_collection_type["testBodyWithFileSchema:::FileSchemaTestClass"]="" +operation_parameters_collection_type["testBodyWithFileSchema:::body"]="" operation_parameters_collection_type["testBodyWithQueryParams:::query"]="" -operation_parameters_collection_type["testBodyWithQueryParams:::User"]="" -operation_parameters_collection_type["testClientModel:::Client"]="" +operation_parameters_collection_type["testBodyWithQueryParams:::body"]="" +operation_parameters_collection_type["testClientModel:::body"]="" operation_parameters_collection_type["testEndpointParameters:::number"]="" operation_parameters_collection_type["testEndpointParameters:::double"]="" operation_parameters_collection_type["testEndpointParameters:::pattern_without_delimiter"]="" @@ -281,7 +284,7 @@ operation_parameters_collection_type["testEndpointParameters:::password"]="" operation_parameters_collection_type["testEndpointParameters:::callback"]="" operation_parameters_collection_type["testEnumParameters:::enum_header_string_array"]="csv" operation_parameters_collection_type["testEnumParameters:::enum_header_string"]="" -operation_parameters_collection_type["testEnumParameters:::enum_query_string_array"]="multi" +operation_parameters_collection_type["testEnumParameters:::enum_query_string_array"]="csv" operation_parameters_collection_type["testEnumParameters:::enum_query_string"]="" operation_parameters_collection_type["testEnumParameters:::enum_query_integer"]="" operation_parameters_collection_type["testEnumParameters:::enum_query_double"]="" @@ -293,22 +296,22 @@ operation_parameters_collection_type["testGroupParameters:::required_int64_group operation_parameters_collection_type["testGroupParameters:::string_group"]="" operation_parameters_collection_type["testGroupParameters:::boolean_group"]="" operation_parameters_collection_type["testGroupParameters:::int64_group"]="" -operation_parameters_collection_type["testInlineAdditionalProperties:::request_body"]= +operation_parameters_collection_type["testInlineAdditionalProperties:::param"]= operation_parameters_collection_type["testJsonFormData:::param"]="" operation_parameters_collection_type["testJsonFormData:::param2"]="" -operation_parameters_collection_type["testQueryParameterCollectionFormat:::pipe"]="multi" +operation_parameters_collection_type["testQueryParameterCollectionFormat:::pipe"]="csv" operation_parameters_collection_type["testQueryParameterCollectionFormat:::ioutil"]="csv" -operation_parameters_collection_type["testQueryParameterCollectionFormat:::http"]= +operation_parameters_collection_type["testQueryParameterCollectionFormat:::http"]="ssv" operation_parameters_collection_type["testQueryParameterCollectionFormat:::url"]="csv" operation_parameters_collection_type["testQueryParameterCollectionFormat:::context"]="multi" -operation_parameters_collection_type["testClassname:::Client"]="" -operation_parameters_collection_type["addPet:::Pet"]="" +operation_parameters_collection_type["testClassname:::body"]="" +operation_parameters_collection_type["addPet:::body"]="" operation_parameters_collection_type["deletePet:::petId"]="" operation_parameters_collection_type["deletePet:::api_key"]="" operation_parameters_collection_type["findPetsByStatus:::status"]="csv" operation_parameters_collection_type["findPetsByTags:::tags"]="csv" operation_parameters_collection_type["getPetById:::petId"]="" -operation_parameters_collection_type["updatePet:::Pet"]="" +operation_parameters_collection_type["updatePet:::body"]="" operation_parameters_collection_type["updatePetWithForm:::petId"]="" operation_parameters_collection_type["updatePetWithForm:::name"]="" operation_parameters_collection_type["updatePetWithForm:::status"]="" @@ -320,16 +323,16 @@ operation_parameters_collection_type["uploadFileWithRequiredFile:::requiredFile" operation_parameters_collection_type["uploadFileWithRequiredFile:::additionalMetadata"]="" operation_parameters_collection_type["deleteOrder:::order_id"]="" operation_parameters_collection_type["getOrderById:::order_id"]="" -operation_parameters_collection_type["placeOrder:::Order"]="" -operation_parameters_collection_type["createUser:::User"]="" -operation_parameters_collection_type["createUsersWithArrayInput:::User"]= -operation_parameters_collection_type["createUsersWithListInput:::User"]= +operation_parameters_collection_type["placeOrder:::body"]="" +operation_parameters_collection_type["createUser:::body"]="" +operation_parameters_collection_type["createUsersWithArrayInput:::body"]= +operation_parameters_collection_type["createUsersWithListInput:::body"]= operation_parameters_collection_type["deleteUser:::username"]="" operation_parameters_collection_type["getUserByName:::username"]="" operation_parameters_collection_type["loginUser:::username"]="" operation_parameters_collection_type["loginUser:::password"]="" operation_parameters_collection_type["updateUser:::username"]="" -operation_parameters_collection_type["updateUser:::User"]="" +operation_parameters_collection_type["updateUser:::body"]="" ## @@ -425,7 +428,7 @@ url_escape() { -e 's/(/%28/g' \ -e 's/)/%29/g' \ -e 's/:/%3A/g' \ - -e 's/\t/%09/g' \ + -e 's/\\t/%09/g' \ -e 's/?/%3F/g' <<<"$raw_url"); echo "$value" @@ -722,8 +725,6 @@ EOF echo -e " or export ${RED}PETSTORE_API_KEY=''${OFF}" echo -e " - ${BLUE}Basic AUTH${OFF} - add '-u :' before ${YELLOW}${OFF}" echo -e " or export ${RED}PETSTORE_BASIC_AUTH=':'${OFF}" - echo -e " - ${BLUE}Basic AUTH${OFF} - add '-u :' before ${YELLOW}${OFF}" - echo -e " or export ${RED}PETSTORE_BASIC_AUTH=':'${OFF}" echo -e " - ${MAGENTA}OAuth2 (flow: implicit)${OFF}" echo -e " Authorization URL: " echo -e " * http://petstore.swagger.io/api/oauth/dialog" @@ -737,17 +738,11 @@ EOF read -r -d '' ops < Date: Thu, 22 Apr 2021 12:48:26 +0200 Subject: [PATCH 045/186] [Kotlin][#9317] Add parameter sorting to Kotlin client generator (as used in the Java generator). (#9318) --- .../codegen/languages/KotlinClientCodegen.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index a083965a0a39..72646d58cd7a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -17,6 +17,8 @@ package org.openapitools.codegen.languages; +import static java.util.Collections.sort; + import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CodegenConstants; @@ -656,6 +658,20 @@ public Map postProcessOperationsWithModels(Map o operation.path = operation.path.substring(1); } + // sorting operation parameters to make sure path params are parsed before query params + if (operation.allParams != null) { + sort(operation.allParams, (one, another) -> { + if (one.isPathParam && another.isQueryParam) { + return -1; + } + if (one.isQueryParam && another.isPathParam){ + return 1; + } + + return 0; + }); + } + // modify the data type of binary form parameters to a more friendly type for multiplatform builds if (MULTIPLATFORM.equals(getLibrary()) && operation.allParams != null) { for (CodegenParameter param : operation.allParams) { From 5468b22b8371aee43340ecd6ad1c4c613daade93 Mon Sep 17 00:00:00 2001 From: Stefan Hanselmann <69970522+shanselm-ergon@users.noreply.github.com> Date: Thu, 22 Apr 2021 13:07:55 +0200 Subject: [PATCH 046/186] [Kotlin][#7925] Make ApiClient in jvm-retrofit2 be able to add additional retrofit Converter.Factory (#9316) * [Kotlin][#7925] Add an optional Converter.Factory to the Kotlin retrofit2 ApiClient template. * [Kotlin][#7925] Update sample project. --- .../jvm-retrofit2/infrastructure/ApiClient.kt.mustache | 9 ++++++++- .../org/openapitools/client/infrastructure/ApiClient.kt | 9 ++++++++- .../org/openapitools/client/infrastructure/ApiClient.kt | 9 ++++++++- .../org/openapitools/client/infrastructure/ApiClient.kt | 9 ++++++++- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/infrastructure/ApiClient.kt.mustache index 66e77122a811..ea19748fbfbc 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/infrastructure/ApiClient.kt.mustache @@ -25,6 +25,7 @@ import okhttp3.Interceptor import okhttp3.OkHttpClient import retrofit2.Retrofit import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Converter import retrofit2.converter.scalars.ScalarsConverterFactory {{#useRxJava}} import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory @@ -55,7 +56,8 @@ import okhttp3.MediaType.Companion.toMediaType private var baseUrl: String = defaultBasePath, private val okHttpClientBuilder: OkHttpClient.Builder? = null{{^kotlinx_serialization}}, private val serializerBuilder: {{#gson}}Gson{{/gson}}{{#moshi}}Moshi.{{/moshi}}Builder = Serializer.{{#gson}}gson{{/gson}}{{#moshi}}moshi{{/moshi}}Builder{{/kotlinx_serialization}}, - private val okHttpClient : OkHttpClient? = null + private val okHttpClient : OkHttpClient? = null, + private val converterFactory: Converter.Factory? = null, ) { private val apiAuthorizations = mutableMapOf() var logger: ((String) -> Unit)? = null @@ -81,6 +83,11 @@ import okhttp3.MediaType.Companion.toMediaType {{#kotlinx_serialization}} .addConverterFactory(jvmJson.asConverterFactory("application/json".toMediaType())) {{/kotlinx_serialization}} + .apply { + if (converterFactory != null) { + addConverterFactory(converterFactory) + } + } } private val clientBuilder: OkHttpClient.Builder by lazy { diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index b721ee141b04..a5aaa332be80 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -11,6 +11,7 @@ import okhttp3.Interceptor import okhttp3.OkHttpClient import retrofit2.Retrofit import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Converter import retrofit2.converter.scalars.ScalarsConverterFactory import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory @@ -20,7 +21,8 @@ import okhttp3.MediaType.Companion.toMediaType class ApiClient( private var baseUrl: String = defaultBasePath, private val okHttpClientBuilder: OkHttpClient.Builder? = null, - private val okHttpClient : OkHttpClient? = null + private val okHttpClient : OkHttpClient? = null, + private val converterFactory: Converter.Factory? = null, ) { private val apiAuthorizations = mutableMapOf() var logger: ((String) -> Unit)? = null @@ -30,6 +32,11 @@ class ApiClient( .baseUrl(baseUrl) .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(jvmJson.asConverterFactory("application/json".toMediaType())) + .apply { + if (converterFactory != null) { + addConverterFactory(converterFactory) + } + } } private val clientBuilder: OkHttpClient.Builder by lazy { diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 1b1edd60ae21..cc63b570177a 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -11,6 +11,7 @@ import okhttp3.Interceptor import okhttp3.OkHttpClient import retrofit2.Retrofit import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Converter import retrofit2.converter.scalars.ScalarsConverterFactory import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import com.squareup.moshi.Moshi @@ -21,7 +22,8 @@ class ApiClient( private var baseUrl: String = defaultBasePath, private val okHttpClientBuilder: OkHttpClient.Builder? = null, private val serializerBuilder: Moshi.Builder = Serializer.moshiBuilder, - private val okHttpClient : OkHttpClient? = null + private val okHttpClient : OkHttpClient? = null, + private val converterFactory: Converter.Factory? = null, ) { private val apiAuthorizations = mutableMapOf() var logger: ((String) -> Unit)? = null @@ -33,6 +35,11 @@ class ApiClient( .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) .addConverterFactory(MoshiConverterFactory.create(serializerBuilder.build())) + .apply { + if (converterFactory != null) { + addConverterFactory(converterFactory) + } + } } private val clientBuilder: OkHttpClient.Builder by lazy { diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 667359c1f227..bee954129e6b 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -11,6 +11,7 @@ import okhttp3.Interceptor import okhttp3.OkHttpClient import retrofit2.Retrofit import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Converter import retrofit2.converter.scalars.ScalarsConverterFactory import com.squareup.moshi.Moshi import retrofit2.converter.moshi.MoshiConverterFactory @@ -20,7 +21,8 @@ class ApiClient( private var baseUrl: String = defaultBasePath, private val okHttpClientBuilder: OkHttpClient.Builder? = null, private val serializerBuilder: Moshi.Builder = Serializer.moshiBuilder, - private val okHttpClient : OkHttpClient? = null + private val okHttpClient : OkHttpClient? = null, + private val converterFactory: Converter.Factory? = null, ) { private val apiAuthorizations = mutableMapOf() var logger: ((String) -> Unit)? = null @@ -30,6 +32,11 @@ class ApiClient( .baseUrl(baseUrl) .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(MoshiConverterFactory.create(serializerBuilder.build())) + .apply { + if (converterFactory != null) { + addConverterFactory(converterFactory) + } + } } private val clientBuilder: OkHttpClient.Builder by lazy { From 33107c14dea4e8e6a7e687b5b5806c9a453c7483 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Thu, 22 Apr 2021 07:13:39 -0400 Subject: [PATCH 047/186] [Swift5] escape reserved words (#9204) * [swift5] `List` is not a Swift data type * [swift5] Escape reserved words using backticks https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID412 * [swift5] Update tests * [swift5] Update samples and docs --- bin/configs/swift5-rxswiftLibrary.yaml | 1 + docs/generators/swift5.md | 3 +- .../languages/Swift5ClientCodegen.java | 34 +++++++++++++++---- .../resources/swift5/modelObject.mustache | 16 ++++----- .../main/resources/swift5/model_doc.mustache | 2 +- .../options/Swift5OptionsProvider.java | 2 ++ .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 +-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++--- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +-- .../swift5/alamofireLibrary/docs/FakeAPI.md | 6 ++-- .../alamofireLibrary/docs/FormatTest.md | 2 +- .../swift5/alamofireLibrary/docs/PetAPI.md | 12 +++---- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 +-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++--- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +-- .../swift5/combineLibrary/docs/FakeAPI.md | 6 ++-- .../swift5/combineLibrary/docs/FormatTest.md | 2 +- .../swift5/combineLibrary/docs/PetAPI.md | 12 +++---- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 +-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++--- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +-- .../petstore/swift5/default/docs/FakeAPI.md | 6 ++-- .../swift5/default/docs/FormatTest.md | 2 +- .../petstore/swift5/default/docs/PetAPI.md | 12 +++---- .../Classes/OpenAPIs/APIs/PetAPI.swift | 4 +-- .../petstore/swift5/deprecated/docs/PetAPI.md | 6 ++-- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 +-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++--- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +-- .../swift5/nonPublicApi/docs/FakeAPI.md | 6 ++-- .../swift5/nonPublicApi/docs/FormatTest.md | 2 +- .../swift5/nonPublicApi/docs/PetAPI.md | 12 +++---- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 +-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++--- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +-- .../swift5/objcCompatible/docs/FakeAPI.md | 6 ++-- .../swift5/objcCompatible/docs/FormatTest.md | 2 +- .../swift5/objcCompatible/docs/PetAPI.md | 12 +++---- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 +-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++--- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +-- .../swift5/promisekitLibrary/docs/FakeAPI.md | 6 ++-- .../promisekitLibrary/docs/FormatTest.md | 2 +- .../swift5/promisekitLibrary/docs/PetAPI.md | 12 +++---- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 +-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++--- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +-- .../swift5/readonlyProperties/docs/FakeAPI.md | 6 ++-- .../readonlyProperties/docs/FormatTest.md | 2 +- .../swift5/readonlyProperties/docs/PetAPI.md | 12 +++---- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 +-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++--- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +-- .../swift5/resultLibrary/docs/FakeAPI.md | 6 ++-- .../swift5/resultLibrary/docs/FormatTest.md | 2 +- .../swift5/resultLibrary/docs/PetAPI.md | 12 +++---- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 +-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++--- .../Classes/OpenAPIs/Models/ClassModel.swift | 10 ++++-- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +-- .../OpenAPIs/Models/Model200Response.swift | 8 ++--- .../Classes/OpenAPIs/Models/Return.swift | 8 ++--- .../swift5/rxswiftLibrary/docs/ClassModel.md | 2 +- .../swift5/rxswiftLibrary/docs/FakeAPI.md | 6 ++-- .../swift5/rxswiftLibrary/docs/FormatTest.md | 2 +- .../rxswiftLibrary/docs/Model200Response.md | 2 +- .../swift5/rxswiftLibrary/docs/PetAPI.md | 12 +++---- .../swift5/rxswiftLibrary/docs/Return.md | 2 +- .../Sources/PetstoreClient/APIs/FakeAPI.swift | 4 +-- .../Sources/PetstoreClient/APIs/PetAPI.swift | 8 ++--- .../PetstoreClient/Models/FormatTest.swift | 4 +-- .../swift5/urlsessionLibrary/docs/FakeAPI.md | 6 ++-- .../urlsessionLibrary/docs/FormatTest.md | 2 +- .../swift5/urlsessionLibrary/docs/PetAPI.md | 12 +++---- 74 files changed, 245 insertions(+), 215 deletions(-) diff --git a/bin/configs/swift5-rxswiftLibrary.yaml b/bin/configs/swift5-rxswiftLibrary.yaml index f564ac3340cf..49d0e24cca5b 100644 --- a/bin/configs/swift5-rxswiftLibrary.yaml +++ b/bin/configs/swift5-rxswiftLibrary.yaml @@ -9,3 +9,4 @@ additionalProperties: podSummary: PetstoreClient projectName: PetstoreClient podHomepage: https://github.com/openapitools/openapi-generator + useBacktickEscapes: true diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index 3c557e4b015c..dc3e27cdecef 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -14,7 +14,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |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| |lenientTypeCast|Accept and cast values for simple types (string->bool, string->int, int->string)| |false| -|library|Library template (sub-template) to use|
**urlsession**
[DEFAULT] HTTP client: URLSession
**alamofire**
HTTP client: Alamofire
|urlsession| +|library|Library template (sub-template) to use|
**urlsession**
[DEFAULT] HTTP client: URLSession
**alamofire**
HTTP client: Alamofire
**vapor**
HTTP client: Vapor
|urlsession| |nonPublicApi|Generates code with reduced access modifiers; allows embedding elsewhere without exposing non-public API calls to consumers.(default: false)| |null| |objcCompatible|Add additional properties and methods for Objective-C compatibility (default: false)| |null| |podAuthors|Authors used for Podspec| |null| @@ -35,6 +35,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| |swiftPackagePath|Set a custom source path instead of OpenAPIClient/Classes/OpenAPIs.| |null| |swiftUseApiNamespace|Flag to make all the API classes inner-class of {{projectName}}API| |null| +|useBacktickEscapes|Escape reserved words using backticks (default: false)| |false| |useSPMFileStructure|Use SPM file structure and set the source path to Sources/{{projectName}} (default: false).| |null| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index a21123c10181..18e0058f245a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -63,6 +63,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig public static final String LENIENT_TYPE_CAST = "lenientTypeCast"; public static final String USE_SPM_FILE_STRUCTURE = "useSPMFileStructure"; public static final String SWIFT_PACKAGE_PATH = "swiftPackagePath"; + public static final String USE_BACKTICK_ESCAPES = "useBacktickEscapes"; protected static final String LIBRARY_ALAMOFIRE = "alamofire"; protected static final String LIBRARY_URLSESSION = "urlsession"; protected static final String RESPONSE_LIBRARY_PROMISE_KIT = "PromiseKit"; @@ -78,6 +79,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig protected boolean swiftUseApiNamespace = false; protected boolean useSPMFileStructure = false; protected String swiftPackagePath = "Classes" + File.separator + "OpenAPIs"; + protected boolean useBacktickEscapes = false; protected String[] responseAs = new String[0]; protected String sourceFolder = swiftPackagePath; protected HashSet objcReservedWords; @@ -201,7 +203,6 @@ public Swift5ClientCodegen() { typeMapping = new HashMap<>(); typeMapping.put("array", "Array"); - typeMapping.put("List", "Array"); typeMapping.put("map", "Dictionary"); typeMapping.put("set", "Set"); typeMapping.put("date", "Date"); @@ -263,6 +264,9 @@ public Swift5ClientCodegen() { "Accept and cast values for simple types (string->bool, " + "string->int, int->string)") .defaultValue(Boolean.FALSE.toString())); + cliOptions.add(new CliOption(USE_BACKTICK_ESCAPES, + "Escape reserved words using backticks (default: false)") + .defaultValue(Boolean.FALSE.toString())); cliOptions.add(new CliOption(CodegenConstants.API_NAME_PREFIX, CodegenConstants.API_NAME_PREFIX_DESC)); cliOptions.add(new CliOption(USE_SPM_FILE_STRUCTURE, "Use SPM file structure" @@ -432,6 +436,10 @@ public void processOpts() { sourceFolder = swiftPackagePath; } + if (additionalProperties.containsKey(USE_BACKTICK_ESCAPES)) { + setUseBacktickEscapes(convertPropertyToBooleanAndWriteBack(USE_BACKTICK_ESCAPES)); + } + setLenientTypeCast(convertPropertyToBooleanAndWriteBack(LENIENT_TYPE_CAST)); // make api and model doc path available in mustache template @@ -519,7 +527,7 @@ public String escapeReservedWord(String name) { if (this.reservedWordsMappings().containsKey(name)) { return this.reservedWordsMappings().get(name); } - return "_" + name; // add an underscore to the name + return useBacktickEscapes && !objcCompatible ? "`" + name + "`" : "_" + name; } @Override @@ -738,11 +746,16 @@ public String toVarName(String name) { // pet_id => petId name = camelize(name, true); - // for reserved word or word starting with number, append _ - if (isReservedWord(name) || name.matches("^\\d.*")) { + // for reserved words surround with `` or append _ + if (isReservedWord(name)) { name = escapeReservedWord(name); } + // for words starting with number, append _ + if (name.matches("^\\d.*")) { + name = "_" + name; + } + return name; } @@ -763,11 +776,16 @@ public String toParamName(String name) { // pet_id => petId name = camelize(name, true); - // for reserved word or word starting with number, append _ - if (isReservedWord(name) || name.matches("^\\d.*")) { + // for reserved words surround with `` + if (isReservedWord(name)) { name = escapeReservedWord(name); } + // for words starting with number, append _ + if (name.matches("^\\d.*")) { + name = "_" + name; + } + return name; } @@ -832,6 +850,10 @@ public void setSwiftPackagePath(String swiftPackagePath) { this.swiftPackagePath = swiftPackagePath; } + public void setUseBacktickEscapes(boolean useBacktickEscapes) { + this.useBacktickEscapes = useBacktickEscapes; + } + @Override public String toEnumValue(String value, String datatype) { // for string, array of string diff --git a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache index 9956f81794dc..715fa3dcd093 100644 --- a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache @@ -11,17 +11,17 @@ {{#isEnum}} {{#description}}/** {{description}} */ {{/description}}{{#deprecated}}@available(*, deprecated, message: "This property is deprecated.") - {{/deprecated}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#readonlyProperties}}private(set) {{/readonlyProperties}}var {{name}}: {{{datatypeWithEnum}}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}} + {{/deprecated}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#readonlyProperties}}private(set) {{/readonlyProperties}}var {{{name}}}: {{{datatypeWithEnum}}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}} {{/isEnum}} {{^isEnum}} {{#description}}/** {{description}} */ {{/description}}{{#deprecated}}@available(*, deprecated, message: "This property is deprecated.") - {{/deprecated}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#readonlyProperties}}private(set) {{/readonlyProperties}}var {{name}}: {{{datatype}}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}} + {{/deprecated}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#readonlyProperties}}private(set) {{/readonlyProperties}}var {{{name}}}: {{{datatype}}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}} {{#objcCompatible}} {{#vendorExtensions.x-swift-optional-scalar}} - {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var {{name}}Num: NSNumber? { + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} var {{{name}}}Num: NSNumber? { get { - return {{name}} as NSNumber? + return {{{name}}} as NSNumber? } } {{/vendorExtensions.x-swift-optional-scalar}} @@ -30,9 +30,9 @@ {{/allVars}} {{#hasVars}} - {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} init({{#allVars}}{{name}}: {{{datatypeWithEnum}}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}{{^required}} = nil{{/required}}{{/defaultValue}}{{^-last}}, {{/-last}}{{/allVars}}) { + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} init({{#allVars}}{{{name}}}: {{{datatypeWithEnum}}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^required}}?{{/required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{^defaultValue}}{{^required}} = nil{{/required}}{{/defaultValue}}{{^-last}}, {{/-last}}{{/allVars}}) { {{#allVars}} - self.{{name}} = {{name}} + self.{{{name}}} = {{{name}}} {{/allVars}} } {{/hasVars}} @@ -70,7 +70,7 @@ let container = try decoder.container(keyedBy: String.self) {{#allVars}} - {{name}} = try container.decode{{#required}}{{#isNullable}}IfPresent{{/isNullable}}{{/required}}{{^required}}IfPresent{{/required}}({{{datatypeWithEnum}}}.self, forKey: "{{{baseName}}}") + {{{name}}} = try container.decode{{#required}}{{#isNullable}}IfPresent{{/isNullable}}{{/required}}{{^required}}IfPresent{{/required}}({{{datatypeWithEnum}}}.self, forKey: "{{{baseName}}}") {{/allVars}} var nonAdditionalPropertyKeys = Set() {{#allVars}} @@ -82,7 +82,7 @@ {{^additionalPropertiesType}}{{#vendorExtensions.x-codegen-has-escaped-property-names}} {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} enum CodingKeys: String, CodingKey, CaseIterable { {{#allVars}} - case {{name}}{{#vendorExtensions.x-codegen-escaped-property-name}} = "{{{baseName}}}"{{/vendorExtensions.x-codegen-escaped-property-name}} + case {{{name}}}{{#vendorExtensions.x-codegen-escaped-property-name}} = "{{{baseName}}}"{{/vendorExtensions.x-codegen-escaped-property-name}} {{/allVars}} } {{/vendorExtensions.x-codegen-has-escaped-property-names}}{{/additionalPropertiesType}} diff --git a/modules/openapi-generator/src/main/resources/swift5/model_doc.mustache b/modules/openapi-generator/src/main/resources/swift5/model_doc.mustache index d3e4ecf5c760..6b68575707a6 100644 --- a/modules/openapi-generator/src/main/resources/swift5/model_doc.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/model_doc.mustache @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -{{#vars}}**{{name}}** | {{#isPrimitiveType}}**{{{dataType}}}**{{/isPrimitiveType}}{{^isPrimitiveType}}{{^isContainer}}[**{{dataType}}**]({{complexType}}.md){{/isContainer}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{/isPrimitiveType}} | {{description}} | {{^required}}[optional] {{/required}}{{#isReadOnly}}[readonly] {{/isReadOnly}}{{#defaultValue}}[default to {{{.}}}]{{/defaultValue}} +{{#vars}}**{{{name}}}** | {{#isPrimitiveType}}**{{{dataType}}}**{{/isPrimitiveType}}{{^isPrimitiveType}}{{^isContainer}}[**{{dataType}}**]({{complexType}}.md){{/isContainer}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{/isPrimitiveType}} | {{description}} | {{^required}}[optional] {{/required}}{{#isReadOnly}}[readonly] {{/isReadOnly}}{{#defaultValue}}[default to {{{.}}}]{{/defaultValue}} {{/vars}} [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java index 54bc03f40d2d..9e2a4a3b36fd 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java @@ -46,6 +46,7 @@ public class Swift5OptionsProvider implements OptionsProvider { public static final String POD_DOCUMENTATION_URL_VALUE = "podDocumentationURL"; public static final String READONLY_PROPERTIES_VALUE = "false"; public static final String SWIFT_USE_API_NAMESPACE_VALUE = "swiftUseApiNamespace"; + public static final String USE_BACKTICKS_ESCAPES_VALUE = "false"; public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false"; public static final String PREPEND_FORM_OR_BODY_PARAMETERS_VALUE = "true"; public static final String LIBRARY_VALUE = "alamofire"; @@ -80,6 +81,7 @@ public Map createOptions() { .put(Swift5ClientCodegen.POD_DOCUMENTATION_URL, POD_DOCUMENTATION_URL_VALUE) .put(Swift5ClientCodegen.READONLY_PROPERTIES, READONLY_PROPERTIES_VALUE) .put(Swift5ClientCodegen.SWIFT_USE_API_NAMESPACE, SWIFT_USE_API_NAMESPACE_VALUE) + .put(Swift5ClientCodegen.USE_BACKTICK_ESCAPES, USE_BACKTICKS_ESCAPES_VALUE) .put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "true") .put(CodegenConstants.ALLOW_UNICODE_IDENTIFIERS, ALLOW_UNICODE_IDENTIFIERS_VALUE) .put(CodegenConstants.PREPEND_FORM_OR_BODY_PARAMETERS, PREPEND_FORM_OR_BODY_PARAMETERS_VALUE) diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 58c4b8a093ce..6b678868877a 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 5cd3629127bf..8da810c254e8 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..51518d6cf95c 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: URL? + public var binary: Data? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/alamofireLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/alamofireLibrary/docs/FakeAPI.md index 543869c0d2e0..e5c4e3bb035f 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/alamofireLibrary/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = URL(string: "https://example.com")! // URL | None (optional) +let binary = 987 // Data | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **URL** | None | [optional] + **binary** | **Data** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/alamofireLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/alamofireLibrary/docs/FormatTest.md index f74d94f6c46a..04e7113e3dc6 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/alamofireLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **URL** | | [optional] +**binary** | **Data** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/alamofireLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/alamofireLibrary/docs/PetAPI.md index 27efe0833476..76a34913c823 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/alamofireLibrary/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let requiredFile = 987 // Data | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **URL** | file to upload | + **requiredFile** | **Data** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index b90460ea41ac..8bb72f685435 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -361,7 +361,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { @@ -398,7 +398,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index b4226ff4aa1d..ca7e7e2c70bd 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -413,7 +413,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { return Future.init { promise in uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { @@ -438,7 +438,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -476,7 +476,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { return Future.init { promise in uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { @@ -501,7 +501,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..51518d6cf95c 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: URL? + public var binary: Data? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/combineLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/combineLibrary/docs/FakeAPI.md index 543869c0d2e0..e5c4e3bb035f 100644 --- a/samples/client/petstore/swift5/combineLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/combineLibrary/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = URL(string: "https://example.com")! // URL | None (optional) +let binary = 987 // Data | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **URL** | None | [optional] + **binary** | **Data** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/combineLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/combineLibrary/docs/FormatTest.md index f74d94f6c46a..04e7113e3dc6 100644 --- a/samples/client/petstore/swift5/combineLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/combineLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **URL** | | [optional] +**binary** | **Data** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/combineLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/combineLibrary/docs/PetAPI.md index 27efe0833476..76a34913c823 100644 --- a/samples/client/petstore/swift5/combineLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/combineLibrary/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let requiredFile = 987 // Data | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **URL** | file to upload | + **requiredFile** | **Data** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 58c4b8a093ce..6b678868877a 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 5cd3629127bf..8da810c254e8 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..51518d6cf95c 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: URL? + public var binary: Data? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/default/docs/FakeAPI.md b/samples/client/petstore/swift5/default/docs/FakeAPI.md index 543869c0d2e0..e5c4e3bb035f 100644 --- a/samples/client/petstore/swift5/default/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/default/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = URL(string: "https://example.com")! // URL | None (optional) +let binary = 987 // Data | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **URL** | None | [optional] + **binary** | **Data** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/default/docs/FormatTest.md b/samples/client/petstore/swift5/default/docs/FormatTest.md index f74d94f6c46a..04e7113e3dc6 100644 --- a/samples/client/petstore/swift5/default/docs/FormatTest.md +++ b/samples/client/petstore/swift5/default/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **URL** | | [optional] +**binary** | **Data** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/default/docs/PetAPI.md b/samples/client/petstore/swift5/default/docs/PetAPI.md index 27efe0833476..76a34913c823 100644 --- a/samples/client/petstore/swift5/default/docs/PetAPI.md +++ b/samples/client/petstore/swift5/default/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let requiredFile = 987 // Data | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **URL** | file to upload | + **requiredFile** | **Data** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index f46c7ac57ea3..ceb6aeaea6f4 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/deprecated/docs/PetAPI.md b/samples/client/petstore/swift5/deprecated/docs/PetAPI.md index 3dd174824793..37ce9aac8f02 100644 --- a/samples/client/petstore/swift5/deprecated/docs/PetAPI.md +++ b/samples/client/petstore/swift5/deprecated/docs/PetAPI.md @@ -364,7 +364,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -376,7 +376,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -397,7 +397,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 03fd8a8ca150..a5ae51463258 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testEndpointParameters(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func testEndpointParameters(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(integer: integer, int32: int32, int64: int64, number: number, float: float, double: double, string: string, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ internal class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - internal class func testEndpointParametersWithRequestBuilder(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + internal class func testEndpointParametersWithRequestBuilder(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 658ef61ddc07..aa43407da598 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + internal class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ internal class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - internal class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + internal class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func uploadFileWithRequiredFile(petId: Int64, additionalMetadata: String? = nil, requiredFile: URL, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + internal class func uploadFileWithRequiredFile(petId: Int64, additionalMetadata: String? = nil, requiredFile: Data, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, requiredFile: requiredFile).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ internal class PetAPI { - parameter requiredFile: (form) file to upload - returns: RequestBuilder */ - internal class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, requiredFile: URL) -> RequestBuilder { + internal class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, requiredFile: Data) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 1f5b70fc6c0a..9525abb9c377 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ internal struct FormatTest: Codable, Hashable { internal var double: Double? internal var string: String? internal var byte: Data - internal var binary: URL? + internal var binary: Data? internal var date: Date internal var dateTime: Date? internal var uuid: UUID? internal var password: String - internal init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + internal init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/nonPublicApi/docs/FakeAPI.md b/samples/client/petstore/swift5/nonPublicApi/docs/FakeAPI.md index 3b14781480ff..d87ab32309de 100644 --- a/samples/client/petstore/swift5/nonPublicApi/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/nonPublicApi/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - internal class func testEndpointParameters(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + internal class func testEndpointParameters(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let double = 987 // Double | None let string = "string_example" // String | None (optional) let patternWithoutDelimiter = "patternWithoutDelimiter_example" // String | None let byte = 987 // Data | None -let binary = URL(string: "https://example.com")! // URL | None (optional) +let binary = 987 // Data | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **string** | **String** | None | [optional] **patternWithoutDelimiter** | **String** | None | **byte** | **Data** | None | - **binary** | **URL** | None | [optional] + **binary** | **Data** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/nonPublicApi/docs/FormatTest.md b/samples/client/petstore/swift5/nonPublicApi/docs/FormatTest.md index f74d94f6c46a..04e7113e3dc6 100644 --- a/samples/client/petstore/swift5/nonPublicApi/docs/FormatTest.md +++ b/samples/client/petstore/swift5/nonPublicApi/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **URL** | | [optional] +**binary** | **Data** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/nonPublicApi/docs/PetAPI.md b/samples/client/petstore/swift5/nonPublicApi/docs/PetAPI.md index 8fd9872c0e9a..8cc01d2f30ba 100644 --- a/samples/client/petstore/swift5/nonPublicApi/docs/PetAPI.md +++ b/samples/client/petstore/swift5/nonPublicApi/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - internal class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + internal class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - internal class func uploadFileWithRequiredFile(petId: Int64, additionalMetadata: String? = nil, requiredFile: URL, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + internal class func uploadFileWithRequiredFile(petId: Int64, additionalMetadata: String? = nil, requiredFile: Data, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -429,7 +429,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let requiredFile = 987 // Data | file to upload // uploads an image (required) PetAPI.uploadFileWithRequiredFile(petId: petId, additionalMetadata: additionalMetadata, requiredFile: requiredFile) { (response, error) in @@ -450,7 +450,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **requiredFile** | **URL** | file to upload | + **requiredFile** | **Data** | file to upload | ### Return type diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 0af3b8d55a8c..0960e6bec63a 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ import Foundation - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 7dc0f6ecde4e..d2deeb82cd64 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ import Foundation - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ import Foundation - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 84f419103a41..bc176c759b78 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -42,13 +42,13 @@ import Foundation } public var string: String? public var byte: Data - public var binary: URL? + public var binary: Data? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/objcCompatible/docs/FakeAPI.md b/samples/client/petstore/swift5/objcCompatible/docs/FakeAPI.md index 712fa591f2f4..95f2338fd6a9 100644 --- a/samples/client/petstore/swift5/objcCompatible/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/objcCompatible/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = URL(string: "https://example.com")! // URL | None (optional) +let binary = 987 // Data | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **URL** | None | [optional] + **binary** | **Data** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/objcCompatible/docs/FormatTest.md b/samples/client/petstore/swift5/objcCompatible/docs/FormatTest.md index f74d94f6c46a..04e7113e3dc6 100644 --- a/samples/client/petstore/swift5/objcCompatible/docs/FormatTest.md +++ b/samples/client/petstore/swift5/objcCompatible/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **URL** | | [optional] +**binary** | **Data** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/objcCompatible/docs/PetAPI.md b/samples/client/petstore/swift5/objcCompatible/docs/PetAPI.md index c03e60bc084e..bc9ffab82d3d 100644 --- a/samples/client/petstore/swift5/objcCompatible/docs/PetAPI.md +++ b/samples/client/petstore/swift5/objcCompatible/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let requiredFile = 987 // Data | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **URL** | file to upload | + **requiredFile** | **Data** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index b87b809198bc..49c31cd3f69a 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -336,7 +336,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testEndpointParameters( number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testEndpointParameters( number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { let deferred = Promise.pending() testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { @@ -372,7 +372,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index e60028960c8b..d272755f7ca3 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -388,7 +388,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func uploadFile( petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func uploadFile( petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { let deferred = Promise.pending() uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { @@ -412,7 +412,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -448,7 +448,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func uploadFileWithRequiredFile( petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func uploadFileWithRequiredFile( petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { let deferred = Promise.pending() uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { @@ -472,7 +472,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..51518d6cf95c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: URL? + public var binary: Data? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/promisekitLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/promisekitLibrary/docs/FakeAPI.md index f2b3e2abe1e1..579c4ef79645 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/promisekitLibrary/docs/FakeAPI.md @@ -343,7 +343,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters( number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> Promise + open class func testEndpointParameters( number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> Promise ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -364,7 +364,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = URL(string: "https://example.com")! // URL | None (optional) +let binary = 987 // Data | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -393,7 +393,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **URL** | None | [optional] + **binary** | **Data** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/promisekitLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/promisekitLibrary/docs/FormatTest.md index f74d94f6c46a..04e7113e3dc6 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/promisekitLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **URL** | | [optional] +**binary** | **Data** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/promisekitLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/promisekitLibrary/docs/PetAPI.md index e767ea772f89..2decebaf14e7 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/promisekitLibrary/docs/PetAPI.md @@ -344,7 +344,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile( petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> Promise + open class func uploadFile( petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> Promise ``` uploads an image @@ -356,7 +356,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file).then { @@ -374,7 +374,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type @@ -393,7 +393,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile( petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> Promise + open class func uploadFileWithRequiredFile( petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> Promise ``` uploads an image (required) @@ -404,7 +404,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let requiredFile = 987 // Data | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -422,7 +422,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **URL** | file to upload | + **requiredFile** | **Data** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 58c4b8a093ce..6b678868877a 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 5cd3629127bf..8da810c254e8 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index fce99baa8f02..88c1092bcbe0 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public private(set) var double: Double? public private(set) var string: String? public private(set) var byte: Data - public private(set) var binary: URL? + public private(set) var binary: Data? public private(set) var date: Date public private(set) var dateTime: Date? public private(set) var uuid: UUID? public private(set) var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md b/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md index 543869c0d2e0..e5c4e3bb035f 100644 --- a/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = URL(string: "https://example.com")! // URL | None (optional) +let binary = 987 // Data | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **URL** | None | [optional] + **binary** | **Data** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md b/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md index f74d94f6c46a..04e7113e3dc6 100644 --- a/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md +++ b/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **URL** | | [optional] +**binary** | **Data** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md b/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md index 27efe0833476..76a34913c823 100644 --- a/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md +++ b/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let requiredFile = 987 // Data | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **URL** | file to upload | + **requiredFile** | **Data** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 642370b2bc1c..4a6cf9e009b8 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index fd4c8fb152ad..a397aa036b96 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..51518d6cf95c 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: URL? + public var binary: Data? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/resultLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/resultLibrary/docs/FakeAPI.md index 543869c0d2e0..e5c4e3bb035f 100644 --- a/samples/client/petstore/swift5/resultLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/resultLibrary/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = URL(string: "https://example.com")! // URL | None (optional) +let binary = 987 // Data | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **URL** | None | [optional] + **binary** | **Data** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/resultLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/resultLibrary/docs/FormatTest.md index f74d94f6c46a..04e7113e3dc6 100644 --- a/samples/client/petstore/swift5/resultLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/resultLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **URL** | | [optional] +**binary** | **Data** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/resultLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/resultLibrary/docs/PetAPI.md index 27efe0833476..76a34913c823 100644 --- a/samples/client/petstore/swift5/resultLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/resultLibrary/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let requiredFile = 987 // Data | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **URL** | file to upload | + **requiredFile** | **Data** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index f76577526ec8..1901beb22e01 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -350,7 +350,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { @@ -388,7 +388,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index e1152e64add8..37992042fcb4 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -402,7 +402,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { @@ -428,7 +428,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -464,7 +464,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { @@ -490,7 +490,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 5c8e8882831f..ea377bceb252 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -10,10 +10,14 @@ import Foundation /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { - public var _class: String? + public var `class`: String? - public init(_class: String? = nil) { - self._class = _class + public init(`class`: String? = nil) { + self.`class` = `class` + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case `class` = "_class" } } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..51518d6cf95c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: URL? + public var binary: Data? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index d36d4e27352a..31c1c142e54a 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -11,16 +11,16 @@ import Foundation public struct Model200Response: Codable, Hashable { public var name: Int? - public var _class: String? + public var `class`: String? - public init(name: Int? = nil, _class: String? = nil) { + public init(name: Int? = nil, `class`: String? = nil) { self.name = name - self._class = _class + self.`class` = `class` } public enum CodingKeys: String, CodingKey, CaseIterable { case name - case _class = "class" + case `class` = "class" } } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 5f539f461843..40591ab2fb8c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -10,14 +10,14 @@ import Foundation /** Model for testing reserved words */ public struct Return: Codable, Hashable { - public var _return: Int? + public var `return`: Int? - public init(_return: Int? = nil) { - self._return = _return + public init(`return`: Int? = nil) { + self.`return` = `return` } public enum CodingKeys: String, CodingKey, CaseIterable { - case _return = "return" + case `return` = "return" } } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/docs/ClassModel.md b/samples/client/petstore/swift5/rxswiftLibrary/docs/ClassModel.md index e3912fdf0fd5..60989bb6b64e 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/docs/ClassModel.md +++ b/samples/client/petstore/swift5/rxswiftLibrary/docs/ClassModel.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**_class** | **String** | | [optional] +**`class`** | **String** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/swift5/rxswiftLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/rxswiftLibrary/docs/FakeAPI.md index 9ca07180e074..1885346e940f 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/rxswiftLibrary/docs/FakeAPI.md @@ -300,7 +300,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> Observable + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> Observable ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -321,7 +321,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = URL(string: "https://example.com")! // URL | None (optional) +let binary = 987 // Data | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -343,7 +343,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **URL** | None | [optional] + **binary** | **Data** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/rxswiftLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/rxswiftLibrary/docs/FormatTest.md index f74d94f6c46a..04e7113e3dc6 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/rxswiftLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **URL** | | [optional] +**binary** | **Data** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/rxswiftLibrary/docs/Model200Response.md b/samples/client/petstore/swift5/rxswiftLibrary/docs/Model200Response.md index 5865ea690cc3..e064d9d01117 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/docs/Model200Response.md +++ b/samples/client/petstore/swift5/rxswiftLibrary/docs/Model200Response.md @@ -4,7 +4,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **Int** | | [optional] -**_class** | **String** | | [optional] +**`class`** | **String** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/swift5/rxswiftLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/rxswiftLibrary/docs/PetAPI.md index c0ec8a91fb4c..12885aa977fc 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/rxswiftLibrary/docs/PetAPI.md @@ -295,7 +295,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> Observable + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> Observable ``` uploads an image @@ -307,7 +307,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // TODO RxSwift sample code not yet implemented. To contribute, please open a ticket via http://github.com/OpenAPITools/openapi-generator/issues/new ``` @@ -318,7 +318,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type @@ -337,7 +337,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> Observable + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> Observable ``` uploads an image (required) @@ -348,7 +348,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let requiredFile = 987 // Data | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // TODO RxSwift sample code not yet implemented. To contribute, please open a ticket via http://github.com/OpenAPITools/openapi-generator/issues/new @@ -359,7 +359,7 @@ let additionalMetadata = "additionalMetadata_example" // String | Additional dat Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **URL** | file to upload | + **requiredFile** | **Data** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/rxswiftLibrary/docs/Return.md b/samples/client/petstore/swift5/rxswiftLibrary/docs/Return.md index 66d17c27c887..e310b15bb5b7 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/docs/Return.md +++ b/samples/client/petstore/swift5/rxswiftLibrary/docs/Return.md @@ -3,7 +3,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**_return** | **Int** | | [optional] +**`return`** | **Int** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift index 58c4b8a093ce..6b678868877a 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift index 5cd3629127bf..8da810c254e8 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift index f09cb471b360..51518d6cf95c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: URL? + public var binary: Data? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/urlsessionLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/urlsessionLibrary/docs/FakeAPI.md index 543869c0d2e0..e5c4e3bb035f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/urlsessionLibrary/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = URL(string: "https://example.com")! // URL | None (optional) +let binary = 987 // Data | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **URL** | None | [optional] + **binary** | **Data** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/urlsessionLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/urlsessionLibrary/docs/FormatTest.md index f74d94f6c46a..04e7113e3dc6 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/urlsessionLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **URL** | | [optional] +**binary** | **Data** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/urlsessionLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/urlsessionLibrary/docs/PetAPI.md index 27efe0833476..76a34913c823 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/urlsessionLibrary/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = URL(string: "https://example.com")! // URL | file to upload (optional) +let file = 987 // Data | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **URL** | file to upload | [optional] + **file** | **Data** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let requiredFile = 987 // Data | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **URL** | file to upload | + **requiredFile** | **Data** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type From 05aa956fe1bde782d0b22ec2c71c5be82c9e6a43 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 22 Apr 2021 19:20:11 +0800 Subject: [PATCH 048/186] update samples --- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 ++-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++++---- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 ++-- .../petstore/swift5/alamofireLibrary/docs/FakeAPI.md | 6 +++--- .../swift5/alamofireLibrary/docs/FormatTest.md | 2 +- .../petstore/swift5/alamofireLibrary/docs/PetAPI.md | 12 ++++++------ .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 ++-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++++---- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 ++-- .../petstore/swift5/combineLibrary/docs/FakeAPI.md | 6 +++--- .../swift5/combineLibrary/docs/FormatTest.md | 2 +- .../petstore/swift5/combineLibrary/docs/PetAPI.md | 12 ++++++------ .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 ++-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++++---- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 ++-- .../client/petstore/swift5/default/docs/FakeAPI.md | 6 +++--- .../petstore/swift5/default/docs/FormatTest.md | 2 +- .../client/petstore/swift5/default/docs/PetAPI.md | 12 ++++++------ .../Classes/OpenAPIs/APIs/PetAPI.swift | 4 ++-- .../client/petstore/swift5/deprecated/docs/PetAPI.md | 6 +++--- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 ++-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++++---- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 ++-- .../petstore/swift5/nonPublicApi/docs/FakeAPI.md | 6 +++--- .../petstore/swift5/nonPublicApi/docs/FormatTest.md | 2 +- .../petstore/swift5/nonPublicApi/docs/PetAPI.md | 12 ++++++------ .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 ++-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++++---- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 ++-- .../petstore/swift5/objcCompatible/docs/FakeAPI.md | 6 +++--- .../swift5/objcCompatible/docs/FormatTest.md | 2 +- .../petstore/swift5/objcCompatible/docs/PetAPI.md | 12 ++++++------ .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 ++-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++++---- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 ++-- .../swift5/promisekitLibrary/docs/FakeAPI.md | 6 +++--- .../swift5/promisekitLibrary/docs/FormatTest.md | 2 +- .../petstore/swift5/promisekitLibrary/docs/PetAPI.md | 12 ++++++------ .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 ++-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++++---- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 ++-- .../swift5/readonlyProperties/docs/FakeAPI.md | 6 +++--- .../swift5/readonlyProperties/docs/FormatTest.md | 2 +- .../swift5/readonlyProperties/docs/PetAPI.md | 12 ++++++------ .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 ++-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++++---- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 ++-- .../petstore/swift5/resultLibrary/docs/FakeAPI.md | 6 +++--- .../petstore/swift5/resultLibrary/docs/FormatTest.md | 2 +- .../petstore/swift5/resultLibrary/docs/PetAPI.md | 12 ++++++------ .../Classes/OpenAPIs/APIs/FakeAPI.swift | 4 ++-- .../Classes/OpenAPIs/APIs/PetAPI.swift | 8 ++++---- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 ++-- .../petstore/swift5/rxswiftLibrary/docs/FakeAPI.md | 6 +++--- .../swift5/rxswiftLibrary/docs/FormatTest.md | 2 +- .../petstore/swift5/rxswiftLibrary/docs/PetAPI.md | 12 ++++++------ .../Sources/PetstoreClient/APIs/FakeAPI.swift | 4 ++-- .../Sources/PetstoreClient/APIs/PetAPI.swift | 8 ++++---- .../Sources/PetstoreClient/Models/FormatTest.swift | 4 ++-- .../swift5/urlsessionLibrary/docs/FakeAPI.md | 6 +++--- .../swift5/urlsessionLibrary/docs/FormatTest.md | 2 +- .../petstore/swift5/urlsessionLibrary/docs/PetAPI.md | 12 ++++++------ 62 files changed, 185 insertions(+), 185 deletions(-) diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 6b678868877a..58c4b8a093ce 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 8da810c254e8..5cd3629127bf 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 51518d6cf95c..f09cb471b360 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: Data? + public var binary: URL? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/alamofireLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/alamofireLibrary/docs/FakeAPI.md index e5c4e3bb035f..543869c0d2e0 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/alamofireLibrary/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = 987 // Data | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **Data** | None | [optional] + **binary** | **URL** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/alamofireLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/alamofireLibrary/docs/FormatTest.md index 04e7113e3dc6..f74d94f6c46a 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/alamofireLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **Data** | | [optional] +**binary** | **URL** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/alamofireLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/alamofireLibrary/docs/PetAPI.md index 76a34913c823..27efe0833476 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/alamofireLibrary/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = 987 // Data | file to upload +let requiredFile = URL(string: "https://example.com")! // URL | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **Data** | file to upload | + **requiredFile** | **URL** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 8bb72f685435..b90460ea41ac 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -361,7 +361,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { @@ -398,7 +398,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index ca7e7e2c70bd..b4226ff4aa1d 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -413,7 +413,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { return Future.init { promise in uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { @@ -438,7 +438,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -476,7 +476,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { return Future.init { promise in uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { @@ -501,7 +501,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 51518d6cf95c..f09cb471b360 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: Data? + public var binary: URL? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/combineLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/combineLibrary/docs/FakeAPI.md index e5c4e3bb035f..543869c0d2e0 100644 --- a/samples/client/petstore/swift5/combineLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/combineLibrary/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = 987 // Data | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **Data** | None | [optional] + **binary** | **URL** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/combineLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/combineLibrary/docs/FormatTest.md index 04e7113e3dc6..f74d94f6c46a 100644 --- a/samples/client/petstore/swift5/combineLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/combineLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **Data** | | [optional] +**binary** | **URL** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/combineLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/combineLibrary/docs/PetAPI.md index 76a34913c823..27efe0833476 100644 --- a/samples/client/petstore/swift5/combineLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/combineLibrary/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = 987 // Data | file to upload +let requiredFile = URL(string: "https://example.com")! // URL | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **Data** | file to upload | + **requiredFile** | **URL** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 6b678868877a..58c4b8a093ce 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 8da810c254e8..5cd3629127bf 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 51518d6cf95c..f09cb471b360 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: Data? + public var binary: URL? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/default/docs/FakeAPI.md b/samples/client/petstore/swift5/default/docs/FakeAPI.md index e5c4e3bb035f..543869c0d2e0 100644 --- a/samples/client/petstore/swift5/default/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/default/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = 987 // Data | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **Data** | None | [optional] + **binary** | **URL** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/default/docs/FormatTest.md b/samples/client/petstore/swift5/default/docs/FormatTest.md index 04e7113e3dc6..f74d94f6c46a 100644 --- a/samples/client/petstore/swift5/default/docs/FormatTest.md +++ b/samples/client/petstore/swift5/default/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **Data** | | [optional] +**binary** | **URL** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/default/docs/PetAPI.md b/samples/client/petstore/swift5/default/docs/PetAPI.md index 76a34913c823..27efe0833476 100644 --- a/samples/client/petstore/swift5/default/docs/PetAPI.md +++ b/samples/client/petstore/swift5/default/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = 987 // Data | file to upload +let requiredFile = URL(string: "https://example.com")! // URL | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **Data** | file to upload | + **requiredFile** | **URL** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index ceb6aeaea6f4..f46c7ac57ea3 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/deprecated/docs/PetAPI.md b/samples/client/petstore/swift5/deprecated/docs/PetAPI.md index 37ce9aac8f02..3dd174824793 100644 --- a/samples/client/petstore/swift5/deprecated/docs/PetAPI.md +++ b/samples/client/petstore/swift5/deprecated/docs/PetAPI.md @@ -364,7 +364,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -376,7 +376,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -397,7 +397,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index a5ae51463258..03fd8a8ca150 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testEndpointParameters(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func testEndpointParameters(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(integer: integer, int32: int32, int64: int64, number: number, float: float, double: double, string: string, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ internal class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - internal class func testEndpointParametersWithRequestBuilder(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + internal class func testEndpointParametersWithRequestBuilder(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index aa43407da598..658ef61ddc07 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + internal class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ internal class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - internal class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + internal class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func uploadFileWithRequiredFile(petId: Int64, additionalMetadata: String? = nil, requiredFile: Data, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + internal class func uploadFileWithRequiredFile(petId: Int64, additionalMetadata: String? = nil, requiredFile: URL, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, requiredFile: requiredFile).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ internal class PetAPI { - parameter requiredFile: (form) file to upload - returns: RequestBuilder */ - internal class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, requiredFile: Data) -> RequestBuilder { + internal class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, requiredFile: URL) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 9525abb9c377..1f5b70fc6c0a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ internal struct FormatTest: Codable, Hashable { internal var double: Double? internal var string: String? internal var byte: Data - internal var binary: Data? + internal var binary: URL? internal var date: Date internal var dateTime: Date? internal var uuid: UUID? internal var password: String - internal init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + internal init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/nonPublicApi/docs/FakeAPI.md b/samples/client/petstore/swift5/nonPublicApi/docs/FakeAPI.md index d87ab32309de..3b14781480ff 100644 --- a/samples/client/petstore/swift5/nonPublicApi/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/nonPublicApi/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - internal class func testEndpointParameters(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + internal class func testEndpointParameters(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let double = 987 // Double | None let string = "string_example" // String | None (optional) let patternWithoutDelimiter = "patternWithoutDelimiter_example" // String | None let byte = 987 // Data | None -let binary = 987 // Data | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **string** | **String** | None | [optional] **patternWithoutDelimiter** | **String** | None | **byte** | **Data** | None | - **binary** | **Data** | None | [optional] + **binary** | **URL** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/nonPublicApi/docs/FormatTest.md b/samples/client/petstore/swift5/nonPublicApi/docs/FormatTest.md index 04e7113e3dc6..f74d94f6c46a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/docs/FormatTest.md +++ b/samples/client/petstore/swift5/nonPublicApi/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **Data** | | [optional] +**binary** | **URL** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/nonPublicApi/docs/PetAPI.md b/samples/client/petstore/swift5/nonPublicApi/docs/PetAPI.md index 8cc01d2f30ba..8fd9872c0e9a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/docs/PetAPI.md +++ b/samples/client/petstore/swift5/nonPublicApi/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - internal class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + internal class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - internal class func uploadFileWithRequiredFile(petId: Int64, additionalMetadata: String? = nil, requiredFile: Data, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + internal class func uploadFileWithRequiredFile(petId: Int64, additionalMetadata: String? = nil, requiredFile: URL, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -429,7 +429,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let requiredFile = 987 // Data | file to upload +let requiredFile = URL(string: "https://example.com")! // URL | file to upload // uploads an image (required) PetAPI.uploadFileWithRequiredFile(petId: petId, additionalMetadata: additionalMetadata, requiredFile: requiredFile) { (response, error) in @@ -450,7 +450,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **requiredFile** | **Data** | file to upload | + **requiredFile** | **URL** | file to upload | ### Return type diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 0960e6bec63a..0af3b8d55a8c 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ import Foundation - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index d2deeb82cd64..7dc0f6ecde4e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ import Foundation - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ import Foundation - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index bc176c759b78..84f419103a41 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -42,13 +42,13 @@ import Foundation } public var string: String? public var byte: Data - public var binary: Data? + public var binary: URL? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/objcCompatible/docs/FakeAPI.md b/samples/client/petstore/swift5/objcCompatible/docs/FakeAPI.md index 95f2338fd6a9..712fa591f2f4 100644 --- a/samples/client/petstore/swift5/objcCompatible/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/objcCompatible/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = 987 // Data | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **Data** | None | [optional] + **binary** | **URL** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/objcCompatible/docs/FormatTest.md b/samples/client/petstore/swift5/objcCompatible/docs/FormatTest.md index 04e7113e3dc6..f74d94f6c46a 100644 --- a/samples/client/petstore/swift5/objcCompatible/docs/FormatTest.md +++ b/samples/client/petstore/swift5/objcCompatible/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **Data** | | [optional] +**binary** | **URL** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/objcCompatible/docs/PetAPI.md b/samples/client/petstore/swift5/objcCompatible/docs/PetAPI.md index bc9ffab82d3d..c03e60bc084e 100644 --- a/samples/client/petstore/swift5/objcCompatible/docs/PetAPI.md +++ b/samples/client/petstore/swift5/objcCompatible/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = 987 // Data | file to upload +let requiredFile = URL(string: "https://example.com")! // URL | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **Data** | file to upload | + **requiredFile** | **URL** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 49c31cd3f69a..b87b809198bc 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -336,7 +336,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testEndpointParameters( number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testEndpointParameters( number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { let deferred = Promise.pending() testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { @@ -372,7 +372,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index d272755f7ca3..e60028960c8b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -388,7 +388,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func uploadFile( petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func uploadFile( petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { let deferred = Promise.pending() uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { @@ -412,7 +412,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -448,7 +448,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func uploadFileWithRequiredFile( petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func uploadFileWithRequiredFile( petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { let deferred = Promise.pending() uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { @@ -472,7 +472,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 51518d6cf95c..f09cb471b360 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: Data? + public var binary: URL? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/promisekitLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/promisekitLibrary/docs/FakeAPI.md index 579c4ef79645..f2b3e2abe1e1 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/promisekitLibrary/docs/FakeAPI.md @@ -343,7 +343,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters( number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> Promise + open class func testEndpointParameters( number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> Promise ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -364,7 +364,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = 987 // Data | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -393,7 +393,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **Data** | None | [optional] + **binary** | **URL** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/promisekitLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/promisekitLibrary/docs/FormatTest.md index 04e7113e3dc6..f74d94f6c46a 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/promisekitLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **Data** | | [optional] +**binary** | **URL** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/promisekitLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/promisekitLibrary/docs/PetAPI.md index 2decebaf14e7..e767ea772f89 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/promisekitLibrary/docs/PetAPI.md @@ -344,7 +344,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile( petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> Promise + open class func uploadFile( petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> Promise ``` uploads an image @@ -356,7 +356,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file).then { @@ -374,7 +374,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type @@ -393,7 +393,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile( petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> Promise + open class func uploadFileWithRequiredFile( petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> Promise ``` uploads an image (required) @@ -404,7 +404,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = 987 // Data | file to upload +let requiredFile = URL(string: "https://example.com")! // URL | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -422,7 +422,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **Data** | file to upload | + **requiredFile** | **URL** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 6b678868877a..58c4b8a093ce 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 8da810c254e8..5cd3629127bf 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 88c1092bcbe0..fce99baa8f02 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public private(set) var double: Double? public private(set) var string: String? public private(set) var byte: Data - public private(set) var binary: Data? + public private(set) var binary: URL? public private(set) var date: Date public private(set) var dateTime: Date? public private(set) var uuid: UUID? public private(set) var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md b/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md index e5c4e3bb035f..543869c0d2e0 100644 --- a/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/readonlyProperties/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = 987 // Data | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **Data** | None | [optional] + **binary** | **URL** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md b/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md index 04e7113e3dc6..f74d94f6c46a 100644 --- a/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md +++ b/samples/client/petstore/swift5/readonlyProperties/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **Data** | | [optional] +**binary** | **URL** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md b/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md index 76a34913c823..27efe0833476 100644 --- a/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md +++ b/samples/client/petstore/swift5/readonlyProperties/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = 987 // Data | file to upload +let requiredFile = URL(string: "https://example.com")! // URL | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **Data** | file to upload | + **requiredFile** | **URL** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 4a6cf9e009b8..642370b2bc1c 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index a397aa036b96..fd4c8fb152ad 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 51518d6cf95c..f09cb471b360 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: Data? + public var binary: URL? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/resultLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/resultLibrary/docs/FakeAPI.md index e5c4e3bb035f..543869c0d2e0 100644 --- a/samples/client/petstore/swift5/resultLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/resultLibrary/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = 987 // Data | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **Data** | None | [optional] + **binary** | **URL** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/resultLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/resultLibrary/docs/FormatTest.md index 04e7113e3dc6..f74d94f6c46a 100644 --- a/samples/client/petstore/swift5/resultLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/resultLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **Data** | | [optional] +**binary** | **URL** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/resultLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/resultLibrary/docs/PetAPI.md index 76a34913c823..27efe0833476 100644 --- a/samples/client/petstore/swift5/resultLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/resultLibrary/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = 987 // Data | file to upload +let requiredFile = URL(string: "https://example.com")! // URL | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **Data** | file to upload | + **requiredFile** | **URL** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 1901beb22e01..f76577526ec8 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -350,7 +350,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { @@ -388,7 +388,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 37992042fcb4..e1152e64add8 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -402,7 +402,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { @@ -428,7 +428,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -464,7 +464,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { @@ -490,7 +490,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 51518d6cf95c..f09cb471b360 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: Data? + public var binary: URL? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/rxswiftLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/rxswiftLibrary/docs/FakeAPI.md index 1885346e940f..9ca07180e074 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/rxswiftLibrary/docs/FakeAPI.md @@ -300,7 +300,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> Observable + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> Observable ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -321,7 +321,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = 987 // Data | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -343,7 +343,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **Data** | None | [optional] + **binary** | **URL** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/rxswiftLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/rxswiftLibrary/docs/FormatTest.md index 04e7113e3dc6..f74d94f6c46a 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/rxswiftLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **Data** | | [optional] +**binary** | **URL** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/rxswiftLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/rxswiftLibrary/docs/PetAPI.md index 12885aa977fc..c0ec8a91fb4c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/rxswiftLibrary/docs/PetAPI.md @@ -295,7 +295,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> Observable + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> Observable ``` uploads an image @@ -307,7 +307,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // TODO RxSwift sample code not yet implemented. To contribute, please open a ticket via http://github.com/OpenAPITools/openapi-generator/issues/new ``` @@ -318,7 +318,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type @@ -337,7 +337,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> Observable + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> Observable ``` uploads an image (required) @@ -348,7 +348,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = 987 // Data | file to upload +let requiredFile = URL(string: "https://example.com")! // URL | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // TODO RxSwift sample code not yet implemented. To contribute, please open a ticket via http://github.com/OpenAPITools/openapi-generator/issues/new @@ -359,7 +359,7 @@ let additionalMetadata = "additionalMetadata_example" // String | Additional dat Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **Data** | file to upload | + **requiredFile** | **URL** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift index 6b678868877a..58c4b8a093ce 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -355,7 +355,7 @@ open class FakeAPI { - parameter callback: (form) None (optional) - returns: RequestBuilder */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" let URLString = PetstoreClientAPI.basePath + path let formParams: [String: Any?] = [ diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift index 8da810c254e8..5cd3629127bf 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -395,7 +395,7 @@ open class PetAPI { - parameter file: (form) file to upload (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil) -> RequestBuilder { + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { var path = "/pet/{petId}/uploadImage" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -453,7 +453,7 @@ open class PetAPI { - parameter additionalMetadata: (form) Additional data to pass to server (optional) - returns: RequestBuilder */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil) -> RequestBuilder { + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { var path = "/fake/{petId}/uploadImageWithRequiredFile" let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift index 51518d6cf95c..f09cb471b360 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift @@ -17,13 +17,13 @@ public struct FormatTest: Codable, Hashable { public var double: Double? public var string: String? public var byte: Data - public var binary: Data? + public var binary: URL? public var date: Date public var dateTime: Date? public var uuid: UUID? public var password: String - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: Data? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { self.integer = integer self.int32 = int32 self.int64 = int64 diff --git a/samples/client/petstore/swift5/urlsessionLibrary/docs/FakeAPI.md b/samples/client/petstore/swift5/urlsessionLibrary/docs/FakeAPI.md index e5c4e3bb035f..543869c0d2e0 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/urlsessionLibrary/docs/FakeAPI.md @@ -364,7 +364,7 @@ No authorization required # **testEndpointParameters** ```swift - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: Data? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) ``` Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -385,7 +385,7 @@ let int32 = 987 // Int | None (optional) let int64 = 987 // Int64 | None (optional) let float = 987 // Float | None (optional) let string = "string_example" // String | None (optional) -let binary = 987 // Data | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) let date = Date() // Date | None (optional) let dateTime = Date() // Date | None (optional) let password = "password_example" // String | None (optional) @@ -417,7 +417,7 @@ Name | Type | Description | Notes **int64** | **Int64** | None | [optional] **float** | **Float** | None | [optional] **string** | **String** | None | [optional] - **binary** | **Data** | None | [optional] + **binary** | **URL** | None | [optional] **date** | **Date** | None | [optional] **dateTime** | **Date** | None | [optional] **password** | **String** | None | [optional] diff --git a/samples/client/petstore/swift5/urlsessionLibrary/docs/FormatTest.md b/samples/client/petstore/swift5/urlsessionLibrary/docs/FormatTest.md index 04e7113e3dc6..f74d94f6c46a 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/docs/FormatTest.md +++ b/samples/client/petstore/swift5/urlsessionLibrary/docs/FormatTest.md @@ -11,7 +11,7 @@ Name | Type | Description | Notes **double** | **Double** | | [optional] **string** | **String** | | [optional] **byte** | **Data** | | -**binary** | **Data** | | [optional] +**binary** | **URL** | | [optional] **date** | **Date** | | **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] diff --git a/samples/client/petstore/swift5/urlsessionLibrary/docs/PetAPI.md b/samples/client/petstore/swift5/urlsessionLibrary/docs/PetAPI.md index 76a34913c823..27efe0833476 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/docs/PetAPI.md +++ b/samples/client/petstore/swift5/urlsessionLibrary/docs/PetAPI.md @@ -365,7 +365,7 @@ Void (empty response body) # **uploadFile** ```swift - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: Data? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image @@ -377,7 +377,7 @@ import PetstoreClient let petId = 987 // Int64 | ID of pet to update let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) -let file = 987 // Data | file to upload (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) // uploads an image PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in @@ -398,7 +398,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | **additionalMetadata** | **String** | Additional data to pass to server | [optional] - **file** | **Data** | file to upload | [optional] + **file** | **URL** | file to upload | [optional] ### Return type @@ -417,7 +417,7 @@ Name | Type | Description | Notes # **uploadFileWithRequiredFile** ```swift - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: Data, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) ``` uploads an image (required) @@ -428,7 +428,7 @@ uploads an image (required) import PetstoreClient let petId = 987 // Int64 | ID of pet to update -let requiredFile = 987 // Data | file to upload +let requiredFile = URL(string: "https://example.com")! // URL | file to upload let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) // uploads an image (required) @@ -449,7 +449,7 @@ PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, addi Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **Int64** | ID of pet to update | - **requiredFile** | **Data** | file to upload | + **requiredFile** | **URL** | file to upload | **additionalMetadata** | **String** | Additional data to pass to server | [optional] ### Return type From ab688d4c3a1d558a1c6f6b9116caf3cd0798ef0c Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 22 Apr 2021 20:54:01 +0800 Subject: [PATCH 049/186] Update documentation (#9322) * update doc * update doc --- docs/generators/csharp-netcore.md | 2 +- docs/generators/csharp.md | 2 +- .../src/main/java/org/openapitools/codegen/cmd/Generate.java | 3 ++- modules/openapi-generator-gradle-plugin/README.adoc | 2 +- modules/openapi-generator-maven-plugin/README.md | 2 +- .../main/java/org/openapitools/codegen/CodegenConstants.java | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/generators/csharp-netcore.md b/docs/generators/csharp-netcore.md index c7935752d018..0887dcbfeca0 100644 --- a/docs/generators/csharp-netcore.md +++ b/docs/generators/csharp-netcore.md @@ -29,7 +29,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |returnICollection|Return ICollection<T> instead of the concrete type.| |false| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |src| -|targetFramework|The target .NET framework version.|
**netstandard1.3**
.NET Standard 1.3 compatible
**netstandard1.4**
.NET Standard 1.4 compatible
**netstandard1.5**
.NET Standard 1.5 compatible
**netstandard1.6**
.NET Standard 1.6 compatible
**netstandard2.0**
.NET Standard 2.0 compatible
**netstandard2.1**
.NET Standard 2.1 compatible
**netcoreapp2.0**
.NET Core 2.0 compatible
**netcoreapp2.1**
.NET Core 2.1 compatible
**netcoreapp3.0**
.NET Core 3.0 compatible
**netcoreapp3.1**
.NET Core 3.1 compatible
**net47**
.NET Framework 4.7 compatible
**net5.0**
.NET 5.0 compatible
|netstandard2.0| +|targetFramework|The target .NET framework version. To target multiple frameworks, use `;` as the separator, e.g. `netstandard2.1;netcoreapp3.0`|
**netstandard1.3**
.NET Standard 1.3 compatible
**netstandard1.4**
.NET Standard 1.4 compatible
**netstandard1.5**
.NET Standard 1.5 compatible
**netstandard1.6**
.NET Standard 1.6 compatible
**netstandard2.0**
.NET Standard 2.0 compatible
**netstandard2.1**
.NET Standard 2.1 compatible
**netcoreapp2.0**
.NET Core 2.0 compatible
**netcoreapp2.1**
.NET Core 2.1 compatible
**netcoreapp3.0**
.NET Core 3.0 compatible
**netcoreapp3.1**
.NET Core 3.1 compatible
**net47**
.NET Framework 4.7 compatible
**net5.0**
.NET 5.0 compatible
|netstandard2.0| |useCollection|Deserialize array types to Collection<T> instead of List<T>.| |false| |useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false| |useOneOfDiscriminatorLookup|Use the discriminator's mapping in oneOf to speed up the model lookup. IMPORTANT: Validation (e.g. one and only one match in oneOf's schemas) will be skipped.| |false| diff --git a/docs/generators/csharp.md b/docs/generators/csharp.md index ec9c4454ff8e..0b3185606ec1 100644 --- a/docs/generators/csharp.md +++ b/docs/generators/csharp.md @@ -25,7 +25,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |returnICollection|Return ICollection<T> instead of the concrete type.| |false| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |src| -|targetFramework|The target .NET framework version.|
**v3.5**
.NET Framework 3.5 compatible
**v4.0**
.NET Framework 4.0 compatible
**v4.5**
.NET Framework 4.5 compatible
**v4.5.2**
.NET Framework 4.5.2+ compatible
**netstandard1.3**
.NET Standard 1.3 compatible (DEPRECATED. Please use `csharp-netcore` generator instead)
**uwp**
Universal Windows Platform (DEPRECATED. Please use `csharp-netcore` generator instead)
|v4.5| +|targetFramework|The target .NET framework version. To target multiple frameworks, use `;` as the separator, e.g. `netstandard2.1;netcoreapp3.0`|
**v3.5**
.NET Framework 3.5 compatible
**v4.0**
.NET Framework 4.0 compatible
**v4.5**
.NET Framework 4.5 compatible
**v4.5.2**
.NET Framework 4.5.2+ compatible
**netstandard1.3**
.NET Standard 1.3 compatible (DEPRECATED. Please use `csharp-netcore` generator instead)
**uwp**
Universal Windows Platform (DEPRECATED. Please use `csharp-netcore` generator instead)
|v4.5| |useCollection|Deserialize array types to Collection<T> instead of List<T>.| |false| |useCompareNetObjects|Use KellermanSoftware.CompareNetObjects for deep recursive object comparison. WARNING: this option incurs potential performance impact.| |false| |useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false| diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java index f935b14e6d76..27447fad78ab 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java @@ -134,7 +134,8 @@ public class Generate extends OpenApiGeneratorCommand { title = "type mappings", description = "sets mappings between OpenAPI spec types and generated code types " + "in the format of OpenAPIType=generatedType,OpenAPIType=generatedType. For example: array=List,map=Map,string=String." - + " You can also have multiple occurrences of this option.") + + " You can also have multiple occurrences of this option." + + " To map a specified format, use type+format, e.g. string+password=EncryptedString will map `type: string, format: password` to `EncryptedString`.") private List typeMappings = new ArrayList<>(); @Option( diff --git a/modules/openapi-generator-gradle-plugin/README.adoc b/modules/openapi-generator-gradle-plugin/README.adoc index ae55fb161369..08b093049004 100644 --- a/modules/openapi-generator-gradle-plugin/README.adoc +++ b/modules/openapi-generator-gradle-plugin/README.adoc @@ -212,7 +212,7 @@ apply plugin: 'org.openapi.generator' |typeMappings |Map(String,String) |None -|Sets mappings between OpenAPI spec types and generated code types. +|Sets mappings between OpenAPI spec types and generated code types in the format of OpenAPIType=generatedType,OpenAPIType=generatedType. For example: `array=List,map=Map,string=String`. You can also have multiple occurrences of this option. To map a specified format, use type+format, e.g. string+password=EncryptedString will map `type: string, format: password` to `EncryptedString`. |additionalProperties |Map(String,Any) diff --git a/modules/openapi-generator-maven-plugin/README.md b/modules/openapi-generator-maven-plugin/README.md index 627fa155e634..64151ad1418c 100644 --- a/modules/openapi-generator-maven-plugin/README.md +++ b/modules/openapi-generator-maven-plugin/README.md @@ -79,7 +79,7 @@ mvn clean compile | `configOptions` | N/A | a **map** of language-specific parameters. To show a full list of generator-specified parameters (options), please use `configHelp` (explained below) | `instantiationTypes` | `openapi.generator.maven.plugin.instantiationTypes` | sets instantiation type mappings in the format of type=instantiatedType,type=instantiatedType. For example (in Java): `array=ArrayList,map=HashMap`. In other words array types will get instantiated as ArrayList in generated code. You can also have multiple occurrences of this option | `importMappings` | `openapi.generator.maven.plugin.importMappings` | specifies mappings between a given class and the import that should be used for that class in the format of type=import,type=import. You can also have multiple occurrences of this option -| `typeMappings` | `openapi.generator.maven.plugin.typeMappings` | sets mappings between OpenAPI spec types and generated code types in the format of OpenAPIType=generatedType,OpenAPIType=generatedType. For example: `array=List,map=Map,string=String`. You can also have multiple occurrences of this option +| `typeMappings` | `openapi.generator.maven.plugin.typeMappings` | sets mappings between OpenAPI spec types and generated code types in the format of OpenAPIType=generatedType,OpenAPIType=generatedType. For example: `array=List,map=Map,string=String`. You can also have multiple occurrences of this option. To map a specified format, use type+format, e.g. string+password=EncryptedString will map `type: string, format: password` to `EncryptedString`. | `languageSpecificPrimitives` | `openapi.generator.maven.plugin.languageSpecificPrimitives` | specifies additional language specific primitive types in the format of type1,type2,type3,type3. For example: `String,boolean,Boolean,Double`. You can also have multiple occurrences of this option | `additionalProperties` | `openapi.generator.maven.plugin.additionalProperties` | sets additional properties that can be referenced by the mustache templates in the format of name=value,name=value. You can also have multiple occurrences of this option | `serverVariableOverrides` | `openapi.generator.maven.plugin.serverVariableOverrides` | A map of server variable overrides for specs that support server URL templating diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java index 2e7151dc94e2..631ff47eedbc 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java @@ -206,7 +206,7 @@ public class CodegenConstants { public static final String MODEL_PROPERTY_NAMING_DESC = "Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name"; public static final String DOTNET_FRAMEWORK = "targetFramework"; - public static final String DOTNET_FRAMEWORK_DESC = "The target .NET framework version."; + public static final String DOTNET_FRAMEWORK_DESC = "The target .NET framework version. To target multiple frameworks, use `;` as the separator, e.g. `netstandard2.1;netcoreapp3.0`"; public static final String TEMPLATING_ENGINE = "templatingEngine"; public static final String TEMPLATING_ENGINE_DESC = "The templating engine plugin to use: \"mustache\" (default) or \"handlebars\" (beta)"; From ee905cf0fe282c07b4b4ebc063acea3ac7543c79 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 23 Apr 2021 12:11:57 +0800 Subject: [PATCH 050/186] add the u of aizu to the user list (#9326) --- README.md | 1 + website/src/dynamic/users.yml | 5 +++++ website/static/img/companies/uoa.png | Bin 0 -> 5006 bytes 3 files changed, 6 insertions(+) create mode 100644 website/static/img/companies/uoa.png diff --git a/README.md b/README.md index 18f2fde65254..c27f86b1531d 100644 --- a/README.md +++ b/README.md @@ -659,6 +659,7 @@ Here are some companies/projects (alphabetical order) using OpenAPI Generator in - [Stingray](http://www.stingray.com) - [Suva](https://www.suva.ch/) - [Telstra](https://dev.telstra.com) +- [The University of Aizu](https://www.u-aizu.ac.jp/en/) - [TravelTime platform](https://www.traveltimeplatform.com/) - [TribalScale](https://www.tribalscale.com) - [TUI InfoTec GmbH](http://www.tui-infotec.com/) diff --git a/website/src/dynamic/users.yml b/website/src/dynamic/users.yml index cbd789930a70..38104947192d 100644 --- a/website/src/dynamic/users.yml +++ b/website/src/dynamic/users.yml @@ -413,6 +413,11 @@ image: "img/companies/telstra.svg" infoLink: "https://dev.telstra.com/" pinned: true +- + caption: The University of Aizu + image: "img/companies/uoa.png" + infoLink: "https://www.u-aizu.ac.jp/en/" + pinned: false - caption: "TravelTime platform" image: "img/companies/traveltime.jpg" diff --git a/website/static/img/companies/uoa.png b/website/static/img/companies/uoa.png new file mode 100644 index 0000000000000000000000000000000000000000..15edfd0ef3e876432d203113647e1956fcd431b4 GIT binary patch literal 5006 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 Y2Nmc+znye5wEzGB07*qoM6N<$g5*`;%m4rY literal 0 HcmV?d00001 From 22950fa2b2babba2315f2c48da3644b60083d7b2 Mon Sep 17 00:00:00 2001 From: Stefan Hanselmann <69970522+shanselm-ergon@users.noreply.github.com> Date: Fri, 23 Apr 2021 06:30:58 +0200 Subject: [PATCH 051/186] [Kotlin][#9313] Generator should support optional form parameter (#9314) * [Kotlin][#9313] Make form params optional in Kotlin retrofit2 template. * [Kotlin][#9313] Update sample files. * [Kotlin] [#9313] Remove new line at the end of the mustache template --- .../kotlin-client/libraries/jvm-retrofit2/formParams.mustache | 2 +- .../src/main/kotlin/org/openapitools/client/apis/PetApi.kt | 4 ++-- .../src/main/kotlin/org/openapitools/client/apis/PetApi.kt | 4 ++-- .../src/main/kotlin/org/openapitools/client/apis/PetApi.kt | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/formParams.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/formParams.mustache index d5267aa77462..041cad115295 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/formParams.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/formParams.mustache @@ -1 +1 @@ -{{#isFormParam}}{{^isFile}}{{#isMultipart}}@Part{{/isMultipart}}{{^isMultipart}}@Field{{/isMultipart}}("{{baseName}}") {{{paramName}}}: {{{dataType}}}{{/isFile}}{{#isFile}}{{#isMultipart}}@Part{{/isMultipart}}{{^isMultipart}}@Field("{{baseName}}"){{/isMultipart}} {{{paramName}}}: MultipartBody.Part{{/isFile}}{{/isFormParam}} \ No newline at end of file +{{#isFormParam}}{{^isFile}}{{#isMultipart}}@Part{{/isMultipart}}{{^isMultipart}}@Field{{/isMultipart}}("{{baseName}}") {{{paramName}}}: {{{dataType}}}{{#required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/required}}{{^required}}?{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{/isFile}}{{#isFile}}{{#isMultipart}}@Part{{/isMultipart}}{{^isMultipart}}@Field("{{baseName}}"){{/isMultipart}} {{{paramName}}}: MultipartBody.Part{{^required}}? = null{{/required}}{{/isFile}}{{/isFormParam}} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index e8b980bc8727..3b2a41282096 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -104,7 +104,7 @@ interface PetApi { */ @FormUrlEncoded @POST("pet/{petId}") - fun updatePetWithForm(@Path("petId") petId: kotlin.Long, @Field("name") name: kotlin.String, @Field("status") status: kotlin.String): Call + fun updatePetWithForm(@Path("petId") petId: kotlin.Long, @Field("name") name: kotlin.String? = null, @Field("status") status: kotlin.String? = null): Call /** * uploads an image @@ -119,6 +119,6 @@ interface PetApi { */ @Multipart @POST("pet/{petId}/uploadImage") - fun uploadFile(@Path("petId") petId: kotlin.Long, @Part("additionalMetadata") additionalMetadata: kotlin.String, @Part file: MultipartBody.Part): Call + fun uploadFile(@Path("petId") petId: kotlin.Long, @Part("additionalMetadata") additionalMetadata: kotlin.String? = null, @Part file: MultipartBody.Part? = null): Call } diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 90e791f37afa..8162b6dc4483 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -105,7 +105,7 @@ interface PetApi { */ @FormUrlEncoded @POST("pet/{petId}") - fun updatePetWithForm(@Path("petId") petId: kotlin.Long, @Field("name") name: kotlin.String, @Field("status") status: kotlin.String): Completable + fun updatePetWithForm(@Path("petId") petId: kotlin.Long, @Field("name") name: kotlin.String? = null, @Field("status") status: kotlin.String? = null): Completable /** * uploads an image @@ -120,6 +120,6 @@ interface PetApi { */ @Multipart @POST("pet/{petId}/uploadImage") - fun uploadFile(@Path("petId") petId: kotlin.Long, @Part("additionalMetadata") additionalMetadata: kotlin.String, @Part file: MultipartBody.Part): Single + fun uploadFile(@Path("petId") petId: kotlin.Long, @Part("additionalMetadata") additionalMetadata: kotlin.String? = null, @Part file: MultipartBody.Part? = null): Single } diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index e8b980bc8727..3b2a41282096 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -104,7 +104,7 @@ interface PetApi { */ @FormUrlEncoded @POST("pet/{petId}") - fun updatePetWithForm(@Path("petId") petId: kotlin.Long, @Field("name") name: kotlin.String, @Field("status") status: kotlin.String): Call + fun updatePetWithForm(@Path("petId") petId: kotlin.Long, @Field("name") name: kotlin.String? = null, @Field("status") status: kotlin.String? = null): Call /** * uploads an image @@ -119,6 +119,6 @@ interface PetApi { */ @Multipart @POST("pet/{petId}/uploadImage") - fun uploadFile(@Path("petId") petId: kotlin.Long, @Part("additionalMetadata") additionalMetadata: kotlin.String, @Part file: MultipartBody.Part): Call + fun uploadFile(@Path("petId") petId: kotlin.Long, @Part("additionalMetadata") additionalMetadata: kotlin.String? = null, @Part file: MultipartBody.Part? = null): Call } From 0f5e7d1e3cb9642bd46ec89ffe0bf66a922029f2 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Fri, 23 Apr 2021 22:04:30 -0400 Subject: [PATCH 052/186] Swift5 models improvements (#9205) * [swift5] Add useClasses to use `final class` instead of `struct` * [swift5] Always include CodingKeys enum * [swift5] Implement model equals and hash functions * [swift5] Encode `null` values * [swift5] Test `useClasses` in urlsessionLibrary * [swift5] Add a required nullable prop test case to 2_0/swift/petstore*.yaml * [swift5] Update samples and docs --- bin/configs/swift5-urlsessionLibrary.yaml | 1 + docs/generators/swift5.md | 2 +- .../resources/swift5/modelObject.mustache | 37 +++++++--- ...ith-fake-endpoints-models-for-testing.yaml | 1 + .../Models/AdditionalPropertiesClass.swift | 11 ++- .../Classes/OpenAPIs/Models/Animal.swift | 14 ++++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 16 +++++ .../Models/ArrayOfArrayOfNumberOnly.swift | 10 ++- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/ArrayTest.swift | 12 +++- .../OpenAPIs/Models/Capitalization.swift | 15 +++- .../Classes/OpenAPIs/Models/Cat.swift | 16 +++++ .../Classes/OpenAPIs/Models/CatAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/Category.swift | 18 ++++- .../Classes/OpenAPIs/Models/ClassModel.swift | 12 ++++ .../Classes/OpenAPIs/Models/Client.swift | 12 ++++ .../Classes/OpenAPIs/Models/Dog.swift | 16 +++++ .../Classes/OpenAPIs/Models/DogAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 11 ++- .../Classes/OpenAPIs/Models/EnumTest.swift | 14 +++- .../Classes/OpenAPIs/Models/File.swift | 12 ++++ .../OpenAPIs/Models/FileSchemaTestClass.swift | 14 ++++ .../Classes/OpenAPIs/Models/FormatTest.swift | 36 ++++++++++ .../OpenAPIs/Models/HasOnlyReadOnly.swift | 14 ++++ .../Classes/OpenAPIs/Models/List.swift | 10 ++- .../Classes/OpenAPIs/Models/MapTest.swift | 13 +++- ...opertiesAndAdditionalPropertiesClass.swift | 16 +++++ .../OpenAPIs/Models/Model200Response.swift | 11 ++- .../Classes/OpenAPIs/Models/Name.swift | 13 +++- .../Classes/OpenAPIs/Models/NumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/Order.swift | 22 ++++++ .../OpenAPIs/Models/OuterComposite.swift | 12 +++- .../Classes/OpenAPIs/Models/Pet.swift | 22 ++++++ .../OpenAPIs/Models/ReadOnlyFirst.swift | 14 ++++ .../Classes/OpenAPIs/Models/Return.swift | 10 ++- .../OpenAPIs/Models/SpecialModelName.swift | 10 ++- .../OpenAPIs/Models/StringBooleanMap.swift | 10 +-- .../Classes/OpenAPIs/Models/Tag.swift | 14 ++++ .../OpenAPIs/Models/TypeHolderDefault.swift | 14 +++- .../OpenAPIs/Models/TypeHolderExample.swift | 14 +++- .../Classes/OpenAPIs/Models/User.swift | 26 +++++++ .../Models/AdditionalPropertiesClass.swift | 11 ++- .../Classes/OpenAPIs/Models/Animal.swift | 14 ++++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 16 +++++ .../Models/ArrayOfArrayOfNumberOnly.swift | 10 ++- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/ArrayTest.swift | 12 +++- .../OpenAPIs/Models/Capitalization.swift | 15 +++- .../Classes/OpenAPIs/Models/Cat.swift | 16 +++++ .../Classes/OpenAPIs/Models/CatAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/Category.swift | 18 ++++- .../Classes/OpenAPIs/Models/ClassModel.swift | 12 ++++ .../Classes/OpenAPIs/Models/Client.swift | 12 ++++ .../Classes/OpenAPIs/Models/Dog.swift | 16 +++++ .../Classes/OpenAPIs/Models/DogAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 11 ++- .../Classes/OpenAPIs/Models/EnumTest.swift | 14 +++- .../Classes/OpenAPIs/Models/File.swift | 12 ++++ .../OpenAPIs/Models/FileSchemaTestClass.swift | 14 ++++ .../Classes/OpenAPIs/Models/FormatTest.swift | 36 ++++++++++ .../OpenAPIs/Models/HasOnlyReadOnly.swift | 14 ++++ .../Classes/OpenAPIs/Models/List.swift | 10 ++- .../Classes/OpenAPIs/Models/MapTest.swift | 13 +++- ...opertiesAndAdditionalPropertiesClass.swift | 16 +++++ .../OpenAPIs/Models/Model200Response.swift | 11 ++- .../Classes/OpenAPIs/Models/Name.swift | 13 +++- .../Classes/OpenAPIs/Models/NumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/Order.swift | 22 ++++++ .../OpenAPIs/Models/OuterComposite.swift | 12 +++- .../Classes/OpenAPIs/Models/Pet.swift | 22 ++++++ .../OpenAPIs/Models/ReadOnlyFirst.swift | 14 ++++ .../Classes/OpenAPIs/Models/Return.swift | 10 ++- .../OpenAPIs/Models/SpecialModelName.swift | 10 ++- .../OpenAPIs/Models/StringBooleanMap.swift | 10 +-- .../Classes/OpenAPIs/Models/Tag.swift | 14 ++++ .../OpenAPIs/Models/TypeHolderDefault.swift | 14 +++- .../OpenAPIs/Models/TypeHolderExample.swift | 14 +++- .../Classes/OpenAPIs/Models/User.swift | 26 +++++++ .../Models/AdditionalPropertiesClass.swift | 11 ++- .../Classes/OpenAPIs/Models/Animal.swift | 14 ++++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 16 +++++ .../Models/ArrayOfArrayOfNumberOnly.swift | 10 ++- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/ArrayTest.swift | 12 +++- .../OpenAPIs/Models/Capitalization.swift | 15 +++- .../Classes/OpenAPIs/Models/Cat.swift | 16 +++++ .../Classes/OpenAPIs/Models/CatAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/Category.swift | 18 ++++- .../Classes/OpenAPIs/Models/ClassModel.swift | 12 ++++ .../Classes/OpenAPIs/Models/Client.swift | 12 ++++ .../Classes/OpenAPIs/Models/Dog.swift | 16 +++++ .../Classes/OpenAPIs/Models/DogAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 11 ++- .../Classes/OpenAPIs/Models/EnumTest.swift | 14 +++- .../Classes/OpenAPIs/Models/File.swift | 12 ++++ .../OpenAPIs/Models/FileSchemaTestClass.swift | 14 ++++ .../Classes/OpenAPIs/Models/FormatTest.swift | 36 ++++++++++ .../OpenAPIs/Models/HasOnlyReadOnly.swift | 14 ++++ .../Classes/OpenAPIs/Models/List.swift | 10 ++- .../Classes/OpenAPIs/Models/MapTest.swift | 13 +++- ...opertiesAndAdditionalPropertiesClass.swift | 16 +++++ .../OpenAPIs/Models/Model200Response.swift | 11 ++- .../Classes/OpenAPIs/Models/Name.swift | 13 +++- .../Classes/OpenAPIs/Models/NumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/Order.swift | 22 ++++++ .../OpenAPIs/Models/OuterComposite.swift | 12 +++- .../Classes/OpenAPIs/Models/Pet.swift | 22 ++++++ .../OpenAPIs/Models/ReadOnlyFirst.swift | 14 ++++ .../Classes/OpenAPIs/Models/Return.swift | 10 ++- .../OpenAPIs/Models/SpecialModelName.swift | 10 ++- .../OpenAPIs/Models/StringBooleanMap.swift | 10 +-- .../Classes/OpenAPIs/Models/Tag.swift | 14 ++++ .../OpenAPIs/Models/TypeHolderDefault.swift | 14 +++- .../OpenAPIs/Models/TypeHolderExample.swift | 14 +++- .../Classes/OpenAPIs/Models/User.swift | 26 +++++++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 16 +++++ .../Classes/OpenAPIs/Models/Category.swift | 14 ++++ .../Classes/OpenAPIs/Models/Order.swift | 22 ++++++ .../Classes/OpenAPIs/Models/Pet.swift | 22 ++++++ .../Classes/OpenAPIs/Models/Tag.swift | 14 ++++ .../Classes/OpenAPIs/Models/User.swift | 26 +++++++ .../Models/AdditionalPropertiesClass.swift | 11 ++- .../Classes/OpenAPIs/Models/Animal.swift | 14 ++++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 16 +++++ .../Models/ArrayOfArrayOfNumberOnly.swift | 10 ++- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/ArrayTest.swift | 12 +++- .../OpenAPIs/Models/Capitalization.swift | 15 +++- .../Classes/OpenAPIs/Models/Cat.swift | 16 +++++ .../Classes/OpenAPIs/Models/CatAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/Category.swift | 18 ++++- .../Classes/OpenAPIs/Models/ClassModel.swift | 12 ++++ .../Classes/OpenAPIs/Models/Client.swift | 12 ++++ .../Classes/OpenAPIs/Models/Dog.swift | 16 +++++ .../Classes/OpenAPIs/Models/DogAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 11 ++- .../Classes/OpenAPIs/Models/EnumTest.swift | 14 +++- .../Classes/OpenAPIs/Models/File.swift | 12 ++++ .../OpenAPIs/Models/FileSchemaTestClass.swift | 14 ++++ .../Classes/OpenAPIs/Models/FormatTest.swift | 36 ++++++++++ .../OpenAPIs/Models/HasOnlyReadOnly.swift | 14 ++++ .../Classes/OpenAPIs/Models/List.swift | 10 ++- .../Classes/OpenAPIs/Models/MapTest.swift | 13 +++- ...opertiesAndAdditionalPropertiesClass.swift | 16 +++++ .../OpenAPIs/Models/Model200Response.swift | 11 ++- .../Classes/OpenAPIs/Models/Name.swift | 13 +++- .../Classes/OpenAPIs/Models/NumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/Order.swift | 22 ++++++ .../OpenAPIs/Models/OuterComposite.swift | 12 +++- .../Classes/OpenAPIs/Models/Pet.swift | 22 ++++++ .../OpenAPIs/Models/ReadOnlyFirst.swift | 14 ++++ .../Classes/OpenAPIs/Models/Return.swift | 10 ++- .../OpenAPIs/Models/SpecialModelName.swift | 10 ++- .../OpenAPIs/Models/StringBooleanMap.swift | 10 +-- .../Classes/OpenAPIs/Models/Tag.swift | 14 ++++ .../OpenAPIs/Models/TypeHolderDefault.swift | 14 +++- .../OpenAPIs/Models/TypeHolderExample.swift | 14 +++- .../Classes/OpenAPIs/Models/User.swift | 26 +++++++ .../Models/AdditionalPropertiesClass.swift | 11 ++- .../Classes/OpenAPIs/Models/Animal.swift | 11 ++- .../Classes/OpenAPIs/Models/ApiResponse.swift | 16 +++++ .../Models/ArrayOfArrayOfNumberOnly.swift | 10 ++- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/ArrayTest.swift | 12 +++- .../OpenAPIs/Models/Capitalization.swift | 15 +++- .../Classes/OpenAPIs/Models/Cat.swift | 12 +++- .../Classes/OpenAPIs/Models/CatAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/Category.swift | 15 +++- .../Classes/OpenAPIs/Models/ClassModel.swift | 12 ++++ .../Classes/OpenAPIs/Models/Client.swift | 12 ++++ .../Classes/OpenAPIs/Models/Dog.swift | 12 +++- .../Classes/OpenAPIs/Models/DogAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 11 ++- .../Classes/OpenAPIs/Models/EnumTest.swift | 14 +++- .../Classes/OpenAPIs/Models/File.swift | 12 ++++ .../OpenAPIs/Models/FileSchemaTestClass.swift | 14 ++++ .../Classes/OpenAPIs/Models/FormatTest.swift | 36 ++++++++++ .../OpenAPIs/Models/HasOnlyReadOnly.swift | 14 ++++ .../Classes/OpenAPIs/Models/List.swift | 10 ++- .../Classes/OpenAPIs/Models/MapTest.swift | 13 +++- ...opertiesAndAdditionalPropertiesClass.swift | 16 +++++ .../OpenAPIs/Models/Model200Response.swift | 11 ++- .../Classes/OpenAPIs/Models/Name.swift | 13 +++- .../Classes/OpenAPIs/Models/NumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/Order.swift | 15 +++- .../OpenAPIs/Models/OuterComposite.swift | 12 +++- .../Classes/OpenAPIs/Models/Pet.swift | 15 +++- .../OpenAPIs/Models/ReadOnlyFirst.swift | 14 ++++ .../Classes/OpenAPIs/Models/Return.swift | 10 ++- .../OpenAPIs/Models/SpecialModelName.swift | 10 ++- .../OpenAPIs/Models/StringBooleanMap.swift | 10 +-- .../Classes/OpenAPIs/Models/Tag.swift | 11 ++- .../OpenAPIs/Models/TypeHolderDefault.swift | 14 +++- .../OpenAPIs/Models/TypeHolderExample.swift | 14 +++- .../Classes/OpenAPIs/Models/User.swift | 17 ++++- .../Models/AdditionalPropertiesClass.swift | 11 ++- .../Classes/OpenAPIs/Models/Animal.swift | 14 ++++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 16 +++++ .../Models/ArrayOfArrayOfNumberOnly.swift | 10 ++- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/ArrayTest.swift | 12 +++- .../OpenAPIs/Models/Capitalization.swift | 15 +++- .../Classes/OpenAPIs/Models/Cat.swift | 16 +++++ .../Classes/OpenAPIs/Models/CatAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/Category.swift | 18 ++++- .../Classes/OpenAPIs/Models/ClassModel.swift | 12 ++++ .../Classes/OpenAPIs/Models/Client.swift | 12 ++++ .../Classes/OpenAPIs/Models/Dog.swift | 16 +++++ .../Classes/OpenAPIs/Models/DogAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 11 ++- .../Classes/OpenAPIs/Models/EnumTest.swift | 14 +++- .../Classes/OpenAPIs/Models/File.swift | 12 ++++ .../OpenAPIs/Models/FileSchemaTestClass.swift | 14 ++++ .../Classes/OpenAPIs/Models/FormatTest.swift | 36 ++++++++++ .../OpenAPIs/Models/HasOnlyReadOnly.swift | 14 ++++ .../Classes/OpenAPIs/Models/List.swift | 10 ++- .../Classes/OpenAPIs/Models/MapTest.swift | 13 +++- ...opertiesAndAdditionalPropertiesClass.swift | 16 +++++ .../OpenAPIs/Models/Model200Response.swift | 11 ++- .../Classes/OpenAPIs/Models/Name.swift | 13 +++- .../Classes/OpenAPIs/Models/NumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/Order.swift | 22 ++++++ .../OpenAPIs/Models/OuterComposite.swift | 12 +++- .../Classes/OpenAPIs/Models/Pet.swift | 22 ++++++ .../OpenAPIs/Models/ReadOnlyFirst.swift | 14 ++++ .../Classes/OpenAPIs/Models/Return.swift | 10 ++- .../OpenAPIs/Models/SpecialModelName.swift | 10 ++- .../OpenAPIs/Models/StringBooleanMap.swift | 10 +-- .../Classes/OpenAPIs/Models/Tag.swift | 14 ++++ .../OpenAPIs/Models/TypeHolderDefault.swift | 14 +++- .../OpenAPIs/Models/TypeHolderExample.swift | 14 +++- .../Classes/OpenAPIs/Models/User.swift | 26 +++++++ .../Models/AdditionalPropertiesClass.swift | 11 ++- .../Classes/OpenAPIs/Models/Animal.swift | 14 ++++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 16 +++++ .../Models/ArrayOfArrayOfNumberOnly.swift | 10 ++- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/ArrayTest.swift | 12 +++- .../OpenAPIs/Models/Capitalization.swift | 15 +++- .../Classes/OpenAPIs/Models/Cat.swift | 16 +++++ .../Classes/OpenAPIs/Models/CatAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/Category.swift | 18 ++++- .../Classes/OpenAPIs/Models/ClassModel.swift | 12 ++++ .../Classes/OpenAPIs/Models/Client.swift | 12 ++++ .../Classes/OpenAPIs/Models/Dog.swift | 16 +++++ .../Classes/OpenAPIs/Models/DogAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 11 ++- .../Classes/OpenAPIs/Models/EnumTest.swift | 14 +++- .../Classes/OpenAPIs/Models/File.swift | 12 ++++ .../OpenAPIs/Models/FileSchemaTestClass.swift | 14 ++++ .../Classes/OpenAPIs/Models/FormatTest.swift | 36 ++++++++++ .../OpenAPIs/Models/HasOnlyReadOnly.swift | 14 ++++ .../Classes/OpenAPIs/Models/List.swift | 10 ++- .../Classes/OpenAPIs/Models/MapTest.swift | 13 +++- ...opertiesAndAdditionalPropertiesClass.swift | 16 +++++ .../OpenAPIs/Models/Model200Response.swift | 11 ++- .../Classes/OpenAPIs/Models/Name.swift | 13 +++- .../Classes/OpenAPIs/Models/NumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/Order.swift | 22 ++++++ .../OpenAPIs/Models/OuterComposite.swift | 12 +++- .../Classes/OpenAPIs/Models/Pet.swift | 22 ++++++ .../OpenAPIs/Models/ReadOnlyFirst.swift | 14 ++++ .../Classes/OpenAPIs/Models/Return.swift | 10 ++- .../OpenAPIs/Models/SpecialModelName.swift | 10 ++- .../OpenAPIs/Models/StringBooleanMap.swift | 10 +-- .../Classes/OpenAPIs/Models/Tag.swift | 14 ++++ .../OpenAPIs/Models/TypeHolderDefault.swift | 14 +++- .../OpenAPIs/Models/TypeHolderExample.swift | 14 +++- .../Classes/OpenAPIs/Models/User.swift | 26 +++++++ .../Models/AdditionalPropertiesClass.swift | 11 ++- .../Classes/OpenAPIs/Models/Animal.swift | 14 ++++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 16 +++++ .../Models/ArrayOfArrayOfNumberOnly.swift | 10 ++- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/ArrayTest.swift | 12 +++- .../OpenAPIs/Models/Capitalization.swift | 15 +++- .../Classes/OpenAPIs/Models/Cat.swift | 16 +++++ .../Classes/OpenAPIs/Models/CatAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/Category.swift | 18 ++++- .../Classes/OpenAPIs/Models/ClassModel.swift | 12 ++++ .../Classes/OpenAPIs/Models/Client.swift | 12 ++++ .../Classes/OpenAPIs/Models/Dog.swift | 16 +++++ .../Classes/OpenAPIs/Models/DogAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 11 ++- .../Classes/OpenAPIs/Models/EnumTest.swift | 14 +++- .../Classes/OpenAPIs/Models/File.swift | 12 ++++ .../OpenAPIs/Models/FileSchemaTestClass.swift | 14 ++++ .../Classes/OpenAPIs/Models/FormatTest.swift | 36 ++++++++++ .../OpenAPIs/Models/HasOnlyReadOnly.swift | 14 ++++ .../Classes/OpenAPIs/Models/List.swift | 10 ++- .../Classes/OpenAPIs/Models/MapTest.swift | 13 +++- ...opertiesAndAdditionalPropertiesClass.swift | 16 +++++ .../OpenAPIs/Models/Model200Response.swift | 11 ++- .../Classes/OpenAPIs/Models/Name.swift | 13 +++- .../Classes/OpenAPIs/Models/NumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/Order.swift | 22 ++++++ .../OpenAPIs/Models/OuterComposite.swift | 12 +++- .../Classes/OpenAPIs/Models/Pet.swift | 22 ++++++ .../OpenAPIs/Models/ReadOnlyFirst.swift | 14 ++++ .../Classes/OpenAPIs/Models/Return.swift | 10 ++- .../OpenAPIs/Models/SpecialModelName.swift | 10 ++- .../OpenAPIs/Models/StringBooleanMap.swift | 10 +-- .../Classes/OpenAPIs/Models/Tag.swift | 14 ++++ .../OpenAPIs/Models/TypeHolderDefault.swift | 14 +++- .../OpenAPIs/Models/TypeHolderExample.swift | 14 +++- .../Classes/OpenAPIs/Models/User.swift | 26 +++++++ .../Models/AdditionalPropertiesClass.swift | 11 ++- .../Classes/OpenAPIs/Models/Animal.swift | 14 ++++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 16 +++++ .../Models/ArrayOfArrayOfNumberOnly.swift | 10 ++- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/ArrayTest.swift | 12 +++- .../OpenAPIs/Models/Capitalization.swift | 15 +++- .../Classes/OpenAPIs/Models/Cat.swift | 16 +++++ .../Classes/OpenAPIs/Models/CatAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/Category.swift | 18 ++++- .../Classes/OpenAPIs/Models/ClassModel.swift | 10 ++- .../Classes/OpenAPIs/Models/Client.swift | 12 ++++ .../Classes/OpenAPIs/Models/Dog.swift | 16 +++++ .../Classes/OpenAPIs/Models/DogAllOf.swift | 12 ++++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 11 ++- .../Classes/OpenAPIs/Models/EnumTest.swift | 14 +++- .../Classes/OpenAPIs/Models/File.swift | 12 ++++ .../OpenAPIs/Models/FileSchemaTestClass.swift | 14 ++++ .../Classes/OpenAPIs/Models/FormatTest.swift | 36 ++++++++++ .../OpenAPIs/Models/HasOnlyReadOnly.swift | 14 ++++ .../Classes/OpenAPIs/Models/List.swift | 10 ++- .../Classes/OpenAPIs/Models/MapTest.swift | 13 +++- ...opertiesAndAdditionalPropertiesClass.swift | 16 +++++ .../OpenAPIs/Models/Model200Response.swift | 11 ++- .../Classes/OpenAPIs/Models/Name.swift | 13 +++- .../Classes/OpenAPIs/Models/NumberOnly.swift | 10 ++- .../Classes/OpenAPIs/Models/Order.swift | 22 ++++++ .../OpenAPIs/Models/OuterComposite.swift | 12 +++- .../Classes/OpenAPIs/Models/Pet.swift | 22 ++++++ .../OpenAPIs/Models/ReadOnlyFirst.swift | 14 ++++ .../Classes/OpenAPIs/Models/Return.swift | 10 ++- .../OpenAPIs/Models/SpecialModelName.swift | 10 ++- .../OpenAPIs/Models/StringBooleanMap.swift | 10 +-- .../Classes/OpenAPIs/Models/Tag.swift | 14 ++++ .../OpenAPIs/Models/TypeHolderDefault.swift | 14 +++- .../OpenAPIs/Models/TypeHolderExample.swift | 14 +++- .../Classes/OpenAPIs/Models/User.swift | 26 +++++++ .../Models/AdditionalPropertiesClass.swift | 25 ++++++- .../Sources/Models/Animal.swift | 28 +++++++- .../Sources/Models/ApiResponse.swift | 32 ++++++++- .../Models/ArrayOfArrayOfNumberOnly.swift | 22 +++++- .../Sources/Models/ArrayOfNumberOnly.swift | 22 +++++- .../Sources/Models/ArrayTest.swift | 28 +++++++- .../Sources/Models/Capitalization.swift | 37 +++++++++- .../Sources/Models/Cat.swift | 32 ++++++++- .../Sources/Models/CatAllOf.swift | 24 ++++++- .../Sources/Models/Category.swift | 32 ++++++++- .../Sources/Models/Client.swift | 24 ++++++- .../Sources/Models/Dog.swift | 32 ++++++++- .../Sources/Models/DogAllOf.swift | 24 ++++++- .../Sources/Models/EnumArrays.swift | 25 ++++++- .../Sources/Models/EnumTest.swift | 34 ++++++++- .../Sources/Models/File.swift | 24 ++++++- .../Sources/Models/FileSchemaTestClass.swift | 28 +++++++- .../Sources/Models/FormatTest.swift | 72 ++++++++++++++++++- .../Sources/Models/HasOnlyReadOnly.swift | 28 +++++++- .../Sources/Models/List.swift | 22 +++++- .../Sources/Models/MapTest.swift | 31 +++++++- ...opertiesAndAdditionalPropertiesClass.swift | 32 ++++++++- .../Sources/Models/Name.swift | 31 +++++++- .../Sources/Models/NumberOnly.swift | 22 +++++- .../Sources/Models/Order.swift | 44 +++++++++++- .../Sources/Models/OuterComposite.swift | 28 +++++++- .../Sources/Models/Pet.swift | 44 +++++++++++- .../Sources/Models/ReadOnlyFirst.swift | 28 +++++++- .../Sources/Models/SpecialModelName.swift | 22 +++++- .../Sources/Models/StringBooleanMap.swift | 20 ++++-- .../Sources/Models/Tag.swift | 28 +++++++- .../Sources/Models/TypeHolderDefault.swift | 34 ++++++++- .../Sources/Models/TypeHolderExample.swift | 34 ++++++++- .../Sources/Models/User.swift | 52 +++++++++++++- .../Models/AdditionalPropertiesClass.swift | 25 ++++++- .../PetstoreClient/Models/Animal.swift | 28 +++++++- .../PetstoreClient/Models/ApiResponse.swift | 32 ++++++++- .../Models/ArrayOfArrayOfNumberOnly.swift | 22 +++++- .../Models/ArrayOfNumberOnly.swift | 22 +++++- .../PetstoreClient/Models/ArrayTest.swift | 28 +++++++- .../Models/Capitalization.swift | 37 +++++++++- .../Sources/PetstoreClient/Models/Cat.swift | 32 ++++++++- .../PetstoreClient/Models/CatAllOf.swift | 24 ++++++- .../PetstoreClient/Models/Category.swift | 32 ++++++++- .../PetstoreClient/Models/ClassModel.swift | 24 ++++++- .../PetstoreClient/Models/Client.swift | 24 ++++++- .../Sources/PetstoreClient/Models/Dog.swift | 32 ++++++++- .../PetstoreClient/Models/DogAllOf.swift | 24 ++++++- .../PetstoreClient/Models/EnumArrays.swift | 25 ++++++- .../PetstoreClient/Models/EnumTest.swift | 34 ++++++++- .../Sources/PetstoreClient/Models/File.swift | 24 ++++++- .../Models/FileSchemaTestClass.swift | 28 +++++++- .../PetstoreClient/Models/FormatTest.swift | 72 ++++++++++++++++++- .../Models/HasOnlyReadOnly.swift | 28 +++++++- .../Sources/PetstoreClient/Models/List.swift | 22 +++++- .../PetstoreClient/Models/MapTest.swift | 31 +++++++- ...opertiesAndAdditionalPropertiesClass.swift | 32 ++++++++- .../Models/Model200Response.swift | 25 ++++++- .../Sources/PetstoreClient/Models/Name.swift | 31 +++++++- .../PetstoreClient/Models/NumberOnly.swift | 22 +++++- .../Sources/PetstoreClient/Models/Order.swift | 44 +++++++++++- .../Models/OuterComposite.swift | 28 +++++++- .../Sources/PetstoreClient/Models/Pet.swift | 44 +++++++++++- .../PetstoreClient/Models/ReadOnlyFirst.swift | 28 +++++++- .../PetstoreClient/Models/Return.swift | 22 +++++- .../Models/SpecialModelName.swift | 22 +++++- .../Models/StringBooleanMap.swift | 20 ++++-- .../Sources/PetstoreClient/Models/Tag.swift | 28 +++++++- .../Models/TypeHolderDefault.swift | 34 ++++++++- .../Models/TypeHolderExample.swift | 34 ++++++++- .../Sources/PetstoreClient/Models/User.swift | 52 +++++++++++++- 414 files changed, 6684 insertions(+), 342 deletions(-) diff --git a/bin/configs/swift5-urlsessionLibrary.yaml b/bin/configs/swift5-urlsessionLibrary.yaml index 00bc36a58539..b260611e6029 100644 --- a/bin/configs/swift5-urlsessionLibrary.yaml +++ b/bin/configs/swift5-urlsessionLibrary.yaml @@ -10,3 +10,4 @@ additionalProperties: projectName: PetstoreClient podHomepage: https://github.com/openapitools/openapi-generator useSPMFileStructure: true + useClasses: true diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index dc3e27cdecef..9774b434f13d 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -14,7 +14,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |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| |lenientTypeCast|Accept and cast values for simple types (string->bool, string->int, int->string)| |false| -|library|Library template (sub-template) to use|
**urlsession**
[DEFAULT] HTTP client: URLSession
**alamofire**
HTTP client: Alamofire
**vapor**
HTTP client: Vapor
|urlsession| +|library|Library template (sub-template) to use|
**urlsession**
[DEFAULT] HTTP client: URLSession
**alamofire**
HTTP client: Alamofire
|urlsession| |nonPublicApi|Generates code with reduced access modifiers; allows embedding elsewhere without exposing non-public API calls to consumers.(default: false)| |null| |objcCompatible|Add additional properties and methods for Objective-C compatibility (default: false)| |null| |podAuthors|Authors used for Podspec| |null| diff --git a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache index 715fa3dcd093..c119f723a2a3 100644 --- a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache @@ -1,4 +1,4 @@ -{{^objcCompatible}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} struct {{classname}}: Codable, Hashable { +{{^objcCompatible}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#useClasses}}final class{{/useClasses}}{{^useClasses}}struct{{/useClasses}} {{classname}}: Codable, Hashable { {{/objcCompatible}}{{#objcCompatible}}@objc {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} class {{classname}}: NSObject, Codable { {{/objcCompatible}} @@ -36,6 +36,11 @@ {{/allVars}} } {{/hasVars}} + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} enum CodingKeys: {{#hasVars}}String, {{/hasVars}}CodingKey, CaseIterable { + {{#allVars}} + case {{{name}}}{{#vendorExtensions.x-codegen-escaped-property-name}} = "{{{baseName}}}"{{/vendorExtensions.x-codegen-escaped-property-name}} + {{/allVars}} + } {{#additionalPropertiesType}} {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#readonlyProperties}}private(set) {{/readonlyProperties}}var additionalProperties: [String: {{{additionalPropertiesType}}}] = [:] @@ -51,19 +56,22 @@ additionalProperties[key] = newValue } } +{{/additionalPropertiesType}} // Encodable protocol methods {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - + var container = encoder.container(keyedBy: CodingKeys.self) {{#allVars}} - try container.encode{{#required}}{{#isNullable}}IfPresent{{/isNullable}}{{/required}}{{^required}}IfPresent{{/required}}({{{name}}}, forKey: "{{{baseName}}}") + try container.encode{{^required}}IfPresent{{/required}}({{{name}}}, forKey: .{{{name}}}) {{/allVars}} - try container.encodeMap(additionalProperties) + {{#additionalPropertiesType}} + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) + {{/additionalPropertiesType}} } +{{#additionalPropertiesType}} // Decodable protocol methods {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}}{{#objcCompatible}} required{{/objcCompatible}} init(from decoder: Decoder) throws { @@ -79,11 +87,20 @@ additionalProperties = try container.decodeMap({{{additionalPropertiesType}}}.self, excludedKeys: nonAdditionalPropertyKeys) } {{/additionalPropertiesType}} -{{^additionalPropertiesType}}{{#vendorExtensions.x-codegen-has-escaped-property-names}} - {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} enum CodingKeys: String, CodingKey, CaseIterable { + +{{^objcCompatible}}{{#useClasses}} + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func == (lhs: {{classname}}, rhs: {{classname}}) -> Bool { {{#allVars}} - case {{{name}}}{{#vendorExtensions.x-codegen-escaped-property-name}} = "{{{baseName}}}"{{/vendorExtensions.x-codegen-escaped-property-name}} + lhs.{{{name}}} == rhs.{{{name}}}{{^-last}} &&{{/-last}} + {{/allVars}} + {{#additionalPropertiesType}}{{#hasVars}}&& {{/hasVars}}lhs.additionalProperties == rhs.additionalProperties{{/additionalPropertiesType}} + } + + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} func hash(into hasher: inout Hasher) { + {{#allVars}} + hasher.combine({{{name}}}{{^required}}?{{/required}}.hashValue) {{/allVars}} + {{#additionalPropertiesType}}hasher.combine(additionalProperties.hashValue){{/additionalPropertiesType}} } -{{/vendorExtensions.x-codegen-has-escaped-property-names}}{{/additionalPropertiesType}} +{{/useClasses}}{{/objcCompatible}} } \ No newline at end of file diff --git a/modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml b/modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml index 1cb539452dc2..38797a5bf10f 100644 --- a/modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml +++ b/modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml @@ -1096,6 +1096,7 @@ definitions: name: type: string default: default-name + x-nullable: true xml: name: Category User: diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 733b7bc51594..84c1dad9ec12 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -16,10 +16,19 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index e57c8b471765..81111252404e 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -16,5 +16,19 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 630992f6231e..beec80ae582f 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -18,5 +18,21 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 4710793fc9a6..5ed956b92273 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index a41968d9b199..86f71f1534a5 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index f442ea725451..e692ebd28098 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -18,11 +18,21 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 44b50bbe0063..692a3b212f3e 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -25,7 +25,6 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,18 @@ public struct Capitalization: Codable, Hashable { case ATT_NAME } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index c6bf4460da6e..73335b4d3953 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -18,5 +18,21 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index f9484f9bc8fd..c17cf0d20685 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -14,5 +14,17 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 6a19bb02d0df..dfd5504a653c 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -10,11 +10,25 @@ import Foundation public struct Category: Codable, Hashable { public var id: Int64? - public var name: String = "default-name" + public var name: String? = "default-name" - public init(id: Int64? = nil, name: String = "default-name") { + public init(id: Int64? = nil, name: String? = "default-name") { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 5c8e8882831f..9b5340899a5f 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -15,5 +15,17 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { + case _class + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_class, forKey: ._class) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 1464b047c06a..f0e62d05b122 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -14,5 +14,17 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 5aed7834d537..137b9a5254a9 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -18,5 +18,21 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 716776261d30..4f7070a4f63d 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -14,5 +14,17 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index aa13aa59f86a..eb761dca902b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -24,10 +24,19 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 8b62febdc959..45236c792609 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -40,7 +40,6 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,17 @@ public struct EnumTest: Codable, Hashable { case outerEnum } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index aa14d762394d..15dbd0c03fcc 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -16,5 +16,17 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 85987709776e..52b3f620cdae 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -16,5 +16,19 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..232b8c492957 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -38,5 +38,41 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 03d35274a4ee..0097907e9b44 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -16,5 +16,19 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index f8f08e4c6c44..48704fd13823 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -14,9 +14,17 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } - public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index bd4e7b97e81b..96af40355dd1 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -24,7 +24,6 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,16 @@ public struct MapTest: Codable, Hashable { case indirectMap = "indirect_map" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 80c1781a2bfc..1f3a7ca820c5 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -18,5 +18,21 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index d36d4e27352a..f6a5836117e4 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -17,10 +17,19 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(_class, forKey: ._class) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 49cc57544179..57336422c862 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -21,7 +21,6 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -29,4 +28,16 @@ public struct Name: Codable, Hashable { case _123number = "123Number" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 6b024294e288..861a307e19d5 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -14,9 +14,17 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 8ef7cb79e2c8..1d2c31358171 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -30,5 +30,27 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 9865764ff9bb..6935641c3643 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -18,11 +18,21 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } - public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 1bc823d3e960..fa5b125ff13d 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -30,5 +30,27 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 03b5b0dbf02b..2ff56cc1566b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -16,5 +16,19 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 5f539f461843..219b49420a12 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -15,9 +15,17 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } - public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_return, forKey: ._return) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index cb82d2ae3adc..562ba86f6027 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -14,9 +14,17 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 77ab81f5f341..a6903b84ce6f 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -9,6 +9,8 @@ import Foundation public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { + } public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ public struct StringBooleanMap: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,5 @@ public struct StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 8b8e24fc39c0..bda5be349339 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -16,5 +16,19 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index f1920ef37788..e7896203919a 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -22,7 +22,6 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderDefault: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 1a23c1b486b8..2952b6701674 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -22,7 +22,6 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderExample: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f3b4f6bb958a..a1aa36bcfb0c 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -29,5 +29,31 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 733b7bc51594..84c1dad9ec12 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -16,10 +16,19 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index e57c8b471765..81111252404e 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -16,5 +16,19 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 630992f6231e..beec80ae582f 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -18,5 +18,21 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 4710793fc9a6..5ed956b92273 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index a41968d9b199..86f71f1534a5 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index f442ea725451..e692ebd28098 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -18,11 +18,21 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 44b50bbe0063..692a3b212f3e 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -25,7 +25,6 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,18 @@ public struct Capitalization: Codable, Hashable { case ATT_NAME } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index c6bf4460da6e..73335b4d3953 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -18,5 +18,21 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index f9484f9bc8fd..c17cf0d20685 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -14,5 +14,17 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 6a19bb02d0df..dfd5504a653c 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -10,11 +10,25 @@ import Foundation public struct Category: Codable, Hashable { public var id: Int64? - public var name: String = "default-name" + public var name: String? = "default-name" - public init(id: Int64? = nil, name: String = "default-name") { + public init(id: Int64? = nil, name: String? = "default-name") { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 5c8e8882831f..9b5340899a5f 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -15,5 +15,17 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { + case _class + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_class, forKey: ._class) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 1464b047c06a..f0e62d05b122 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -14,5 +14,17 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 5aed7834d537..137b9a5254a9 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -18,5 +18,21 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 716776261d30..4f7070a4f63d 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -14,5 +14,17 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index aa13aa59f86a..eb761dca902b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -24,10 +24,19 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 8b62febdc959..45236c792609 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -40,7 +40,6 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,17 @@ public struct EnumTest: Codable, Hashable { case outerEnum } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index aa14d762394d..15dbd0c03fcc 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -16,5 +16,17 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 85987709776e..52b3f620cdae 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -16,5 +16,19 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..232b8c492957 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -38,5 +38,41 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 03d35274a4ee..0097907e9b44 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -16,5 +16,19 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index f8f08e4c6c44..48704fd13823 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -14,9 +14,17 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } - public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index bd4e7b97e81b..96af40355dd1 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -24,7 +24,6 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,16 @@ public struct MapTest: Codable, Hashable { case indirectMap = "indirect_map" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 80c1781a2bfc..1f3a7ca820c5 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -18,5 +18,21 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index d36d4e27352a..f6a5836117e4 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -17,10 +17,19 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(_class, forKey: ._class) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 49cc57544179..57336422c862 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -21,7 +21,6 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -29,4 +28,16 @@ public struct Name: Codable, Hashable { case _123number = "123Number" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 6b024294e288..861a307e19d5 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -14,9 +14,17 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 8ef7cb79e2c8..1d2c31358171 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -30,5 +30,27 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 9865764ff9bb..6935641c3643 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -18,11 +18,21 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } - public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 1bc823d3e960..fa5b125ff13d 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -30,5 +30,27 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 03b5b0dbf02b..2ff56cc1566b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -16,5 +16,19 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 5f539f461843..219b49420a12 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -15,9 +15,17 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } - public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_return, forKey: ._return) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index cb82d2ae3adc..562ba86f6027 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -14,9 +14,17 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 77ab81f5f341..a6903b84ce6f 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -9,6 +9,8 @@ import Foundation public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { + } public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ public struct StringBooleanMap: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,5 @@ public struct StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 8b8e24fc39c0..bda5be349339 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -16,5 +16,19 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index f1920ef37788..e7896203919a 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -22,7 +22,6 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderDefault: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 1a23c1b486b8..2952b6701674 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -22,7 +22,6 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderExample: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f3b4f6bb958a..a1aa36bcfb0c 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -29,5 +29,31 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 733b7bc51594..84c1dad9ec12 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -16,10 +16,19 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index e57c8b471765..81111252404e 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -16,5 +16,19 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 630992f6231e..beec80ae582f 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -18,5 +18,21 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 4710793fc9a6..5ed956b92273 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index a41968d9b199..86f71f1534a5 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index f442ea725451..e692ebd28098 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -18,11 +18,21 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 44b50bbe0063..692a3b212f3e 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -25,7 +25,6 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,18 @@ public struct Capitalization: Codable, Hashable { case ATT_NAME } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index c6bf4460da6e..73335b4d3953 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -18,5 +18,21 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index f9484f9bc8fd..c17cf0d20685 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -14,5 +14,17 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 6a19bb02d0df..dfd5504a653c 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -10,11 +10,25 @@ import Foundation public struct Category: Codable, Hashable { public var id: Int64? - public var name: String = "default-name" + public var name: String? = "default-name" - public init(id: Int64? = nil, name: String = "default-name") { + public init(id: Int64? = nil, name: String? = "default-name") { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 5c8e8882831f..9b5340899a5f 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -15,5 +15,17 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { + case _class + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_class, forKey: ._class) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 1464b047c06a..f0e62d05b122 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -14,5 +14,17 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 5aed7834d537..137b9a5254a9 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -18,5 +18,21 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 716776261d30..4f7070a4f63d 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -14,5 +14,17 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index aa13aa59f86a..eb761dca902b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -24,10 +24,19 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 8b62febdc959..45236c792609 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -40,7 +40,6 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,17 @@ public struct EnumTest: Codable, Hashable { case outerEnum } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift index aa14d762394d..15dbd0c03fcc 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -16,5 +16,17 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 85987709776e..52b3f620cdae 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -16,5 +16,19 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..232b8c492957 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -38,5 +38,41 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 03d35274a4ee..0097907e9b44 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -16,5 +16,19 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift index f8f08e4c6c44..48704fd13823 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -14,9 +14,17 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } - public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index bd4e7b97e81b..96af40355dd1 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -24,7 +24,6 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,16 @@ public struct MapTest: Codable, Hashable { case indirectMap = "indirect_map" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 80c1781a2bfc..1f3a7ca820c5 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -18,5 +18,21 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index d36d4e27352a..f6a5836117e4 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -17,10 +17,19 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(_class, forKey: ._class) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 49cc57544179..57336422c862 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -21,7 +21,6 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -29,4 +28,16 @@ public struct Name: Codable, Hashable { case _123number = "123Number" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 6b024294e288..861a307e19d5 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -14,9 +14,17 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 8ef7cb79e2c8..1d2c31358171 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -30,5 +30,27 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 9865764ff9bb..6935641c3643 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -18,11 +18,21 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } - public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 1bc823d3e960..fa5b125ff13d 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -30,5 +30,27 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 03b5b0dbf02b..2ff56cc1566b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -16,5 +16,19 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 5f539f461843..219b49420a12 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -15,9 +15,17 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } - public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_return, forKey: ._return) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index cb82d2ae3adc..562ba86f6027 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -14,9 +14,17 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 77ab81f5f341..a6903b84ce6f 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -9,6 +9,8 @@ import Foundation public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { + } public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ public struct StringBooleanMap: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,5 @@ public struct StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 8b8e24fc39c0..bda5be349339 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -16,5 +16,19 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index f1920ef37788..e7896203919a 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -22,7 +22,6 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderDefault: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 1a23c1b486b8..2952b6701674 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -22,7 +22,6 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderExample: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f3b4f6bb958a..a1aa36bcfb0c 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -29,5 +29,31 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index c8058e8db2a4..77798101de28 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -19,5 +19,21 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index bbf2ef73f2cb..7f03d621a43f 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -17,5 +17,19 @@ public struct Category: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 4401234cb337..5a6dadc0efbe 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -32,5 +32,27 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index ab283fe48852..0d6973e81655 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -32,5 +32,27 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index a3a488b13f63..5cb474912560 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -17,5 +17,19 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 566bb545dbf9..c6a5806130d9 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -30,5 +30,31 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 34e7b0fd4e9c..b425caa61542 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -16,10 +16,19 @@ internal struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } - internal enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 80422aa94a31..d3e38b1359f1 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -16,5 +16,19 @@ internal struct Animal: Codable, Hashable { self.className = className self.color = color } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index b117aad7133b..71475818338e 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -18,5 +18,21 @@ internal struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index d5ce23fb27a0..39b6314c5f4f 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ internal struct ArrayOfArrayOfNumberOnly: Codable, Hashable { internal init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - internal enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index fa96400f7a63..f7714be33640 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ internal struct ArrayOfNumberOnly: Codable, Hashable { internal init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - internal enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index c731155e26de..1e6af9eebf3a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -18,11 +18,21 @@ internal struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - internal enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index a55eef8975b4..ffa880de23d5 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -25,7 +25,6 @@ internal struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - internal enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,18 @@ internal struct Capitalization: Codable, Hashable { case ATT_NAME } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 081244637a51..287f42d078e6 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -18,5 +18,21 @@ internal struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index a7fc1f24827a..7ee6ec868404 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -14,5 +14,17 @@ internal struct CatAllOf: Codable, Hashable { internal init(declawed: Bool? = nil) { self.declawed = declawed } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 3b4f6c149fad..9ed7d49d38cc 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -10,11 +10,25 @@ import Foundation internal struct Category: Codable, Hashable { internal var id: Int64? - internal var name: String = "default-name" + internal var name: String? = "default-name" - internal init(id: Int64? = nil, name: String = "default-name") { + internal init(id: Int64? = nil, name: String? = "default-name") { self.id = id self.name = name } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 33b54fdd4e80..30f6f8fb4ddd 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -15,5 +15,17 @@ internal struct ClassModel: Codable, Hashable { internal init(_class: String? = nil) { self._class = _class } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case _class + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_class, forKey: ._class) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index de09406d53cf..fbb17db6d0e1 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -14,5 +14,17 @@ internal struct Client: Codable, Hashable { internal init(client: String? = nil) { self.client = client } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 161bead82270..e43a80c44d10 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -18,5 +18,21 @@ internal struct Dog: Codable, Hashable { self.color = color self.breed = breed } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 5957070689e7..ae19d9bbd635 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -14,5 +14,17 @@ internal struct DogAllOf: Codable, Hashable { internal init(breed: String? = nil) { self.breed = breed } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 8a8f61af5890..ed9630866751 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -24,10 +24,19 @@ internal struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - internal enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 27ed6bce5571..7b76f6acb3ec 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -40,7 +40,6 @@ internal struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } - internal enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,17 @@ internal struct EnumTest: Codable, Hashable { case outerEnum } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift index f0d615b5912b..d0cd292f32d0 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -16,5 +16,17 @@ internal struct File: Codable, Hashable { internal init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index bfa1e9e6c04c..0a3428c9e71a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -16,5 +16,19 @@ internal struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 1f5b70fc6c0a..2e54ec687ff2 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -38,5 +38,41 @@ internal struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 7346dd89f4b9..567aa61a6fc6 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -16,5 +16,19 @@ internal struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 37298aa93a6e..f111d9e2b133 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -14,9 +14,17 @@ internal struct List: Codable, Hashable { internal init(_123list: String? = nil) { self._123list = _123list } - internal enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 959c1b6132fd..2a1d385b7f93 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -24,7 +24,6 @@ internal struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } - internal enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,16 @@ internal struct MapTest: Codable, Hashable { case indirectMap = "indirect_map" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 725d0ff947b1..3f6ba87c48d6 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -18,5 +18,21 @@ internal struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index e0353da8f215..09c3210f9b0b 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -17,10 +17,19 @@ internal struct Model200Response: Codable, Hashable { self.name = name self._class = _class } - internal enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(_class, forKey: ._class) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index af6cb19d7da1..f9b2cc51be30 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -21,7 +21,6 @@ internal struct Name: Codable, Hashable { self.property = property self._123number = _123number } - internal enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -29,4 +28,16 @@ internal struct Name: Codable, Hashable { case _123number = "123Number" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 37c113960383..1b95c7a5705a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -14,9 +14,17 @@ internal struct NumberOnly: Codable, Hashable { internal init(justNumber: Double? = nil) { self.justNumber = justNumber } - internal enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 0c886ae0fc8f..3daabf5885e4 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -30,5 +30,27 @@ internal struct Order: Codable, Hashable { self.status = status self.complete = complete } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index b11cacc9d9b3..8c9e97c320ea 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -18,11 +18,21 @@ internal struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } - internal enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index c388433da77b..379a695e5748 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -30,5 +30,27 @@ internal struct Pet: Codable, Hashable { self.tags = tags self.status = status } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index cc134ec6af64..606a083e188d 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -16,5 +16,19 @@ internal struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 998123e37e24..53ab287d601a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -15,9 +15,17 @@ internal struct Return: Codable, Hashable { internal init(_return: Int? = nil) { self._return = _return } - internal enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_return, forKey: ._return) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index c29097c092b3..7d773a544048 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -14,9 +14,17 @@ internal struct SpecialModelName: Codable, Hashable { internal init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - internal enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 6d5719e4395c..e11b2681cb35 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -9,6 +9,8 @@ import Foundation internal struct StringBooleanMap: Codable, Hashable { + internal enum CodingKeys: CodingKey, CaseIterable { + } internal var additionalProperties: [String: Bool] = [:] internal subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ internal struct StringBooleanMap: Codable, Hashable { // Encodable protocol methods internal func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,5 @@ internal struct StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 8b4501e67aa6..ac2d648e04ec 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -16,5 +16,19 @@ internal struct Tag: Codable, Hashable { self.id = id self.name = name } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 52500e04b432..66c98a5fcdfe 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -22,7 +22,6 @@ internal struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - internal enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ internal struct TypeHolderDefault: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index a1408b0bd1b0..2f91bbc634dd 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -22,7 +22,6 @@ internal struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - internal enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ internal struct TypeHolderExample: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift index afbd9f12349b..b39c749f92aa 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -29,5 +29,31 @@ internal struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + internal enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + internal func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 620f778bcc9a..328276bc7a65 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -16,10 +16,19 @@ import Foundation self.mapString = mapString self.mapMapString = mapMapString } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 528d7f886c0b..6d64cbfd15d4 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -16,10 +16,19 @@ import Foundation self._className = _className self.color = color } - public enum CodingKeys: String, CodingKey, CaseIterable { case _className = "className" case color } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(_className, forKey: ._className) + try container.encodeIfPresent(color, forKey: .color) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 38334c39011c..b0b5971f6eff 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -23,5 +23,21 @@ import Foundation self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 8ef73e96f019..89c695cd14e9 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ import Foundation public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index dd95bb5be0cd..819e1bd2eb1d 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ import Foundation public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 7b93023aa354..a4ce9ef38a12 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -18,11 +18,21 @@ import Foundation self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 2b42d0b45862..0c0e2cb80334 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -25,7 +25,6 @@ import Foundation self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,18 @@ import Foundation case ATT_NAME } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 5542ffa7de75..c49009bc8902 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -23,11 +23,21 @@ import Foundation self.color = color self.declawed = declawed } - public enum CodingKeys: String, CodingKey, CaseIterable { case _className = "className" case color case declawed } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(_className, forKey: ._className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 6a4b10e996c1..5ec8b58e544c 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -19,5 +19,17 @@ import Foundation public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 0e034abbf725..886ce95e2de5 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -15,16 +15,25 @@ import Foundation return _id as NSNumber? } } - public var name: String = "default-name" + public var name: String? = "default-name" - public init(_id: Int64? = nil, name: String = "default-name") { + public init(_id: Int64? = nil, name: String? = "default-name") { self._id = _id self.name = name } - public enum CodingKeys: String, CodingKey, CaseIterable { case _id = "id" case name } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_id, forKey: ._id) + try container.encode(name, forKey: .name) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 648f3a6bfb5a..9adbcf24ad28 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -15,5 +15,17 @@ import Foundation public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { + case _class + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_class, forKey: ._class) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 4c1efdd41407..7956f737fbbc 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -14,5 +14,17 @@ import Foundation public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index be6118ef423f..773ea8ad2838 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -18,11 +18,21 @@ import Foundation self.color = color self.breed = breed } - public enum CodingKeys: String, CodingKey, CaseIterable { case _className = "className" case color case breed } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(_className, forKey: ._className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 41c63007088d..7097a8909761 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -14,5 +14,17 @@ import Foundation public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 6e8c9d0f9abc..8a93813f845d 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -24,10 +24,19 @@ import Foundation self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index dd3e83306c3d..262ff77d5008 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -40,7 +40,6 @@ import Foundation self.enumNumber = enumNumber self.outerEnum = outerEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,17 @@ import Foundation case outerEnum } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 5124dd3b089d..b2e54a8e9f38 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -16,5 +16,17 @@ import Foundation public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index be5963357fdc..a98bdb63d50e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -16,5 +16,19 @@ import Foundation self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 84f419103a41..f94b67e55569 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -63,5 +63,41 @@ import Foundation self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 7ca91927af7e..58809b2b6546 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -16,5 +16,19 @@ import Foundation self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 7a977c19c7c7..15809e01efa6 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -14,9 +14,17 @@ import Foundation public init(_123list: String? = nil) { self._123list = _123list } - public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index ba407e3ea25d..60b999005e4f 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -24,7 +24,6 @@ import Foundation self.directMap = directMap self.indirectMap = indirectMap } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,16 @@ import Foundation case indirectMap = "indirect_map" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index bd503cb36fce..22f4d5b19563 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -18,5 +18,21 @@ import Foundation self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 89c612262d2f..9e3a6ed6487e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -22,10 +22,19 @@ import Foundation self.name = name self._class = _class } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(_class, forKey: ._class) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 15b0507a4785..4a8e8afc854b 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -31,7 +31,6 @@ import Foundation self.property = property self._123number = _123number } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -39,4 +38,16 @@ import Foundation case _123number = "123Number" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 40fa7365d0ac..efb6d07c5411 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -14,9 +14,17 @@ import Foundation public init(justNumber: Double? = nil) { self.justNumber = justNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 728a81434a73..e681ffaf689c 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -50,7 +50,6 @@ import Foundation self.status = status self.complete = complete } - public enum CodingKeys: String, CodingKey, CaseIterable { case _id = "id" case petId @@ -60,4 +59,18 @@ import Foundation case complete } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_id, forKey: ._id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 9238070c2cb1..e899975923ed 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -23,11 +23,21 @@ import Foundation self.myString = myString self.myBoolean = myBoolean } - public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index e17ada14c425..d8b058e41a48 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -35,7 +35,6 @@ import Foundation self.tags = tags self.status = status } - public enum CodingKeys: String, CodingKey, CaseIterable { case _id = "id" case category @@ -45,4 +44,18 @@ import Foundation case status } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_id, forKey: ._id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index c16846f4ac19..996cfa7125d6 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -16,5 +16,19 @@ import Foundation self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index e589a9c20048..15aecfe6ad9b 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -20,9 +20,17 @@ import Foundation public init(_return: Int? = nil) { self._return = _return } - public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_return, forKey: ._return) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 41b2bf459eff..38aa865c4937 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -19,9 +19,17 @@ import Foundation public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index ffe9730a6fe4..c430e0a7d27e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -9,6 +9,8 @@ import Foundation @objc public class StringBooleanMap: NSObject, Codable { + public enum CodingKeys: CodingKey, CaseIterable { + } public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ import Foundation // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,5 @@ import Foundation additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index fc02765d30e2..097c4ec8896d 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -21,10 +21,19 @@ import Foundation self._id = _id self.name = name } - public enum CodingKeys: String, CodingKey, CaseIterable { case _id = "id" case name } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_id, forKey: ._id) + try container.encodeIfPresent(name, forKey: .name) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 5900ded6aad4..3bc091cc0469 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -22,7 +22,6 @@ import Foundation self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ import Foundation case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 40e3a41c34d9..4a95e7383783 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -22,7 +22,6 @@ import Foundation self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ import Foundation case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 5b9831507979..b20a716f73a1 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -39,7 +39,6 @@ import Foundation self.phone = phone self.userStatus = userStatus } - public enum CodingKeys: String, CodingKey, CaseIterable { case _id = "id" case username @@ -51,4 +50,20 @@ import Foundation case userStatus } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_id, forKey: ._id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 733b7bc51594..84c1dad9ec12 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -16,10 +16,19 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index e57c8b471765..81111252404e 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -16,5 +16,19 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 630992f6231e..beec80ae582f 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -18,5 +18,21 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 4710793fc9a6..5ed956b92273 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index a41968d9b199..86f71f1534a5 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index f442ea725451..e692ebd28098 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -18,11 +18,21 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 44b50bbe0063..692a3b212f3e 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -25,7 +25,6 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,18 @@ public struct Capitalization: Codable, Hashable { case ATT_NAME } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index c6bf4460da6e..73335b4d3953 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -18,5 +18,21 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index f9484f9bc8fd..c17cf0d20685 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -14,5 +14,17 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 6a19bb02d0df..dfd5504a653c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -10,11 +10,25 @@ import Foundation public struct Category: Codable, Hashable { public var id: Int64? - public var name: String = "default-name" + public var name: String? = "default-name" - public init(id: Int64? = nil, name: String = "default-name") { + public init(id: Int64? = nil, name: String? = "default-name") { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 5c8e8882831f..9b5340899a5f 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -15,5 +15,17 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { + case _class + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_class, forKey: ._class) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 1464b047c06a..f0e62d05b122 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -14,5 +14,17 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 5aed7834d537..137b9a5254a9 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -18,5 +18,21 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 716776261d30..4f7070a4f63d 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -14,5 +14,17 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index aa13aa59f86a..eb761dca902b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -24,10 +24,19 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 8b62febdc959..45236c792609 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -40,7 +40,6 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,17 @@ public struct EnumTest: Codable, Hashable { case outerEnum } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index aa14d762394d..15dbd0c03fcc 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -16,5 +16,17 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 85987709776e..52b3f620cdae 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -16,5 +16,19 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..232b8c492957 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -38,5 +38,41 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 03d35274a4ee..0097907e9b44 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -16,5 +16,19 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index f8f08e4c6c44..48704fd13823 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -14,9 +14,17 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } - public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index bd4e7b97e81b..96af40355dd1 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -24,7 +24,6 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,16 @@ public struct MapTest: Codable, Hashable { case indirectMap = "indirect_map" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 80c1781a2bfc..1f3a7ca820c5 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -18,5 +18,21 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index d36d4e27352a..f6a5836117e4 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -17,10 +17,19 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(_class, forKey: ._class) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 49cc57544179..57336422c862 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -21,7 +21,6 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -29,4 +28,16 @@ public struct Name: Codable, Hashable { case _123number = "123Number" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 6b024294e288..861a307e19d5 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -14,9 +14,17 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 8ef7cb79e2c8..1d2c31358171 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -30,5 +30,27 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 9865764ff9bb..6935641c3643 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -18,11 +18,21 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } - public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 1bc823d3e960..fa5b125ff13d 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -30,5 +30,27 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 03b5b0dbf02b..2ff56cc1566b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -16,5 +16,19 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 5f539f461843..219b49420a12 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -15,9 +15,17 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } - public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_return, forKey: ._return) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index cb82d2ae3adc..562ba86f6027 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -14,9 +14,17 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 77ab81f5f341..a6903b84ce6f 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -9,6 +9,8 @@ import Foundation public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { + } public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ public struct StringBooleanMap: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,5 @@ public struct StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 8b8e24fc39c0..bda5be349339 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -16,5 +16,19 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index f1920ef37788..e7896203919a 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -22,7 +22,6 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderDefault: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 1a23c1b486b8..2952b6701674 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -22,7 +22,6 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderExample: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f3b4f6bb958a..a1aa36bcfb0c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -29,5 +29,31 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 4c5e1a53bd4b..8367f675bf39 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -16,10 +16,19 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 48229f750cdc..60f6bf71e55c 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -16,5 +16,19 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 93b598e8d6f7..5e675ecb9259 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -18,5 +18,21 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 6225dd84be7a..ec4e5c4c549a 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 698c3adf98cb..1f93674c1fd7 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 578d06178524..4bb7cb9e4fc4 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -18,11 +18,21 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 6b4d8425c4af..be6f54eea710 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -25,7 +25,6 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,18 @@ public struct Capitalization: Codable, Hashable { case ATT_NAME } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 731f11bf6f16..7e7da73d1082 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -18,5 +18,21 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 34cf645193dd..f55fcf0da77d 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -14,5 +14,17 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 4089925077ff..45cacce8d472 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -10,11 +10,25 @@ import Foundation public struct Category: Codable, Hashable { public private(set) var id: Int64? - public private(set) var name: String = "default-name" + public private(set) var name: String? = "default-name" - public init(id: Int64? = nil, name: String = "default-name") { + public init(id: Int64? = nil, name: String? = "default-name") { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index a76f014c0364..fa76c380e3fa 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -15,5 +15,17 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { + case _class + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_class, forKey: ._class) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index f1dd2364bfc2..35b4e19f17a9 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -14,5 +14,17 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index ef91e2a47a5b..d9c600c8e629 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -18,5 +18,21 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 0eab83890406..b1263d421a00 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -14,5 +14,17 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index e3befc6dfe57..cb0593680902 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -24,10 +24,19 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index d9dd6a64b064..f55d8b5d16d0 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -40,7 +40,6 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,17 @@ public struct EnumTest: Codable, Hashable { case outerEnum } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 1fbc65d2db54..d359954b3ea5 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -16,5 +16,17 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index aa4cf089d0f7..de3a5d1453ab 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -16,5 +16,19 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index fce99baa8f02..75ad7d9f6f71 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -38,5 +38,41 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 0b2b2f5887e4..2f8f0d5dc754 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -16,5 +16,19 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 0247967c505f..45862d74d13f 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -14,9 +14,17 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } - public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 15bdb8c852f1..864373dd97e8 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -24,7 +24,6 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,16 @@ public struct MapTest: Codable, Hashable { case indirectMap = "indirect_map" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 1253cecf1b8c..02e9ce327cee 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -18,5 +18,21 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 1c8c0b4b11f1..3b394c313161 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -17,10 +17,19 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(_class, forKey: ._class) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 59fc35b4999f..d3b7e502a736 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -21,7 +21,6 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -29,4 +28,16 @@ public struct Name: Codable, Hashable { case _123number = "123Number" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 71634b248270..9f9b5ec6526b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -14,9 +14,17 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 25ac0c3fabb1..a8101288f754 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -30,5 +30,27 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 36a489ac41a3..b5e93fcc9bf3 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -18,11 +18,21 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } - public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 561d18526968..3b3d0ce7bc24 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -30,5 +30,27 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index ae8af88b8a29..e9d58c1ef0e9 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -16,5 +16,19 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 1bb551dcaef8..80390f52969a 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -15,9 +15,17 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } - public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_return, forKey: ._return) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 78dc5a7db12e..bff078ca5967 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -14,9 +14,17 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 0a6fc2976ee4..37dfe65f8720 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -9,6 +9,8 @@ import Foundation public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { + } public private(set) var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ public struct StringBooleanMap: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,5 @@ public struct StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index c35e07111a00..bf501c049b10 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -16,5 +16,19 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 0ad0e39ab4d8..7557899f5ad6 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -22,7 +22,6 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderDefault: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index a26b555da79e..8a4b7b1404b9 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -22,7 +22,6 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderExample: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 4c33cf58d3b6..f6bea2aee0fb 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -29,5 +29,31 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 733b7bc51594..84c1dad9ec12 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -16,10 +16,19 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index e57c8b471765..81111252404e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -16,5 +16,19 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 630992f6231e..beec80ae582f 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -18,5 +18,21 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 4710793fc9a6..5ed956b92273 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index a41968d9b199..86f71f1534a5 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index f442ea725451..e692ebd28098 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -18,11 +18,21 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 44b50bbe0063..692a3b212f3e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -25,7 +25,6 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,18 @@ public struct Capitalization: Codable, Hashable { case ATT_NAME } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index c6bf4460da6e..73335b4d3953 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -18,5 +18,21 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index f9484f9bc8fd..c17cf0d20685 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -14,5 +14,17 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 6a19bb02d0df..dfd5504a653c 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -10,11 +10,25 @@ import Foundation public struct Category: Codable, Hashable { public var id: Int64? - public var name: String = "default-name" + public var name: String? = "default-name" - public init(id: Int64? = nil, name: String = "default-name") { + public init(id: Int64? = nil, name: String? = "default-name") { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 5c8e8882831f..9b5340899a5f 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -15,5 +15,17 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { + case _class + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_class, forKey: ._class) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 1464b047c06a..f0e62d05b122 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -14,5 +14,17 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 5aed7834d537..137b9a5254a9 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -18,5 +18,21 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 716776261d30..4f7070a4f63d 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -14,5 +14,17 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index aa13aa59f86a..eb761dca902b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -24,10 +24,19 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 8b62febdc959..45236c792609 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -40,7 +40,6 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,17 @@ public struct EnumTest: Codable, Hashable { case outerEnum } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index aa14d762394d..15dbd0c03fcc 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -16,5 +16,17 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 85987709776e..52b3f620cdae 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -16,5 +16,19 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..232b8c492957 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -38,5 +38,41 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 03d35274a4ee..0097907e9b44 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -16,5 +16,19 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index f8f08e4c6c44..48704fd13823 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -14,9 +14,17 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } - public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index bd4e7b97e81b..96af40355dd1 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -24,7 +24,6 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,16 @@ public struct MapTest: Codable, Hashable { case indirectMap = "indirect_map" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 80c1781a2bfc..1f3a7ca820c5 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -18,5 +18,21 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index d36d4e27352a..f6a5836117e4 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -17,10 +17,19 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(_class, forKey: ._class) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 49cc57544179..57336422c862 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -21,7 +21,6 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -29,4 +28,16 @@ public struct Name: Codable, Hashable { case _123number = "123Number" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 6b024294e288..861a307e19d5 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -14,9 +14,17 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 8ef7cb79e2c8..1d2c31358171 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -30,5 +30,27 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 9865764ff9bb..6935641c3643 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -18,11 +18,21 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } - public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 1bc823d3e960..fa5b125ff13d 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -30,5 +30,27 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 03b5b0dbf02b..2ff56cc1566b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -16,5 +16,19 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 5f539f461843..219b49420a12 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -15,9 +15,17 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } - public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_return, forKey: ._return) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index cb82d2ae3adc..562ba86f6027 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -14,9 +14,17 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 77ab81f5f341..a6903b84ce6f 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -9,6 +9,8 @@ import Foundation public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { + } public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ public struct StringBooleanMap: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,5 @@ public struct StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 8b8e24fc39c0..bda5be349339 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -16,5 +16,19 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index f1920ef37788..e7896203919a 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -22,7 +22,6 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderDefault: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 1a23c1b486b8..2952b6701674 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -22,7 +22,6 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderExample: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f3b4f6bb958a..a1aa36bcfb0c 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -29,5 +29,31 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 733b7bc51594..84c1dad9ec12 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -16,10 +16,19 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index e57c8b471765..81111252404e 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -16,5 +16,19 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 630992f6231e..beec80ae582f 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -18,5 +18,21 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 4710793fc9a6..5ed956b92273 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index a41968d9b199..86f71f1534a5 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -14,9 +14,17 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index f442ea725451..e692ebd28098 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -18,11 +18,21 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 44b50bbe0063..692a3b212f3e 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -25,7 +25,6 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,18 @@ public struct Capitalization: Codable, Hashable { case ATT_NAME } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index c6bf4460da6e..73335b4d3953 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -18,5 +18,21 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index f9484f9bc8fd..c17cf0d20685 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -14,5 +14,17 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 6a19bb02d0df..dfd5504a653c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -10,11 +10,25 @@ import Foundation public struct Category: Codable, Hashable { public var id: Int64? - public var name: String = "default-name" + public var name: String? = "default-name" - public init(id: Int64? = nil, name: String = "default-name") { + public init(id: Int64? = nil, name: String? = "default-name") { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index ea377bceb252..e8dbe76c46b6 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -15,9 +15,17 @@ public struct ClassModel: Codable, Hashable { public init(`class`: String? = nil) { self.`class` = `class` } - public enum CodingKeys: String, CodingKey, CaseIterable { case `class` = "_class" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(`class`, forKey: .`class`) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 1464b047c06a..f0e62d05b122 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -14,5 +14,17 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 5aed7834d537..137b9a5254a9 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -18,5 +18,21 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 716776261d30..4f7070a4f63d 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -14,5 +14,17 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index aa13aa59f86a..eb761dca902b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -24,10 +24,19 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 8b62febdc959..45236c792609 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -40,7 +40,6 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,17 @@ public struct EnumTest: Codable, Hashable { case outerEnum } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index aa14d762394d..15dbd0c03fcc 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -16,5 +16,17 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 85987709776e..52b3f620cdae 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -16,5 +16,19 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f09cb471b360..232b8c492957 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -38,5 +38,41 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 03d35274a4ee..0097907e9b44 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -16,5 +16,19 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index f8f08e4c6c44..48704fd13823 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -14,9 +14,17 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } - public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index bd4e7b97e81b..96af40355dd1 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -24,7 +24,6 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,16 @@ public struct MapTest: Codable, Hashable { case indirectMap = "indirect_map" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 80c1781a2bfc..1f3a7ca820c5 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -18,5 +18,21 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 31c1c142e54a..0c9bc3d03fdb 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -17,10 +17,19 @@ public struct Model200Response: Codable, Hashable { self.name = name self.`class` = `class` } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case `class` = "class" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(`class`, forKey: .`class`) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 49cc57544179..57336422c862 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -21,7 +21,6 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -29,4 +28,16 @@ public struct Name: Codable, Hashable { case _123number = "123Number" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 6b024294e288..861a307e19d5 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -14,9 +14,17 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 8ef7cb79e2c8..1d2c31358171 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -30,5 +30,27 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 9865764ff9bb..6935641c3643 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -18,11 +18,21 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } - public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 1bc823d3e960..fa5b125ff13d 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -30,5 +30,27 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 03b5b0dbf02b..2ff56cc1566b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -16,5 +16,19 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 40591ab2fb8c..37e34d010dce 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -15,9 +15,17 @@ public struct Return: Codable, Hashable { public init(`return`: Int? = nil) { self.`return` = `return` } - public enum CodingKeys: String, CodingKey, CaseIterable { case `return` = "return" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(`return`, forKey: .`return`) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index cb82d2ae3adc..562ba86f6027 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -14,9 +14,17 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 77ab81f5f341..a6903b84ce6f 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -9,6 +9,8 @@ import Foundation public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { + } public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ public struct StringBooleanMap: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,5 @@ public struct StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 8b8e24fc39c0..bda5be349339 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -16,5 +16,19 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index f1920ef37788..e7896203919a 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -22,7 +22,6 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderDefault: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 1a23c1b486b8..2952b6701674 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -22,7 +22,6 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,17 @@ public struct TypeHolderExample: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f3b4f6bb958a..a1aa36bcfb0c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -29,5 +29,31 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift index 733b7bc51594..0b63e40afecc 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift @@ -7,7 +7,7 @@ import Foundation -public struct AdditionalPropertiesClass: Codable, Hashable { +public final class AdditionalPropertiesClass: Codable, Hashable { public var mapString: [String: String]? public var mapMapString: [String: [String: String]]? @@ -16,10 +16,31 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + + public static func == (lhs: AdditionalPropertiesClass, rhs: AdditionalPropertiesClass) -> Bool { + lhs.mapString == rhs.mapString && + lhs.mapMapString == rhs.mapMapString + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(mapString?.hashValue) + hasher.combine(mapMapString?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift index e57c8b471765..827350f5f132 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift @@ -7,7 +7,7 @@ import Foundation -public struct Animal: Codable, Hashable { +public final class Animal: Codable, Hashable { public var className: String public var color: String? = "red" @@ -16,5 +16,31 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } + + + + public static func == (lhs: Animal, rhs: Animal) -> Bool { + lhs.className == rhs.className && + lhs.color == rhs.color + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(className.hashValue) + hasher.combine(color?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift index 630992f6231e..a7560b2b05c3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift @@ -7,7 +7,7 @@ import Foundation -public struct ApiResponse: Codable, Hashable { +public final class ApiResponse: Codable, Hashable { public var code: Int? public var type: String? @@ -18,5 +18,35 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + + + public static func == (lhs: ApiResponse, rhs: ApiResponse) -> Bool { + lhs.code == rhs.code && + lhs.type == rhs.type && + lhs.message == rhs.message + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(code?.hashValue) + hasher.combine(type?.hashValue) + hasher.combine(message?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift index 4710793fc9a6..6b567914851f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift @@ -7,16 +7,34 @@ import Foundation -public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { +public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { public var arrayArrayNumber: [[Double]]? public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + + public static func == (lhs: ArrayOfArrayOfNumberOnly, rhs: ArrayOfArrayOfNumberOnly) -> Bool { + lhs.arrayArrayNumber == rhs.arrayArrayNumber + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(arrayArrayNumber?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift index a41968d9b199..5558ef13457f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift @@ -7,16 +7,34 @@ import Foundation -public struct ArrayOfNumberOnly: Codable, Hashable { +public final class ArrayOfNumberOnly: Codable, Hashable { public var arrayNumber: [Double]? public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + + public static func == (lhs: ArrayOfNumberOnly, rhs: ArrayOfNumberOnly) -> Bool { + lhs.arrayNumber == rhs.arrayNumber + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(arrayNumber?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift index f442ea725451..0d5750eec8e0 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift @@ -7,7 +7,7 @@ import Foundation -public struct ArrayTest: Codable, Hashable { +public final class ArrayTest: Codable, Hashable { public var arrayOfString: [String]? public var arrayArrayOfInteger: [[Int64]]? @@ -18,11 +18,35 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + + public static func == (lhs: ArrayTest, rhs: ArrayTest) -> Bool { + lhs.arrayOfString == rhs.arrayOfString && + lhs.arrayArrayOfInteger == rhs.arrayArrayOfInteger && + lhs.arrayArrayOfModel == rhs.arrayArrayOfModel + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(arrayOfString?.hashValue) + hasher.combine(arrayArrayOfInteger?.hashValue) + hasher.combine(arrayArrayOfModel?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift index 44b50bbe0063..03573fea5e30 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift @@ -7,7 +7,7 @@ import Foundation -public struct Capitalization: Codable, Hashable { +public final class Capitalization: Codable, Hashable { public var smallCamel: String? public var capitalCamel: String? @@ -25,7 +25,6 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,38 @@ public struct Capitalization: Codable, Hashable { case ATT_NAME } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + + public static func == (lhs: Capitalization, rhs: Capitalization) -> Bool { + lhs.smallCamel == rhs.smallCamel && + lhs.capitalCamel == rhs.capitalCamel && + lhs.smallSnake == rhs.smallSnake && + lhs.capitalSnake == rhs.capitalSnake && + lhs.sCAETHFlowPoints == rhs.sCAETHFlowPoints && + lhs.ATT_NAME == rhs.ATT_NAME + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(smallCamel?.hashValue) + hasher.combine(capitalCamel?.hashValue) + hasher.combine(smallSnake?.hashValue) + hasher.combine(capitalSnake?.hashValue) + hasher.combine(sCAETHFlowPoints?.hashValue) + hasher.combine(ATT_NAME?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift index c6bf4460da6e..3c79d5f3f484 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift @@ -7,7 +7,7 @@ import Foundation -public struct Cat: Codable, Hashable { +public final class Cat: Codable, Hashable { public var className: String public var color: String? = "red" @@ -18,5 +18,35 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + + + public static func == (lhs: Cat, rhs: Cat) -> Bool { + lhs.className == rhs.className && + lhs.color == rhs.color && + lhs.declawed == rhs.declawed + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(className.hashValue) + hasher.combine(color?.hashValue) + hasher.combine(declawed?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift index f9484f9bc8fd..28204818be72 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift @@ -7,12 +7,34 @@ import Foundation -public struct CatAllOf: Codable, Hashable { +public final class CatAllOf: Codable, Hashable { public var declawed: Bool? public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + + + public static func == (lhs: CatAllOf, rhs: CatAllOf) -> Bool { + lhs.declawed == rhs.declawed + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(declawed?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift index 6a19bb02d0df..1465d8ec5d9b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift @@ -7,14 +7,40 @@ import Foundation -public struct Category: Codable, Hashable { +public final class Category: Codable, Hashable { public var id: Int64? - public var name: String = "default-name" + public var name: String? = "default-name" - public init(id: Int64? = nil, name: String = "default-name") { + public init(id: Int64? = nil, name: String? = "default-name") { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } + + + + public static func == (lhs: Category, rhs: Category) -> Bool { + lhs.id == rhs.id && + lhs.name == rhs.name + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id?.hashValue) + hasher.combine(name.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift index 1464b047c06a..77db41343a9c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift @@ -7,12 +7,34 @@ import Foundation -public struct Client: Codable, Hashable { +public final class Client: Codable, Hashable { public var client: String? public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + + + public static func == (lhs: Client, rhs: Client) -> Bool { + lhs.client == rhs.client + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(client?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift index 5aed7834d537..5d91d3877aaf 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift @@ -7,7 +7,7 @@ import Foundation -public struct Dog: Codable, Hashable { +public final class Dog: Codable, Hashable { public var className: String public var color: String? = "red" @@ -18,5 +18,35 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + + + public static func == (lhs: Dog, rhs: Dog) -> Bool { + lhs.className == rhs.className && + lhs.color == rhs.color && + lhs.breed == rhs.breed + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(className.hashValue) + hasher.combine(color?.hashValue) + hasher.combine(breed?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift index 716776261d30..ab765467b9e3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift @@ -7,12 +7,34 @@ import Foundation -public struct DogAllOf: Codable, Hashable { +public final class DogAllOf: Codable, Hashable { public var breed: String? public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + + + public static func == (lhs: DogAllOf, rhs: DogAllOf) -> Bool { + lhs.breed == rhs.breed + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(breed?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift index aa13aa59f86a..0b16bfde7573 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift @@ -7,7 +7,7 @@ import Foundation -public struct EnumArrays: Codable, Hashable { +public final class EnumArrays: Codable, Hashable { public enum JustSymbol: String, Codable, CaseIterable { case greaterThanOrEqualTo = ">=" @@ -24,10 +24,31 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + + public static func == (lhs: EnumArrays, rhs: EnumArrays) -> Bool { + lhs.justSymbol == rhs.justSymbol && + lhs.arrayEnum == rhs.arrayEnum + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(justSymbol?.hashValue) + hasher.combine(arrayEnum?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift index 8b62febdc959..08ced90f7570 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift @@ -7,7 +7,7 @@ import Foundation -public struct EnumTest: Codable, Hashable { +public final class EnumTest: Codable, Hashable { public enum EnumString: String, Codable, CaseIterable { case upper = "UPPER" @@ -40,7 +40,6 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,35 @@ public struct EnumTest: Codable, Hashable { case outerEnum } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + + public static func == (lhs: EnumTest, rhs: EnumTest) -> Bool { + lhs.enumString == rhs.enumString && + lhs.enumStringRequired == rhs.enumStringRequired && + lhs.enumInteger == rhs.enumInteger && + lhs.enumNumber == rhs.enumNumber && + lhs.outerEnum == rhs.outerEnum + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(enumString?.hashValue) + hasher.combine(enumStringRequired.hashValue) + hasher.combine(enumInteger?.hashValue) + hasher.combine(enumNumber?.hashValue) + hasher.combine(outerEnum?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift index aa14d762394d..ed7fe6a2cacb 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift @@ -8,7 +8,7 @@ import Foundation /** Must be named `File` for test. */ -public struct File: Codable, Hashable { +public final class File: Codable, Hashable { /** Test capitalization */ public var sourceURI: String? @@ -16,5 +16,27 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + + + public static func == (lhs: File, rhs: File) -> Bool { + lhs.sourceURI == rhs.sourceURI + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(sourceURI?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift index 85987709776e..4e78f79df47c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift @@ -7,7 +7,7 @@ import Foundation -public struct FileSchemaTestClass: Codable, Hashable { +public final class FileSchemaTestClass: Codable, Hashable { public var file: File? public var files: [File]? @@ -16,5 +16,31 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + + + public static func == (lhs: FileSchemaTestClass, rhs: FileSchemaTestClass) -> Bool { + lhs.file == rhs.file && + lhs.files == rhs.files + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(file?.hashValue) + hasher.combine(files?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift index f09cb471b360..7b2ac4c53304 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift @@ -7,7 +7,7 @@ import Foundation -public struct FormatTest: Codable, Hashable { +public final class FormatTest: Codable, Hashable { public var integer: Int? public var int32: Int? @@ -38,5 +38,75 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + + + public static func == (lhs: FormatTest, rhs: FormatTest) -> Bool { + lhs.integer == rhs.integer && + lhs.int32 == rhs.int32 && + lhs.int64 == rhs.int64 && + lhs.number == rhs.number && + lhs.float == rhs.float && + lhs.double == rhs.double && + lhs.string == rhs.string && + lhs.byte == rhs.byte && + lhs.binary == rhs.binary && + lhs.date == rhs.date && + lhs.dateTime == rhs.dateTime && + lhs.uuid == rhs.uuid && + lhs.password == rhs.password + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(integer?.hashValue) + hasher.combine(int32?.hashValue) + hasher.combine(int64?.hashValue) + hasher.combine(number.hashValue) + hasher.combine(float?.hashValue) + hasher.combine(double?.hashValue) + hasher.combine(string?.hashValue) + hasher.combine(byte.hashValue) + hasher.combine(binary?.hashValue) + hasher.combine(date.hashValue) + hasher.combine(dateTime?.hashValue) + hasher.combine(uuid?.hashValue) + hasher.combine(password.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift index 03d35274a4ee..61f9d19e68c5 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift @@ -7,7 +7,7 @@ import Foundation -public struct HasOnlyReadOnly: Codable, Hashable { +public final class HasOnlyReadOnly: Codable, Hashable { public var bar: String? public var foo: String? @@ -16,5 +16,31 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + + + public static func == (lhs: HasOnlyReadOnly, rhs: HasOnlyReadOnly) -> Bool { + lhs.bar == rhs.bar && + lhs.foo == rhs.foo + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(bar?.hashValue) + hasher.combine(foo?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift index f8f08e4c6c44..1fb3cdaa0db2 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift @@ -7,16 +7,34 @@ import Foundation -public struct List: Codable, Hashable { +public final class List: Codable, Hashable { public var _123list: String? public init(_123list: String? = nil) { self._123list = _123list } - public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + + public static func == (lhs: List, rhs: List) -> Bool { + lhs._123list == rhs._123list + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(_123list?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift index bd4e7b97e81b..8c0b82b8e7b0 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift @@ -7,7 +7,7 @@ import Foundation -public struct MapTest: Codable, Hashable { +public final class MapTest: Codable, Hashable { public enum MapOfEnumString: String, Codable, CaseIterable { case upper = "UPPER" @@ -24,7 +24,6 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,32 @@ public struct MapTest: Codable, Hashable { case indirectMap = "indirect_map" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + + public static func == (lhs: MapTest, rhs: MapTest) -> Bool { + lhs.mapMapOfString == rhs.mapMapOfString && + lhs.mapOfEnumString == rhs.mapOfEnumString && + lhs.directMap == rhs.directMap && + lhs.indirectMap == rhs.indirectMap + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(mapMapOfString?.hashValue) + hasher.combine(mapOfEnumString?.hashValue) + hasher.combine(directMap?.hashValue) + hasher.combine(indirectMap?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 80c1781a2bfc..bfd55c9b14eb 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -7,7 +7,7 @@ import Foundation -public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { +public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { public var uuid: UUID? public var dateTime: Date? @@ -18,5 +18,35 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + + + public static func == (lhs: MixedPropertiesAndAdditionalPropertiesClass, rhs: MixedPropertiesAndAdditionalPropertiesClass) -> Bool { + lhs.uuid == rhs.uuid && + lhs.dateTime == rhs.dateTime && + lhs.map == rhs.map + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(uuid?.hashValue) + hasher.combine(dateTime?.hashValue) + hasher.combine(map?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift index 49cc57544179..564c2d3ba319 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift @@ -8,7 +8,7 @@ import Foundation /** Model for testing model name same as property name */ -public struct Name: Codable, Hashable { +public final class Name: Codable, Hashable { public var name: Int public var snakeCase: Int? @@ -21,7 +21,6 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -29,4 +28,32 @@ public struct Name: Codable, Hashable { case _123number = "123Number" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + + public static func == (lhs: Name, rhs: Name) -> Bool { + lhs.name == rhs.name && + lhs.snakeCase == rhs.snakeCase && + lhs.property == rhs.property && + lhs._123number == rhs._123number + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(name.hashValue) + hasher.combine(snakeCase?.hashValue) + hasher.combine(property?.hashValue) + hasher.combine(_123number?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift index 6b024294e288..0281c9387566 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift @@ -7,16 +7,34 @@ import Foundation -public struct NumberOnly: Codable, Hashable { +public final class NumberOnly: Codable, Hashable { public var justNumber: Double? public init(justNumber: Double? = nil) { self.justNumber = justNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + + public static func == (lhs: NumberOnly, rhs: NumberOnly) -> Bool { + lhs.justNumber == rhs.justNumber + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(justNumber?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift index 8ef7cb79e2c8..e92045617a9f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift @@ -7,7 +7,7 @@ import Foundation -public struct Order: Codable, Hashable { +public final class Order: Codable, Hashable { public enum Status: String, Codable, CaseIterable { case placed = "placed" @@ -30,5 +30,47 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + + + public static func == (lhs: Order, rhs: Order) -> Bool { + lhs.id == rhs.id && + lhs.petId == rhs.petId && + lhs.quantity == rhs.quantity && + lhs.shipDate == rhs.shipDate && + lhs.status == rhs.status && + lhs.complete == rhs.complete + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id?.hashValue) + hasher.combine(petId?.hashValue) + hasher.combine(quantity?.hashValue) + hasher.combine(shipDate?.hashValue) + hasher.combine(status?.hashValue) + hasher.combine(complete?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift index 9865764ff9bb..7ce51441ed27 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift @@ -7,7 +7,7 @@ import Foundation -public struct OuterComposite: Codable, Hashable { +public final class OuterComposite: Codable, Hashable { public var myNumber: Double? public var myString: String? @@ -18,11 +18,35 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } - public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + + public static func == (lhs: OuterComposite, rhs: OuterComposite) -> Bool { + lhs.myNumber == rhs.myNumber && + lhs.myString == rhs.myString && + lhs.myBoolean == rhs.myBoolean + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(myNumber?.hashValue) + hasher.combine(myString?.hashValue) + hasher.combine(myBoolean?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift index 1bc823d3e960..109d226d62e3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift @@ -7,7 +7,7 @@ import Foundation -public struct Pet: Codable, Hashable { +public final class Pet: Codable, Hashable { public enum Status: String, Codable, CaseIterable { case available = "available" @@ -30,5 +30,47 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + + + public static func == (lhs: Pet, rhs: Pet) -> Bool { + lhs.id == rhs.id && + lhs.category == rhs.category && + lhs.name == rhs.name && + lhs.photoUrls == rhs.photoUrls && + lhs.tags == rhs.tags && + lhs.status == rhs.status + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id?.hashValue) + hasher.combine(category?.hashValue) + hasher.combine(name.hashValue) + hasher.combine(photoUrls.hashValue) + hasher.combine(tags?.hashValue) + hasher.combine(status?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift index 03b5b0dbf02b..6fff2152c024 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift @@ -7,7 +7,7 @@ import Foundation -public struct ReadOnlyFirst: Codable, Hashable { +public final class ReadOnlyFirst: Codable, Hashable { public var bar: String? public var baz: String? @@ -16,5 +16,31 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + + + public static func == (lhs: ReadOnlyFirst, rhs: ReadOnlyFirst) -> Bool { + lhs.bar == rhs.bar && + lhs.baz == rhs.baz + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(bar?.hashValue) + hasher.combine(baz?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift index cb82d2ae3adc..d9ce42fc5c40 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift @@ -7,16 +7,34 @@ import Foundation -public struct SpecialModelName: Codable, Hashable { +public final class SpecialModelName: Codable, Hashable { public var specialPropertyName: Int64? public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + + public static func == (lhs: SpecialModelName, rhs: SpecialModelName) -> Bool { + lhs.specialPropertyName == rhs.specialPropertyName + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(specialPropertyName?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift index 77ab81f5f341..74605e1f6b9c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift @@ -7,8 +7,10 @@ import Foundation -public struct StringBooleanMap: Codable, Hashable { +public final class StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { + } public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ public struct StringBooleanMap: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,13 @@ public struct StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + + public static func == (lhs: StringBooleanMap, rhs: StringBooleanMap) -> Bool { + lhs.additionalProperties == rhs.additionalProperties + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(additionalProperties.hashValue) + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift index 8b8e24fc39c0..46f76ea301aa 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift @@ -7,7 +7,7 @@ import Foundation -public struct Tag: Codable, Hashable { +public final class Tag: Codable, Hashable { public var id: Int64? public var name: String? @@ -16,5 +16,31 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + + + public static func == (lhs: Tag, rhs: Tag) -> Bool { + lhs.id == rhs.id && + lhs.name == rhs.name + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id?.hashValue) + hasher.combine(name?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift index f1920ef37788..83aa5e564195 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift @@ -7,7 +7,7 @@ import Foundation -public struct TypeHolderDefault: Codable, Hashable { +public final class TypeHolderDefault: Codable, Hashable { public var stringItem: String = "what" public var numberItem: Double @@ -22,7 +22,6 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,35 @@ public struct TypeHolderDefault: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + + public static func == (lhs: TypeHolderDefault, rhs: TypeHolderDefault) -> Bool { + lhs.stringItem == rhs.stringItem && + lhs.numberItem == rhs.numberItem && + lhs.integerItem == rhs.integerItem && + lhs.boolItem == rhs.boolItem && + lhs.arrayItem == rhs.arrayItem + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(stringItem.hashValue) + hasher.combine(numberItem.hashValue) + hasher.combine(integerItem.hashValue) + hasher.combine(boolItem.hashValue) + hasher.combine(arrayItem.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift index 1a23c1b486b8..8403f60354dc 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift @@ -7,7 +7,7 @@ import Foundation -public struct TypeHolderExample: Codable, Hashable { +public final class TypeHolderExample: Codable, Hashable { public var stringItem: String public var numberItem: Double @@ -22,7 +22,6 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,35 @@ public struct TypeHolderExample: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + + public static func == (lhs: TypeHolderExample, rhs: TypeHolderExample) -> Bool { + lhs.stringItem == rhs.stringItem && + lhs.numberItem == rhs.numberItem && + lhs.integerItem == rhs.integerItem && + lhs.boolItem == rhs.boolItem && + lhs.arrayItem == rhs.arrayItem + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(stringItem.hashValue) + hasher.combine(numberItem.hashValue) + hasher.combine(integerItem.hashValue) + hasher.combine(boolItem.hashValue) + hasher.combine(arrayItem.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift index f3b4f6bb958a..94e4cb058af3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift @@ -7,7 +7,7 @@ import Foundation -public struct User: Codable, Hashable { +public final class User: Codable, Hashable { public var id: Int64? public var username: String? @@ -29,5 +29,55 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + + + public static func == (lhs: User, rhs: User) -> Bool { + lhs.id == rhs.id && + lhs.username == rhs.username && + lhs.firstName == rhs.firstName && + lhs.lastName == rhs.lastName && + lhs.email == rhs.email && + lhs.password == rhs.password && + lhs.phone == rhs.phone && + lhs.userStatus == rhs.userStatus + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id?.hashValue) + hasher.combine(username?.hashValue) + hasher.combine(firstName?.hashValue) + hasher.combine(lastName?.hashValue) + hasher.combine(email?.hashValue) + hasher.combine(password?.hashValue) + hasher.combine(phone?.hashValue) + hasher.combine(userStatus?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift index 733b7bc51594..0b63e40afecc 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift @@ -7,7 +7,7 @@ import Foundation -public struct AdditionalPropertiesClass: Codable, Hashable { +public final class AdditionalPropertiesClass: Codable, Hashable { public var mapString: [String: String]? public var mapMapString: [String: [String: String]]? @@ -16,10 +16,31 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } + + + + public static func == (lhs: AdditionalPropertiesClass, rhs: AdditionalPropertiesClass) -> Bool { + lhs.mapString == rhs.mapString && + lhs.mapMapString == rhs.mapMapString + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(mapString?.hashValue) + hasher.combine(mapMapString?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift index e57c8b471765..827350f5f132 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift @@ -7,7 +7,7 @@ import Foundation -public struct Animal: Codable, Hashable { +public final class Animal: Codable, Hashable { public var className: String public var color: String? = "red" @@ -16,5 +16,31 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } + + + + public static func == (lhs: Animal, rhs: Animal) -> Bool { + lhs.className == rhs.className && + lhs.color == rhs.color + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(className.hashValue) + hasher.combine(color?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift index 630992f6231e..a7560b2b05c3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift @@ -7,7 +7,7 @@ import Foundation -public struct ApiResponse: Codable, Hashable { +public final class ApiResponse: Codable, Hashable { public var code: Int? public var type: String? @@ -18,5 +18,35 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } + + + + public static func == (lhs: ApiResponse, rhs: ApiResponse) -> Bool { + lhs.code == rhs.code && + lhs.type == rhs.type && + lhs.message == rhs.message + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(code?.hashValue) + hasher.combine(type?.hashValue) + hasher.combine(message?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift index 4710793fc9a6..6b567914851f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift @@ -7,16 +7,34 @@ import Foundation -public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { +public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { public var arrayArrayNumber: [[Double]]? public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } + + + + public static func == (lhs: ArrayOfArrayOfNumberOnly, rhs: ArrayOfArrayOfNumberOnly) -> Bool { + lhs.arrayArrayNumber == rhs.arrayArrayNumber + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(arrayArrayNumber?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift index a41968d9b199..5558ef13457f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift @@ -7,16 +7,34 @@ import Foundation -public struct ArrayOfNumberOnly: Codable, Hashable { +public final class ArrayOfNumberOnly: Codable, Hashable { public var arrayNumber: [Double]? public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } + + + + public static func == (lhs: ArrayOfNumberOnly, rhs: ArrayOfNumberOnly) -> Bool { + lhs.arrayNumber == rhs.arrayNumber + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(arrayNumber?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift index f442ea725451..0d5750eec8e0 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift @@ -7,7 +7,7 @@ import Foundation -public struct ArrayTest: Codable, Hashable { +public final class ArrayTest: Codable, Hashable { public var arrayOfString: [String]? public var arrayArrayOfInteger: [[Int64]]? @@ -18,11 +18,35 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } - public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" case arrayArrayOfModel = "array_array_of_model" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } + + + + public static func == (lhs: ArrayTest, rhs: ArrayTest) -> Bool { + lhs.arrayOfString == rhs.arrayOfString && + lhs.arrayArrayOfInteger == rhs.arrayArrayOfInteger && + lhs.arrayArrayOfModel == rhs.arrayArrayOfModel + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(arrayOfString?.hashValue) + hasher.combine(arrayArrayOfInteger?.hashValue) + hasher.combine(arrayArrayOfModel?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift index 44b50bbe0063..03573fea5e30 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift @@ -7,7 +7,7 @@ import Foundation -public struct Capitalization: Codable, Hashable { +public final class Capitalization: Codable, Hashable { public var smallCamel: String? public var capitalCamel: String? @@ -25,7 +25,6 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } - public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -35,4 +34,38 @@ public struct Capitalization: Codable, Hashable { case ATT_NAME } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } + + + + public static func == (lhs: Capitalization, rhs: Capitalization) -> Bool { + lhs.smallCamel == rhs.smallCamel && + lhs.capitalCamel == rhs.capitalCamel && + lhs.smallSnake == rhs.smallSnake && + lhs.capitalSnake == rhs.capitalSnake && + lhs.sCAETHFlowPoints == rhs.sCAETHFlowPoints && + lhs.ATT_NAME == rhs.ATT_NAME + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(smallCamel?.hashValue) + hasher.combine(capitalCamel?.hashValue) + hasher.combine(smallSnake?.hashValue) + hasher.combine(capitalSnake?.hashValue) + hasher.combine(sCAETHFlowPoints?.hashValue) + hasher.combine(ATT_NAME?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift index c6bf4460da6e..3c79d5f3f484 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift @@ -7,7 +7,7 @@ import Foundation -public struct Cat: Codable, Hashable { +public final class Cat: Codable, Hashable { public var className: String public var color: String? = "red" @@ -18,5 +18,35 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + + + public static func == (lhs: Cat, rhs: Cat) -> Bool { + lhs.className == rhs.className && + lhs.color == rhs.color && + lhs.declawed == rhs.declawed + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(className.hashValue) + hasher.combine(color?.hashValue) + hasher.combine(declawed?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift index f9484f9bc8fd..28204818be72 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift @@ -7,12 +7,34 @@ import Foundation -public struct CatAllOf: Codable, Hashable { +public final class CatAllOf: Codable, Hashable { public var declawed: Bool? public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } + + + + public static func == (lhs: CatAllOf, rhs: CatAllOf) -> Bool { + lhs.declawed == rhs.declawed + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(declawed?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift index 6a19bb02d0df..1465d8ec5d9b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift @@ -7,14 +7,40 @@ import Foundation -public struct Category: Codable, Hashable { +public final class Category: Codable, Hashable { public var id: Int64? - public var name: String = "default-name" + public var name: String? = "default-name" - public init(id: Int64? = nil, name: String = "default-name") { + public init(id: Int64? = nil, name: String? = "default-name") { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } + + + + public static func == (lhs: Category, rhs: Category) -> Bool { + lhs.id == rhs.id && + lhs.name == rhs.name + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id?.hashValue) + hasher.combine(name.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift index 5c8e8882831f..92620d368f70 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift @@ -8,12 +8,34 @@ import Foundation /** Model for testing model with \"_class\" property */ -public struct ClassModel: Codable, Hashable { +public final class ClassModel: Codable, Hashable { public var _class: String? public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { + case _class + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_class, forKey: ._class) + } + + + + public static func == (lhs: ClassModel, rhs: ClassModel) -> Bool { + lhs._class == rhs._class + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(_class?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift index 1464b047c06a..77db41343a9c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift @@ -7,12 +7,34 @@ import Foundation -public struct Client: Codable, Hashable { +public final class Client: Codable, Hashable { public var client: String? public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } + + + + public static func == (lhs: Client, rhs: Client) -> Bool { + lhs.client == rhs.client + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(client?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift index 5aed7834d537..5d91d3877aaf 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift @@ -7,7 +7,7 @@ import Foundation -public struct Dog: Codable, Hashable { +public final class Dog: Codable, Hashable { public var className: String public var color: String? = "red" @@ -18,5 +18,35 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } + + + + public static func == (lhs: Dog, rhs: Dog) -> Bool { + lhs.className == rhs.className && + lhs.color == rhs.color && + lhs.breed == rhs.breed + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(className.hashValue) + hasher.combine(color?.hashValue) + hasher.combine(breed?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift index 716776261d30..ab765467b9e3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift @@ -7,12 +7,34 @@ import Foundation -public struct DogAllOf: Codable, Hashable { +public final class DogAllOf: Codable, Hashable { public var breed: String? public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } + + + + public static func == (lhs: DogAllOf, rhs: DogAllOf) -> Bool { + lhs.breed == rhs.breed + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(breed?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift index aa13aa59f86a..0b16bfde7573 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift @@ -7,7 +7,7 @@ import Foundation -public struct EnumArrays: Codable, Hashable { +public final class EnumArrays: Codable, Hashable { public enum JustSymbol: String, Codable, CaseIterable { case greaterThanOrEqualTo = ">=" @@ -24,10 +24,31 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } + + + + public static func == (lhs: EnumArrays, rhs: EnumArrays) -> Bool { + lhs.justSymbol == rhs.justSymbol && + lhs.arrayEnum == rhs.arrayEnum + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(justSymbol?.hashValue) + hasher.combine(arrayEnum?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift index 8b62febdc959..08ced90f7570 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift @@ -7,7 +7,7 @@ import Foundation -public struct EnumTest: Codable, Hashable { +public final class EnumTest: Codable, Hashable { public enum EnumString: String, Codable, CaseIterable { case upper = "UPPER" @@ -40,7 +40,6 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } - public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -49,4 +48,35 @@ public struct EnumTest: Codable, Hashable { case outerEnum } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } + + + + public static func == (lhs: EnumTest, rhs: EnumTest) -> Bool { + lhs.enumString == rhs.enumString && + lhs.enumStringRequired == rhs.enumStringRequired && + lhs.enumInteger == rhs.enumInteger && + lhs.enumNumber == rhs.enumNumber && + lhs.outerEnum == rhs.outerEnum + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(enumString?.hashValue) + hasher.combine(enumStringRequired.hashValue) + hasher.combine(enumInteger?.hashValue) + hasher.combine(enumNumber?.hashValue) + hasher.combine(outerEnum?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift index aa14d762394d..ed7fe6a2cacb 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift @@ -8,7 +8,7 @@ import Foundation /** Must be named `File` for test. */ -public struct File: Codable, Hashable { +public final class File: Codable, Hashable { /** Test capitalization */ public var sourceURI: String? @@ -16,5 +16,27 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } + + + + public static func == (lhs: File, rhs: File) -> Bool { + lhs.sourceURI == rhs.sourceURI + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(sourceURI?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift index 85987709776e..4e78f79df47c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift @@ -7,7 +7,7 @@ import Foundation -public struct FileSchemaTestClass: Codable, Hashable { +public final class FileSchemaTestClass: Codable, Hashable { public var file: File? public var files: [File]? @@ -16,5 +16,31 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } + + + + public static func == (lhs: FileSchemaTestClass, rhs: FileSchemaTestClass) -> Bool { + lhs.file == rhs.file && + lhs.files == rhs.files + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(file?.hashValue) + hasher.combine(files?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift index f09cb471b360..7b2ac4c53304 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift @@ -7,7 +7,7 @@ import Foundation -public struct FormatTest: Codable, Hashable { +public final class FormatTest: Codable, Hashable { public var integer: Int? public var int32: Int? @@ -38,5 +38,75 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } + + + + public static func == (lhs: FormatTest, rhs: FormatTest) -> Bool { + lhs.integer == rhs.integer && + lhs.int32 == rhs.int32 && + lhs.int64 == rhs.int64 && + lhs.number == rhs.number && + lhs.float == rhs.float && + lhs.double == rhs.double && + lhs.string == rhs.string && + lhs.byte == rhs.byte && + lhs.binary == rhs.binary && + lhs.date == rhs.date && + lhs.dateTime == rhs.dateTime && + lhs.uuid == rhs.uuid && + lhs.password == rhs.password + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(integer?.hashValue) + hasher.combine(int32?.hashValue) + hasher.combine(int64?.hashValue) + hasher.combine(number.hashValue) + hasher.combine(float?.hashValue) + hasher.combine(double?.hashValue) + hasher.combine(string?.hashValue) + hasher.combine(byte.hashValue) + hasher.combine(binary?.hashValue) + hasher.combine(date.hashValue) + hasher.combine(dateTime?.hashValue) + hasher.combine(uuid?.hashValue) + hasher.combine(password.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift index 03d35274a4ee..61f9d19e68c5 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift @@ -7,7 +7,7 @@ import Foundation -public struct HasOnlyReadOnly: Codable, Hashable { +public final class HasOnlyReadOnly: Codable, Hashable { public var bar: String? public var foo: String? @@ -16,5 +16,31 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } + + + + public static func == (lhs: HasOnlyReadOnly, rhs: HasOnlyReadOnly) -> Bool { + lhs.bar == rhs.bar && + lhs.foo == rhs.foo + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(bar?.hashValue) + hasher.combine(foo?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift index f8f08e4c6c44..1fb3cdaa0db2 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift @@ -7,16 +7,34 @@ import Foundation -public struct List: Codable, Hashable { +public final class List: Codable, Hashable { public var _123list: String? public init(_123list: String? = nil) { self._123list = _123list } - public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } + + + + public static func == (lhs: List, rhs: List) -> Bool { + lhs._123list == rhs._123list + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(_123list?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift index bd4e7b97e81b..8c0b82b8e7b0 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift @@ -7,7 +7,7 @@ import Foundation -public struct MapTest: Codable, Hashable { +public final class MapTest: Codable, Hashable { public enum MapOfEnumString: String, Codable, CaseIterable { case upper = "UPPER" @@ -24,7 +24,6 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } - public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -32,4 +31,32 @@ public struct MapTest: Codable, Hashable { case indirectMap = "indirect_map" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } + + + + public static func == (lhs: MapTest, rhs: MapTest) -> Bool { + lhs.mapMapOfString == rhs.mapMapOfString && + lhs.mapOfEnumString == rhs.mapOfEnumString && + lhs.directMap == rhs.directMap && + lhs.indirectMap == rhs.indirectMap + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(mapMapOfString?.hashValue) + hasher.combine(mapOfEnumString?.hashValue) + hasher.combine(directMap?.hashValue) + hasher.combine(indirectMap?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 80c1781a2bfc..bfd55c9b14eb 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -7,7 +7,7 @@ import Foundation -public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { +public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { public var uuid: UUID? public var dateTime: Date? @@ -18,5 +18,35 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } + + + + public static func == (lhs: MixedPropertiesAndAdditionalPropertiesClass, rhs: MixedPropertiesAndAdditionalPropertiesClass) -> Bool { + lhs.uuid == rhs.uuid && + lhs.dateTime == rhs.dateTime && + lhs.map == rhs.map + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(uuid?.hashValue) + hasher.combine(dateTime?.hashValue) + hasher.combine(map?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift index d36d4e27352a..95952d7c5295 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift @@ -8,7 +8,7 @@ import Foundation /** Model for testing model name starting with number */ -public struct Model200Response: Codable, Hashable { +public final class Model200Response: Codable, Hashable { public var name: Int? public var _class: String? @@ -17,10 +17,31 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(_class, forKey: ._class) + } + + + + public static func == (lhs: Model200Response, rhs: Model200Response) -> Bool { + lhs.name == rhs.name && + lhs._class == rhs._class + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(name?.hashValue) + hasher.combine(_class?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift index 49cc57544179..564c2d3ba319 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift @@ -8,7 +8,7 @@ import Foundation /** Model for testing model name same as property name */ -public struct Name: Codable, Hashable { +public final class Name: Codable, Hashable { public var name: Int public var snakeCase: Int? @@ -21,7 +21,6 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } - public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -29,4 +28,32 @@ public struct Name: Codable, Hashable { case _123number = "123Number" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } + + + + public static func == (lhs: Name, rhs: Name) -> Bool { + lhs.name == rhs.name && + lhs.snakeCase == rhs.snakeCase && + lhs.property == rhs.property && + lhs._123number == rhs._123number + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(name.hashValue) + hasher.combine(snakeCase?.hashValue) + hasher.combine(property?.hashValue) + hasher.combine(_123number?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift index 6b024294e288..0281c9387566 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift @@ -7,16 +7,34 @@ import Foundation -public struct NumberOnly: Codable, Hashable { +public final class NumberOnly: Codable, Hashable { public var justNumber: Double? public init(justNumber: Double? = nil) { self.justNumber = justNumber } - public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } + + + + public static func == (lhs: NumberOnly, rhs: NumberOnly) -> Bool { + lhs.justNumber == rhs.justNumber + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(justNumber?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift index 8ef7cb79e2c8..e92045617a9f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift @@ -7,7 +7,7 @@ import Foundation -public struct Order: Codable, Hashable { +public final class Order: Codable, Hashable { public enum Status: String, Codable, CaseIterable { case placed = "placed" @@ -30,5 +30,47 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } + + + + public static func == (lhs: Order, rhs: Order) -> Bool { + lhs.id == rhs.id && + lhs.petId == rhs.petId && + lhs.quantity == rhs.quantity && + lhs.shipDate == rhs.shipDate && + lhs.status == rhs.status && + lhs.complete == rhs.complete + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id?.hashValue) + hasher.combine(petId?.hashValue) + hasher.combine(quantity?.hashValue) + hasher.combine(shipDate?.hashValue) + hasher.combine(status?.hashValue) + hasher.combine(complete?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift index 9865764ff9bb..7ce51441ed27 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift @@ -7,7 +7,7 @@ import Foundation -public struct OuterComposite: Codable, Hashable { +public final class OuterComposite: Codable, Hashable { public var myNumber: Double? public var myString: String? @@ -18,11 +18,35 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } - public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" case myBoolean = "my_boolean" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } + + + + public static func == (lhs: OuterComposite, rhs: OuterComposite) -> Bool { + lhs.myNumber == rhs.myNumber && + lhs.myString == rhs.myString && + lhs.myBoolean == rhs.myBoolean + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(myNumber?.hashValue) + hasher.combine(myString?.hashValue) + hasher.combine(myBoolean?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift index 1bc823d3e960..109d226d62e3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift @@ -7,7 +7,7 @@ import Foundation -public struct Pet: Codable, Hashable { +public final class Pet: Codable, Hashable { public enum Status: String, Codable, CaseIterable { case available = "available" @@ -30,5 +30,47 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } + + + + public static func == (lhs: Pet, rhs: Pet) -> Bool { + lhs.id == rhs.id && + lhs.category == rhs.category && + lhs.name == rhs.name && + lhs.photoUrls == rhs.photoUrls && + lhs.tags == rhs.tags && + lhs.status == rhs.status + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id?.hashValue) + hasher.combine(category?.hashValue) + hasher.combine(name.hashValue) + hasher.combine(photoUrls.hashValue) + hasher.combine(tags?.hashValue) + hasher.combine(status?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift index 03b5b0dbf02b..6fff2152c024 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift @@ -7,7 +7,7 @@ import Foundation -public struct ReadOnlyFirst: Codable, Hashable { +public final class ReadOnlyFirst: Codable, Hashable { public var bar: String? public var baz: String? @@ -16,5 +16,31 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } + + + + public static func == (lhs: ReadOnlyFirst, rhs: ReadOnlyFirst) -> Bool { + lhs.bar == rhs.bar && + lhs.baz == rhs.baz + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(bar?.hashValue) + hasher.combine(baz?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift index 5f539f461843..7083431b5df4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift @@ -8,16 +8,34 @@ import Foundation /** Model for testing reserved words */ -public struct Return: Codable, Hashable { +public final class Return: Codable, Hashable { public var _return: Int? public init(_return: Int? = nil) { self._return = _return } - public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_return, forKey: ._return) + } + + + + public static func == (lhs: Return, rhs: Return) -> Bool { + lhs._return == rhs._return + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(_return?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift index cb82d2ae3adc..d9ce42fc5c40 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift @@ -7,16 +7,34 @@ import Foundation -public struct SpecialModelName: Codable, Hashable { +public final class SpecialModelName: Codable, Hashable { public var specialPropertyName: Int64? public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } - public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } + + + + public static func == (lhs: SpecialModelName, rhs: SpecialModelName) -> Bool { + lhs.specialPropertyName == rhs.specialPropertyName + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(specialPropertyName?.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift index 77ab81f5f341..74605e1f6b9c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift @@ -7,8 +7,10 @@ import Foundation -public struct StringBooleanMap: Codable, Hashable { +public final class StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { + } public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -27,10 +29,9 @@ public struct StringBooleanMap: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -42,4 +43,13 @@ public struct StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + + public static func == (lhs: StringBooleanMap, rhs: StringBooleanMap) -> Bool { + lhs.additionalProperties == rhs.additionalProperties + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(additionalProperties.hashValue) + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift index 8b8e24fc39c0..46f76ea301aa 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift @@ -7,7 +7,7 @@ import Foundation -public struct Tag: Codable, Hashable { +public final class Tag: Codable, Hashable { public var id: Int64? public var name: String? @@ -16,5 +16,31 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } + + + + public static func == (lhs: Tag, rhs: Tag) -> Bool { + lhs.id == rhs.id && + lhs.name == rhs.name + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id?.hashValue) + hasher.combine(name?.hashValue) + + } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift index f1920ef37788..83aa5e564195 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift @@ -7,7 +7,7 @@ import Foundation -public struct TypeHolderDefault: Codable, Hashable { +public final class TypeHolderDefault: Codable, Hashable { public var stringItem: String = "what" public var numberItem: Double @@ -22,7 +22,6 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,35 @@ public struct TypeHolderDefault: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + + public static func == (lhs: TypeHolderDefault, rhs: TypeHolderDefault) -> Bool { + lhs.stringItem == rhs.stringItem && + lhs.numberItem == rhs.numberItem && + lhs.integerItem == rhs.integerItem && + lhs.boolItem == rhs.boolItem && + lhs.arrayItem == rhs.arrayItem + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(stringItem.hashValue) + hasher.combine(numberItem.hashValue) + hasher.combine(integerItem.hashValue) + hasher.combine(boolItem.hashValue) + hasher.combine(arrayItem.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift index 1a23c1b486b8..8403f60354dc 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift @@ -7,7 +7,7 @@ import Foundation -public struct TypeHolderExample: Codable, Hashable { +public final class TypeHolderExample: Codable, Hashable { public var stringItem: String public var numberItem: Double @@ -22,7 +22,6 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } - public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -31,4 +30,35 @@ public struct TypeHolderExample: Codable, Hashable { case arrayItem = "array_item" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } + + + + public static func == (lhs: TypeHolderExample, rhs: TypeHolderExample) -> Bool { + lhs.stringItem == rhs.stringItem && + lhs.numberItem == rhs.numberItem && + lhs.integerItem == rhs.integerItem && + lhs.boolItem == rhs.boolItem && + lhs.arrayItem == rhs.arrayItem + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(stringItem.hashValue) + hasher.combine(numberItem.hashValue) + hasher.combine(integerItem.hashValue) + hasher.combine(boolItem.hashValue) + hasher.combine(arrayItem.hashValue) + + } + } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift index f3b4f6bb958a..94e4cb058af3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift @@ -7,7 +7,7 @@ import Foundation -public struct User: Codable, Hashable { +public final class User: Codable, Hashable { public var id: Int64? public var username: String? @@ -29,5 +29,55 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } + + + + public static func == (lhs: User, rhs: User) -> Bool { + lhs.id == rhs.id && + lhs.username == rhs.username && + lhs.firstName == rhs.firstName && + lhs.lastName == rhs.lastName && + lhs.email == rhs.email && + lhs.password == rhs.password && + lhs.phone == rhs.phone && + lhs.userStatus == rhs.userStatus + + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id?.hashValue) + hasher.combine(username?.hashValue) + hasher.combine(firstName?.hashValue) + hasher.combine(lastName?.hashValue) + hasher.combine(email?.hashValue) + hasher.combine(password?.hashValue) + hasher.combine(phone?.hashValue) + hasher.combine(userStatus?.hashValue) + + } } From 812d563c789aef56249d352343d5dc5eeca0d914 Mon Sep 17 00:00:00 2001 From: Sai Giridhar P Date: Mon, 26 Apr 2021 06:45:49 +0530 Subject: [PATCH 053/186] [Java][Jersey2]: Fixing a package import (#9336) --- .../Java/libraries/jersey2/AbstractOpenApiSchema.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/jersey2/AbstractOpenApiSchema.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/jersey2/AbstractOpenApiSchema.mustache index 6eb87a90b9bc..734ef553e30e 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/jersey2/AbstractOpenApiSchema.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/jersey2/AbstractOpenApiSchema.mustache @@ -1,6 +1,6 @@ {{>licenseInfo}} -package {{invokerPackage}}.model; +package {{modelPackage}}; import {{invokerPackage}}.ApiException; import java.util.Objects; From b9a1c8f016711307b9c718dbbdf60a137372c7af Mon Sep 17 00:00:00 2001 From: Mateusz Hubert Stefaniak Date: Mon, 26 Apr 2021 03:49:21 +0200 Subject: [PATCH 054/186] [Java][Spring] Fix for #8659 - Different in-parameter types generated for api and delegate for files (#9331) --- .../codegen/languages/SpringCodegen.java | 4 ++-- .../Java/libraries/resttemplate/api.mustache | 4 ++-- .../Java/libraries/resttemplate/api_test.mustache | 2 +- .../resources/JavaSpring/homeController.mustache | 2 +- .../codegen/java/JavaClientCodegenTest.java | 12 ++++++------ .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../openapitools/configuration/HomeController.java | 2 +- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../org/openapitools/virtualan/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- 24 files changed, 85 insertions(+), 85 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java index 058acbed956a..4c4f0e19496c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java @@ -336,8 +336,8 @@ public void processOpts() { } additionalProperties.put(UNHANDLED_EXCEPTION_HANDLING, this.isUnhandledException()); - typeMapping.put("file", "org.springframework.core.io.Resource"); - importMapping.put("org.springframework.core.io.Resource", "org.springframework.core.io.Resource"); + typeMapping.put("file", "org.springframework.web.multipart.MultipartFile"); + importMapping.put("org.springframework.web.multipart.MultipartFile", "org.springframework.web.multipart.MultipartFile"); if (useOptional) { writePropertyBack(USE_OPTIONAL, useOptional); diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache index 006e6cf8f931..dce5d6472677 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache @@ -71,7 +71,7 @@ public class {{classname}} { {{#isDeprecated}} @Deprecated {{/isDeprecated}} - public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}}{{operationId}}({{#allParams}}{{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.core.io.Resource{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws RestClientException { + public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}}{{operationId}}({{#allParams}}{{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.web.multipart.MultipartFile{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws RestClientException { {{#returnType}} return {{operationId}}WithHttpInfo({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}).getBody(); {{/returnType}} @@ -99,7 +99,7 @@ public class {{classname}} { {{#isDeprecated}} @Deprecated {{/isDeprecated}} - public ResponseEntity<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {{operationId}}WithHttpInfo({{#allParams}}{{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.core.io.Resource{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws RestClientException { + public ResponseEntity<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {{operationId}}WithHttpInfo({{#allParams}}{{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.web.multipart.MultipartFile{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws RestClientException { Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; {{#allParams}}{{#required}} // verify the required parameter '{{paramName}}' is set diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api_test.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api_test.mustache index 119194543c37..56d89a842d44 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api_test.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api_test.mustache @@ -34,7 +34,7 @@ public class {{classname}}Test { @Test public void {{operationId}}Test() { {{#allParams}} - {{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.core.io.Resource{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}} = null; + {{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.web.multipart.MultipartFile{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}} = null; {{/allParams}} {{#returnType}}{{{returnType}}} response = {{/returnType}}api.{{operationId}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}); diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/homeController.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/homeController.mustache index f909a15b37df..2b244c540bc4 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/homeController.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/homeController.mustache @@ -4,7 +4,7 @@ package {{configPackage}}; import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; -import org.springframework.core.io.Resource; +import org.springframework.web.multipart.MultipartFile; {{/useSpringfox}} import org.springframework.stereotype.Controller; {{^useSpringfox}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index 3ead6f31f9e0..3a7636d631c5 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -1028,18 +1028,18 @@ public void testRestTemplateWithUseAbstractionForFiles() throws IOException { Path defaultApi = Paths.get(output + "/src/main/java/xyz/abcdef/api/MultipartApi.java"); TestUtils.assertFileContains(defaultApi, //multiple files - "multipartArray(java.util.Collection files)", - "multipartArrayWithHttpInfo(java.util.Collection files)", + "multipartArray(java.util.Collection files)", + "multipartArrayWithHttpInfo(java.util.Collection files)", "formParams.addAll(\"files\", files.stream().collect(Collectors.toList()));", //mixed - "multipartMixed(org.springframework.core.io.Resource file, MultipartMixedMarker marker)", - "multipartMixedWithHttpInfo(org.springframework.core.io.Resource file, MultipartMixedMarker marker)", + "multipartMixed(org.springframework.web.multipart.MultipartFile file, MultipartMixedMarker marker)", + "multipartMixedWithHttpInfo(org.springframework.web.multipart.MultipartFile file, MultipartMixedMarker marker)", "formParams.add(\"file\", file);", //single file - "multipartSingle(org.springframework.core.io.Resource file)", - "multipartSingleWithHttpInfo(org.springframework.core.io.Resource file)", + "multipartSingle(org.springframework.web.multipart.MultipartFile file)", + "multipartSingleWithHttpInfo(org.springframework.web.multipart.MultipartFile file)", "formParams.add(\"file\", file);" ); } diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/FormatTest.java index 04e164b1c521..9efca6d654bc 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/model/FormatTest.java index 0962957d79fc..06978db9b9ea 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/model/FormatTest.java @@ -43,7 +43,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -235,7 +235,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -248,11 +248,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/FormatTest.java index 80ea59cef112..2a1722c3190b 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/FormatTest.java @@ -46,7 +46,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -238,7 +238,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -251,11 +251,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java index 60247deff4c6..99f755655a9d 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java @@ -43,7 +43,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -235,7 +235,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -248,11 +248,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java index b1e5bfc21ee5..5e4aeb0ea868 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java @@ -3,7 +3,7 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; -import org.springframework.core.io.Resource; +import org.springframework.web.multipart.MultipartFile; import org.springframework.stereotype.Controller; import org.springframework.util.StreamUtils; import org.springframework.web.bind.annotation.GetMapping; diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/model/FormatTest.java index dedb11fe758b..354373c3d6ce 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/model/FormatTest.java index dedb11fe758b..354373c3d6ce 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/model/FormatTest.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/model/FormatTest.java index d58e787c3684..07241a089c8a 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/model/FormatTest.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/model/FormatTest.java index e894f561fc6e..72f64c2b3704 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.core.io.Resource binary; + private org.springframework.web.multipart.MultipartFile binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.core.io.Resource binary) { + public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.core.io.Resource binary) { @Valid - public org.springframework.core.io.Resource getBinary() { + public org.springframework.web.multipart.MultipartFile getBinary() { return binary; } - public void setBinary(org.springframework.core.io.Resource binary) { + public void setBinary(org.springframework.web.multipart.MultipartFile binary) { this.binary = binary; } From f7c377390347cde669b1c0dddcc0a7ee770ea0ce Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Sun, 25 Apr 2021 21:57:42 -0400 Subject: [PATCH 055/186] Swift5 use json type for any (#9206) * [swift5] Fix additionalProps inner type * [swift5] Add and use AnyCodable type instead of any * [swift5] Use the original petstore w/fake models for testing default * [swift5] Update swift-tools-version to 5.1 * [swift5] Update samples and docs --- bin/configs/swift5-default.yaml | 2 +- .../languages/Swift5ClientCodegen.java | 14 +- .../main/resources/swift5/Cartfile.mustache | 1 + .../main/resources/swift5/Extensions.mustache | 50 +++++- .../resources/swift5/Package.swift.mustache | 5 +- .../main/resources/swift5/Podspec.mustache | 1 + .../main/resources/swift5/XcodeGen.mustache | 1 + .../src/main/resources/swift5/api.mustache | 8 +- .../src/main/resources/swift5/model.mustache | 1 + .../petstore/swift5/alamofireLibrary/Cartfile | 1 + .../swift5/alamofireLibrary/Package.swift | 5 +- .../alamofireLibrary/PetstoreClient.podspec | 1 + .../OpenAPIs/APIs/AnotherFakeAPI.swift | 4 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 54 +++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 40 ++--- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 16 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 34 ++-- .../Classes/OpenAPIs/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesClass.swift | 1 + .../Classes/OpenAPIs/Models/Animal.swift | 1 + .../Classes/OpenAPIs/Models/AnimalFarm.swift | 1 + .../Classes/OpenAPIs/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/ArrayTest.swift | 1 + .../OpenAPIs/Models/Capitalization.swift | 1 + .../Classes/OpenAPIs/Models/Cat.swift | 1 + .../Classes/OpenAPIs/Models/CatAllOf.swift | 1 + .../Classes/OpenAPIs/Models/Category.swift | 1 + .../Classes/OpenAPIs/Models/ClassModel.swift | 1 + .../Classes/OpenAPIs/Models/Client.swift | 1 + .../Classes/OpenAPIs/Models/Dog.swift | 1 + .../Classes/OpenAPIs/Models/DogAllOf.swift | 1 + .../Classes/OpenAPIs/Models/EnumArrays.swift | 1 + .../Classes/OpenAPIs/Models/EnumClass.swift | 1 + .../Classes/OpenAPIs/Models/EnumTest.swift | 1 + .../Classes/OpenAPIs/Models/File.swift | 1 + .../OpenAPIs/Models/FileSchemaTestClass.swift | 1 + .../Classes/OpenAPIs/Models/FormatTest.swift | 1 + .../OpenAPIs/Models/HasOnlyReadOnly.swift | 1 + .../Classes/OpenAPIs/Models/List.swift | 1 + .../Classes/OpenAPIs/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../OpenAPIs/Models/Model200Response.swift | 1 + .../Classes/OpenAPIs/Models/Name.swift | 1 + .../Classes/OpenAPIs/Models/NumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/Order.swift | 1 + .../OpenAPIs/Models/OuterComposite.swift | 1 + .../Classes/OpenAPIs/Models/OuterEnum.swift | 1 + .../Classes/OpenAPIs/Models/Pet.swift | 1 + .../OpenAPIs/Models/ReadOnlyFirst.swift | 1 + .../Classes/OpenAPIs/Models/Return.swift | 1 + .../OpenAPIs/Models/SpecialModelName.swift | 1 + .../OpenAPIs/Models/StringBooleanMap.swift | 1 + .../Classes/OpenAPIs/Models/Tag.swift | 1 + .../OpenAPIs/Models/TypeHolderDefault.swift | 1 + .../OpenAPIs/Models/TypeHolderExample.swift | 1 + .../Classes/OpenAPIs/Models/User.swift | 1 + .../swift5/alamofireLibrary/project.yml | 1 + .../petstore/swift5/combineLibrary/Cartfile | 1 + .../swift5/combineLibrary/Package.swift | 5 +- .../combineLibrary/PetstoreClient.podspec | 1 + .../OpenAPIs/APIs/AnotherFakeAPI.swift | 4 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 54 +++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 40 ++--- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 16 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 34 ++-- .../Classes/OpenAPIs/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesClass.swift | 1 + .../Classes/OpenAPIs/Models/Animal.swift | 1 + .../Classes/OpenAPIs/Models/AnimalFarm.swift | 1 + .../Classes/OpenAPIs/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/ArrayTest.swift | 1 + .../OpenAPIs/Models/Capitalization.swift | 1 + .../Classes/OpenAPIs/Models/Cat.swift | 1 + .../Classes/OpenAPIs/Models/CatAllOf.swift | 1 + .../Classes/OpenAPIs/Models/Category.swift | 1 + .../Classes/OpenAPIs/Models/ClassModel.swift | 1 + .../Classes/OpenAPIs/Models/Client.swift | 1 + .../Classes/OpenAPIs/Models/Dog.swift | 1 + .../Classes/OpenAPIs/Models/DogAllOf.swift | 1 + .../Classes/OpenAPIs/Models/EnumArrays.swift | 1 + .../Classes/OpenAPIs/Models/EnumClass.swift | 1 + .../Classes/OpenAPIs/Models/EnumTest.swift | 1 + .../Classes/OpenAPIs/Models/File.swift | 1 + .../OpenAPIs/Models/FileSchemaTestClass.swift | 1 + .../Classes/OpenAPIs/Models/FormatTest.swift | 1 + .../OpenAPIs/Models/HasOnlyReadOnly.swift | 1 + .../Classes/OpenAPIs/Models/List.swift | 1 + .../Classes/OpenAPIs/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../OpenAPIs/Models/Model200Response.swift | 1 + .../Classes/OpenAPIs/Models/Name.swift | 1 + .../Classes/OpenAPIs/Models/NumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/Order.swift | 1 + .../OpenAPIs/Models/OuterComposite.swift | 1 + .../Classes/OpenAPIs/Models/OuterEnum.swift | 1 + .../Classes/OpenAPIs/Models/Pet.swift | 1 + .../OpenAPIs/Models/ReadOnlyFirst.swift | 1 + .../Classes/OpenAPIs/Models/Return.swift | 1 + .../OpenAPIs/Models/SpecialModelName.swift | 1 + .../OpenAPIs/Models/StringBooleanMap.swift | 1 + .../Classes/OpenAPIs/Models/Tag.swift | 1 + .../OpenAPIs/Models/TypeHolderDefault.swift | 1 + .../OpenAPIs/Models/TypeHolderExample.swift | 1 + .../Classes/OpenAPIs/Models/User.swift | 1 + .../swift5/combineLibrary/project.yml | 1 + .../swift5/default/.openapi-generator/FILES | 20 +++ .../client/petstore/swift5/default/Cartfile | 1 + .../petstore/swift5/default/Package.resolved | 16 ++ .../petstore/swift5/default/Package.swift | 5 +- .../swift5/default/PetstoreClient.podspec | 1 + .../OpenAPIs/APIs/AnotherFakeAPI.swift | 4 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 153 ++++++++++++++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 48 +++--- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 16 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 34 ++-- .../Classes/OpenAPIs/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesAnyType.swift | 54 +++++++ .../Models/AdditionalPropertiesArray.swift | 54 +++++++ .../Models/AdditionalPropertiesBoolean.swift | 54 +++++++ .../Models/AdditionalPropertiesClass.swift | 30 +++- .../Models/AdditionalPropertiesInteger.swift | 54 +++++++ .../Models/AdditionalPropertiesNumber.swift | 54 +++++++ .../Models/AdditionalPropertiesObject.swift | 54 +++++++ .../Models/AdditionalPropertiesString.swift | 54 +++++++ .../Classes/OpenAPIs/Models/Animal.swift | 1 + .../Classes/OpenAPIs/Models/AnimalFarm.swift | 1 + .../Classes/OpenAPIs/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/ArrayTest.swift | 1 + .../Classes/OpenAPIs/Models/BigCat.swift | 25 +++ .../Classes/OpenAPIs/Models/BigCatAllOf.swift | 25 +++ .../OpenAPIs/Models/Capitalization.swift | 1 + .../Classes/OpenAPIs/Models/Cat.swift | 1 + .../Classes/OpenAPIs/Models/CatAllOf.swift | 1 + .../Classes/OpenAPIs/Models/Category.swift | 1 + .../Classes/OpenAPIs/Models/ClassModel.swift | 1 + .../Classes/OpenAPIs/Models/Client.swift | 1 + .../Classes/OpenAPIs/Models/Dog.swift | 1 + .../Classes/OpenAPIs/Models/DogAllOf.swift | 1 + .../Classes/OpenAPIs/Models/EnumArrays.swift | 1 + .../Classes/OpenAPIs/Models/EnumClass.swift | 1 + .../Classes/OpenAPIs/Models/EnumTest.swift | 1 + .../Classes/OpenAPIs/Models/File.swift | 1 + .../OpenAPIs/Models/FileSchemaTestClass.swift | 1 + .../Classes/OpenAPIs/Models/FormatTest.swift | 22 ++- .../OpenAPIs/Models/HasOnlyReadOnly.swift | 1 + .../Classes/OpenAPIs/Models/List.swift | 1 + .../Classes/OpenAPIs/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../OpenAPIs/Models/Model200Response.swift | 1 + .../Classes/OpenAPIs/Models/Name.swift | 1 + .../Classes/OpenAPIs/Models/NumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/Order.swift | 1 + .../OpenAPIs/Models/OuterComposite.swift | 1 + .../Classes/OpenAPIs/Models/OuterEnum.swift | 1 + .../Classes/OpenAPIs/Models/Pet.swift | 5 +- .../OpenAPIs/Models/ReadOnlyFirst.swift | 1 + .../Classes/OpenAPIs/Models/Return.swift | 1 + .../OpenAPIs/Models/SpecialModelName.swift | 1 + .../OpenAPIs/Models/StringBooleanMap.swift | 1 + .../Classes/OpenAPIs/Models/Tag.swift | 1 + .../OpenAPIs/Models/TypeHolderDefault.swift | 1 + .../OpenAPIs/Models/TypeHolderExample.swift | 6 +- .../Classes/OpenAPIs/Models/User.swift | 1 + .../Classes/OpenAPIs/Models/XmlItem.swift | 107 ++++++++++++ .../client/petstore/swift5/default/README.md | 12 ++ .../docs/AdditionalPropertiesAnyType.md | 10 ++ .../default/docs/AdditionalPropertiesArray.md | 10 ++ .../docs/AdditionalPropertiesBoolean.md | 10 ++ .../default/docs/AdditionalPropertiesClass.md | 9 ++ .../docs/AdditionalPropertiesInteger.md | 10 ++ .../docs/AdditionalPropertiesNumber.md | 10 ++ .../docs/AdditionalPropertiesObject.md | 10 ++ .../docs/AdditionalPropertiesString.md | 10 ++ .../petstore/swift5/default/docs/BigCat.md | 10 ++ .../swift5/default/docs/BigCatAllOf.md | 10 ++ .../petstore/swift5/default/docs/FakeAPI.md | 109 +++++++++++++ .../swift5/default/docs/FormatTest.md | 1 + .../petstore/swift5/default/docs/Pet.md | 2 +- .../petstore/swift5/default/docs/PetAPI.md | 8 +- .../swift5/default/docs/TypeHolderExample.md | 1 + .../petstore/swift5/default/docs/XmlItem.md | 38 +++++ .../petstore/swift5/default/project.yml | 1 + .../petstore/swift5/deprecated/Cartfile | 1 + .../petstore/swift5/deprecated/Package.swift | 5 +- .../swift5/deprecated/PetstoreClient.podspec | 1 + .../Classes/OpenAPIs/APIs/PetAPI.swift | 36 ++--- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 16 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 34 ++-- .../Classes/OpenAPIs/Extensions.swift | 48 ++++++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 1 + .../Classes/OpenAPIs/Models/Category.swift | 1 + .../Classes/OpenAPIs/Models/Order.swift | 1 + .../Classes/OpenAPIs/Models/Pet.swift | 1 + .../Classes/OpenAPIs/Models/Tag.swift | 1 + .../Classes/OpenAPIs/Models/User.swift | 1 + .../petstore/swift5/deprecated/project.yml | 1 + .../petstore/swift5/nonPublicApi/Cartfile | 1 + .../swift5/nonPublicApi/Package.swift | 5 +- .../nonPublicApi/PetstoreClient.podspec | 1 + .../OpenAPIs/APIs/AnotherFakeAPI.swift | 4 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 54 +++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 40 ++--- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 16 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 34 ++-- .../Classes/OpenAPIs/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesClass.swift | 1 + .../Classes/OpenAPIs/Models/Animal.swift | 1 + .../Classes/OpenAPIs/Models/AnimalFarm.swift | 1 + .../Classes/OpenAPIs/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/ArrayTest.swift | 1 + .../OpenAPIs/Models/Capitalization.swift | 1 + .../Classes/OpenAPIs/Models/Cat.swift | 1 + .../Classes/OpenAPIs/Models/CatAllOf.swift | 1 + .../Classes/OpenAPIs/Models/Category.swift | 1 + .../Classes/OpenAPIs/Models/ClassModel.swift | 1 + .../Classes/OpenAPIs/Models/Client.swift | 1 + .../Classes/OpenAPIs/Models/Dog.swift | 1 + .../Classes/OpenAPIs/Models/DogAllOf.swift | 1 + .../Classes/OpenAPIs/Models/EnumArrays.swift | 1 + .../Classes/OpenAPIs/Models/EnumClass.swift | 1 + .../Classes/OpenAPIs/Models/EnumTest.swift | 1 + .../Classes/OpenAPIs/Models/File.swift | 1 + .../OpenAPIs/Models/FileSchemaTestClass.swift | 1 + .../Classes/OpenAPIs/Models/FormatTest.swift | 1 + .../OpenAPIs/Models/HasOnlyReadOnly.swift | 1 + .../Classes/OpenAPIs/Models/List.swift | 1 + .../Classes/OpenAPIs/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../OpenAPIs/Models/Model200Response.swift | 1 + .../Classes/OpenAPIs/Models/Name.swift | 1 + .../Classes/OpenAPIs/Models/NumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/Order.swift | 1 + .../OpenAPIs/Models/OuterComposite.swift | 1 + .../Classes/OpenAPIs/Models/OuterEnum.swift | 1 + .../Classes/OpenAPIs/Models/Pet.swift | 1 + .../OpenAPIs/Models/ReadOnlyFirst.swift | 1 + .../Classes/OpenAPIs/Models/Return.swift | 1 + .../OpenAPIs/Models/SpecialModelName.swift | 1 + .../OpenAPIs/Models/StringBooleanMap.swift | 1 + .../Classes/OpenAPIs/Models/Tag.swift | 1 + .../OpenAPIs/Models/TypeHolderDefault.swift | 1 + .../OpenAPIs/Models/TypeHolderExample.swift | 1 + .../Classes/OpenAPIs/Models/User.swift | 1 + .../petstore/swift5/nonPublicApi/project.yml | 1 + .../petstore/swift5/objcCompatible/Cartfile | 1 + .../swift5/objcCompatible/Package.swift | 5 +- .../objcCompatible/PetstoreClient.podspec | 1 + .../OpenAPIs/APIs/AnotherFakeAPI.swift | 4 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 54 +++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 40 ++--- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 16 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 34 ++-- .../Classes/OpenAPIs/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesClass.swift | 1 + .../Classes/OpenAPIs/Models/Animal.swift | 1 + .../Classes/OpenAPIs/Models/AnimalFarm.swift | 1 + .../Classes/OpenAPIs/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/ArrayTest.swift | 1 + .../OpenAPIs/Models/Capitalization.swift | 1 + .../Classes/OpenAPIs/Models/Cat.swift | 1 + .../Classes/OpenAPIs/Models/CatAllOf.swift | 1 + .../Classes/OpenAPIs/Models/Category.swift | 1 + .../Classes/OpenAPIs/Models/ClassModel.swift | 1 + .../Classes/OpenAPIs/Models/Client.swift | 1 + .../Classes/OpenAPIs/Models/Dog.swift | 1 + .../Classes/OpenAPIs/Models/DogAllOf.swift | 1 + .../Classes/OpenAPIs/Models/EnumArrays.swift | 1 + .../Classes/OpenAPIs/Models/EnumClass.swift | 1 + .../Classes/OpenAPIs/Models/EnumTest.swift | 1 + .../Classes/OpenAPIs/Models/File.swift | 1 + .../OpenAPIs/Models/FileSchemaTestClass.swift | 1 + .../Classes/OpenAPIs/Models/FormatTest.swift | 1 + .../OpenAPIs/Models/HasOnlyReadOnly.swift | 1 + .../Classes/OpenAPIs/Models/List.swift | 1 + .../Classes/OpenAPIs/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../OpenAPIs/Models/Model200Response.swift | 1 + .../Classes/OpenAPIs/Models/Name.swift | 1 + .../Classes/OpenAPIs/Models/NumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/Order.swift | 1 + .../OpenAPIs/Models/OuterComposite.swift | 1 + .../Classes/OpenAPIs/Models/OuterEnum.swift | 1 + .../Classes/OpenAPIs/Models/Pet.swift | 1 + .../OpenAPIs/Models/ReadOnlyFirst.swift | 1 + .../Classes/OpenAPIs/Models/Return.swift | 1 + .../OpenAPIs/Models/SpecialModelName.swift | 1 + .../OpenAPIs/Models/StringBooleanMap.swift | 1 + .../Classes/OpenAPIs/Models/Tag.swift | 1 + .../OpenAPIs/Models/TypeHolderDefault.swift | 1 + .../OpenAPIs/Models/TypeHolderExample.swift | 1 + .../Classes/OpenAPIs/Models/User.swift | 1 + .../swift5/objcCompatible/project.yml | 1 + .../swift5/promisekitLibrary/Cartfile | 1 + .../swift5/promisekitLibrary/Package.swift | 5 +- .../promisekitLibrary/PetstoreClient.podspec | 1 + .../OpenAPIs/APIs/AnotherFakeAPI.swift | 4 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 54 +++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 40 ++--- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 16 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 34 ++-- .../Classes/OpenAPIs/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesClass.swift | 1 + .../Classes/OpenAPIs/Models/Animal.swift | 1 + .../Classes/OpenAPIs/Models/AnimalFarm.swift | 1 + .../Classes/OpenAPIs/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/ArrayTest.swift | 1 + .../OpenAPIs/Models/Capitalization.swift | 1 + .../Classes/OpenAPIs/Models/Cat.swift | 1 + .../Classes/OpenAPIs/Models/CatAllOf.swift | 1 + .../Classes/OpenAPIs/Models/Category.swift | 1 + .../Classes/OpenAPIs/Models/ClassModel.swift | 1 + .../Classes/OpenAPIs/Models/Client.swift | 1 + .../Classes/OpenAPIs/Models/Dog.swift | 1 + .../Classes/OpenAPIs/Models/DogAllOf.swift | 1 + .../Classes/OpenAPIs/Models/EnumArrays.swift | 1 + .../Classes/OpenAPIs/Models/EnumClass.swift | 1 + .../Classes/OpenAPIs/Models/EnumTest.swift | 1 + .../Classes/OpenAPIs/Models/File.swift | 1 + .../OpenAPIs/Models/FileSchemaTestClass.swift | 1 + .../Classes/OpenAPIs/Models/FormatTest.swift | 1 + .../OpenAPIs/Models/HasOnlyReadOnly.swift | 1 + .../Classes/OpenAPIs/Models/List.swift | 1 + .../Classes/OpenAPIs/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../OpenAPIs/Models/Model200Response.swift | 1 + .../Classes/OpenAPIs/Models/Name.swift | 1 + .../Classes/OpenAPIs/Models/NumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/Order.swift | 1 + .../OpenAPIs/Models/OuterComposite.swift | 1 + .../Classes/OpenAPIs/Models/OuterEnum.swift | 1 + .../Classes/OpenAPIs/Models/Pet.swift | 1 + .../OpenAPIs/Models/ReadOnlyFirst.swift | 1 + .../Classes/OpenAPIs/Models/Return.swift | 1 + .../OpenAPIs/Models/SpecialModelName.swift | 1 + .../OpenAPIs/Models/StringBooleanMap.swift | 1 + .../Classes/OpenAPIs/Models/Tag.swift | 1 + .../OpenAPIs/Models/TypeHolderDefault.swift | 1 + .../OpenAPIs/Models/TypeHolderExample.swift | 1 + .../Classes/OpenAPIs/Models/User.swift | 1 + .../swift5/promisekitLibrary/project.yml | 1 + .../swift5/readonlyProperties/Cartfile | 1 + .../swift5/readonlyProperties/Package.swift | 5 +- .../readonlyProperties/PetstoreClient.podspec | 1 + .../OpenAPIs/APIs/AnotherFakeAPI.swift | 4 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 54 +++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 40 ++--- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 16 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 34 ++-- .../Classes/OpenAPIs/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesClass.swift | 1 + .../Classes/OpenAPIs/Models/Animal.swift | 1 + .../Classes/OpenAPIs/Models/AnimalFarm.swift | 1 + .../Classes/OpenAPIs/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/ArrayTest.swift | 1 + .../OpenAPIs/Models/Capitalization.swift | 1 + .../Classes/OpenAPIs/Models/Cat.swift | 1 + .../Classes/OpenAPIs/Models/CatAllOf.swift | 1 + .../Classes/OpenAPIs/Models/Category.swift | 1 + .../Classes/OpenAPIs/Models/ClassModel.swift | 1 + .../Classes/OpenAPIs/Models/Client.swift | 1 + .../Classes/OpenAPIs/Models/Dog.swift | 1 + .../Classes/OpenAPIs/Models/DogAllOf.swift | 1 + .../Classes/OpenAPIs/Models/EnumArrays.swift | 1 + .../Classes/OpenAPIs/Models/EnumClass.swift | 1 + .../Classes/OpenAPIs/Models/EnumTest.swift | 1 + .../Classes/OpenAPIs/Models/File.swift | 1 + .../OpenAPIs/Models/FileSchemaTestClass.swift | 1 + .../Classes/OpenAPIs/Models/FormatTest.swift | 1 + .../OpenAPIs/Models/HasOnlyReadOnly.swift | 1 + .../Classes/OpenAPIs/Models/List.swift | 1 + .../Classes/OpenAPIs/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../OpenAPIs/Models/Model200Response.swift | 1 + .../Classes/OpenAPIs/Models/Name.swift | 1 + .../Classes/OpenAPIs/Models/NumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/Order.swift | 1 + .../OpenAPIs/Models/OuterComposite.swift | 1 + .../Classes/OpenAPIs/Models/OuterEnum.swift | 1 + .../Classes/OpenAPIs/Models/Pet.swift | 1 + .../OpenAPIs/Models/ReadOnlyFirst.swift | 1 + .../Classes/OpenAPIs/Models/Return.swift | 1 + .../OpenAPIs/Models/SpecialModelName.swift | 1 + .../OpenAPIs/Models/StringBooleanMap.swift | 1 + .../Classes/OpenAPIs/Models/Tag.swift | 1 + .../OpenAPIs/Models/TypeHolderDefault.swift | 1 + .../OpenAPIs/Models/TypeHolderExample.swift | 1 + .../Classes/OpenAPIs/Models/User.swift | 1 + .../swift5/readonlyProperties/project.yml | 1 + .../petstore/swift5/resultLibrary/Cartfile | 1 + .../swift5/resultLibrary/Package.swift | 5 +- .../resultLibrary/PetstoreClient.podspec | 1 + .../OpenAPIs/APIs/AnotherFakeAPI.swift | 4 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 54 +++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 40 ++--- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 16 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 34 ++-- .../Classes/OpenAPIs/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesClass.swift | 1 + .../Classes/OpenAPIs/Models/Animal.swift | 1 + .../Classes/OpenAPIs/Models/AnimalFarm.swift | 1 + .../Classes/OpenAPIs/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/ArrayTest.swift | 1 + .../OpenAPIs/Models/Capitalization.swift | 1 + .../Classes/OpenAPIs/Models/Cat.swift | 1 + .../Classes/OpenAPIs/Models/CatAllOf.swift | 1 + .../Classes/OpenAPIs/Models/Category.swift | 1 + .../Classes/OpenAPIs/Models/ClassModel.swift | 1 + .../Classes/OpenAPIs/Models/Client.swift | 1 + .../Classes/OpenAPIs/Models/Dog.swift | 1 + .../Classes/OpenAPIs/Models/DogAllOf.swift | 1 + .../Classes/OpenAPIs/Models/EnumArrays.swift | 1 + .../Classes/OpenAPIs/Models/EnumClass.swift | 1 + .../Classes/OpenAPIs/Models/EnumTest.swift | 1 + .../Classes/OpenAPIs/Models/File.swift | 1 + .../OpenAPIs/Models/FileSchemaTestClass.swift | 1 + .../Classes/OpenAPIs/Models/FormatTest.swift | 1 + .../OpenAPIs/Models/HasOnlyReadOnly.swift | 1 + .../Classes/OpenAPIs/Models/List.swift | 1 + .../Classes/OpenAPIs/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../OpenAPIs/Models/Model200Response.swift | 1 + .../Classes/OpenAPIs/Models/Name.swift | 1 + .../Classes/OpenAPIs/Models/NumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/Order.swift | 1 + .../OpenAPIs/Models/OuterComposite.swift | 1 + .../Classes/OpenAPIs/Models/OuterEnum.swift | 1 + .../Classes/OpenAPIs/Models/Pet.swift | 1 + .../OpenAPIs/Models/ReadOnlyFirst.swift | 1 + .../Classes/OpenAPIs/Models/Return.swift | 1 + .../OpenAPIs/Models/SpecialModelName.swift | 1 + .../OpenAPIs/Models/StringBooleanMap.swift | 1 + .../Classes/OpenAPIs/Models/Tag.swift | 1 + .../OpenAPIs/Models/TypeHolderDefault.swift | 1 + .../OpenAPIs/Models/TypeHolderExample.swift | 1 + .../Classes/OpenAPIs/Models/User.swift | 1 + .../petstore/swift5/resultLibrary/project.yml | 1 + .../petstore/swift5/rxswiftLibrary/Cartfile | 1 + .../swift5/rxswiftLibrary/Package.swift | 5 +- .../rxswiftLibrary/PetstoreClient.podspec | 1 + .../OpenAPIs/APIs/AnotherFakeAPI.swift | 4 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 54 +++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 40 ++--- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 16 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 34 ++-- .../Classes/OpenAPIs/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesClass.swift | 1 + .../Classes/OpenAPIs/Models/Animal.swift | 1 + .../Classes/OpenAPIs/Models/AnimalFarm.swift | 1 + .../Classes/OpenAPIs/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/ArrayTest.swift | 1 + .../OpenAPIs/Models/Capitalization.swift | 1 + .../Classes/OpenAPIs/Models/Cat.swift | 1 + .../Classes/OpenAPIs/Models/CatAllOf.swift | 1 + .../Classes/OpenAPIs/Models/Category.swift | 1 + .../Classes/OpenAPIs/Models/ClassModel.swift | 1 + .../Classes/OpenAPIs/Models/Client.swift | 1 + .../Classes/OpenAPIs/Models/Dog.swift | 1 + .../Classes/OpenAPIs/Models/DogAllOf.swift | 1 + .../Classes/OpenAPIs/Models/EnumArrays.swift | 1 + .../Classes/OpenAPIs/Models/EnumClass.swift | 1 + .../Classes/OpenAPIs/Models/EnumTest.swift | 1 + .../Classes/OpenAPIs/Models/File.swift | 1 + .../OpenAPIs/Models/FileSchemaTestClass.swift | 1 + .../Classes/OpenAPIs/Models/FormatTest.swift | 1 + .../OpenAPIs/Models/HasOnlyReadOnly.swift | 1 + .../Classes/OpenAPIs/Models/List.swift | 1 + .../Classes/OpenAPIs/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../OpenAPIs/Models/Model200Response.swift | 1 + .../Classes/OpenAPIs/Models/Name.swift | 1 + .../Classes/OpenAPIs/Models/NumberOnly.swift | 1 + .../Classes/OpenAPIs/Models/Order.swift | 1 + .../OpenAPIs/Models/OuterComposite.swift | 1 + .../Classes/OpenAPIs/Models/OuterEnum.swift | 1 + .../Classes/OpenAPIs/Models/Pet.swift | 1 + .../OpenAPIs/Models/ReadOnlyFirst.swift | 1 + .../Classes/OpenAPIs/Models/Return.swift | 1 + .../OpenAPIs/Models/SpecialModelName.swift | 1 + .../OpenAPIs/Models/StringBooleanMap.swift | 1 + .../Classes/OpenAPIs/Models/Tag.swift | 1 + .../OpenAPIs/Models/TypeHolderDefault.swift | 1 + .../OpenAPIs/Models/TypeHolderExample.swift | 1 + .../Classes/OpenAPIs/Models/User.swift | 1 + .../swift5/rxswiftLibrary/project.yml | 1 + .../swift5/urlsessionLibrary/Cartfile | 1 + .../swift5/urlsessionLibrary/Package.swift | 5 +- .../urlsessionLibrary/PetstoreClient.podspec | 1 + .../Sources/APIs/AnotherFakeAPI.swift | 4 +- .../Sources/APIs/FakeAPI.swift | 54 +++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Sources/APIs/PetAPI.swift | 40 ++--- .../Sources/APIs/StoreAPI.swift | 16 +- .../Sources/APIs/UserAPI.swift | 34 ++-- .../Sources/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesClass.swift | 1 + .../Sources/Models/Animal.swift | 1 + .../Sources/Models/AnimalFarm.swift | 1 + .../Sources/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../Sources/Models/ArrayOfNumberOnly.swift | 1 + .../Sources/Models/ArrayTest.swift | 1 + .../Sources/Models/Capitalization.swift | 1 + .../Sources/Models/Cat.swift | 1 + .../Sources/Models/CatAllOf.swift | 1 + .../Sources/Models/Category.swift | 1 + .../Sources/Models/Client.swift | 1 + .../Sources/Models/Dog.swift | 1 + .../Sources/Models/DogAllOf.swift | 1 + .../Sources/Models/EnumArrays.swift | 1 + .../Sources/Models/EnumClass.swift | 1 + .../Sources/Models/EnumTest.swift | 1 + .../Sources/Models/File.swift | 1 + .../Sources/Models/FileSchemaTestClass.swift | 1 + .../Sources/Models/FormatTest.swift | 1 + .../Sources/Models/HasOnlyReadOnly.swift | 1 + .../Sources/Models/List.swift | 1 + .../Sources/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../Sources/Models/Name.swift | 1 + .../Sources/Models/NumberOnly.swift | 1 + .../Sources/Models/Order.swift | 1 + .../Sources/Models/OuterComposite.swift | 1 + .../Sources/Models/OuterEnum.swift | 1 + .../Sources/Models/Pet.swift | 1 + .../Sources/Models/ReadOnlyFirst.swift | 1 + .../Sources/Models/SpecialModelName.swift | 1 + .../Sources/Models/StringBooleanMap.swift | 1 + .../Sources/Models/Tag.swift | 1 + .../Sources/Models/TypeHolderDefault.swift | 1 + .../Sources/Models/TypeHolderExample.swift | 1 + .../Sources/Models/User.swift | 1 + .../PetstoreClient/APIs/AnotherFakeAPI.swift | 4 +- .../Sources/PetstoreClient/APIs/FakeAPI.swift | 54 +++---- .../APIs/FakeClassnameTags123API.swift | 4 +- .../Sources/PetstoreClient/APIs/PetAPI.swift | 40 ++--- .../PetstoreClient/APIs/StoreAPI.swift | 16 +- .../Sources/PetstoreClient/APIs/UserAPI.swift | 34 ++-- .../Sources/PetstoreClient/Extensions.swift | 48 ++++++ .../Models/AdditionalPropertiesClass.swift | 1 + .../PetstoreClient/Models/Animal.swift | 1 + .../PetstoreClient/Models/AnimalFarm.swift | 1 + .../PetstoreClient/Models/ApiResponse.swift | 1 + .../Models/ArrayOfArrayOfNumberOnly.swift | 1 + .../Models/ArrayOfNumberOnly.swift | 1 + .../PetstoreClient/Models/ArrayTest.swift | 1 + .../Models/Capitalization.swift | 1 + .../Sources/PetstoreClient/Models/Cat.swift | 1 + .../PetstoreClient/Models/CatAllOf.swift | 1 + .../PetstoreClient/Models/Category.swift | 1 + .../PetstoreClient/Models/ClassModel.swift | 1 + .../PetstoreClient/Models/Client.swift | 1 + .../Sources/PetstoreClient/Models/Dog.swift | 1 + .../PetstoreClient/Models/DogAllOf.swift | 1 + .../PetstoreClient/Models/EnumArrays.swift | 1 + .../PetstoreClient/Models/EnumClass.swift | 1 + .../PetstoreClient/Models/EnumTest.swift | 1 + .../Sources/PetstoreClient/Models/File.swift | 1 + .../Models/FileSchemaTestClass.swift | 1 + .../PetstoreClient/Models/FormatTest.swift | 1 + .../Models/HasOnlyReadOnly.swift | 1 + .../Sources/PetstoreClient/Models/List.swift | 1 + .../PetstoreClient/Models/MapTest.swift | 1 + ...opertiesAndAdditionalPropertiesClass.swift | 1 + .../Models/Model200Response.swift | 1 + .../Sources/PetstoreClient/Models/Name.swift | 1 + .../PetstoreClient/Models/NumberOnly.swift | 1 + .../Sources/PetstoreClient/Models/Order.swift | 1 + .../Models/OuterComposite.swift | 1 + .../PetstoreClient/Models/OuterEnum.swift | 1 + .../Sources/PetstoreClient/Models/Pet.swift | 1 + .../PetstoreClient/Models/ReadOnlyFirst.swift | 1 + .../PetstoreClient/Models/Return.swift | 1 + .../Models/SpecialModelName.swift | 1 + .../Models/StringBooleanMap.swift | 1 + .../Sources/PetstoreClient/Models/Tag.swift | 1 + .../Models/TypeHolderDefault.swift | 1 + .../Models/TypeHolderExample.swift | 1 + .../Sources/PetstoreClient/Models/User.swift | 1 + .../swift5/urlsessionLibrary/project.yml | 1 + 606 files changed, 3029 insertions(+), 926 deletions(-) create mode 100644 samples/client/petstore/swift5/default/Package.resolved create mode 100644 samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift create mode 100644 samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift create mode 100644 samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift create mode 100644 samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift create mode 100644 samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift create mode 100644 samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift create mode 100644 samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift create mode 100644 samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift create mode 100644 samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift create mode 100644 samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift create mode 100644 samples/client/petstore/swift5/default/docs/AdditionalPropertiesAnyType.md create mode 100644 samples/client/petstore/swift5/default/docs/AdditionalPropertiesArray.md create mode 100644 samples/client/petstore/swift5/default/docs/AdditionalPropertiesBoolean.md create mode 100644 samples/client/petstore/swift5/default/docs/AdditionalPropertiesInteger.md create mode 100644 samples/client/petstore/swift5/default/docs/AdditionalPropertiesNumber.md create mode 100644 samples/client/petstore/swift5/default/docs/AdditionalPropertiesObject.md create mode 100644 samples/client/petstore/swift5/default/docs/AdditionalPropertiesString.md create mode 100644 samples/client/petstore/swift5/default/docs/BigCat.md create mode 100644 samples/client/petstore/swift5/default/docs/BigCatAllOf.md create mode 100644 samples/client/petstore/swift5/default/docs/XmlItem.md diff --git a/bin/configs/swift5-default.yaml b/bin/configs/swift5-default.yaml index ede36e7331cf..fffd318be1ad 100644 --- a/bin/configs/swift5-default.yaml +++ b/bin/configs/swift5-default.yaml @@ -1,6 +1,6 @@ generatorName: swift5 outputDir: samples/client/petstore/swift5/default -inputSpec: modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml +inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml templateDir: modules/openapi-generator/src/main/resources/swift5 generateAliasAsModel: true additionalProperties: diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index 18e0058f245a..5d7f86a40d30 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -225,8 +225,8 @@ public Swift5ClientCodegen() { typeMapping.put("UUID", "UUID"); typeMapping.put("URI", "String"); typeMapping.put("decimal", "Decimal"); - typeMapping.put("object", "Any"); - typeMapping.put("AnyType", "Any"); + typeMapping.put("object", "AnyCodable"); + typeMapping.put("AnyType", "AnyCodable"); importMapping = new HashMap<>(); @@ -346,7 +346,15 @@ protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, final Schema additionalProperties = getAdditionalProperties(schema); if (additionalProperties != null) { - codegenModel.additionalPropertiesType = getSchemaType(additionalProperties); + Schema inner = null; + if (ModelUtils.isArraySchema(schema)) { + ArraySchema ap = (ArraySchema) schema; + inner = ap.getItems(); + } else if (ModelUtils.isMapSchema(schema)) { + inner = getAdditionalProperties(schema); + } + + codegenModel.additionalPropertiesType = inner != null ? getTypeDeclaration(inner) : getSchemaType(additionalProperties); } } diff --git a/modules/openapi-generator/src/main/resources/swift5/Cartfile.mustache b/modules/openapi-generator/src/main/resources/swift5/Cartfile.mustache index 3f6269c23ab9..64dac06473e1 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Cartfile.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Cartfile.mustache @@ -1,3 +1,4 @@ {{#useAlamofire}}github "Alamofire/Alamofire" ~> 4.9.1{{/useAlamofire}}{{#usePromiseKit}} github "mxcl/PromiseKit" ~> 6.13.1{{/usePromiseKit}}{{#useRxSwift}} github "ReactiveX/RxSwift" ~> 5.1.1{{/useRxSwift}} +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache b/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache index 1a23697a04b9..7e6dcc1994f7 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache @@ -4,7 +4,8 @@ // https://openapi-generator.tech // -import Foundation{{#usePromiseKit}} +import Foundation +import AnyCodable{{#usePromiseKit}} import PromiseKit{{/usePromiseKit}} extension Bool: JSONEncodable { @@ -53,6 +54,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -193,3 +200,44 @@ extension RequestBuilder { return deferred.promise } }{{/usePromiseKit}} + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache b/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache index d64f11089b7b..353c6e9f3415 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,6 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), {{#useAlamofire}} .package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.9.1"), {{/useAlamofire}} @@ -34,7 +35,7 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "{{projectName}}", - dependencies: [{{#useAlamofire}}"Alamofire", {{/useAlamofire}}{{#usePromiseKit}}"PromiseKit", {{/usePromiseKit}}{{#useRxSwift}}"RxSwift"{{/useRxSwift}}], + dependencies: ["AnyCodable", {{#useAlamofire}}"Alamofire", {{/useAlamofire}}{{#usePromiseKit}}"PromiseKit", {{/usePromiseKit}}{{#useRxSwift}}"RxSwift"{{/useRxSwift}}], path: "{{#swiftPackagePath}}{{swiftPackagePath}}{{/swiftPackagePath}}{{^swiftPackagePath}}{{#useSPMFileStructure}}Sources/{{projectName}}{{/useSPMFileStructure}}{{^useSPMFileStructure}}{{projectName}}/Classes{{/useSPMFileStructure}}{{/swiftPackagePath}}" ), ] diff --git a/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache b/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache index d791e5a26ad5..09f07162c03f 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache @@ -35,4 +35,5 @@ Pod::Spec.new do |s| {{#useAlamofire}} s.dependency 'Alamofire', '~> 4.9.1' {{/useAlamofire}} + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache b/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache index 8cdfc166552d..54fbb33d468d 100644 --- a/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache @@ -15,3 +15,4 @@ targets: - carthage: Alamofire{{/useAlamofire}}{{#useRxSwift}} - carthage: RxSwift{{/useRxSwift}}{{#usePromiseKit}} - carthage: PromiseKit{{/usePromiseKit}} + - carthage: AnyCodable diff --git a/modules/openapi-generator/src/main/resources/swift5/api.mustache b/modules/openapi-generator/src/main/resources/swift5/api.mustache index f1e181e25241..ac3b4b3d9541 100644 --- a/modules/openapi-generator/src/main/resources/swift5/api.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/api.mustache @@ -248,13 +248,13 @@ extension {{projectName}}API { let parameters: [String: Any]? = nil {{/hasFormParams}} {{/bodyParam}}{{#hasQueryParams}} - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([{{^queryParams}}:{{/queryParams}} + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([{{^queryParams}}:{{/queryParams}} {{#queryParams}} {{> _param}}, {{/queryParams}} ]){{/hasQueryParams}}{{^hasQueryParams}} - let url = URLComponents(string: URLString){{/hasQueryParams}} + let urlComponents = URLComponents(string: URLString){{/hasQueryParams}} let nillableHeaders: [String: Any?] = [{{^headerParams}}{{^hasFormParams}} :{{/hasFormParams}}{{/headerParams}}{{#hasFormParams}} @@ -266,7 +266,7 @@ extension {{projectName}}API { let requestBuilder: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}>.Type = {{projectName}}API.requestBuilderFactory.{{#returnType}}getBuilder(){{/returnType}}{{^returnType}}getNonDecodableBuilder(){{/returnType}} - return requestBuilder.init(method: "{{httpMethod}}", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "{{httpMethod}}", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } {{/operation}} diff --git a/modules/openapi-generator/src/main/resources/swift5/model.mustache b/modules/openapi-generator/src/main/resources/swift5/model.mustache index a5870644a60e..7ea71a27f231 100644 --- a/modules/openapi-generator/src/main/resources/swift5/model.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/model.mustache @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable {{#description}} /** {{description}} */{{/description}}{{#isDeprecated}} diff --git a/samples/client/petstore/swift5/alamofireLibrary/Cartfile b/samples/client/petstore/swift5/alamofireLibrary/Cartfile index 7d30a6849b12..cf67badb8507 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/Cartfile +++ b/samples/client/petstore/swift5/alamofireLibrary/Cartfile @@ -1 +1,2 @@ github "Alamofire/Alamofire" ~> 4.9.1 +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/alamofireLibrary/Package.swift b/samples/client/petstore/swift5/alamofireLibrary/Package.swift index 1bf8d9cfdd26..41b3c7aba32d 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/Package.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,6 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), .package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.9.1"), ], targets: [ @@ -26,7 +27,7 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: ["Alamofire", ], + dependencies: ["AnyCodable", "Alamofire", ], path: "PetstoreClient/Classes" ), ] diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient.podspec index 00711c531254..23fbf0941061 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient.podspec @@ -12,4 +12,5 @@ Pod::Spec.new do |s| s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' s.dependency 'Alamofire', '~> 4.9.1' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 24b0015a270d..72b89640eeb4 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -38,7 +38,7 @@ open class AnotherFakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class AnotherFakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 58c4b8a093ce..cf92424d9cc1 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -36,7 +36,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -46,7 +46,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -77,7 +77,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -87,7 +87,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -118,7 +118,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -128,7 +128,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -159,7 +159,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -169,7 +169,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -200,7 +200,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -210,7 +210,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -242,8 +242,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -255,7 +255,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -288,7 +288,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -298,7 +298,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -378,7 +378,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -388,7 +388,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -508,8 +508,8 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -526,7 +526,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -569,8 +569,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -586,7 +586,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -618,7 +618,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -628,7 +628,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -668,7 +668,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -678,7 +678,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index fb3bb8ce00a7..d4d651664963 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -41,7 +41,7 @@ open class FakeClassnameTags123API { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class FakeClassnameTags123API { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 5cd3629127bf..a1fe0d12b1da 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -40,7 +40,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -50,7 +50,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -100,7 +100,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -145,8 +145,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -158,7 +158,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -196,8 +196,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -209,7 +209,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -248,7 +248,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -258,7 +258,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -293,7 +293,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -303,7 +303,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -351,7 +351,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -361,7 +361,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -409,7 +409,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -419,7 +419,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -467,7 +467,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -477,7 +477,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 95adcc200ae0..501f11f5f219 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -41,7 +41,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -85,7 +85,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -95,7 +95,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -173,7 +173,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -183,7 +183,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index cfd30068a9db..254474014d31 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -38,7 +38,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -80,7 +80,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -90,7 +90,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -122,7 +122,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -132,7 +132,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -168,7 +168,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -178,7 +178,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -213,7 +213,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -223,7 +223,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -258,8 +258,8 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -272,7 +272,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -302,7 +302,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -312,7 +312,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -350,7 +350,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -360,7 +360,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 93ed6b90b376..3aef2d1d6c54 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 84c1dad9ec12..75ab9bc8d0ad 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 81111252404e..0f825cf24d0c 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index e09b0e9efdc8..b20b894a1adb 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index beec80ae582f..2b66af2dc949 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 5ed956b92273..06f0640475c2 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 86f71f1534a5..8c50c7fa1e44 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index e692ebd28098..461ec7cd9acf 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 692a3b212f3e..fbe62983d5e9 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 73335b4d3953..7f3a86932f1b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c17cf0d20685..8df239548324 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index dfd5504a653c..4109db4d1ef7 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 9b5340899a5f..7269ddbef6fd 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index f0e62d05b122..7d6eff2ffe1f 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 137b9a5254a9..b5f2bcea38a3 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4f7070a4f63d..1bfa23d7bc6d 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index eb761dca902b..73368c421433 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index d4029d73f8af..ab01cf297f8e 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 45236c792609..60a81bcac77b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 15dbd0c03fcc..90283656d1b3 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 52b3f620cdae..cff92673bbeb 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 232b8c492957..fc86676eec30 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 0097907e9b44..d7960f5c8008 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 48704fd13823..c5d4f2cae567 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 96af40355dd1..b54bd01e5dc9 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 1f3a7ca820c5..c8f639ef43d0 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index f6a5836117e4..5368032f09b4 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 57336422c862..84a40e1c1016 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 861a307e19d5..710f41648f90 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 1d2c31358171..15726ab16a47 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 6935641c3643..36904afbd508 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index c3b778cbbed4..9bd6f3bef8f6 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index fa5b125ff13d..7a1c2826a195 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 2ff56cc1566b..38fb57af3287 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 219b49420a12..ed7e538a06d5 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 562ba86f6027..18747e071bc6 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index a6903b84ce6f..0699c25ff7ed 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index bda5be349339..11c5f7a750bb 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e7896203919a..35b1a5833b93 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 2952b6701674..37277a4ac00a 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index a1aa36bcfb0c..2bbc31806fff 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/project.yml b/samples/client/petstore/swift5/alamofireLibrary/project.yml index 08035907b99e..148e2487eae3 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/project.yml +++ b/samples/client/petstore/swift5/alamofireLibrary/project.yml @@ -13,3 +13,4 @@ targets: scheme: {} dependencies: - carthage: Alamofire + - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/combineLibrary/Cartfile b/samples/client/petstore/swift5/combineLibrary/Cartfile index 8b137891791f..84aaa61ef2d3 100644 --- a/samples/client/petstore/swift5/combineLibrary/Cartfile +++ b/samples/client/petstore/swift5/combineLibrary/Cartfile @@ -1 +1,2 @@ +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/combineLibrary/Package.swift b/samples/client/petstore/swift5/combineLibrary/Package.swift index b7fe4734aa8a..b724838fe8d3 100644 --- a/samples/client/petstore/swift5/combineLibrary/Package.swift +++ b/samples/client/petstore/swift5/combineLibrary/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,13 +19,14 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: [], + dependencies: ["AnyCodable", ], path: "PetstoreClient/Classes" ), ] diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/combineLibrary/PetstoreClient.podspec index b61285f6b25e..de06558efbdb 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient.podspec @@ -11,4 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 62f1ed590426..9db7ad8a0d37 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -46,7 +46,7 @@ open class AnotherFakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -56,7 +56,7 @@ open class AnotherFakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index b90460ea41ac..20e0b55d9e8c 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -44,7 +44,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -54,7 +54,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -100,7 +100,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -136,7 +136,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -146,7 +146,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -182,7 +182,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -192,7 +192,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -228,7 +228,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -238,7 +238,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -275,8 +275,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -288,7 +288,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -326,7 +326,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -336,7 +336,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -421,7 +421,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -431,7 +431,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -556,8 +556,8 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -574,7 +574,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -622,8 +622,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -639,7 +639,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -676,7 +676,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -686,7 +686,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -731,7 +731,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -741,7 +741,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index 42d6ea597b4b..85eab81386f0 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -49,7 +49,7 @@ open class FakeClassnameTags123API { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -59,7 +59,7 @@ open class FakeClassnameTags123API { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index b4226ff4aa1d..10ce86076cf1 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -48,7 +48,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -58,7 +58,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -103,7 +103,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -113,7 +113,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -163,8 +163,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -176,7 +176,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -219,8 +219,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -232,7 +232,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -276,7 +276,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -286,7 +286,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -326,7 +326,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -336,7 +336,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -389,7 +389,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -399,7 +399,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -452,7 +452,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -462,7 +462,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -515,7 +515,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -525,7 +525,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index b50dcb0193c8..12a0d5688d52 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -49,7 +49,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -59,7 +59,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -98,7 +98,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -108,7 +108,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -149,7 +149,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -159,7 +159,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -196,7 +196,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -206,7 +206,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index f678057ceaf9..cbee9448a008 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -46,7 +46,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -56,7 +56,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -93,7 +93,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -103,7 +103,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -140,7 +140,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -150,7 +150,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -191,7 +191,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -201,7 +201,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -241,7 +241,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -251,7 +251,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -291,8 +291,8 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -305,7 +305,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -340,7 +340,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -350,7 +350,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -393,7 +393,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -403,7 +403,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 93ed6b90b376..3aef2d1d6c54 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 84c1dad9ec12..75ab9bc8d0ad 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 81111252404e..0f825cf24d0c 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index e09b0e9efdc8..b20b894a1adb 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index beec80ae582f..2b66af2dc949 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 5ed956b92273..06f0640475c2 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 86f71f1534a5..8c50c7fa1e44 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index e692ebd28098..461ec7cd9acf 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 692a3b212f3e..fbe62983d5e9 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 73335b4d3953..7f3a86932f1b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c17cf0d20685..8df239548324 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index dfd5504a653c..4109db4d1ef7 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 9b5340899a5f..7269ddbef6fd 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index f0e62d05b122..7d6eff2ffe1f 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 137b9a5254a9..b5f2bcea38a3 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4f7070a4f63d..1bfa23d7bc6d 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index eb761dca902b..73368c421433 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index d4029d73f8af..ab01cf297f8e 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 45236c792609..60a81bcac77b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 15dbd0c03fcc..90283656d1b3 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 52b3f620cdae..cff92673bbeb 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 232b8c492957..fc86676eec30 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 0097907e9b44..d7960f5c8008 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 48704fd13823..c5d4f2cae567 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 96af40355dd1..b54bd01e5dc9 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 1f3a7ca820c5..c8f639ef43d0 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index f6a5836117e4..5368032f09b4 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 57336422c862..84a40e1c1016 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 861a307e19d5..710f41648f90 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 1d2c31358171..15726ab16a47 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 6935641c3643..36904afbd508 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index c3b778cbbed4..9bd6f3bef8f6 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index fa5b125ff13d..7a1c2826a195 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 2ff56cc1566b..38fb57af3287 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 219b49420a12..ed7e538a06d5 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 562ba86f6027..18747e071bc6 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index a6903b84ce6f..0699c25ff7ed 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index bda5be349339..11c5f7a750bb 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e7896203919a..35b1a5833b93 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 2952b6701674..37277a4ac00a 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index a1aa36bcfb0c..2bbc31806fff 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/project.yml b/samples/client/petstore/swift5/combineLibrary/project.yml index 8e7102001b8d..5528eeee5135 100644 --- a/samples/client/petstore/swift5/combineLibrary/project.yml +++ b/samples/client/petstore/swift5/combineLibrary/project.yml @@ -12,3 +12,4 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} + - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/default/.openapi-generator/FILES b/samples/client/petstore/swift5/default/.openapi-generator/FILES index c81943baf2af..205dadc060a1 100644 --- a/samples/client/petstore/swift5/default/.openapi-generator/FILES +++ b/samples/client/petstore/swift5/default/.openapi-generator/FILES @@ -16,13 +16,22 @@ PetstoreClient/Classes/OpenAPIs/Extensions.swift PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift PetstoreClient/Classes/OpenAPIs/Models.swift +PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift +PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift +PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift +PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift +PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift +PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift PetstoreClient/Classes/OpenAPIs/Models/Animal.swift PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift +PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift PetstoreClient/Classes/OpenAPIs/Models/Cat.swift PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -56,11 +65,19 @@ PetstoreClient/Classes/OpenAPIs/Models/Tag.swift PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift PetstoreClient/Classes/OpenAPIs/Models/User.swift +PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift README.md +docs/AdditionalPropertiesAnyType.md +docs/AdditionalPropertiesArray.md +docs/AdditionalPropertiesBoolean.md docs/AdditionalPropertiesClass.md +docs/AdditionalPropertiesInteger.md +docs/AdditionalPropertiesNumber.md +docs/AdditionalPropertiesObject.md +docs/AdditionalPropertiesString.md docs/Animal.md docs/AnimalFarm.md docs/AnotherFakeAPI.md @@ -68,6 +85,8 @@ docs/ApiResponse.md docs/ArrayOfArrayOfNumberOnly.md docs/ArrayOfNumberOnly.md docs/ArrayTest.md +docs/BigCat.md +docs/BigCatAllOf.md docs/Capitalization.md docs/Cat.md docs/CatAllOf.md @@ -106,5 +125,6 @@ docs/TypeHolderDefault.md docs/TypeHolderExample.md docs/User.md docs/UserAPI.md +docs/XmlItem.md git_push.sh project.yml diff --git a/samples/client/petstore/swift5/default/Cartfile b/samples/client/petstore/swift5/default/Cartfile index 8b137891791f..84aaa61ef2d3 100644 --- a/samples/client/petstore/swift5/default/Cartfile +++ b/samples/client/petstore/swift5/default/Cartfile @@ -1 +1,2 @@ +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/default/Package.resolved b/samples/client/petstore/swift5/default/Package.resolved new file mode 100644 index 000000000000..85bb93ced12f --- /dev/null +++ b/samples/client/petstore/swift5/default/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "38b05fc9f86501ef8018aa90cf3d83bd97f74067", + "version": "0.4.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/default/Package.swift b/samples/client/petstore/swift5/default/Package.swift index b7fe4734aa8a..b724838fe8d3 100644 --- a/samples/client/petstore/swift5/default/Package.swift +++ b/samples/client/petstore/swift5/default/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,13 +19,14 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: [], + dependencies: ["AnyCodable", ], path: "PetstoreClient/Classes" ), ] diff --git a/samples/client/petstore/swift5/default/PetstoreClient.podspec b/samples/client/petstore/swift5/default/PetstoreClient.podspec index b61285f6b25e..de06558efbdb 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/default/PetstoreClient.podspec @@ -11,4 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 24b0015a270d..72b89640eeb4 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -38,7 +38,7 @@ open class AnotherFakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class AnotherFakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 58c4b8a093ce..6d02c24d05f9 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -8,6 +8,49 @@ import Foundation open class FakeAPI { + /** + creates an XmlItem + + - parameter xmlItem: (body) XmlItem Body + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func createXmlItem(xmlItem: XmlItem, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + createXmlItemWithRequestBuilder(xmlItem: xmlItem).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + creates an XmlItem + - POST /fake/create_xml_item + - this route creates an XmlItem + - parameter xmlItem: (body) XmlItem Body + - returns: RequestBuilder + */ + open class func createXmlItemWithRequestBuilder(xmlItem: XmlItem) -> RequestBuilder { + let path = "/fake/create_xml_item" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: xmlItem) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + /** - parameter body: (body) Input boolean as post body (optional) @@ -36,7 +79,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -46,7 +89,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -77,7 +120,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -87,7 +130,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -118,7 +161,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -128,7 +171,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -159,7 +202,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -169,7 +212,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -200,7 +243,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -210,7 +253,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -242,8 +285,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -255,7 +298,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -288,7 +331,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -298,7 +341,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -378,7 +421,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -388,7 +431,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -508,8 +551,8 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -526,7 +569,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -569,8 +612,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -586,7 +629,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -618,7 +661,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -628,7 +671,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -668,7 +711,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -678,7 +721,63 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter pipe: (query) + - parameter ioutil: (query) + - parameter http: (query) + - parameter url: (query) + - parameter context: (query) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testQueryParameterCollectionFormat(pipe: [String], ioutil: [String], http: [String], url: [String], context: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testQueryParameterCollectionFormatWithRequestBuilder(pipe: pipe, ioutil: ioutil, http: http, url: url, context: context).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - PUT /fake/test-query-paramters + - To test the collection format in query parameters + - parameter pipe: (query) + - parameter ioutil: (query) + - parameter http: (query) + - parameter url: (query) + - parameter context: (query) + - returns: RequestBuilder + */ + open class func testQueryParameterCollectionFormatWithRequestBuilder(pipe: [String], ioutil: [String], http: [String], url: [String], context: [String]) -> RequestBuilder { + let path = "/fake/test-query-paramters" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ + "pipe": pipe.encodeToJSON(), + "ioutil": ioutil.encodeToJSON(), + "http": http.encodeToJSON(), + "url": url.encodeToJSON(), + "context": context.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index fb3bb8ce00a7..d4d651664963 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -41,7 +41,7 @@ open class FakeClassnameTags123API { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class FakeClassnameTags123API { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 5cd3629127bf..5c220c11bb5f 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -40,7 +40,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -50,7 +50,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -100,7 +100,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -145,8 +145,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -158,7 +158,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -169,7 +169,7 @@ open class PetAPI { - parameter completion: completion handler to receive the data and the error objects */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByTags(tags: Set, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Set?, _ error: Error?) -> Void)) { findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -188,16 +188,16 @@ open class PetAPI { - type: oauth2 - name: petstore_auth - parameter tags: (query) Tags to filter by - - returns: RequestBuilder<[Pet]> + - returns: RequestBuilder> */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { + open class func findPetsByTagsWithRequestBuilder(tags: Set) -> RequestBuilder> { let path = "/pet/findByTags" let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -207,9 +207,9 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -248,7 +248,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -258,7 +258,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -293,7 +293,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -303,7 +303,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -351,7 +351,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -361,7 +361,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -409,7 +409,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -419,7 +419,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -467,7 +467,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -477,7 +477,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 95adcc200ae0..501f11f5f219 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -41,7 +41,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -85,7 +85,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -95,7 +95,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -173,7 +173,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -183,7 +183,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index cfd30068a9db..254474014d31 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -38,7 +38,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -80,7 +80,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -90,7 +90,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -122,7 +122,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -132,7 +132,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -168,7 +168,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -178,7 +178,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -213,7 +213,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -223,7 +223,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -258,8 +258,8 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -272,7 +272,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -302,7 +302,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -312,7 +312,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -350,7 +350,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -360,7 +360,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 93ed6b90b376..3aef2d1d6c54 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift new file mode 100644 index 000000000000..17f687d795ae --- /dev/null +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift @@ -0,0 +1,54 @@ +// +// AdditionalPropertiesAnyType.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesAnyType: Codable, Hashable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public var additionalProperties: [String: AnyCodable] = [:] + + public subscript(key: String) -> AnyCodable? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + + var container = encoder.container(keyedBy: String.self) + + try container.encodeIfPresent(name, forKey: "name") + try container.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap(AnyCodable.self, excludedKeys: nonAdditionalPropertyKeys) + } + +} diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift new file mode 100644 index 000000000000..17c231a843cb --- /dev/null +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift @@ -0,0 +1,54 @@ +// +// AdditionalPropertiesArray.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesArray: Codable, Hashable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public var additionalProperties: [String: [AnyCodable]] = [:] + + public subscript(key: String) -> [AnyCodable]? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + + var container = encoder.container(keyedBy: String.self) + + try container.encodeIfPresent(name, forKey: "name") + try container.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap([AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) + } + +} diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift new file mode 100644 index 000000000000..07ee170c0185 --- /dev/null +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift @@ -0,0 +1,54 @@ +// +// AdditionalPropertiesBoolean.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesBoolean: Codable, Hashable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public var additionalProperties: [String: Bool] = [:] + + public subscript(key: String) -> Bool? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + + var container = encoder.container(keyedBy: String.self) + + try container.encodeIfPresent(name, forKey: "name") + try container.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + } + +} diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 84c1dad9ec12..5cc58ee5f9ee 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,19 +6,47 @@ // import Foundation +import AnyCodable public struct AdditionalPropertiesClass: Codable, Hashable { public var mapString: [String: String]? + public var mapNumber: [String: Double]? + public var mapInteger: [String: Int]? + public var mapBoolean: [String: Bool]? + public var mapArrayInteger: [String: [Int]]? + public var mapArrayAnytype: [String: [AnyCodable]]? public var mapMapString: [String: [String: String]]? + public var mapMapAnytype: [String: [String: AnyCodable]]? + public var anytype1: AnyCodable? + public var anytype2: AnyCodable? + public var anytype3: AnyCodable? - public init(mapString: [String: String]? = nil, mapMapString: [String: [String: String]]? = nil) { + public init(mapString: [String: String]? = nil, mapNumber: [String: Double]? = nil, mapInteger: [String: Int]? = nil, mapBoolean: [String: Bool]? = nil, mapArrayInteger: [String: [Int]]? = nil, mapArrayAnytype: [String: [AnyCodable]]? = nil, mapMapString: [String: [String: String]]? = nil, mapMapAnytype: [String: [String: AnyCodable]]? = nil, anytype1: AnyCodable? = nil, anytype2: AnyCodable? = nil, anytype3: AnyCodable? = nil) { self.mapString = mapString + self.mapNumber = mapNumber + self.mapInteger = mapInteger + self.mapBoolean = mapBoolean + self.mapArrayInteger = mapArrayInteger + self.mapArrayAnytype = mapArrayAnytype self.mapMapString = mapMapString + self.mapMapAnytype = mapMapAnytype + self.anytype1 = anytype1 + self.anytype2 = anytype2 + self.anytype3 = anytype3 } public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" + case mapNumber = "map_number" + case mapInteger = "map_integer" + case mapBoolean = "map_boolean" + case mapArrayInteger = "map_array_integer" + case mapArrayAnytype = "map_array_anytype" case mapMapString = "map_map_string" + case mapMapAnytype = "map_map_anytype" + case anytype1 = "anytype_1" + case anytype2 = "anytype_2" + case anytype3 = "anytype_3" } // Encodable protocol methods diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift new file mode 100644 index 000000000000..ad95acdcbbec --- /dev/null +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift @@ -0,0 +1,54 @@ +// +// AdditionalPropertiesInteger.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesInteger: Codable, Hashable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public var additionalProperties: [String: Int] = [:] + + public subscript(key: String) -> Int? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + + var container = encoder.container(keyedBy: String.self) + + try container.encodeIfPresent(name, forKey: "name") + try container.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap(Int.self, excludedKeys: nonAdditionalPropertyKeys) + } + +} diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift new file mode 100644 index 000000000000..37e32a47e532 --- /dev/null +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift @@ -0,0 +1,54 @@ +// +// AdditionalPropertiesNumber.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesNumber: Codable, Hashable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public var additionalProperties: [String: Double] = [:] + + public subscript(key: String) -> Double? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + + var container = encoder.container(keyedBy: String.self) + + try container.encodeIfPresent(name, forKey: "name") + try container.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap(Double.self, excludedKeys: nonAdditionalPropertyKeys) + } + +} diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift new file mode 100644 index 000000000000..a0fc35f621b3 --- /dev/null +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift @@ -0,0 +1,54 @@ +// +// AdditionalPropertiesObject.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesObject: Codable, Hashable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public var additionalProperties: [String: [String: AnyCodable]] = [:] + + public subscript(key: String) -> [String: AnyCodable]? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + + var container = encoder.container(keyedBy: String.self) + + try container.encodeIfPresent(name, forKey: "name") + try container.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap([String: AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) + } + +} diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift new file mode 100644 index 000000000000..0719ce37c02f --- /dev/null +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift @@ -0,0 +1,54 @@ +// +// AdditionalPropertiesString.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesString: Codable, Hashable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public var additionalProperties: [String: String] = [:] + + public subscript(key: String) -> String? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + + var container = encoder.container(keyedBy: String.self) + + try container.encodeIfPresent(name, forKey: "name") + try container.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap(String.self, excludedKeys: nonAdditionalPropertyKeys) + } + +} diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 81111252404e..0f825cf24d0c 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index e09b0e9efdc8..b20b894a1adb 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index beec80ae582f..2b66af2dc949 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 5ed956b92273..06f0640475c2 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 86f71f1534a5..8c50c7fa1e44 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index e692ebd28098..461ec7cd9acf 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift new file mode 100644 index 000000000000..dd2a04f4d68a --- /dev/null +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift @@ -0,0 +1,25 @@ +// +// BigCat.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct BigCat: Codable, Hashable { + + public enum Kind: String, Codable, CaseIterable { + case lions = "lions" + case tigers = "tigers" + case leopards = "leopards" + case jaguars = "jaguars" + } + public var kind: Kind? + + public init(kind: Kind? = nil) { + self.kind = kind + } + +} diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift new file mode 100644 index 000000000000..f68ef09c4a5b --- /dev/null +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift @@ -0,0 +1,25 @@ +// +// BigCatAllOf.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct BigCatAllOf: Codable, Hashable { + + public enum Kind: String, Codable, CaseIterable { + case lions = "lions" + case tigers = "tigers" + case leopards = "leopards" + case jaguars = "jaguars" + } + public var kind: Kind? + + public init(kind: Kind? = nil) { + self.kind = kind + } + +} diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 692a3b212f3e..fbe62983d5e9 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 73335b4d3953..7f3a86932f1b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c17cf0d20685..8df239548324 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index dfd5504a653c..4109db4d1ef7 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 9b5340899a5f..7269ddbef6fd 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index f0e62d05b122..7d6eff2ffe1f 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 137b9a5254a9..b5f2bcea38a3 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4f7070a4f63d..1bfa23d7bc6d 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index eb761dca902b..73368c421433 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index d4029d73f8af..ab01cf297f8e 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 45236c792609..60a81bcac77b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 15dbd0c03fcc..90283656d1b3 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 52b3f620cdae..cff92673bbeb 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 232b8c492957..65aaecb7ae38 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FormatTest: Codable, Hashable { @@ -22,8 +23,9 @@ public struct FormatTest: Codable, Hashable { public var dateTime: Date? public var uuid: UUID? public var password: String + public var bigDecimal: Decimal? - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String, bigDecimal: Decimal? = nil) { self.integer = integer self.int32 = int32 self.int64 = int64 @@ -37,6 +39,24 @@ public struct FormatTest: Codable, Hashable { self.dateTime = dateTime self.uuid = uuid self.password = password + self.bigDecimal = bigDecimal + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + case bigDecimal = "BigDecimal" } public enum CodingKeys: String, CodingKey, CaseIterable { case integer diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 0097907e9b44..d7960f5c8008 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 48704fd13823..c5d4f2cae567 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 96af40355dd1..b54bd01e5dc9 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 1f3a7ca820c5..c8f639ef43d0 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index f6a5836117e4..5368032f09b4 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 57336422c862..84a40e1c1016 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 861a307e19d5..710f41648f90 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 1d2c31358171..15726ab16a47 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 6935641c3643..36904afbd508 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index c3b778cbbed4..9bd6f3bef8f6 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index fa5b125ff13d..03e81af5d05b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Pet: Codable, Hashable { @@ -17,12 +18,12 @@ public struct Pet: Codable, Hashable { public var id: Int64? public var category: Category? public var name: String - public var photoUrls: [String] + public var photoUrls: Set public var tags: [Tag]? /** pet status in the store */ public var status: Status? - public init(id: Int64? = nil, category: Category? = nil, name: String, photoUrls: [String], tags: [Tag]? = nil, status: Status? = nil) { + public init(id: Int64? = nil, category: Category? = nil, name: String, photoUrls: Set, tags: [Tag]? = nil, status: Status? = nil) { self.id = id self.category = category self.name = name diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 2ff56cc1566b..38fb57af3287 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 219b49420a12..ed7e538a06d5 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 562ba86f6027..18747e071bc6 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index a6903b84ce6f..0699c25ff7ed 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index bda5be349339..11c5f7a750bb 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e7896203919a..35b1a5833b93 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 2952b6701674..8b6044889917 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,18 +6,21 @@ // import Foundation +import AnyCodable public struct TypeHolderExample: Codable, Hashable { public var stringItem: String public var numberItem: Double + public var floatItem: Float public var integerItem: Int public var boolItem: Bool public var arrayItem: [Int] - public init(stringItem: String, numberItem: Double, integerItem: Int, boolItem: Bool, arrayItem: [Int]) { + public init(stringItem: String, numberItem: Double, floatItem: Float, integerItem: Int, boolItem: Bool, arrayItem: [Int]) { self.stringItem = stringItem self.numberItem = numberItem + self.floatItem = floatItem self.integerItem = integerItem self.boolItem = boolItem self.arrayItem = arrayItem @@ -25,6 +28,7 @@ public struct TypeHolderExample: Codable, Hashable { public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" + case floatItem = "float_item" case integerItem = "integer_item" case boolItem = "bool_item" case arrayItem = "array_item" diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift index a1aa36bcfb0c..2bbc31806fff 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift new file mode 100644 index 000000000000..d3a7c37a7b2b --- /dev/null +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift @@ -0,0 +1,107 @@ +// +// XmlItem.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct XmlItem: Codable, Hashable { + + public var attributeString: String? + public var attributeNumber: Double? + public var attributeInteger: Int? + public var attributeBoolean: Bool? + public var wrappedArray: [Int]? + public var nameString: String? + public var nameNumber: Double? + public var nameInteger: Int? + public var nameBoolean: Bool? + public var nameArray: [Int]? + public var nameWrappedArray: [Int]? + public var prefixString: String? + public var prefixNumber: Double? + public var prefixInteger: Int? + public var prefixBoolean: Bool? + public var prefixArray: [Int]? + public var prefixWrappedArray: [Int]? + public var namespaceString: String? + public var namespaceNumber: Double? + public var namespaceInteger: Int? + public var namespaceBoolean: Bool? + public var namespaceArray: [Int]? + public var namespaceWrappedArray: [Int]? + public var prefixNsString: String? + public var prefixNsNumber: Double? + public var prefixNsInteger: Int? + public var prefixNsBoolean: Bool? + public var prefixNsArray: [Int]? + public var prefixNsWrappedArray: [Int]? + + public init(attributeString: String? = nil, attributeNumber: Double? = nil, attributeInteger: Int? = nil, attributeBoolean: Bool? = nil, wrappedArray: [Int]? = nil, nameString: String? = nil, nameNumber: Double? = nil, nameInteger: Int? = nil, nameBoolean: Bool? = nil, nameArray: [Int]? = nil, nameWrappedArray: [Int]? = nil, prefixString: String? = nil, prefixNumber: Double? = nil, prefixInteger: Int? = nil, prefixBoolean: Bool? = nil, prefixArray: [Int]? = nil, prefixWrappedArray: [Int]? = nil, namespaceString: String? = nil, namespaceNumber: Double? = nil, namespaceInteger: Int? = nil, namespaceBoolean: Bool? = nil, namespaceArray: [Int]? = nil, namespaceWrappedArray: [Int]? = nil, prefixNsString: String? = nil, prefixNsNumber: Double? = nil, prefixNsInteger: Int? = nil, prefixNsBoolean: Bool? = nil, prefixNsArray: [Int]? = nil, prefixNsWrappedArray: [Int]? = nil) { + self.attributeString = attributeString + self.attributeNumber = attributeNumber + self.attributeInteger = attributeInteger + self.attributeBoolean = attributeBoolean + self.wrappedArray = wrappedArray + self.nameString = nameString + self.nameNumber = nameNumber + self.nameInteger = nameInteger + self.nameBoolean = nameBoolean + self.nameArray = nameArray + self.nameWrappedArray = nameWrappedArray + self.prefixString = prefixString + self.prefixNumber = prefixNumber + self.prefixInteger = prefixInteger + self.prefixBoolean = prefixBoolean + self.prefixArray = prefixArray + self.prefixWrappedArray = prefixWrappedArray + self.namespaceString = namespaceString + self.namespaceNumber = namespaceNumber + self.namespaceInteger = namespaceInteger + self.namespaceBoolean = namespaceBoolean + self.namespaceArray = namespaceArray + self.namespaceWrappedArray = namespaceWrappedArray + self.prefixNsString = prefixNsString + self.prefixNsNumber = prefixNsNumber + self.prefixNsInteger = prefixNsInteger + self.prefixNsBoolean = prefixNsBoolean + self.prefixNsArray = prefixNsArray + self.prefixNsWrappedArray = prefixNsWrappedArray + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case attributeString = "attribute_string" + case attributeNumber = "attribute_number" + case attributeInteger = "attribute_integer" + case attributeBoolean = "attribute_boolean" + case wrappedArray = "wrapped_array" + case nameString = "name_string" + case nameNumber = "name_number" + case nameInteger = "name_integer" + case nameBoolean = "name_boolean" + case nameArray = "name_array" + case nameWrappedArray = "name_wrapped_array" + case prefixString = "prefix_string" + case prefixNumber = "prefix_number" + case prefixInteger = "prefix_integer" + case prefixBoolean = "prefix_boolean" + case prefixArray = "prefix_array" + case prefixWrappedArray = "prefix_wrapped_array" + case namespaceString = "namespace_string" + case namespaceNumber = "namespace_number" + case namespaceInteger = "namespace_integer" + case namespaceBoolean = "namespace_boolean" + case namespaceArray = "namespace_array" + case namespaceWrappedArray = "namespace_wrapped_array" + case prefixNsString = "prefix_ns_string" + case prefixNsNumber = "prefix_ns_number" + case prefixNsInteger = "prefix_ns_integer" + case prefixNsBoolean = "prefix_ns_boolean" + case prefixNsArray = "prefix_ns_array" + case prefixNsWrappedArray = "prefix_ns_wrapped_array" + } + +} diff --git a/samples/client/petstore/swift5/default/README.md b/samples/client/petstore/swift5/default/README.md index 1725415f7e04..a8c7405dd3eb 100644 --- a/samples/client/petstore/swift5/default/README.md +++ b/samples/client/petstore/swift5/default/README.md @@ -26,6 +26,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- *AnotherFakeAPI* | [**call123testSpecialTags**](docs/AnotherFakeAPI.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*FakeAPI* | [**createXmlItem**](docs/FakeAPI.md#createxmlitem) | **POST** /fake/create_xml_item | creates an XmlItem *FakeAPI* | [**fakeOuterBooleanSerialize**](docs/FakeAPI.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | *FakeAPI* | [**fakeOuterCompositeSerialize**](docs/FakeAPI.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | *FakeAPI* | [**fakeOuterNumberSerialize**](docs/FakeAPI.md#fakeouternumberserialize) | **POST** /fake/outer/number | @@ -38,6 +39,7 @@ Class | Method | HTTP request | Description *FakeAPI* | [**testGroupParameters**](docs/FakeAPI.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) *FakeAPI* | [**testInlineAdditionalProperties**](docs/FakeAPI.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties *FakeAPI* | [**testJsonFormData**](docs/FakeAPI.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeAPI* | [**testQueryParameterCollectionFormat**](docs/FakeAPI.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | *FakeClassnameTags123API* | [**testClassname**](docs/FakeClassnameTags123API.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case *PetAPI* | [**addPet**](docs/PetAPI.md#addpet) | **POST** /pet | Add a new pet to the store *PetAPI* | [**deletePet**](docs/PetAPI.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet @@ -64,13 +66,22 @@ Class | Method | HTTP request | Description ## Documentation For Models + - [AdditionalPropertiesAnyType](docs/AdditionalPropertiesAnyType.md) + - [AdditionalPropertiesArray](docs/AdditionalPropertiesArray.md) + - [AdditionalPropertiesBoolean](docs/AdditionalPropertiesBoolean.md) - [AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md) + - [AdditionalPropertiesInteger](docs/AdditionalPropertiesInteger.md) + - [AdditionalPropertiesNumber](docs/AdditionalPropertiesNumber.md) + - [AdditionalPropertiesObject](docs/AdditionalPropertiesObject.md) + - [AdditionalPropertiesString](docs/AdditionalPropertiesString.md) - [Animal](docs/Animal.md) - [AnimalFarm](docs/AnimalFarm.md) - [ApiResponse](docs/ApiResponse.md) - [ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md) - [ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md) - [ArrayTest](docs/ArrayTest.md) + - [BigCat](docs/BigCat.md) + - [BigCatAllOf](docs/BigCatAllOf.md) - [Capitalization](docs/Capitalization.md) - [Cat](docs/Cat.md) - [CatAllOf](docs/CatAllOf.md) @@ -104,6 +115,7 @@ Class | Method | HTTP request | Description - [TypeHolderDefault](docs/TypeHolderDefault.md) - [TypeHolderExample](docs/TypeHolderExample.md) - [User](docs/User.md) + - [XmlItem](docs/XmlItem.md) ## Documentation For Authorization diff --git a/samples/client/petstore/swift5/default/docs/AdditionalPropertiesAnyType.md b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesAnyType.md new file mode 100644 index 000000000000..bae60ab148f2 --- /dev/null +++ b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesAnyType.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesAnyType + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/default/docs/AdditionalPropertiesArray.md b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesArray.md new file mode 100644 index 000000000000..a371b5e28f32 --- /dev/null +++ b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesArray.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesArray + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/default/docs/AdditionalPropertiesBoolean.md b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesBoolean.md new file mode 100644 index 000000000000..d5f0d6da11ee --- /dev/null +++ b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesBoolean.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesBoolean + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/default/docs/AdditionalPropertiesClass.md b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesClass.md index 1f222244134e..1cffcdd84841 100644 --- a/samples/client/petstore/swift5/default/docs/AdditionalPropertiesClass.md +++ b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesClass.md @@ -4,7 +4,16 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **mapString** | **[String: String]** | | [optional] +**mapNumber** | **[String: Double]** | | [optional] +**mapInteger** | **[String: Int]** | | [optional] +**mapBoolean** | **[String: Bool]** | | [optional] +**mapArrayInteger** | [String: [Int]] | | [optional] +**mapArrayAnytype** | [String: [AnyCodable]] | | [optional] **mapMapString** | [String: [String: String]] | | [optional] +**mapMapAnytype** | [String: [String: AnyCodable]] | | [optional] +**anytype1** | [**AnyCodable**](.md) | | [optional] +**anytype2** | [**AnyCodable**](.md) | | [optional] +**anytype3** | [**AnyCodable**](.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/swift5/default/docs/AdditionalPropertiesInteger.md b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesInteger.md new file mode 100644 index 000000000000..629293abdfe9 --- /dev/null +++ b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesInteger.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesInteger + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/default/docs/AdditionalPropertiesNumber.md b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesNumber.md new file mode 100644 index 000000000000..65adfe78137c --- /dev/null +++ b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesNumber.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesNumber + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/default/docs/AdditionalPropertiesObject.md b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesObject.md new file mode 100644 index 000000000000..99d69b7aae6a --- /dev/null +++ b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesObject.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesObject + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/default/docs/AdditionalPropertiesString.md b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesString.md new file mode 100644 index 000000000000..5bb8122887c4 --- /dev/null +++ b/samples/client/petstore/swift5/default/docs/AdditionalPropertiesString.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesString + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/default/docs/BigCat.md b/samples/client/petstore/swift5/default/docs/BigCat.md new file mode 100644 index 000000000000..cd904c7381a2 --- /dev/null +++ b/samples/client/petstore/swift5/default/docs/BigCat.md @@ -0,0 +1,10 @@ +# BigCat + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**kind** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/default/docs/BigCatAllOf.md b/samples/client/petstore/swift5/default/docs/BigCatAllOf.md new file mode 100644 index 000000000000..20da4caf5d01 --- /dev/null +++ b/samples/client/petstore/swift5/default/docs/BigCatAllOf.md @@ -0,0 +1,10 @@ +# BigCatAllOf + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**kind** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/default/docs/FakeAPI.md b/samples/client/petstore/swift5/default/docs/FakeAPI.md index 543869c0d2e0..46599ecd3b12 100644 --- a/samples/client/petstore/swift5/default/docs/FakeAPI.md +++ b/samples/client/petstore/swift5/default/docs/FakeAPI.md @@ -4,6 +4,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- +[**createXmlItem**](FakeAPI.md#createxmlitem) | **POST** /fake/create_xml_item | creates an XmlItem [**fakeOuterBooleanSerialize**](FakeAPI.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | [**fakeOuterCompositeSerialize**](FakeAPI.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | [**fakeOuterNumberSerialize**](FakeAPI.md#fakeouternumberserialize) | **POST** /fake/outer/number | @@ -16,8 +17,59 @@ Method | HTTP request | Description [**testGroupParameters**](FakeAPI.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) [**testInlineAdditionalProperties**](FakeAPI.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties [**testJsonFormData**](FakeAPI.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +[**testQueryParameterCollectionFormat**](FakeAPI.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +# **createXmlItem** +```swift + open class func createXmlItem(xmlItem: XmlItem, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +creates an XmlItem + +this route creates an XmlItem + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let xmlItem = XmlItem(attributeString: "attributeString_example", attributeNumber: 123, attributeInteger: 123, attributeBoolean: true, wrappedArray: [123], nameString: "nameString_example", nameNumber: 123, nameInteger: 123, nameBoolean: true, nameArray: [123], nameWrappedArray: [123], prefixString: "prefixString_example", prefixNumber: 123, prefixInteger: 123, prefixBoolean: true, prefixArray: [123], prefixWrappedArray: [123], namespaceString: "namespaceString_example", namespaceNumber: 123, namespaceInteger: 123, namespaceBoolean: true, namespaceArray: [123], namespaceWrappedArray: [123], prefixNsString: "prefixNsString_example", prefixNsNumber: 123, prefixNsInteger: 123, prefixNsBoolean: true, prefixNsArray: [123], prefixNsWrappedArray: [123]) // XmlItem | XmlItem Body + +// creates an XmlItem +FakeAPI.createXmlItem(xmlItem: xmlItem) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **xmlItem** | [**XmlItem**](XmlItem.md) | XmlItem Body | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/xml, application/xml; charset=utf-8, application/xml; charset=utf-16, text/xml, text/xml; charset=utf-8, text/xml; charset=utf-16 + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **fakeOuterBooleanSerialize** ```swift open class func fakeOuterBooleanSerialize(body: Bool? = nil, completion: @escaping (_ data: Bool?, _ error: Error?) -> Void) @@ -660,3 +712,60 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **testQueryParameterCollectionFormat** +```swift + open class func testQueryParameterCollectionFormat(pipe: [String], ioutil: [String], http: [String], url: [String], context: [String], completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + + + +To test the collection format in query parameters + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let pipe = ["inner_example"] // [String] | +let ioutil = ["inner_example"] // [String] | +let http = ["inner_example"] // [String] | +let url = ["inner_example"] // [String] | +let context = ["inner_example"] // [String] | + +FakeAPI.testQueryParameterCollectionFormat(pipe: pipe, ioutil: ioutil, http: http, url: url, context: context) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **pipe** | [**[String]**](String.md) | | + **ioutil** | [**[String]**](String.md) | | + **http** | [**[String]**](String.md) | | + **url** | [**[String]**](String.md) | | + **context** | [**[String]**](String.md) | | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/swift5/default/docs/FormatTest.md b/samples/client/petstore/swift5/default/docs/FormatTest.md index f74d94f6c46a..55de2e05ecd9 100644 --- a/samples/client/petstore/swift5/default/docs/FormatTest.md +++ b/samples/client/petstore/swift5/default/docs/FormatTest.md @@ -16,6 +16,7 @@ Name | Type | Description | Notes **dateTime** | **Date** | | [optional] **uuid** | **UUID** | | [optional] **password** | **String** | | +**bigDecimal** | **Decimal** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/swift5/default/docs/Pet.md b/samples/client/petstore/swift5/default/docs/Pet.md index 5c05f98fad4a..36e8e4884394 100644 --- a/samples/client/petstore/swift5/default/docs/Pet.md +++ b/samples/client/petstore/swift5/default/docs/Pet.md @@ -6,7 +6,7 @@ Name | Type | Description | Notes **id** | **Int64** | | [optional] **category** | [**Category**](Category.md) | | [optional] **name** | **String** | | -**photoUrls** | **[String]** | | +**photoUrls** | **Set** | | **tags** | [Tag] | | [optional] **status** | **String** | pet status in the store | [optional] diff --git a/samples/client/petstore/swift5/default/docs/PetAPI.md b/samples/client/petstore/swift5/default/docs/PetAPI.md index 27efe0833476..1daf96285825 100644 --- a/samples/client/petstore/swift5/default/docs/PetAPI.md +++ b/samples/client/petstore/swift5/default/docs/PetAPI.md @@ -165,7 +165,7 @@ Name | Type | Description | Notes # **findPetsByTags** ```swift - open class func findPetsByTags(tags: [String], completion: @escaping (_ data: [Pet]?, _ error: Error?) -> Void) + open class func findPetsByTags(tags: Set, completion: @escaping (_ data: Set?, _ error: Error?) -> Void) ``` Finds Pets by tags @@ -177,7 +177,7 @@ Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 // The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new import PetstoreClient -let tags = ["inner_example"] // [String] | Tags to filter by +let tags = ["inner_example"] // Set | Tags to filter by // Finds Pets by tags PetAPI.findPetsByTags(tags: tags) { (response, error) in @@ -196,11 +196,11 @@ PetAPI.findPetsByTags(tags: tags) { (response, error) in Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **tags** | [**[String]**](String.md) | Tags to filter by | + **tags** | [**Set<String>**](String.md) | Tags to filter by | ### Return type -[**[Pet]**](Pet.md) +[**Set**](Pet.md) ### Authorization diff --git a/samples/client/petstore/swift5/default/docs/TypeHolderExample.md b/samples/client/petstore/swift5/default/docs/TypeHolderExample.md index 46d0471cd71a..c0530dc0e5b6 100644 --- a/samples/client/petstore/swift5/default/docs/TypeHolderExample.md +++ b/samples/client/petstore/swift5/default/docs/TypeHolderExample.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **stringItem** | **String** | | **numberItem** | **Double** | | +**floatItem** | **Float** | | **integerItem** | **Int** | | **boolItem** | **Bool** | | **arrayItem** | **[Int]** | | diff --git a/samples/client/petstore/swift5/default/docs/XmlItem.md b/samples/client/petstore/swift5/default/docs/XmlItem.md new file mode 100644 index 000000000000..1a4eb4e9c836 --- /dev/null +++ b/samples/client/petstore/swift5/default/docs/XmlItem.md @@ -0,0 +1,38 @@ +# XmlItem + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**attributeString** | **String** | | [optional] +**attributeNumber** | **Double** | | [optional] +**attributeInteger** | **Int** | | [optional] +**attributeBoolean** | **Bool** | | [optional] +**wrappedArray** | **[Int]** | | [optional] +**nameString** | **String** | | [optional] +**nameNumber** | **Double** | | [optional] +**nameInteger** | **Int** | | [optional] +**nameBoolean** | **Bool** | | [optional] +**nameArray** | **[Int]** | | [optional] +**nameWrappedArray** | **[Int]** | | [optional] +**prefixString** | **String** | | [optional] +**prefixNumber** | **Double** | | [optional] +**prefixInteger** | **Int** | | [optional] +**prefixBoolean** | **Bool** | | [optional] +**prefixArray** | **[Int]** | | [optional] +**prefixWrappedArray** | **[Int]** | | [optional] +**namespaceString** | **String** | | [optional] +**namespaceNumber** | **Double** | | [optional] +**namespaceInteger** | **Int** | | [optional] +**namespaceBoolean** | **Bool** | | [optional] +**namespaceArray** | **[Int]** | | [optional] +**namespaceWrappedArray** | **[Int]** | | [optional] +**prefixNsString** | **String** | | [optional] +**prefixNsNumber** | **Double** | | [optional] +**prefixNsInteger** | **Int** | | [optional] +**prefixNsBoolean** | **Bool** | | [optional] +**prefixNsArray** | **[Int]** | | [optional] +**prefixNsWrappedArray** | **[Int]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/default/project.yml b/samples/client/petstore/swift5/default/project.yml index 8e7102001b8d..5528eeee5135 100644 --- a/samples/client/petstore/swift5/default/project.yml +++ b/samples/client/petstore/swift5/default/project.yml @@ -12,3 +12,4 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} + - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/deprecated/Cartfile b/samples/client/petstore/swift5/deprecated/Cartfile index 8b137891791f..84aaa61ef2d3 100644 --- a/samples/client/petstore/swift5/deprecated/Cartfile +++ b/samples/client/petstore/swift5/deprecated/Cartfile @@ -1 +1,2 @@ +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/deprecated/Package.swift b/samples/client/petstore/swift5/deprecated/Package.swift index b7fe4734aa8a..b724838fe8d3 100644 --- a/samples/client/petstore/swift5/deprecated/Package.swift +++ b/samples/client/petstore/swift5/deprecated/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,13 +19,14 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: [], + dependencies: ["AnyCodable", ], path: "PetstoreClient/Classes" ), ] diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient.podspec b/samples/client/petstore/swift5/deprecated/PetstoreClient.podspec index b61285f6b25e..de06558efbdb 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient.podspec @@ -11,4 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index f46c7ac57ea3..10fd471343e7 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -40,7 +40,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: pet) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -50,7 +50,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -100,7 +100,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -145,8 +145,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -158,7 +158,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -196,8 +196,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -209,7 +209,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -248,7 +248,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -258,7 +258,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -293,7 +293,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: pet) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -303,7 +303,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -351,7 +351,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -361,7 +361,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -409,7 +409,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -419,7 +419,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index c34e83325514..48b322233343 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -41,7 +41,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -85,7 +85,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -95,7 +95,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -173,7 +173,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: order) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -183,7 +183,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 255ffb0cb55b..b35fc94ae58d 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -41,7 +41,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: user) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -86,7 +86,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: user) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -96,7 +96,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: user) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -180,7 +180,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -190,7 +190,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -225,7 +225,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -235,7 +235,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -270,8 +270,8 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -284,7 +284,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -317,7 +317,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -327,7 +327,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -368,7 +368,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: user) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -378,7 +378,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 93ed6b90b376..3aef2d1d6c54 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 77798101de28..8ed4cc03185b 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Describes the result of uploading an image resource */ public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 7f03d621a43f..508c796f6269 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** A category for a pet */ public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 5a6dadc0efbe..11ee45fef690 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** An order for a pets from the pet store */ @available(*, deprecated, message: "This schema is deprecated.") diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 0d6973e81655..c1bac661e1fe 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** A pet for sale in the pet store */ public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 5cb474912560..5a275f11b25c 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** A tag for a pet */ public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift index c6a5806130d9..058360d1249e 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** A User who is purchasing from the pet store */ public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/deprecated/project.yml b/samples/client/petstore/swift5/deprecated/project.yml index 8e7102001b8d..5528eeee5135 100644 --- a/samples/client/petstore/swift5/deprecated/project.yml +++ b/samples/client/petstore/swift5/deprecated/project.yml @@ -12,3 +12,4 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} + - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/nonPublicApi/Cartfile b/samples/client/petstore/swift5/nonPublicApi/Cartfile index 8b137891791f..84aaa61ef2d3 100644 --- a/samples/client/petstore/swift5/nonPublicApi/Cartfile +++ b/samples/client/petstore/swift5/nonPublicApi/Cartfile @@ -1 +1,2 @@ +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/nonPublicApi/Package.swift b/samples/client/petstore/swift5/nonPublicApi/Package.swift index b7fe4734aa8a..b724838fe8d3 100644 --- a/samples/client/petstore/swift5/nonPublicApi/Package.swift +++ b/samples/client/petstore/swift5/nonPublicApi/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,13 +19,14 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: [], + dependencies: ["AnyCodable", ], path: "PetstoreClient/Classes" ), ] diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient.podspec b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient.podspec index b61285f6b25e..de06558efbdb 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient.podspec @@ -11,4 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 537dacc4c1af..18a502d453b8 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -38,7 +38,7 @@ internal class AnotherFakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ internal class AnotherFakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 03fd8a8ca150..99317dab5072 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -36,7 +36,7 @@ internal class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -46,7 +46,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -77,7 +77,7 @@ internal class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -87,7 +87,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -118,7 +118,7 @@ internal class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -128,7 +128,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -159,7 +159,7 @@ internal class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -169,7 +169,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -200,7 +200,7 @@ internal class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -210,7 +210,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -242,8 +242,8 @@ internal class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -255,7 +255,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -288,7 +288,7 @@ internal class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -298,7 +298,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -378,7 +378,7 @@ internal class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -388,7 +388,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -508,8 +508,8 @@ internal class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -526,7 +526,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -569,8 +569,8 @@ internal class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -586,7 +586,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -618,7 +618,7 @@ internal class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -628,7 +628,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -668,7 +668,7 @@ internal class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -678,7 +678,7 @@ internal class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index 76f1b99ed1c9..5a85c1b29296 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -41,7 +41,7 @@ internal class FakeClassnameTags123API { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ internal class FakeClassnameTags123API { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 658ef61ddc07..ab2066aa50c8 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -40,7 +40,7 @@ internal class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -50,7 +50,7 @@ internal class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ internal class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -100,7 +100,7 @@ internal class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -145,8 +145,8 @@ internal class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -158,7 +158,7 @@ internal class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -196,8 +196,8 @@ internal class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -209,7 +209,7 @@ internal class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -248,7 +248,7 @@ internal class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -258,7 +258,7 @@ internal class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -293,7 +293,7 @@ internal class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -303,7 +303,7 @@ internal class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -351,7 +351,7 @@ internal class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -361,7 +361,7 @@ internal class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -409,7 +409,7 @@ internal class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -419,7 +419,7 @@ internal class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -467,7 +467,7 @@ internal class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -477,7 +477,7 @@ internal class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 3f0f902ccd87..49812742b01d 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -41,7 +41,7 @@ internal class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ internal class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -85,7 +85,7 @@ internal class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -95,7 +95,7 @@ internal class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ internal class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ internal class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -173,7 +173,7 @@ internal class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -183,7 +183,7 @@ internal class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index f4a787ff486c..2a1babfaa48f 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -38,7 +38,7 @@ internal class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ internal class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -80,7 +80,7 @@ internal class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -90,7 +90,7 @@ internal class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -122,7 +122,7 @@ internal class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -132,7 +132,7 @@ internal class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -168,7 +168,7 @@ internal class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -178,7 +178,7 @@ internal class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -213,7 +213,7 @@ internal class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -223,7 +223,7 @@ internal class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -258,8 +258,8 @@ internal class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -272,7 +272,7 @@ internal class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -302,7 +302,7 @@ internal class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -312,7 +312,7 @@ internal class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -350,7 +350,7 @@ internal class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -360,7 +360,7 @@ internal class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift index e5511b3aa373..729a612f7e60 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index b425caa61542..675937c90fa5 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index d3e38b1359f1..8c8ffe45faa8 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index 3ebe9e9a5dea..49ec4b6ac6e1 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable internal typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 71475818338e..25f5c34054ba 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 39b6314c5f4f..48daaaffa2ff 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index f7714be33640..b38ece08cc8b 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 1e6af9eebf3a..60f642f72a9a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index ffa880de23d5..1184a9c9c780 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 287f42d078e6..47016f63e3b3 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 7ee6ec868404..9d01dbd63915 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 9ed7d49d38cc..b99e1f159fcb 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 30f6f8fb4ddd..efb0200fe335 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model with \"_class\" property */ internal struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index fbb17db6d0e1..84457478611b 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index e43a80c44d10..580fc9003c7a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index ae19d9bbd635..33f2e3a8c1e1 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index ed9630866751..33a4472b1a7c 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index 71fd29e0d2a5..0c35bd818e05 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 7b76f6acb3ec..476bf2dbbaa7 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift index d0cd292f32d0..668a27c089f0 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ internal struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 0a3428c9e71a..29e7ce62f3b6 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 2e54ec687ff2..e42c76fb1b58 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 567aa61a6fc6..fff4dc5bef6f 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift index f111d9e2b133..71249ab1f5c8 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 2a1d385b7f93..c1057f3ebf57 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 3f6ba87c48d6..ebf6ae145dd0 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 09c3210f9b0b..1efae876cbfa 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name starting with number */ internal struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index f9b2cc51be30..aa9337dedc43 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ internal struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 1b95c7a5705a..0748cf0a096d 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 3daabf5885e4..378e41056a87 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 8c9e97c320ea..76508a79a262 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index e0cdcbea0558..cb0a71c180c9 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 379a695e5748..c28c280608f7 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 606a083e188d..7f9cf4abd2e3 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 53ab287d601a..bd512e38ac3f 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing reserved words */ internal struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 7d773a544048..848bbe6f3844 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index e11b2681cb35..50ff6bedf9b7 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index ac2d648e04ec..2acf7c82cd48 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 66c98a5fcdfe..1e306e356999 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 2f91bbc634dd..386054d5ca96 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift index b39c749f92aa..a3e131ac3d92 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable internal struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/project.yml b/samples/client/petstore/swift5/nonPublicApi/project.yml index 8e7102001b8d..5528eeee5135 100644 --- a/samples/client/petstore/swift5/nonPublicApi/project.yml +++ b/samples/client/petstore/swift5/nonPublicApi/project.yml @@ -12,3 +12,4 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} + - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/objcCompatible/Cartfile b/samples/client/petstore/swift5/objcCompatible/Cartfile index 8b137891791f..84aaa61ef2d3 100644 --- a/samples/client/petstore/swift5/objcCompatible/Cartfile +++ b/samples/client/petstore/swift5/objcCompatible/Cartfile @@ -1 +1,2 @@ +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/objcCompatible/Package.swift b/samples/client/petstore/swift5/objcCompatible/Package.swift index b7fe4734aa8a..b724838fe8d3 100644 --- a/samples/client/petstore/swift5/objcCompatible/Package.swift +++ b/samples/client/petstore/swift5/objcCompatible/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,13 +19,14 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: [], + dependencies: ["AnyCodable", ], path: "PetstoreClient/Classes" ), ] diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient.podspec b/samples/client/petstore/swift5/objcCompatible/PetstoreClient.podspec index b61285f6b25e..de06558efbdb 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient.podspec @@ -11,4 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index e1c068f26274..c0b90bf2f941 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -38,7 +38,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 0af3b8d55a8c..f37371daf503 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -36,7 +36,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -46,7 +46,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -77,7 +77,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -87,7 +87,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -118,7 +118,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -128,7 +128,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -159,7 +159,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -169,7 +169,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -200,7 +200,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -210,7 +210,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -242,8 +242,8 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -255,7 +255,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -288,7 +288,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -298,7 +298,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -378,7 +378,7 @@ import Foundation let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -388,7 +388,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -508,8 +508,8 @@ import Foundation let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -526,7 +526,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -569,8 +569,8 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -586,7 +586,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -618,7 +618,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -628,7 +628,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -668,7 +668,7 @@ import Foundation let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -678,7 +678,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index 7115a294b030..cae3d8e7da27 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -41,7 +41,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 7dc0f6ecde4e..a46c4b36d5c0 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -40,7 +40,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -50,7 +50,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -100,7 +100,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -145,8 +145,8 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -158,7 +158,7 @@ import Foundation let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -196,8 +196,8 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -209,7 +209,7 @@ import Foundation let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -248,7 +248,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -258,7 +258,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -293,7 +293,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -303,7 +303,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -351,7 +351,7 @@ import Foundation let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -361,7 +361,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -409,7 +409,7 @@ import Foundation let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -419,7 +419,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -467,7 +467,7 @@ import Foundation let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -477,7 +477,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 2abb82081dde..990aaaef8bec 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -41,7 +41,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -85,7 +85,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -95,7 +95,7 @@ import Foundation let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -173,7 +173,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -183,7 +183,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 1b384965e079..8fd6953a3f6b 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -38,7 +38,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -80,7 +80,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -90,7 +90,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -122,7 +122,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -132,7 +132,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -168,7 +168,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -178,7 +178,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -213,7 +213,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -223,7 +223,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -258,8 +258,8 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -272,7 +272,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -302,7 +302,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -312,7 +312,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -350,7 +350,7 @@ import Foundation let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -360,7 +360,7 @@ import Foundation let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 93ed6b90b376..3aef2d1d6c54 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 328276bc7a65..aab3e933f3fa 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class AdditionalPropertiesClass: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 6d64cbfd15d4..edd4017fd47f 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class Animal: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index e09b0e9efdc8..b20b894a1adb 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index b0b5971f6eff..7c6f40923fa0 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class ApiResponse: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 89c695cd14e9..1971654130e0 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class ArrayOfArrayOfNumberOnly: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 819e1bd2eb1d..5802e520a2ae 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class ArrayOfNumberOnly: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index a4ce9ef38a12..1f33262b7494 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class ArrayTest: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 0c0e2cb80334..0ede392b725c 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class Capitalization: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index c49009bc8902..ac482af78678 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class Cat: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 5ec8b58e544c..714af722413e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class CatAllOf: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 886ce95e2de5..4545308c0b57 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class Category: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 9adbcf24ad28..a16525261cd0 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model with \"_class\" property */ @objc public class ClassModel: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 7956f737fbbc..1a3e53ef2f3a 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class Client: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 773ea8ad2838..b6de22c59402 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class Dog: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 7097a8909761..88215365c681 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class DogAllOf: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 8a93813f845d..c3f1766d81c8 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class EnumArrays: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index d4029d73f8af..ab01cf297f8e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 262ff77d5008..ac8620deb3ba 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class EnumTest: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift index b2e54a8e9f38..0fac5200c96e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ @objc public class File: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index a98bdb63d50e..062b68c5e5a3 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class FileSchemaTestClass: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index f94b67e55569..dacf0f0fc21b 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class FormatTest: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 58809b2b6546..ac9b61b5a15d 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class HasOnlyReadOnly: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 15809e01efa6..cfb6cbbe8d5f 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class List: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 60b999005e4f..17011781e79d 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class MapTest: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 22f4d5b19563..ee69cad2f18f 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class MixedPropertiesAndAdditionalPropertiesClass: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 9e3a6ed6487e..19617eb563ef 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name starting with number */ @objc public class Model200Response: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 4a8e8afc854b..50b14e9343a6 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ @objc public class Name: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index efb6d07c5411..6da3b7f3634d 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class NumberOnly: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index e681ffaf689c..ad21080d0241 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class Order: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index e899975923ed..ad7118aae8b3 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class OuterComposite: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index c3b778cbbed4..9bd6f3bef8f6 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index d8b058e41a48..dcd875c08987 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class Pet: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 996cfa7125d6..1b278c72d119 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class ReadOnlyFirst: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 15aecfe6ad9b..f5c4e90d0e1e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing reserved words */ @objc public class Return: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 38aa865c4937..a512f5fb3278 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class SpecialModelName: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index c430e0a7d27e..1cb86591c3c2 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class StringBooleanMap: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 097c4ec8896d..eea33c371aca 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class Tag: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 3bc091cc0469..b6c174ed1461 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class TypeHolderDefault: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 4a95e7383783..d794fec5ce9d 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class TypeHolderExample: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift index b20a716f73a1..f233f6cccbdf 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable @objc public class User: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/project.yml b/samples/client/petstore/swift5/objcCompatible/project.yml index 8e7102001b8d..5528eeee5135 100644 --- a/samples/client/petstore/swift5/objcCompatible/project.yml +++ b/samples/client/petstore/swift5/objcCompatible/project.yml @@ -12,3 +12,4 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} + - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/promisekitLibrary/Cartfile b/samples/client/petstore/swift5/promisekitLibrary/Cartfile index 9a00bb83e5b9..84476a72b7c7 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/Cartfile +++ b/samples/client/petstore/swift5/promisekitLibrary/Cartfile @@ -1,2 +1,3 @@ github "mxcl/PromiseKit" ~> 6.13.1 +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/promisekitLibrary/Package.swift b/samples/client/petstore/swift5/promisekitLibrary/Package.swift index 959c7bdaf458..d88580abc72c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/Package.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,6 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), .package(url: "https://github.com/mxcl/PromiseKit.git", from: "6.12.0"), ], targets: [ @@ -26,7 +27,7 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: ["PromiseKit", ], + dependencies: ["AnyCodable", "PromiseKit", ], path: "PetstoreClient/Classes" ), ] diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient.podspec index 92e54fcfeb77..44b020f516e8 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient.podspec @@ -12,4 +12,5 @@ Pod::Spec.new do |s| s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' s.dependency 'PromiseKit/CorePromise', '~> 6.13.1' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 841595419898..96d992e7647c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -41,7 +41,7 @@ open class AnotherFakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class AnotherFakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index b87b809198bc..eadb85f7b623 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -39,7 +39,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -49,7 +49,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -82,7 +82,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -92,7 +92,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -125,7 +125,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -135,7 +135,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -168,7 +168,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -178,7 +178,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -211,7 +211,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -221,7 +221,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -255,8 +255,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -268,7 +268,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -303,7 +303,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -313,7 +313,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -395,7 +395,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -405,7 +405,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -527,8 +527,8 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -545,7 +545,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -590,8 +590,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -607,7 +607,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -641,7 +641,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -651,7 +651,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -693,7 +693,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -703,7 +703,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index 6066f4ec8312..14e41e22c1d7 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -44,7 +44,7 @@ open class FakeClassnameTags123API { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -54,7 +54,7 @@ open class FakeClassnameTags123API { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index e60028960c8b..4160df0cc9e0 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -43,7 +43,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -53,7 +53,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -95,7 +95,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -105,7 +105,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -152,8 +152,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -165,7 +165,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -205,8 +205,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -218,7 +218,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -259,7 +259,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -269,7 +269,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -306,7 +306,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -316,7 +316,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -366,7 +366,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -376,7 +376,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -426,7 +426,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -436,7 +436,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -486,7 +486,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -496,7 +496,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index a76e39ab8f08..88305f77980d 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -44,7 +44,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -54,7 +54,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -100,7 +100,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -138,7 +138,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -148,7 +148,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -182,7 +182,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -192,7 +192,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index b451a3404542..1bdb11595739 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -41,7 +41,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -85,7 +85,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -95,7 +95,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -129,7 +129,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -139,7 +139,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -177,7 +177,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -187,7 +187,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -224,7 +224,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -234,7 +234,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -271,8 +271,8 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -285,7 +285,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -317,7 +317,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -327,7 +327,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -367,7 +367,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -377,7 +377,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 736702ea5dd9..78d15ab2990d 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable import PromiseKit extension Bool: JSONEncodable { @@ -53,6 +54,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -193,3 +200,44 @@ extension RequestBuilder { return deferred.promise } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 84c1dad9ec12..75ab9bc8d0ad 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 81111252404e..0f825cf24d0c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index e09b0e9efdc8..b20b894a1adb 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index beec80ae582f..2b66af2dc949 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 5ed956b92273..06f0640475c2 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 86f71f1534a5..8c50c7fa1e44 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index e692ebd28098..461ec7cd9acf 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 692a3b212f3e..fbe62983d5e9 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 73335b4d3953..7f3a86932f1b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c17cf0d20685..8df239548324 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index dfd5504a653c..4109db4d1ef7 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 9b5340899a5f..7269ddbef6fd 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index f0e62d05b122..7d6eff2ffe1f 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 137b9a5254a9..b5f2bcea38a3 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4f7070a4f63d..1bfa23d7bc6d 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index eb761dca902b..73368c421433 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index d4029d73f8af..ab01cf297f8e 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 45236c792609..60a81bcac77b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 15dbd0c03fcc..90283656d1b3 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 52b3f620cdae..cff92673bbeb 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 232b8c492957..fc86676eec30 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 0097907e9b44..d7960f5c8008 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 48704fd13823..c5d4f2cae567 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 96af40355dd1..b54bd01e5dc9 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 1f3a7ca820c5..c8f639ef43d0 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index f6a5836117e4..5368032f09b4 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 57336422c862..84a40e1c1016 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 861a307e19d5..710f41648f90 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 1d2c31358171..15726ab16a47 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 6935641c3643..36904afbd508 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index c3b778cbbed4..9bd6f3bef8f6 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index fa5b125ff13d..7a1c2826a195 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 2ff56cc1566b..38fb57af3287 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 219b49420a12..ed7e538a06d5 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 562ba86f6027..18747e071bc6 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index a6903b84ce6f..0699c25ff7ed 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index bda5be349339..11c5f7a750bb 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e7896203919a..35b1a5833b93 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 2952b6701674..37277a4ac00a 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index a1aa36bcfb0c..2bbc31806fff 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/project.yml b/samples/client/petstore/swift5/promisekitLibrary/project.yml index d6d2be8a2247..043be1cc387a 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/project.yml +++ b/samples/client/petstore/swift5/promisekitLibrary/project.yml @@ -13,3 +13,4 @@ targets: scheme: {} dependencies: - carthage: PromiseKit + - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/readonlyProperties/Cartfile b/samples/client/petstore/swift5/readonlyProperties/Cartfile index 8b137891791f..84aaa61ef2d3 100644 --- a/samples/client/petstore/swift5/readonlyProperties/Cartfile +++ b/samples/client/petstore/swift5/readonlyProperties/Cartfile @@ -1 +1,2 @@ +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/readonlyProperties/Package.swift b/samples/client/petstore/swift5/readonlyProperties/Package.swift index b7fe4734aa8a..b724838fe8d3 100644 --- a/samples/client/petstore/swift5/readonlyProperties/Package.swift +++ b/samples/client/petstore/swift5/readonlyProperties/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,13 +19,14 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: [], + dependencies: ["AnyCodable", ], path: "PetstoreClient/Classes" ), ] diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec index b61285f6b25e..de06558efbdb 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec @@ -11,4 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 24b0015a270d..72b89640eeb4 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -38,7 +38,7 @@ open class AnotherFakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class AnotherFakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 58c4b8a093ce..cf92424d9cc1 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -36,7 +36,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -46,7 +46,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -77,7 +77,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -87,7 +87,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -118,7 +118,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -128,7 +128,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -159,7 +159,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -169,7 +169,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -200,7 +200,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -210,7 +210,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -242,8 +242,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -255,7 +255,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -288,7 +288,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -298,7 +298,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -378,7 +378,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -388,7 +388,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -508,8 +508,8 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -526,7 +526,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -569,8 +569,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -586,7 +586,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -618,7 +618,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -628,7 +628,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -668,7 +668,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -678,7 +678,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index fb3bb8ce00a7..d4d651664963 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -41,7 +41,7 @@ open class FakeClassnameTags123API { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class FakeClassnameTags123API { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 5cd3629127bf..a1fe0d12b1da 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -40,7 +40,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -50,7 +50,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -100,7 +100,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -145,8 +145,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -158,7 +158,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -196,8 +196,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -209,7 +209,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -248,7 +248,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -258,7 +258,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -293,7 +293,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -303,7 +303,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -351,7 +351,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -361,7 +361,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -409,7 +409,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -419,7 +419,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -467,7 +467,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -477,7 +477,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 95adcc200ae0..501f11f5f219 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -41,7 +41,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -85,7 +85,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -95,7 +95,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -173,7 +173,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -183,7 +183,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index cfd30068a9db..254474014d31 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -38,7 +38,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -80,7 +80,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -90,7 +90,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -122,7 +122,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -132,7 +132,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -168,7 +168,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -178,7 +178,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -213,7 +213,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -223,7 +223,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -258,8 +258,8 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -272,7 +272,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -302,7 +302,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -312,7 +312,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -350,7 +350,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -360,7 +360,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 93ed6b90b376..3aef2d1d6c54 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 8367f675bf39..ccdd14f32608 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 60f6bf71e55c..4efa18dd3164 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index e09b0e9efdc8..b20b894a1adb 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 5e675ecb9259..72f8703b0f82 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index ec4e5c4c549a..0904c4693323 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 1f93674c1fd7..e91f2a29097a 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 4bb7cb9e4fc4..5262ce6185fa 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index be6f54eea710..63f53d282930 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 7e7da73d1082..a74ed96c8ccb 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index f55fcf0da77d..d6ef582ff640 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 45cacce8d472..27c46ebc1ce0 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index fa76c380e3fa..e5e78f49084d 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 35b4e19f17a9..7553011dbf3f 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index d9c600c8e629..c458bc06ab03 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index b1263d421a00..6e165285668b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index cb0593680902..4850d7bbe5a0 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index d4029d73f8af..ab01cf297f8e 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index f55d8b5d16d0..ec8c5ff72bc0 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift index d359954b3ea5..bfe11105fc61 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index de3a5d1453ab..dd837236657b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 75ad7d9f6f71..078c2c4a08c5 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 2f8f0d5dc754..cddd61da5f76 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 45862d74d13f..b03a8bd8cfdc 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 864373dd97e8..db5928bc97e5 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 02e9ce327cee..cd1c8eb22c05 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 3b394c313161..070ed68254b2 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index d3b7e502a736..c90f8deb5563 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 9f9b5ec6526b..32a62548302a 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index a8101288f754..cf5160c930db 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index b5e93fcc9bf3..72a76adba292 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index c3b778cbbed4..9bd6f3bef8f6 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 3b3d0ce7bc24..d47534027595 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index e9d58c1ef0e9..6f285eef8a0e 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 80390f52969a..2c791780b410 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index bff078ca5967..baf147201756 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 37dfe65f8720..0b671fe0ad3b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index bf501c049b10..76fdd4a783dd 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 7557899f5ad6..d518a528ba70 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 8a4b7b1404b9..07ec715e38a0 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f6bea2aee0fb..f9a7b1e36e3e 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/project.yml b/samples/client/petstore/swift5/readonlyProperties/project.yml index 8e7102001b8d..5528eeee5135 100644 --- a/samples/client/petstore/swift5/readonlyProperties/project.yml +++ b/samples/client/petstore/swift5/readonlyProperties/project.yml @@ -12,3 +12,4 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} + - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/resultLibrary/Cartfile b/samples/client/petstore/swift5/resultLibrary/Cartfile index 8b137891791f..84aaa61ef2d3 100644 --- a/samples/client/petstore/swift5/resultLibrary/Cartfile +++ b/samples/client/petstore/swift5/resultLibrary/Cartfile @@ -1 +1,2 @@ +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/resultLibrary/Package.swift b/samples/client/petstore/swift5/resultLibrary/Package.swift index b7fe4734aa8a..b724838fe8d3 100644 --- a/samples/client/petstore/swift5/resultLibrary/Package.swift +++ b/samples/client/petstore/swift5/resultLibrary/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,13 +19,14 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: [], + dependencies: ["AnyCodable", ], path: "PetstoreClient/Classes" ), ] diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/resultLibrary/PetstoreClient.podspec index b61285f6b25e..de06558efbdb 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient.podspec @@ -11,4 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 1c777abff633..19521eb4d659 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -38,7 +38,7 @@ open class AnotherFakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class AnotherFakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 642370b2bc1c..a1eb0539707f 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -36,7 +36,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -46,7 +46,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -77,7 +77,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -87,7 +87,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -118,7 +118,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -128,7 +128,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -159,7 +159,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -169,7 +169,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -200,7 +200,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -210,7 +210,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -242,8 +242,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -255,7 +255,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -288,7 +288,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -298,7 +298,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -378,7 +378,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -388,7 +388,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -508,8 +508,8 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -526,7 +526,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -569,8 +569,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -586,7 +586,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -618,7 +618,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -628,7 +628,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -668,7 +668,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -678,7 +678,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index 4cf17d8a8849..f4608c34d82e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -41,7 +41,7 @@ open class FakeClassnameTags123API { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class FakeClassnameTags123API { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index fd4c8fb152ad..521125d8db8b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -40,7 +40,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -50,7 +50,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -100,7 +100,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -145,8 +145,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -158,7 +158,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -196,8 +196,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -209,7 +209,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -248,7 +248,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -258,7 +258,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -293,7 +293,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -303,7 +303,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -351,7 +351,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -361,7 +361,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -409,7 +409,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -419,7 +419,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -467,7 +467,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -477,7 +477,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index a50d54cada1e..18f3dd90a5e6 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -41,7 +41,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -85,7 +85,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -95,7 +95,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -173,7 +173,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -183,7 +183,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 58b6b51d8b06..2dfa75460f04 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -38,7 +38,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -80,7 +80,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -90,7 +90,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -122,7 +122,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -132,7 +132,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -168,7 +168,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -178,7 +178,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -213,7 +213,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -223,7 +223,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -258,8 +258,8 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -272,7 +272,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -302,7 +302,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -312,7 +312,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -350,7 +350,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -360,7 +360,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 93ed6b90b376..3aef2d1d6c54 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 84c1dad9ec12..75ab9bc8d0ad 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 81111252404e..0f825cf24d0c 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index e09b0e9efdc8..b20b894a1adb 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index beec80ae582f..2b66af2dc949 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 5ed956b92273..06f0640475c2 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 86f71f1534a5..8c50c7fa1e44 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index e692ebd28098..461ec7cd9acf 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 692a3b212f3e..fbe62983d5e9 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 73335b4d3953..7f3a86932f1b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c17cf0d20685..8df239548324 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index dfd5504a653c..4109db4d1ef7 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 9b5340899a5f..7269ddbef6fd 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index f0e62d05b122..7d6eff2ffe1f 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 137b9a5254a9..b5f2bcea38a3 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4f7070a4f63d..1bfa23d7bc6d 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index eb761dca902b..73368c421433 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index d4029d73f8af..ab01cf297f8e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 45236c792609..60a81bcac77b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 15dbd0c03fcc..90283656d1b3 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 52b3f620cdae..cff92673bbeb 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 232b8c492957..fc86676eec30 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 0097907e9b44..d7960f5c8008 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 48704fd13823..c5d4f2cae567 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 96af40355dd1..b54bd01e5dc9 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 1f3a7ca820c5..c8f639ef43d0 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index f6a5836117e4..5368032f09b4 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 57336422c862..84a40e1c1016 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 861a307e19d5..710f41648f90 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 1d2c31358171..15726ab16a47 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 6935641c3643..36904afbd508 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index c3b778cbbed4..9bd6f3bef8f6 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index fa5b125ff13d..7a1c2826a195 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 2ff56cc1566b..38fb57af3287 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 219b49420a12..ed7e538a06d5 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 562ba86f6027..18747e071bc6 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index a6903b84ce6f..0699c25ff7ed 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index bda5be349339..11c5f7a750bb 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e7896203919a..35b1a5833b93 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 2952b6701674..37277a4ac00a 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index a1aa36bcfb0c..2bbc31806fff 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/project.yml b/samples/client/petstore/swift5/resultLibrary/project.yml index 8e7102001b8d..5528eeee5135 100644 --- a/samples/client/petstore/swift5/resultLibrary/project.yml +++ b/samples/client/petstore/swift5/resultLibrary/project.yml @@ -12,3 +12,4 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} + - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/rxswiftLibrary/Cartfile b/samples/client/petstore/swift5/rxswiftLibrary/Cartfile index 37dea8f2ead7..2fd5cfcce547 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/Cartfile +++ b/samples/client/petstore/swift5/rxswiftLibrary/Cartfile @@ -1,2 +1,3 @@ github "ReactiveX/RxSwift" ~> 5.1.1 +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/rxswiftLibrary/Package.swift b/samples/client/petstore/swift5/rxswiftLibrary/Package.swift index e774d3e15c77..f3bcac26bb04 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/Package.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,6 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "5.0.0"), ], targets: [ @@ -26,7 +27,7 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: ["RxSwift"], + dependencies: ["AnyCodable", "RxSwift"], path: "PetstoreClient/Classes" ), ] diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient.podspec index 2e94d8a71f3e..2cd686660982 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient.podspec @@ -12,4 +12,5 @@ Pod::Spec.new do |s| s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' s.dependency 'RxSwift', '~> 5.1.1' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 1affe07267f1..12e7760ec2c5 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -43,7 +43,7 @@ open class AnotherFakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -53,7 +53,7 @@ open class AnotherFakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index f76577526ec8..06b88c2a71fb 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -41,7 +41,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -86,7 +86,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -96,7 +96,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -176,7 +176,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -186,7 +186,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -221,7 +221,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -231,7 +231,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -267,8 +267,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -280,7 +280,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -317,7 +317,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -327,7 +327,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -411,7 +411,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -421,7 +421,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -545,8 +545,8 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -563,7 +563,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -610,8 +610,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -627,7 +627,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -663,7 +663,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -673,7 +673,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -717,7 +717,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -727,7 +727,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index ec0775dbde0a..a0f65c5269e5 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -46,7 +46,7 @@ open class FakeClassnameTags123API { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -56,7 +56,7 @@ open class FakeClassnameTags123API { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index e1152e64add8..bb299e77d8c9 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -45,7 +45,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -55,7 +55,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -99,7 +99,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -109,7 +109,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -158,8 +158,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -171,7 +171,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -213,8 +213,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -226,7 +226,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -269,7 +269,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -279,7 +279,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -318,7 +318,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -328,7 +328,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -380,7 +380,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -390,7 +390,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -442,7 +442,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -452,7 +452,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -504,7 +504,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -514,7 +514,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 4dac29ad2be3..0f1e6023e174 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -46,7 +46,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -56,7 +56,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -94,7 +94,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -104,7 +104,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -144,7 +144,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -154,7 +154,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -190,7 +190,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -200,7 +200,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 5bfcc43e2a2e..18bf71fc41ce 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -43,7 +43,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -53,7 +53,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -89,7 +89,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -99,7 +99,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -135,7 +135,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -145,7 +145,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -185,7 +185,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -195,7 +195,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -234,7 +234,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -244,7 +244,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -283,8 +283,8 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -297,7 +297,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -331,7 +331,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -341,7 +341,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -383,7 +383,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -393,7 +393,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 93ed6b90b376..3aef2d1d6c54 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 84c1dad9ec12..75ab9bc8d0ad 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 81111252404e..0f825cf24d0c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index e09b0e9efdc8..b20b894a1adb 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index beec80ae582f..2b66af2dc949 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 5ed956b92273..06f0640475c2 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 86f71f1534a5..8c50c7fa1e44 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index e692ebd28098..461ec7cd9acf 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 692a3b212f3e..fbe62983d5e9 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 73335b4d3953..7f3a86932f1b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c17cf0d20685..8df239548324 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index dfd5504a653c..4109db4d1ef7 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index e8dbe76c46b6..44ac733f2c52 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index f0e62d05b122..7d6eff2ffe1f 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 137b9a5254a9..b5f2bcea38a3 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4f7070a4f63d..1bfa23d7bc6d 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index eb761dca902b..73368c421433 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index d4029d73f8af..ab01cf297f8e 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 45236c792609..60a81bcac77b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 15dbd0c03fcc..90283656d1b3 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 52b3f620cdae..cff92673bbeb 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 232b8c492957..fc86676eec30 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 0097907e9b44..d7960f5c8008 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 48704fd13823..c5d4f2cae567 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 96af40355dd1..b54bd01e5dc9 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 1f3a7ca820c5..c8f639ef43d0 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 0c9bc3d03fdb..9b7e3c46d8c0 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 57336422c862..84a40e1c1016 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 861a307e19d5..710f41648f90 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 1d2c31358171..15726ab16a47 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 6935641c3643..36904afbd508 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index c3b778cbbed4..9bd6f3bef8f6 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index fa5b125ff13d..7a1c2826a195 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 2ff56cc1566b..38fb57af3287 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 37e34d010dce..91d2d536a7b5 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 562ba86f6027..18747e071bc6 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index a6903b84ce6f..0699c25ff7ed 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index bda5be349339..11c5f7a750bb 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e7896203919a..35b1a5833b93 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 2952b6701674..37277a4ac00a 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index a1aa36bcfb0c..2bbc31806fff 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/project.yml b/samples/client/petstore/swift5/rxswiftLibrary/project.yml index 60393c28e669..7f6334fda437 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/project.yml +++ b/samples/client/petstore/swift5/rxswiftLibrary/project.yml @@ -13,3 +13,4 @@ targets: scheme: {} dependencies: - carthage: RxSwift + - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Cartfile b/samples/client/petstore/swift5/urlsessionLibrary/Cartfile index 8b137891791f..84aaa61ef2d3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Cartfile +++ b/samples/client/petstore/swift5/urlsessionLibrary/Cartfile @@ -1 +1,2 @@ +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Package.swift b/samples/client/petstore/swift5/urlsessionLibrary/Package.swift index b00b504b3ce7..99e2642257ad 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Package.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.0 +// swift-tools-version:5.1 import PackageDescription @@ -19,13 +19,14 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. // Targets can depend on other targets in this package, and on products in packages which this package depends on. .target( name: "PetstoreClient", - dependencies: [], + dependencies: ["AnyCodable", ], path: "Sources/PetstoreClient" ), ] diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec index 826cfbe106be..66ef37061f85 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec @@ -11,4 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'Sources/PetstoreClient/**/*.swift' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' end diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/AnotherFakeAPI.swift index 24b0015a270d..72b89640eeb4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/AnotherFakeAPI.swift @@ -38,7 +38,7 @@ open class AnotherFakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class AnotherFakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeAPI.swift index 58c4b8a093ce..cf92424d9cc1 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeAPI.swift @@ -36,7 +36,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -46,7 +46,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -77,7 +77,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -87,7 +87,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -118,7 +118,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -128,7 +128,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -159,7 +159,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -169,7 +169,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -200,7 +200,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -210,7 +210,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -242,8 +242,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -255,7 +255,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -288,7 +288,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -298,7 +298,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -378,7 +378,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -388,7 +388,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -508,8 +508,8 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -526,7 +526,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -569,8 +569,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -586,7 +586,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -618,7 +618,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -628,7 +628,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -668,7 +668,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -678,7 +678,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeClassnameTags123API.swift index fb3bb8ce00a7..d4d651664963 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeClassnameTags123API.swift @@ -41,7 +41,7 @@ open class FakeClassnameTags123API { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class FakeClassnameTags123API { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/PetAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/PetAPI.swift index 5cd3629127bf..a1fe0d12b1da 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/PetAPI.swift @@ -40,7 +40,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -50,7 +50,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -100,7 +100,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -145,8 +145,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -158,7 +158,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -196,8 +196,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -209,7 +209,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -248,7 +248,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -258,7 +258,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -293,7 +293,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -303,7 +303,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -351,7 +351,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -361,7 +361,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -409,7 +409,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -419,7 +419,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -467,7 +467,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -477,7 +477,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/StoreAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/StoreAPI.swift index 95adcc200ae0..501f11f5f219 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/StoreAPI.swift @@ -41,7 +41,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -85,7 +85,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -95,7 +95,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -173,7 +173,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -183,7 +183,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/UserAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/UserAPI.swift index cfd30068a9db..254474014d31 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/UserAPI.swift @@ -38,7 +38,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -80,7 +80,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -90,7 +90,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -122,7 +122,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -132,7 +132,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -168,7 +168,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -178,7 +178,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -213,7 +213,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -223,7 +223,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -258,8 +258,8 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -272,7 +272,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -302,7 +302,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -312,7 +312,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -350,7 +350,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -360,7 +360,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Extensions.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Extensions.swift index 93ed6b90b376..3aef2d1d6c54 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Extensions.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift index 0b63e40afecc..5c3e8279143e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift index 827350f5f132..6bae9f2d0ecd 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AnimalFarm.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AnimalFarm.swift index e09b0e9efdc8..b20b894a1adb 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift index a7560b2b05c3..a0f3a24a8ee9 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift index 6b567914851f..b4b66b37be5e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift index 5558ef13457f..1efbc2aa9e4d 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift index 0d5750eec8e0..6ca479263d3c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift index 03573fea5e30..fd148a09d299 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift index 3c79d5f3f484..54b81364f35c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift index 28204818be72..5074d59cb5df 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift index 1465d8ec5d9b..242fc578d458 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift index 77db41343a9c..323ab20082de 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift index 5d91d3877aaf..ec8a67480353 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift index ab765467b9e3..82d185f1a42b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift index 0b16bfde7573..573cb86e1ba7 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumClass.swift index d4029d73f8af..ab01cf297f8e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift index 08ced90f7570..ca04771171b9 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift index ed7fe6a2cacb..a899d021b870 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ public final class File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift index 4e78f79df47c..2465bd5103f4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift index 7b2ac4c53304..52c9d58241f6 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift index 61f9d19e68c5..4044065d4f89 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift index 1fb3cdaa0db2..c2457325b5bc 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift index 8c0b82b8e7b0..83a6f77e76ef 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index bfd55c9b14eb..08222b23f5cf 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift index 564c2d3ba319..533e5f2aea3d 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ public final class Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift index 0281c9387566..be9925066cec 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift index e92045617a9f..cfce5645a20f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift index 7ce51441ed27..d238c4c13ddf 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterEnum.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterEnum.swift index c3b778cbbed4..9bd6f3bef8f6 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift index 109d226d62e3..c036d6d0cfbc 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift index 6fff2152c024..1e2cdb966f21 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift index d9ce42fc5c40..3fd247331743 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift index 74605e1f6b9c..9e90edf7be9c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift index 46f76ea301aa..b30b0f62acee 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift index 83aa5e564195..f99b86d1d642 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift index 8403f60354dc..d266ad2f0d18 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift index 94e4cb058af3..dcbecdf498d8 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift index 24b0015a270d..72b89640eeb4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift @@ -38,7 +38,7 @@ open class AnotherFakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class AnotherFakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift index 58c4b8a093ce..cf92424d9cc1 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift @@ -36,7 +36,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -46,7 +46,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -77,7 +77,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -87,7 +87,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -118,7 +118,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -128,7 +128,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -159,7 +159,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -169,7 +169,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -200,7 +200,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -210,7 +210,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -242,8 +242,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "query": query.encodeToJSON(), ]) @@ -255,7 +255,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -288,7 +288,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -298,7 +298,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -378,7 +378,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -388,7 +388,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -508,8 +508,8 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), "enum_query_string": enumQueryString?.encodeToJSON(), "enum_query_integer": enumQueryInteger?.encodeToJSON(), @@ -526,7 +526,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -569,8 +569,8 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "required_string_group": requiredStringGroup.encodeToJSON(), "required_int64_group": requiredInt64Group.encodeToJSON(), "string_group": stringGroup?.encodeToJSON(), @@ -586,7 +586,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -618,7 +618,7 @@ open class FakeAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -628,7 +628,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -668,7 +668,7 @@ open class FakeAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -678,7 +678,7 @@ open class FakeAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift index fb3bb8ce00a7..d4d651664963 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift @@ -41,7 +41,7 @@ open class FakeClassnameTags123API { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class FakeClassnameTags123API { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "PATCH", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift index 5cd3629127bf..a1fe0d12b1da 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift @@ -40,7 +40,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -50,7 +50,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -90,7 +90,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "api_key": apiKey?.encodeToJSON(), @@ -100,7 +100,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -145,8 +145,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "status": status.encodeToJSON(), ]) @@ -158,7 +158,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -196,8 +196,8 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "tags": tags.encodeToJSON(), ]) @@ -209,7 +209,7 @@ open class PetAPI { let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -248,7 +248,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -258,7 +258,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -293,7 +293,7 @@ open class PetAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -303,7 +303,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -351,7 +351,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "application/x-www-form-urlencoded", @@ -361,7 +361,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -409,7 +409,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -419,7 +419,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -467,7 +467,7 @@ open class PetAPI { let nonNullParameters = APIHelper.rejectNil(formParams) let parameters = APIHelper.convertBoolToString(nonNullParameters) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ "Content-Type": "multipart/form-data", @@ -477,7 +477,7 @@ open class PetAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift index 95adcc200ae0..501f11f5f219 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift @@ -41,7 +41,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -51,7 +51,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -85,7 +85,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -95,7 +95,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -131,7 +131,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -141,7 +141,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -173,7 +173,7 @@ open class StoreAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -183,7 +183,7 @@ open class StoreAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift index cfd30068a9db..254474014d31 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift @@ -38,7 +38,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -48,7 +48,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -80,7 +80,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -90,7 +90,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -122,7 +122,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -132,7 +132,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "POST", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -168,7 +168,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -178,7 +178,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "DELETE", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -213,7 +213,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -223,7 +223,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -258,8 +258,8 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - var url = URLComponents(string: URLString) - url?.queryItems = APIHelper.mapValuesToQueryItems([ + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ "username": username.encodeToJSON(), "password": password.encodeToJSON(), ]) @@ -272,7 +272,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -302,7 +302,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters: [String: Any]? = nil - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -312,7 +312,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "GET", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } /** @@ -350,7 +350,7 @@ open class UserAPI { let URLString = PetstoreClientAPI.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - let url = URLComponents(string: URLString) + let urlComponents = URLComponents(string: URLString) let nillableHeaders: [String: Any?] = [ : @@ -360,7 +360,7 @@ open class UserAPI { let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - return requestBuilder.init(method: "PUT", URLString: (url?.string ?? URLString), parameters: parameters, headers: headerParameters) + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift index 93ed6b90b376..3aef2d1d6c54 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift @@ -5,6 +5,7 @@ // import Foundation +import AnyCodable extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -52,6 +53,12 @@ extension Array: JSONEncodable { } } +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + extension Dictionary: JSONEncodable { func encodeToJSON() -> Any { var dictionary = [AnyHashable: Any]() @@ -177,3 +184,44 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift index 0b63e40afecc..5c3e8279143e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift index 827350f5f132..6bae9f2d0ecd 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift index e09b0e9efdc8..b20b894a1adb 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift @@ -6,5 +6,6 @@ // import Foundation +import AnyCodable public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift index a7560b2b05c3..a0f3a24a8ee9 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift index 6b567914851f..b4b66b37be5e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift index 5558ef13457f..1efbc2aa9e4d 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift index 0d5750eec8e0..6ca479263d3c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift index 03573fea5e30..fd148a09d299 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift index 3c79d5f3f484..54b81364f35c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift index 28204818be72..5074d59cb5df 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift index 1465d8ec5d9b..242fc578d458 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift index 92620d368f70..ba363df9d14d 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model with \"_class\" property */ public final class ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift index 77db41343a9c..323ab20082de 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift index 5d91d3877aaf..ec8a67480353 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift index ab765467b9e3..82d185f1a42b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift index 0b16bfde7573..573cb86e1ba7 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift index d4029d73f8af..ab01cf297f8e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift index 08ced90f7570..ca04771171b9 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift index ed7fe6a2cacb..a899d021b870 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Must be named `File` for test. */ public final class File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift index 4e78f79df47c..2465bd5103f4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift index 7b2ac4c53304..52c9d58241f6 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift index 61f9d19e68c5..4044065d4f89 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift index 1fb3cdaa0db2..c2457325b5bc 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift index 8c0b82b8e7b0..83a6f77e76ef 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index bfd55c9b14eb..08222b23f5cf 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift index 95952d7c5295..10290c43c3e1 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name starting with number */ public final class Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift index 564c2d3ba319..533e5f2aea3d 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing model name same as property name */ public final class Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift index 0281c9387566..be9925066cec 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift index e92045617a9f..cfce5645a20f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift index 7ce51441ed27..d238c4c13ddf 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift index c3b778cbbed4..9bd6f3bef8f6 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift index 109d226d62e3..c036d6d0cfbc 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift index 6fff2152c024..1e2cdb966f21 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift index 7083431b5df4..c28939bb89d4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable /** Model for testing reserved words */ public final class Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift index d9ce42fc5c40..3fd247331743 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift index 74605e1f6b9c..9e90edf7be9c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift index 46f76ea301aa..b30b0f62acee 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift index 83aa5e564195..f99b86d1d642 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift index 8403f60354dc..d266ad2f0d18 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift index 94e4cb058af3..dcbecdf498d8 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift @@ -6,6 +6,7 @@ // import Foundation +import AnyCodable public final class User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/project.yml b/samples/client/petstore/swift5/urlsessionLibrary/project.yml index 8d7dc23858cd..8280cd17d31e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/project.yml +++ b/samples/client/petstore/swift5/urlsessionLibrary/project.yml @@ -12,3 +12,4 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} + - carthage: AnyCodable From 7df0f56fdcec7f9563947fcaafed701b8955181e Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 26 Apr 2021 10:21:48 +0800 Subject: [PATCH 056/186] update samples --- .../Models/AdditionalPropertiesAnyType.swift | 13 ++++--- .../Models/AdditionalPropertiesArray.swift | 13 ++++--- .../Models/AdditionalPropertiesBoolean.swift | 13 ++++--- .../Models/AdditionalPropertiesClass.swift | 9 +++++ .../Models/AdditionalPropertiesInteger.swift | 13 ++++--- .../Models/AdditionalPropertiesNumber.swift | 13 ++++--- .../Models/AdditionalPropertiesObject.swift | 13 ++++--- .../Models/AdditionalPropertiesString.swift | 13 ++++--- .../Classes/OpenAPIs/Models/BigCat.swift | 12 ++++++ .../Classes/OpenAPIs/Models/BigCatAllOf.swift | 12 ++++++ .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/FormatTest.swift | 17 +-------- .../OpenAPIs/Models/TypeHolderExample.swift | 1 + .../Classes/OpenAPIs/Models/XmlItem.swift | 38 ++++++++++++++++++- 14 files changed, 130 insertions(+), 54 deletions(-) diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift index 17f687d795ae..dd9fdef5c970 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift @@ -15,6 +15,9 @@ public struct AdditionalPropertiesAnyType: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } public var additionalProperties: [String: AnyCodable] = [:] public subscript(key: String) -> AnyCodable? { @@ -33,11 +36,10 @@ public struct AdditionalPropertiesAnyType: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeIfPresent(name, forKey: "name") - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -51,4 +53,5 @@ public struct AdditionalPropertiesAnyType: Codable, Hashable { additionalProperties = try container.decodeMap(AnyCodable.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift index 17c231a843cb..03708059804b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift @@ -15,6 +15,9 @@ public struct AdditionalPropertiesArray: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } public var additionalProperties: [String: [AnyCodable]] = [:] public subscript(key: String) -> [AnyCodable]? { @@ -33,11 +36,10 @@ public struct AdditionalPropertiesArray: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeIfPresent(name, forKey: "name") - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -51,4 +53,5 @@ public struct AdditionalPropertiesArray: Codable, Hashable { additionalProperties = try container.decodeMap([AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift index 07ee170c0185..6a8bd72e6e54 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift @@ -15,6 +15,9 @@ public struct AdditionalPropertiesBoolean: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -33,11 +36,10 @@ public struct AdditionalPropertiesBoolean: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeIfPresent(name, forKey: "name") - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -51,4 +53,5 @@ public struct AdditionalPropertiesBoolean: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 5cc58ee5f9ee..abe4a1818906 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -54,7 +54,16 @@ public struct AdditionalPropertiesClass: Codable, Hashable { public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapNumber, forKey: .mapNumber) + try container.encodeIfPresent(mapInteger, forKey: .mapInteger) + try container.encodeIfPresent(mapBoolean, forKey: .mapBoolean) + try container.encodeIfPresent(mapArrayInteger, forKey: .mapArrayInteger) + try container.encodeIfPresent(mapArrayAnytype, forKey: .mapArrayAnytype) try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + try container.encodeIfPresent(mapMapAnytype, forKey: .mapMapAnytype) + try container.encodeIfPresent(anytype1, forKey: .anytype1) + try container.encodeIfPresent(anytype2, forKey: .anytype2) + try container.encodeIfPresent(anytype3, forKey: .anytype3) } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift index ad95acdcbbec..90109260d024 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift @@ -15,6 +15,9 @@ public struct AdditionalPropertiesInteger: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } public var additionalProperties: [String: Int] = [:] public subscript(key: String) -> Int? { @@ -33,11 +36,10 @@ public struct AdditionalPropertiesInteger: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeIfPresent(name, forKey: "name") - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -51,4 +53,5 @@ public struct AdditionalPropertiesInteger: Codable, Hashable { additionalProperties = try container.decodeMap(Int.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift index 37e32a47e532..2cae455cf248 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift @@ -15,6 +15,9 @@ public struct AdditionalPropertiesNumber: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } public var additionalProperties: [String: Double] = [:] public subscript(key: String) -> Double? { @@ -33,11 +36,10 @@ public struct AdditionalPropertiesNumber: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeIfPresent(name, forKey: "name") - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -51,4 +53,5 @@ public struct AdditionalPropertiesNumber: Codable, Hashable { additionalProperties = try container.decodeMap(Double.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift index a0fc35f621b3..6f86abd07abb 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift @@ -15,6 +15,9 @@ public struct AdditionalPropertiesObject: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } public var additionalProperties: [String: [String: AnyCodable]] = [:] public subscript(key: String) -> [String: AnyCodable]? { @@ -33,11 +36,10 @@ public struct AdditionalPropertiesObject: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeIfPresent(name, forKey: "name") - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -51,4 +53,5 @@ public struct AdditionalPropertiesObject: Codable, Hashable { additionalProperties = try container.decodeMap([String: AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift index 0719ce37c02f..b8b54f04b1b8 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift @@ -15,6 +15,9 @@ public struct AdditionalPropertiesString: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } public var additionalProperties: [String: String] = [:] public subscript(key: String) -> String? { @@ -33,11 +36,10 @@ public struct AdditionalPropertiesString: Codable, Hashable { // Encodable protocol methods public func encode(to encoder: Encoder) throws { - - var container = encoder.container(keyedBy: String.self) - - try container.encodeIfPresent(name, forKey: "name") - try container.encodeMap(additionalProperties) + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) } // Decodable protocol methods @@ -51,4 +53,5 @@ public struct AdditionalPropertiesString: Codable, Hashable { additionalProperties = try container.decodeMap(String.self, excludedKeys: nonAdditionalPropertyKeys) } + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift index dd2a04f4d68a..9c3f0f237a39 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift @@ -21,5 +21,17 @@ public struct BigCat: Codable, Hashable { public init(kind: Kind? = nil) { self.kind = kind } + public enum CodingKeys: String, CodingKey, CaseIterable { + case kind + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(kind, forKey: .kind) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift index f68ef09c4a5b..6b78ab7b42a2 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift @@ -21,5 +21,17 @@ public struct BigCatAllOf: Codable, Hashable { public init(kind: Kind? = nil) { self.kind = kind } + public enum CodingKeys: String, CodingKey, CaseIterable { + case kind + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(kind, forKey: .kind) + } + + } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 4109db4d1ef7..611a8a32e393 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -11,9 +11,9 @@ import AnyCodable public struct Category: Codable, Hashable { public var id: Int64? - public var name: String? = "default-name" + public var name: String = "default-name" - public init(id: Int64? = nil, name: String? = "default-name") { + public init(id: Int64? = nil, name: String = "default-name") { self.id = id self.name = name } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 65aaecb7ae38..ea348c3581ee 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -41,7 +41,6 @@ public struct FormatTest: Codable, Hashable { self.password = password self.bigDecimal = bigDecimal } - public enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -58,21 +57,6 @@ public struct FormatTest: Codable, Hashable { case password case bigDecimal = "BigDecimal" } - public enum CodingKeys: String, CodingKey, CaseIterable { - case integer - case int32 - case int64 - case number - case float - case double - case string - case byte - case binary - case date - case dateTime - case uuid - case password - } // Encodable protocol methods @@ -91,6 +75,7 @@ public struct FormatTest: Codable, Hashable { try container.encodeIfPresent(dateTime, forKey: .dateTime) try container.encodeIfPresent(uuid, forKey: .uuid) try container.encode(password, forKey: .password) + try container.encodeIfPresent(bigDecimal, forKey: .bigDecimal) } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 8b6044889917..66dc3819f2a9 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -40,6 +40,7 @@ public struct TypeHolderExample: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(stringItem, forKey: .stringItem) try container.encode(numberItem, forKey: .numberItem) + try container.encode(floatItem, forKey: .floatItem) try container.encode(integerItem, forKey: .integerItem) try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift index d3a7c37a7b2b..daa3716aeca6 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift @@ -71,7 +71,6 @@ public struct XmlItem: Codable, Hashable { self.prefixNsArray = prefixNsArray self.prefixNsWrappedArray = prefixNsWrappedArray } - public enum CodingKeys: String, CodingKey, CaseIterable { case attributeString = "attribute_string" case attributeNumber = "attribute_number" @@ -104,4 +103,41 @@ public struct XmlItem: Codable, Hashable { case prefixNsWrappedArray = "prefix_ns_wrapped_array" } + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(attributeString, forKey: .attributeString) + try container.encodeIfPresent(attributeNumber, forKey: .attributeNumber) + try container.encodeIfPresent(attributeInteger, forKey: .attributeInteger) + try container.encodeIfPresent(attributeBoolean, forKey: .attributeBoolean) + try container.encodeIfPresent(wrappedArray, forKey: .wrappedArray) + try container.encodeIfPresent(nameString, forKey: .nameString) + try container.encodeIfPresent(nameNumber, forKey: .nameNumber) + try container.encodeIfPresent(nameInteger, forKey: .nameInteger) + try container.encodeIfPresent(nameBoolean, forKey: .nameBoolean) + try container.encodeIfPresent(nameArray, forKey: .nameArray) + try container.encodeIfPresent(nameWrappedArray, forKey: .nameWrappedArray) + try container.encodeIfPresent(prefixString, forKey: .prefixString) + try container.encodeIfPresent(prefixNumber, forKey: .prefixNumber) + try container.encodeIfPresent(prefixInteger, forKey: .prefixInteger) + try container.encodeIfPresent(prefixBoolean, forKey: .prefixBoolean) + try container.encodeIfPresent(prefixArray, forKey: .prefixArray) + try container.encodeIfPresent(prefixWrappedArray, forKey: .prefixWrappedArray) + try container.encodeIfPresent(namespaceString, forKey: .namespaceString) + try container.encodeIfPresent(namespaceNumber, forKey: .namespaceNumber) + try container.encodeIfPresent(namespaceInteger, forKey: .namespaceInteger) + try container.encodeIfPresent(namespaceBoolean, forKey: .namespaceBoolean) + try container.encodeIfPresent(namespaceArray, forKey: .namespaceArray) + try container.encodeIfPresent(namespaceWrappedArray, forKey: .namespaceWrappedArray) + try container.encodeIfPresent(prefixNsString, forKey: .prefixNsString) + try container.encodeIfPresent(prefixNsNumber, forKey: .prefixNsNumber) + try container.encodeIfPresent(prefixNsInteger, forKey: .prefixNsInteger) + try container.encodeIfPresent(prefixNsBoolean, forKey: .prefixNsBoolean) + try container.encodeIfPresent(prefixNsArray, forKey: .prefixNsArray) + try container.encodeIfPresent(prefixNsWrappedArray, forKey: .prefixNsWrappedArray) + } + + + } From b6197dd859d4381a68770e6cab32c9d1ba141662 Mon Sep 17 00:00:00 2001 From: Yuriy Belenko Date: Mon, 26 Apr 2021 05:33:18 +0300 Subject: [PATCH 057/186] [core] Add refreshUrl to CodegenSecurity (#9210) * Add refreshUrl to CodegenSecurity Ref: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#oauth-flow-object * Add refreshUrl to setOauth2Info method --- .../java/org/openapitools/codegen/CodegenSecurity.java | 7 +++++-- .../main/java/org/openapitools/codegen/DefaultCodegen.java | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenSecurity.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenSecurity.java index ca659105b7fb..a5d5bd4ce857 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenSecurity.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenSecurity.java @@ -39,7 +39,7 @@ public class CodegenSecurity { public String keyParamName; public Boolean isKeyInQuery, isKeyInHeader, isKeyInCookie; // Oauth specific - public String flow, authorizationUrl, tokenUrl; + public String flow, authorizationUrl, tokenUrl, refreshUrl; public List> scopes; public Boolean isCode, isPassword, isApplication, isImplicit; @@ -66,6 +66,7 @@ public CodegenSecurity filterByScopeNames(List filterScopes) { filteredSecurity.flow = flow; filteredSecurity.tokenUrl = tokenUrl; filteredSecurity.authorizationUrl = authorizationUrl; + filteredSecurity.refreshUrl = refreshUrl; // It is not possible to deep copy the extensions, as we have no idea what types they are. // So the filtered method *will* refer to the original extensions, if any. filteredSecurity.vendorExtensions = new HashMap(vendorExtensions); @@ -109,6 +110,7 @@ public boolean equals(Object o) { Objects.equals(flow, that.flow) && Objects.equals(authorizationUrl, that.authorizationUrl) && Objects.equals(tokenUrl, that.tokenUrl) && + Objects.equals(refreshUrl, that.refreshUrl) && Objects.equals(scopes, that.scopes) && Objects.equals(isCode, that.isCode) && Objects.equals(isPassword, that.isPassword) && @@ -122,7 +124,7 @@ public int hashCode() { return Objects.hash(name, type, scheme, isBasic, isOAuth, isApiKey, isBasicBasic, isHttpSignature, isBasicBearer, bearerFormat, vendorExtensions, keyParamName, isKeyInQuery, isKeyInHeader, isKeyInCookie, flow, - authorizationUrl, tokenUrl, scopes, isCode, isPassword, isApplication, isImplicit); + authorizationUrl, tokenUrl, refreshUrl, scopes, isCode, isPassword, isApplication, isImplicit); } @Override @@ -146,6 +148,7 @@ public String toString() { sb.append(", flow='").append(flow).append('\''); sb.append(", authorizationUrl='").append(authorizationUrl).append('\''); sb.append(", tokenUrl='").append(tokenUrl).append('\''); + sb.append(", refreshUrl='").append(refreshUrl).append('\''); sb.append(", scopes=").append(scopes); sb.append(", isCode=").append(isCode); sb.append(", isPassword=").append(isPassword); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 38345e24fe0a..2edf1bf15af0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -5603,6 +5603,7 @@ protected String getContentType(RequestBody requestBody) { private void setOauth2Info(CodegenSecurity codegenSecurity, OAuthFlow flow) { codegenSecurity.authorizationUrl = flow.getAuthorizationUrl(); codegenSecurity.tokenUrl = flow.getTokenUrl(); + codegenSecurity.refreshUrl = flow.getRefreshUrl(); if (flow.getScopes() != null && !flow.getScopes().isEmpty()) { List> scopes = new ArrayList<>(); From f572125b30b82b516512c44a3da4bb103a95767a Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 26 Apr 2021 14:01:40 +0800 Subject: [PATCH 058/186] [Python] Fix exclusive min and max (#9340) * [Python] Fix exclusiveMinimum and exclusiveMaximum conditions * add tests, update samples Co-authored-by: Jiri Kuncar --- .../openapi-generator/src/main/resources/python/api.mustache | 4 ++-- ...fake-endpoints-models-for-testing-with-http-signature.yaml | 2 ++ .../client/petstore/python/petstore_api/api/fake_api.py | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/python/api.mustache b/modules/openapi-generator/src/main/resources/python/api.mustache index cbad6df2c543..37339fc51156 100644 --- a/modules/openapi-generator/src/main/resources/python/api.mustache +++ b/modules/openapi-generator/src/main/resources/python/api.mustache @@ -230,8 +230,8 @@ class {{classname}}(object): 'min_length': {{minLength}},{{/minLength}}{{#maxItems}} 'max_items': {{maxItems}},{{/maxItems}}{{#minItems}} 'min_items': {{minItems}},{{/minItems}}{{#maximum}} - {{#exclusiveMaximum}}'exclusive_maximum'{{/exclusiveMaximum}}'inclusive_maximum'{{^exclusiveMaximum}}{{/exclusiveMaximum}}: {{maximum}},{{/maximum}}{{#minimum}} - {{#exclusiveMinimum}}'exclusive_minimum'{{/exclusiveMinimum}}'inclusive_minimum'{{^exclusiveMinimum}}{{/exclusiveMinimum}}: {{minimum}},{{/minimum}}{{#pattern}} + {{#exclusiveMaximum}}'exclusive_maximum'{{/exclusiveMaximum}}{{^exclusiveMaximum}}'inclusive_maximum'{{/exclusiveMaximum}}: {{maximum}},{{/maximum}}{{#minimum}} + {{#exclusiveMinimum}}'exclusive_minimum'{{/exclusiveMinimum}}{{^exclusiveMinimum}}'inclusive_minimum'{{/exclusiveMinimum}}: {{minimum}},{{/minimum}}{{#pattern}} 'regex': { 'pattern': r'{{{vendorExtensions.x-regex}}}', # noqa: E501{{#vendorExtensions.x-modifiers}} {{#-first}}'flags': (re.{{.}}{{/-first}}{{^-first}} re.{{.}}{{/-first}}{{^-last}} | {{/-last}}{{#-last}}){{/-last}}{{/vendorExtensions.x-modifiers}} diff --git a/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml b/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml index 3c77711d37c9..a1e07d488bdf 100644 --- a/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml @@ -692,12 +692,14 @@ paths: type: number format: float maximum: 987.6 + exclusiveMaximum: true double: description: None type: number format: double minimum: 67.8 maximum: 123.4 + exclusiveMaximum: true string: description: None type: string diff --git a/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py b/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py index 5f98e228c3be..27a387e05701 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py +++ b/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py @@ -2239,7 +2239,7 @@ def __test_endpoint_parameters( }, ('double',): { - 'inclusive_maximum': 123.4, + 'exclusive_maximum': 123.4, 'inclusive_minimum': 67.8, }, ('pattern_without_delimiter',): { @@ -2260,7 +2260,7 @@ def __test_endpoint_parameters( }, ('float',): { - 'inclusive_maximum': 987.6, + 'exclusive_maximum': 987.6, }, ('string',): { From a62d22593e185675dc7d3e05f94a68e6bfeb3944 Mon Sep 17 00:00:00 2001 From: dersvenhesse Date: Mon, 26 Apr 2021 10:41:45 +0200 Subject: [PATCH 059/186] [DOCS] Updated pom.xml snippet with latest version (#9342) --- docs/plugins.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/plugins.md b/docs/plugins.md index 224a0d5fa580..691c5fa85d1f 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -15,7 +15,9 @@ Add to your `build->plugins` section (default phase is `generate-sources` phase) org.openapitools openapi-generator-maven-plugin - 5.0.0 + + 5.1.0 + From ad3ecadd7514c95916455f439dc1524601a8853a Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 26 Apr 2021 22:08:49 +0800 Subject: [PATCH 060/186] Move ensure up-to-date script to drone.io (#9339) * move ensure up-to-date to drone.io * fix tests * Revert "fix tests" This reverts commit ea5efd3b3b45e7e7720b2aa893403aed8a458d9f. * skip 2.0 tests * use mvnw * fail fast * fix meta-codegen * test java 11 first --- CI/.drone.yml | 34 +++++++++---------- CI/circle_parallel.sh | 3 +- bin/meta-codegen.sh | 8 +++-- bin/utils/test-fake-petstore-for-all.sh | 19 ++++++----- .../src/org/openapitools/api/PetApi.sample | 4 +-- .../src/org/openapitools/api/StoreApi.sample | 2 +- .../src/org/openapitools/api/UserApi.sample | 8 ++--- 7 files changed, 40 insertions(+), 38 deletions(-) diff --git a/CI/.drone.yml b/CI/.drone.yml index 49495e430941..037fb654724c 100644 --- a/CI/.drone.yml +++ b/CI/.drone.yml @@ -2,6 +2,22 @@ kind: pipeline name: default steps: +# test Java 11 HTTP client +- name: java11-test + image: openjdk:11.0 + commands: + - ./mvnw --quiet clean install -Dorg.slf4j.simpleLogger.defaultLogLevel=error + - ./mvnw --quiet verify -Psamples.droneio -Dorg.slf4j.simpleLogger.defaultLogLevel=error + # run ensure up-to-date + - /bin/bash bin/utils/ensure-up-to-date + # test java native client + - ./mvnw clean test -f samples/client/petstore/java/native/pom.xml + - ./mvnw clean test -f samples/client/petstore/java/native-async/pom.xml + - ./mvnw clean test -f samples/openapi3/client/petstore/java/native/pom.xml + # test all generators with fake petstore spec (2.0, 3.0) + - /bin/bash bin/utils/test-fake-petstore-for-all.sh + # generate test scripts + - /bin/bash bin/tests/run-all-test # test nim client - name: nim-client-test image: nimlang/nim @@ -38,21 +54,3 @@ steps: image: haskell:8.6.5 commands: - (cd samples/client/petstore/haskell-http-client/ && stack --install-ghc --no-haddock-deps haddock --fast && stack test --fast) -# test Java 11 HTTP client -- name: java11-test - image: openjdk:11.0 - commands: - - ./mvnw --quiet clean install -Dorg.slf4j.simpleLogger.defaultLogLevel=error - - ./mvnw --quiet verify -Psamples.droneio -Dorg.slf4j.simpleLogger.defaultLogLevel=error - # test java native client - - ./mvnw clean test -f samples/client/petstore/java/native/pom.xml - - ./mvnw clean test -f samples/client/petstore/java/native-async/pom.xml - - ./mvnw clean test -f samples/openapi3/client/petstore/java/native/pom.xml - # test all generators with fake petstore spec (2.0, 3.0) - - /bin/bash bin/utils/test-fake-petstore-for-all.sh - # generate test scripts - - /bin/bash bin/tests/run-all-test - # generate all petstore samples (client, servers, doc) - - /bin/bash bin/generate-samples.sh - # generate all petstore samples (openapi3) - - /bin/bash bin/generate-samples.sh bin/configs/other/*.yaml diff --git a/CI/circle_parallel.sh b/CI/circle_parallel.sh index e66f55242567..b647131c7d70 100755 --- a/CI/circle_parallel.sh +++ b/CI/circle_parallel.sh @@ -47,7 +47,8 @@ elif [ "$NODE_INDEX" = "2" ]; then git checkout -- . # look for outdated samples - ./bin/utils/ensure-up-to-date + #./bin/utils/ensure-up-to-date + # UPDATE: moved to drone.io fi echo "Running node $NODE_INDEX to test haskell" # install haskell diff --git a/bin/meta-codegen.sh b/bin/meta-codegen.sh index d2a05a0fe6a7..5b90f6abc8cb 100755 --- a/bin/meta-codegen.sh +++ b/bin/meta-codegen.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +set -e + SCRIPT="$0" echo "# START SCRIPT: $SCRIPT" @@ -18,8 +20,8 @@ ags="meta -n myClientCodegen -t DOCUMENTATION -p com.my.company.codegen -o sampl java $JAVA_OPTS -jar $executable $ags -(cd "$root"/samples/meta-codegen/ && mvn -B package -Djacoco.skip=true -DskipTests=true -f pom.xml) +(./mvnw -B package -Djacoco.skip=true -DskipTests=true -f "$root"/samples/meta-codegen/pom.xml) -ags2="generate -g myClientCodegen -i modules/openapi-generator/src/test/resources/2_0/petstore.json -o samples/meta-codegen/usage $@" +ags2="generate -g myClientCodegen -i modules/openapi-generator/src/test/resources/3_0/petstore.json -o samples/meta-codegen/usage $@" -java $JAVA_OPTS -cp ${root}/samples/meta-codegen/lib/target/myClientCodegen-openapi-generator-1.0.0.jar:$executable org.openapitools.codegen.OpenAPIGenerator $ags2 \ No newline at end of file +java $JAVA_OPTS -cp ${root}/samples/meta-codegen/lib/target/myClientCodegen-openapi-generator-1.0.0.jar:$executable org.openapitools.codegen.OpenAPIGenerator $ags2 diff --git a/bin/utils/test-fake-petstore-for-all.sh b/bin/utils/test-fake-petstore-for-all.sh index 6be320d6b999..1ec62890c3bb 100755 --- a/bin/utils/test-fake-petstore-for-all.sh +++ b/bin/utils/test-fake-petstore-for-all.sh @@ -11,15 +11,16 @@ logfile="/tmp/generator-fake-petstore-output.log" for GENERATOR in $(java -jar ${executable} list --short | sed -e 's/,/\'$'\n''/g') do - if eval java -jar ${executable} generate -i modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -g ${GENERATOR} -o /tmp/openapi-generator-test-fake-petstore/2.0/${GENERATOR} > ${logfile} 2>&1; then - echo "[OAS 2.0] Executed ${GENERATOR} successfully!" - else - echo "ERROR: Failed to run '${GENERATOR}' generator. The command was:" - echo "java -jar ${executable} generate -i modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -g ${GENERATOR} -o /tmp/openapi-generator-test-fake-petstore/2.0/${GENERATOR}" - echo "ERROR: The output of the command was:" - cat ${logfile} - exit 1 - fi + # no longer test 2.0 spec as we migrated to 3.0 spec + #if eval java -jar ${executable} generate -i modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -g ${GENERATOR} -o /tmp/openapi-generator-test-fake-petstore/2.0/${GENERATOR} > ${logfile} 2>&1; then + # echo "[OAS 2.0] Executed ${GENERATOR} successfully!" + #else + # echo "ERROR: Failed to run '${GENERATOR}' generator. The command was:" + # echo "java -jar ${executable} generate -i modules/openapi-generator/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -g ${GENERATOR} -o /tmp/openapi-generator-test-fake-petstore/2.0/${GENERATOR}" + # echo "ERROR: The output of the command was:" + # cat ${logfile} + # exit 1 + #fi if eval java -jar ${executable} generate -i modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml -g ${GENERATOR} -o /tmp/openapi-generator-test-fake-petstore/3.0/${GENERATOR} > ${logfile} 2>&1; then echo "[OAS 3.0] Executed ${GENERATOR} successfully!" diff --git a/samples/meta-codegen/usage/src/org/openapitools/api/PetApi.sample b/samples/meta-codegen/usage/src/org/openapitools/api/PetApi.sample index e75a6149341a..7b8b9c754d9f 100644 --- a/samples/meta-codegen/usage/src/org/openapitools/api/PetApi.sample +++ b/samples/meta-codegen/usage/src/org/openapitools/api/PetApi.sample @@ -16,7 +16,7 @@ classname: PetApi operationId: addPet # and parameters: -body: Pet +pet: Pet # each operation has an `operationId`: @@ -52,7 +52,7 @@ petId: Long operationId: updatePet # and parameters: -body: Pet +pet: Pet # each operation has an `operationId`: diff --git a/samples/meta-codegen/usage/src/org/openapitools/api/StoreApi.sample b/samples/meta-codegen/usage/src/org/openapitools/api/StoreApi.sample index 298e7edbb0fd..d66c28e85762 100644 --- a/samples/meta-codegen/usage/src/org/openapitools/api/StoreApi.sample +++ b/samples/meta-codegen/usage/src/org/openapitools/api/StoreApi.sample @@ -36,7 +36,7 @@ orderId: String operationId: placeOrder # and parameters: -body: Order +order: Order # end of operations block diff --git a/samples/meta-codegen/usage/src/org/openapitools/api/UserApi.sample b/samples/meta-codegen/usage/src/org/openapitools/api/UserApi.sample index ebc744ed975e..b3b05217530a 100644 --- a/samples/meta-codegen/usage/src/org/openapitools/api/UserApi.sample +++ b/samples/meta-codegen/usage/src/org/openapitools/api/UserApi.sample @@ -16,21 +16,21 @@ classname: UserApi operationId: createUser # and parameters: -body: User +user: User # each operation has an `operationId`: operationId: createUsersWithArrayInput # and parameters: -body: List +user: List # each operation has an `operationId`: operationId: createUsersWithListInput # and parameters: -body: List +user: List # each operation has an `operationId`: @@ -66,7 +66,7 @@ operationId: updateUser # and parameters: username: String -body: User +user: User # end of operations block From 1f880f43d43e16507be84e033d6049bbffb4b016 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Apr 2021 22:35:17 +0800 Subject: [PATCH 061/186] Bump actions/setup-java from v1 to v2 (#9187) Bumps [actions/setup-java](https://github.com/actions/setup-java) from v1 to v2. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v1...8764a52df183aa0ccea74521dfd9d506ffc7a19a) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/check-supported-versions.yaml | 2 +- .github/workflows/sonar.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check-supported-versions.yaml b/.github/workflows/check-supported-versions.yaml index 3ae0d5bbd91e..430b0ea815ce 100644 --- a/.github/workflows/check-supported-versions.yaml +++ b/.github/workflows/check-supported-versions.yaml @@ -24,7 +24,7 @@ jobs: uses: actions/checkout@v2 - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v1 + uses: actions/setup-java@v2 with: java-version: ${{ matrix.java }} diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index bc4992833b73..98f191f2c9c0 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -14,7 +14,7 @@ jobs: steps: - uses: actions/checkout@v1 - name: Set up JDK 11 - uses: actions/setup-java@v1 + uses: actions/setup-java@v2 with: java-version: 11 - name: Compile with Maven From 4f84e860015587149c777f14f4a063e86a9f5d86 Mon Sep 17 00:00:00 2001 From: Toby Murray <65908556+toby-murray-snow-software@users.noreply.github.com> Date: Mon, 26 Apr 2021 21:37:14 -0400 Subject: [PATCH 062/186] Support #9151: Default Java client to Java 8 (#9344) My understanding of the version 5 release of OpenAPI generator was that Java 7 support was dropped. Currently the Java client defaults to Java 7, Java 8 can be opted in with the `java8` config option. This removes the conditional logic in `build.gradle` around that config option and defaults to Java 8. This is to support #9151, up-to-date dependency versions rely on Java 8 and it's easier if that is the default. To be clear, this changes behavior - previous default version was Java 7, this changes it to Java 8. --- .../Java/libraries/okhttp-gson/build.gradle.mustache | 12 ------------ .../java/okhttp-gson-dynamicOperations/build.gradle | 8 ++++---- .../java/okhttp-gson-parcelableModel/build.gradle | 8 ++++---- .../client/petstore/java/okhttp-gson/build.gradle | 8 ++++---- 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache index c027064edd43..0bd85e8b2dae 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache @@ -40,14 +40,8 @@ if(hasProperty('target') && target == 'android') { targetSdkVersion 25 } compileOptions { - {{#java8}} sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 - {{/java8}} - {{^java8}} - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - {{/java8}} } // Rename the aar correctly @@ -92,14 +86,8 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'java' apply plugin: 'maven' - {{#java8}} sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 - {{/java8}} - {{^java8}} - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - {{/java8}} install { repositories.mavenInstaller { diff --git a/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.gradle b/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.gradle index 915c36674c31..f21bac4c229d 100644 --- a/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.gradle +++ b/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.gradle @@ -36,8 +36,8 @@ if(hasProperty('target') && target == 'android') { targetSdkVersion 25 } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } // Rename the aar correctly @@ -82,8 +82,8 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'java' apply plugin: 'maven' - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 install { repositories.mavenInstaller { diff --git a/samples/client/petstore/java/okhttp-gson-parcelableModel/build.gradle b/samples/client/petstore/java/okhttp-gson-parcelableModel/build.gradle index 615ed108d405..f0e701eea225 100644 --- a/samples/client/petstore/java/okhttp-gson-parcelableModel/build.gradle +++ b/samples/client/petstore/java/okhttp-gson-parcelableModel/build.gradle @@ -36,8 +36,8 @@ if(hasProperty('target') && target == 'android') { targetSdkVersion 25 } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } // Rename the aar correctly @@ -82,8 +82,8 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'java' apply plugin: 'maven' - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 install { repositories.mavenInstaller { diff --git a/samples/client/petstore/java/okhttp-gson/build.gradle b/samples/client/petstore/java/okhttp-gson/build.gradle index 08cb8effd2d1..8db6d52554dd 100644 --- a/samples/client/petstore/java/okhttp-gson/build.gradle +++ b/samples/client/petstore/java/okhttp-gson/build.gradle @@ -36,8 +36,8 @@ if(hasProperty('target') && target == 'android') { targetSdkVersion 25 } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } // Rename the aar correctly @@ -82,8 +82,8 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'java' apply plugin: 'maven' - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 install { repositories.mavenInstaller { From 4aaaae765b1cf6281b8f8ac1e8db0be2d1acd316 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 28 Apr 2021 14:53:51 +0800 Subject: [PATCH 063/186] [Scala][Akka] Use Files.createTempFile to address security concerns (#9348) * fix scala akka server temp file issue * update test templates --- .../multipartDirectives.mustache | 3 +- .../2_0/templates/Java/ApiClient.mustache | 316 +++++-- .../Java/libraries/jersey2/ApiClient.mustache | 826 +++++++++++++++--- .../Java/libraries/jersey2/JSON.mustache | 247 +++++- .../Java/libraries/jersey2/api.mustache | 171 +++- .../libraries/jersey2/build.gradle.mustache | 84 +- .../Java/libraries/jersey2/build.sbt.mustache | 45 +- .../Java/libraries/jersey2/pom.mustache | 202 +++-- .../2_0/templates/Java/model.mustache | 39 +- .../.openapi-generator/FILES | 15 + .../.openapi-generator/VERSION | 2 +- .../server/MultipartDirectives.scala | 3 +- 12 files changed, 1612 insertions(+), 341 deletions(-) create mode 100644 samples/server/petstore/scala-akka-http-server/.openapi-generator/FILES diff --git a/modules/openapi-generator/src/main/resources/scala-akka-http-server/multipartDirectives.mustache b/modules/openapi-generator/src/main/resources/scala-akka-http-server/multipartDirectives.mustache index 98a2186fd2e7..6e802204c57d 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-http-server/multipartDirectives.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-http-server/multipartDirectives.mustache @@ -1,6 +1,7 @@ package {{invokerPackage}} import java.io.File +import java.nio.file.Files import akka.annotation.ApiMayChange import akka.http.scaladsl.model.Multipart.FormData @@ -69,7 +70,7 @@ trait MultipartDirectives { object MultipartDirectives extends MultipartDirectives with FileUploadDirectives { val tempFileFromFileInfo: FileInfo => File = { - file: FileInfo => File.createTempFile(file.fileName, ".tmp") + file: FileInfo => Files.createTempFile(file.fileName, ".tmp").toFile() } } diff --git a/modules/openapi-generator/src/test/resources/2_0/templates/Java/ApiClient.mustache b/modules/openapi-generator/src/test/resources/2_0/templates/Java/ApiClient.mustache index 116f14c86503..d75e455961c5 100644 --- a/modules/openapi-generator/src/test/resources/2_0/templates/Java/ApiClient.mustache +++ b/modules/openapi-generator/src/test/resources/2_0/templates/Java/ApiClient.mustache @@ -1,28 +1,38 @@ -//overloaded main template file to add this comment - {{>licenseInfo}} package {{invokerPackage}}; +{{#threetenbp}} +import org.threeten.bp.*; + +{{/threetenbp}} import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.*; +{{#joda}} +import com.fasterxml.jackson.datatype.joda.JodaModule; +{{/joda}} {{#java8}} -import com.fasterxml.jackson.datatype.jsr310.*; -{{/java8}} -{{^java8}} -import com.fasterxml.jackson.datatype.joda.*; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +{{^threetenbp}} +import java.time.OffsetDateTime; +{{/threetenbp}} {{/java8}} +{{#threetenbp}} +import com.fasterxml.jackson.datatype.threetenbp.ThreeTenModule; +{{/threetenbp}} import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.GenericType; import com.sun.jersey.api.client.config.DefaultClientConfig; +import com.sun.jersey.api.client.filter.GZIPContentEncodingFilter; import com.sun.jersey.api.client.filter.LoggingFilter; import com.sun.jersey.api.client.WebResource.Builder; import com.sun.jersey.multipart.FormDataMultiPart; import com.sun.jersey.multipart.file.FileDataBodyPart; +import javax.ws.rs.core.Cookie; import javax.ws.rs.core.Response.Status.Family; import javax.ws.rs.core.MediaType; @@ -31,7 +41,9 @@ import java.util.Collections; import java.util.Map; import java.util.Map.Entry; import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Arrays; import java.util.ArrayList; import java.util.Date; import java.util.TimeZone; @@ -44,14 +56,51 @@ import java.io.UnsupportedEncodingException; import java.text.DateFormat; import {{invokerPackage}}.auth.Authentication; +{{#hasHttpBasicMethods}} import {{invokerPackage}}.auth.HttpBasicAuth; +{{/hasHttpBasicMethods}} +{{#hasHttpBearerMethods}} +import {{invokerPackage}}.auth.HttpBearerAuth; +{{/hasHttpBearerMethods}} +{{#hasApiKeyMethods}} import {{invokerPackage}}.auth.ApiKeyAuth; +{{/hasApiKeyMethods}} +{{#hasOAuthMethods}} import {{invokerPackage}}.auth.OAuth; +{{/hasOAuthMethods}} {{>generatedAnnotation}} -public class ApiClient { +public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} { private Map defaultHeaderMap = new HashMap(); - private String basePath = "{{basePath}}"; + private Map defaultCookieMap = new HashMap(); + private String basePath = "{{{basePath}}}"; + protected List servers = new ArrayList({{#servers}}{{#-first}}Arrays.asList( +{{/-first}} new ServerConfiguration( + "{{{url}}}", + "{{{description}}}{{^description}}No description provided{{/description}}", + new HashMap(){{#variables}}{{#-first}} {{ +{{/-first}} put("{{{name}}}", new ServerVariable( + "{{{description}}}{{^description}}No description provided{{/description}}", + "{{{defaultValue}}}", + new HashSet( + {{#enumValues}} + {{#-first}} + Arrays.asList( + {{/-first}} + "{{{.}}}"{{^-last}},{{/-last}} + {{#-last}} + ) + {{/-last}} + {{/enumValues}} + ) + )); + {{#-last}} + }}{{/-last}}{{/variables}} + ){{^-last}},{{/-last}} + {{#-last}} + ){{/-last}}{{/servers}}); + protected Integer serverIndex = 0; + protected Map serverVariables = null; private boolean debugging = false; private int connectionTimeout = 0; @@ -69,15 +118,23 @@ public class ApiClient { objectMapper = new ObjectMapper(); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); objectMapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); + {{#joda}} + objectMapper.registerModule(new JodaModule()); + {{/joda}} {{#java8}} objectMapper.registerModule(new JavaTimeModule()); {{/java8}} - {{^java8}} - objectMapper.registerModule(new JodaModule()); - {{/java8}} + {{#threetenbp}} + ThreeTenModule module = new ThreeTenModule(); + module.addDeserializer(Instant.class, CustomInstantDeserializer.INSTANT); + module.addDeserializer(OffsetDateTime.class, CustomInstantDeserializer.OFFSET_DATE_TIME); + module.addDeserializer(ZonedDateTime.class, CustomInstantDeserializer.ZONED_DATE_TIME); + objectMapper.registerModule(module); + {{/threetenbp}} objectMapper.setDateFormat(ApiClient.buildDefaultDateFormat()); dateFormat = ApiClient.buildDefaultDateFormat(); @@ -86,8 +143,9 @@ public class ApiClient { setUserAgent("{{#httpUserAgent}}{{{.}}}{{/httpUserAgent}}{{^httpUserAgent}}OpenAPI-Generator/{{{artifactVersion}}}/java{{/httpUserAgent}}"); // Setup authentications (key: authentication name, value: authentication). - authentications = new HashMap();{{#authMethods}}{{#isBasic}} - authentications.put("{{name}}", new HttpBasicAuth());{{/isBasic}}{{#isApiKey}} + authentications = new HashMap();{{#authMethods}}{{#isBasic}}{{#isBasicBasic}} + authentications.put("{{name}}", new HttpBasicAuth());{{/isBasicBasic}}{{^isBasicBasic}} + authentications.put("{{name}}", new HttpBearerAuth("{{scheme}}"));{{/isBasicBasic}}{{/isBasic}}{{#isApiKey}} authentications.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}"));{{/isApiKey}}{{#isOAuth}} authentications.put("{{name}}", new OAuth());{{/isOAuth}}{{/authMethods}} // Prevent the authentications from being modified. @@ -112,6 +170,7 @@ public class ApiClient { DefaultClientConfig conf = new DefaultClientConfig(); conf.getSingletons().add(jsonProvider); Client client = Client.create(conf); + client.addFilter(new GZIPContentEncodingFilter({{#useGzipFeature}}true{{/useGzipFeature}}{{^useGzipFeature}}false{{/useGzipFeature}})); if (debugging) { client.addFilter(new LoggingFilter()); } @@ -156,6 +215,33 @@ public class ApiClient { return this; } + public List getServers() { + return servers; + } + + public ApiClient setServers(List servers) { + this.servers = servers; + return this; + } + + public Integer getServerIndex() { + return serverIndex; + } + + public ApiClient setServerIndex(Integer serverIndex) { + this.serverIndex = serverIndex; + return this; + } + + public Map getServerVariables() { + return serverVariables; + } + + public ApiClient setServerVariables(Map serverVariables) { + this.serverVariables = serverVariables; + return this; + } + /** * Gets the status code of the previous request * @return Status code @@ -190,6 +276,24 @@ public class ApiClient { return authentications.get(authName); } + {{#hasHttpBearerMethods}} + /** + * Helper method to set access token for the first Bearer authentication. + * @param bearerToken Bearer token + */ + public void setBearerToken(String bearerToken) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBearerAuth) { + ((HttpBearerAuth) auth).setBearerToken(bearerToken); + return; + } + } + throw new RuntimeException("No Bearer authentication configured!"); + } + + {{/hasHttpBearerMethods}} + + {{#hasHttpBasicMethods}} /** * Helper method to set username for the first HTTP basic authentication. * @param username Username @@ -218,9 +322,12 @@ public class ApiClient { throw new RuntimeException("No HTTP basic authentication configured!"); } + {{/hasHttpBasicMethods}} + + {{#hasApiKeyMethods}} /** * Helper method to set API key value for the first API key authentication. - * @param apiKey API key + * @param apiKey the API key */ public void setApiKey(String apiKey) { for (Authentication auth : authentications.values()) { @@ -246,6 +353,9 @@ public class ApiClient { throw new RuntimeException("No API key authentication configured!"); } + {{/hasApiKeyMethods}} + + {{#hasOAuthMethods}} /** * Helper method to set access token for the first OAuth2 authentication. * @param accessToken Access token @@ -260,6 +370,8 @@ public class ApiClient { throw new RuntimeException("No OAuth2 authentication configured!"); } + {{/hasOAuthMethods}} + /** * Set the User-Agent header's value (by adding to the default header map). * @param userAgent User agent @@ -282,6 +394,18 @@ public class ApiClient { return this; } + /** + * Add a default cookie. + * + * @param key The cookie's key + * @param value The cookie's value + * @return API client + */ + public ApiClient addDefaultCookie(String key, String value) { + defaultCookieMap.put(key, value); + return this; + } + /** * Check that whether debugging is enabled for this API client. * @return True if debugging is on @@ -378,7 +502,9 @@ public class ApiClient { return ""; } else if (param instanceof Date) { return formatDate((Date) param); - } else if (param instanceof Collection) { + } {{#jsr310}}else if (param instanceof OffsetDateTime) { + return formatOffsetDateTime((OffsetDateTime) param); + } {{/jsr310}}else if (param instanceof Collection) { StringBuilder b = new StringBuilder(); for(Object o : (Collection)param) { if(b.length() > 0) { @@ -392,62 +518,71 @@ public class ApiClient { } } - /* - * Format to {@code Pair} objects. - * @param collectionFormat Collection format - * @param name Name - * @param value Value - * @return List of pair + /** + * Formats the specified query parameter to a list containing a single {@code Pair} object. + * + * Note that {@code value} must not be a collection. + * + * @param name The name of the parameter. + * @param value The value of the parameter. + * @return A list containing a single {@code Pair} object. */ - public List parameterToPairs(String collectionFormat, String name, Object value){ + public List parameterToPair(String name, Object value) { List params = new ArrayList(); // preconditions - if (name == null || name.isEmpty() || value == null) return params; + if (name == null || name.isEmpty() || value == null || value instanceof Collection) return params; - Collection valueCollection; - if (value instanceof Collection) { - valueCollection = (Collection) value; - } else { - params.add(new Pair(name, parameterToString(value))); - return params; - } + params.add(new Pair(name, parameterToString(value))); + return params; + } + + /** + * Formats the specified collection query parameters to a list of {@code Pair} objects. + * + * Note that the values of each of the returned Pair objects are percent-encoded. + * + * @param collectionFormat The collection format of the parameter. + * @param name The name of the parameter. + * @param value The value of the parameter. + * @return A list of {@code Pair} objects. + */ + public List parameterToPairs(String collectionFormat, String name, Collection value) { + List params = new ArrayList(); - if (valueCollection.isEmpty()){ + // preconditions + if (name == null || name.isEmpty() || value == null) { return params; } - // get the collection format - String format = (collectionFormat == null || collectionFormat.isEmpty() ? "csv" : collectionFormat); // default: csv - // create the params based on the collection format - if ("multi".equals(format)) { - for (Object item : valueCollection) { - params.add(new Pair(name, parameterToString(item))); + if ("multi".equals(collectionFormat)) { + for (Object item : value) { + params.add(new Pair(name, escapeString(parameterToString(item)))); } - return params; } + // collectionFormat is assumed to be "csv" by default String delimiter = ","; - if ("csv".equals(format)) { - delimiter = ","; - } else if ("ssv".equals(format)) { - delimiter = " "; - } else if ("tsv".equals(format)) { - delimiter = "\t"; - } else if ("pipes".equals(format)) { - delimiter = "|"; + // escape all delimiters except commas, which are URI reserved + // characters + if ("ssv".equals(collectionFormat)) { + delimiter = escapeString(" "); + } else if ("tsv".equals(collectionFormat)) { + delimiter = escapeString("\t"); + } else if ("pipes".equals(collectionFormat)) { + delimiter = escapeString("|"); } StringBuilder sb = new StringBuilder() ; - for (Object item : valueCollection) { + for (Object item : value) { sb.append(delimiter); - sb.append(parameterToString(item)); + sb.append(escapeString(parameterToString(item))); } - params.add(new Pair(name, sb.substring(1))); + params.add(new Pair(name, sb.substring(delimiter.length()))); return params; } @@ -458,11 +593,13 @@ public class ApiClient { * application/json * application/json; charset=UTF8 * APPLICATION/JSON + * application/vnd.company+json * @param mime MIME * @return True if MIME type is boolean */ public boolean isJsonMime(String mime) { - return mime != null && mime.matches("(?i)application\\/json(;.*)?"); + String jsonMime = "(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$"; + return mime != null && (mime.matches(jsonMime) || mime.equals("*/*")); } /** @@ -493,10 +630,10 @@ public class ApiClient { * * @param contentTypes The Content-Type array to select from * @return The Content-Type header to use. If the given array is empty, - * JSON will be used. + * or matches "any", JSON will be used. */ public String selectHeaderContentType(String[] contentTypes) { - if (contentTypes.length == 0) { + if (contentTypes.length == 0 || contentTypes[0].equals("*/*")) { return "application/json"; } for (String contentType : contentTypes) { @@ -561,11 +698,24 @@ public class ApiClient { * * @param path The sub path * @param queryParams The query parameters + * @param collectionQueryParams The collection query parameters * @return The full URL */ - private String buildUrl(String path, List queryParams) { + private String buildUrl(String path, List queryParams, List collectionQueryParams) { + String baseURL; + if (serverIndex != null) { + if (serverIndex < 0 || serverIndex >= servers.size()) { + throw new ArrayIndexOutOfBoundsException(String.format( + "Invalid index %d when selecting the host settings. Must be less than %d", serverIndex, servers.size() + )); + } + baseURL = servers.get(serverIndex).URL(serverVariables); + } else { + baseURL = basePath; + } + final StringBuilder url = new StringBuilder(); - url.append(basePath).append(path); + url.append(baseURL).append(path); if (queryParams != null && !queryParams.isEmpty()) { // support (constant) query string in `path`, e.g. "/posts?draft=1" @@ -584,17 +734,34 @@ public class ApiClient { } } + if (collectionQueryParams != null && !collectionQueryParams.isEmpty()) { + String prefix = url.toString().contains("?") ? "&" : "?"; + for (Pair param : collectionQueryParams) { + if (param.getValue() != null) { + if (prefix != null) { + url.append(prefix); + prefix = null; + } else { + url.append("&"); + } + String value = parameterToString(param.getValue()); + // collection query parameter value already escaped as part of parameterToPairs + url.append(escapeString(param.getName())).append("=").append(value); + } + } + } + return url.toString(); } - private ClientResponse getAPIResponse(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames) throws ApiException { + private ClientResponse getAPIResponse(String path, String method, List queryParams, List collectionQueryParams, Object body, Map headerParams, Map cookieParams, Map formParams, String accept, String contentType, String[] authNames) throws ApiException { if (body != null && !formParams.isEmpty()) { throw new ApiException(500, "Cannot have body and form params"); } - updateParamsForAuth(authNames, queryParams, headerParams); + updateParamsForAuth(authNames, queryParams, headerParams, cookieParams); - final String url = buildUrl(path, queryParams); + final String url = buildUrl(path, queryParams, collectionQueryParams); Builder builder; if (accept == null) { builder = httpClient.resource(url).getRequestBuilder(); @@ -602,12 +769,21 @@ public class ApiClient { builder = httpClient.resource(url).accept(accept); } - for (String key : headerParams.keySet()) { - builder = builder.header(key, headerParams.get(key)); + for (Entry keyValue : headerParams.entrySet()) { + builder = builder.header(keyValue.getKey(), keyValue.getValue()); } - for (String key : defaultHeaderMap.keySet()) { - if (!headerParams.containsKey(key)) { - builder = builder.header(key, defaultHeaderMap.get(key)); + for (Map.Entry keyValue : defaultHeaderMap.entrySet()) { + if (!headerParams.containsKey(keyValue.getKey())) { + builder = builder.header(keyValue.getKey(), keyValue.getValue()); + } + } + + for (Entry keyValue : cookieParams.entrySet()) { + builder = builder.cookie(new Cookie(keyValue.getKey(), keyValue.getValue())); + } + for (Map.Entry keyValue : defaultCookieMap.entrySet()) { + if (!cookieParams.containsKey(keyValue.getKey())) { + builder = builder.cookie(new Cookie(keyValue.getKey(), keyValue.getValue())); } } @@ -623,8 +799,9 @@ public class ApiClient { response = builder.type(contentType).delete(ClientResponse.class, serialize(body, contentType, formParams)); } else if ("PATCH".equals(method)) { response = builder.type(contentType).header("X-HTTP-Method-Override", "PATCH").post(ClientResponse.class, serialize(body, contentType, formParams)); - } - else { + } else if ("HEAD".equals(method)) { + response = builder.head(); + } else { throw new ApiException(500, "unknown method type " + method); } return response; @@ -637,8 +814,10 @@ public class ApiClient { * @param path The sub-path of the HTTP URL * @param method The request method, one of "GET", "POST", "PUT", and "DELETE" * @param queryParams The query parameters + * @param collectionQueryParams The collection query parameters * @param body The request body object - if it is not binary, otherwise null * @param headerParams The header parameters + * @param cookieParams The cookie parameters * @param formParams The form parameters * @param accept The request's Accept header * @param contentType The request's Content-Type header @@ -647,9 +826,9 @@ public class ApiClient { * @return The response body in type of string * @throws ApiException API exception */ - public T invokeAPI(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames, GenericType returnType) throws ApiException { + public T invokeAPI(String path, String method, List queryParams, List collectionQueryParams, Object body, Map headerParams, Map cookieParams, Map formParams, String accept, String contentType, String[] authNames, GenericType returnType) throws ApiException { - ClientResponse response = getAPIResponse(path, method, queryParams, body, headerParams, formParams, accept, contentType, authNames); + ClientResponse response = getAPIResponse(path, method, queryParams, collectionQueryParams, body, headerParams, cookieParams, formParams, accept, contentType, authNames); statusCode = response.getStatusInfo().getStatusCode(); responseHeaders = response.getHeaders(); @@ -686,12 +865,13 @@ public class ApiClient { * @param authNames The authentications to apply * @param queryParams Query parameters * @param headerParams Header parameters + * @param cookieParams Cookie parameters */ - private void updateParamsForAuth(String[] authNames, List queryParams, Map headerParams) { + private void updateParamsForAuth(String[] authNames, List queryParams, Map headerParams, Map cookieParams) { for (String authName : authNames) { Authentication auth = authentications.get(authName); if (auth == null) throw new RuntimeException("Authentication undefined: " + authName); - auth.applyToParams(queryParams, headerParams); + auth.applyToParams(queryParams, headerParams, cookieParams); } } diff --git a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/ApiClient.mustache b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/ApiClient.mustache index 52c3c06e24cc..65494e8ea04a 100644 --- a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/ApiClient.mustache +++ b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/ApiClient.mustache @@ -1,5 +1,3 @@ -//overloaded template file within library folder to add this comment - package {{invokerPackage}}; import javax.ws.rs.client.Client; @@ -13,9 +11,12 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; +{{#hasOAuthMethods}} +import com.github.scribejava.core.model.OAuth2AccessToken; +{{/hasOAuthMethods}} import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.ClientProperties; -import org.glassfish.jersey.filter.LoggingFilter; +import org.glassfish.jersey.client.HttpUrlConnectorProvider; import org.glassfish.jersey.jackson.JacksonFeature; import org.glassfish.jersey.media.multipart.FormDataBodyPart; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; @@ -25,22 +26,38 @@ import org.glassfish.jersey.media.multipart.MultiPartFeature; import java.io.IOException; import java.io.InputStream; -{{^supportJava6}} +import java.net.URI; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.security.cert.X509Certificate; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; import java.nio.file.Files; +import java.nio.file.Paths; import java.nio.file.StandardCopyOption; -{{/supportJava6}} -{{#supportJava6}} -import org.apache.commons.io.FileUtils; -{{/supportJava6}} +import org.glassfish.jersey.logging.LoggingFeature; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.Map.Entry; import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Arrays; import java.util.ArrayList; import java.util.Date; -import java.util.TimeZone; +{{#jsr310}} +{{#threetenbp}} +import org.threeten.bp.OffsetDateTime; +{{/threetenbp}} +{{^threetenbp}} +import java.time.OffsetDateTime; +{{/threetenbp}} +{{/jsr310}} import java.net.URLEncoder; @@ -53,30 +70,120 @@ import java.util.regex.Pattern; import {{invokerPackage}}.auth.Authentication; import {{invokerPackage}}.auth.HttpBasicAuth; +import {{invokerPackage}}.auth.HttpBearerAuth; +{{#hasHttpSignatureMethods}} +import {{invokerPackage}}.auth.HttpSignatureAuth; +{{/hasHttpSignatureMethods}} import {{invokerPackage}}.auth.ApiKeyAuth; +{{#hasOAuthMethods}} import {{invokerPackage}}.auth.OAuth; +{{/hasOAuthMethods}} {{>generatedAnnotation}} -public class ApiClient { - private Map defaultHeaderMap = new HashMap(); - private String basePath = "{{{basePath}}}"; - private boolean debugging = false; - private int connectionTimeout = 0; - - private Client httpClient; - private JSON json; - private String tempFolderPath = null; - - private Map authentications; - - private int statusCode; - private Map> responseHeaders; - - private DateFormat dateFormat; +public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} { + protected Map defaultHeaderMap = new HashMap(); + protected Map defaultCookieMap = new HashMap(); + protected String basePath = "{{{basePath}}}"; + protected String userAgent; + private static final Logger log = Logger.getLogger(ApiClient.class.getName()); + + protected List servers = new ArrayList({{#servers}}{{#-first}}Arrays.asList( +{{/-first}} new ServerConfiguration( + "{{{url}}}", + "{{{description}}}{{^description}}No description provided{{/description}}", + new HashMap(){{#variables}}{{#-first}} {{ +{{/-first}} put("{{{name}}}", new ServerVariable( + "{{{description}}}{{^description}}No description provided{{/description}}", + "{{{defaultValue}}}", + new HashSet( + {{#enumValues}} + {{#-first}} + Arrays.asList( + {{/-first}} + "{{{.}}}"{{^-last}},{{/-last}} + {{#-last}} + ) + {{/-last}} + {{/enumValues}} + ) + )); + {{#-last}} + }}{{/-last}}{{/variables}} + ){{^-last}},{{/-last}} + {{#-last}} + ){{/-last}}{{/servers}}); + protected Integer serverIndex = 0; + protected Map serverVariables = null; + protected Map> operationServers = new HashMap>() {{ + {{#apiInfo}} + {{#apis}} + {{#operations}} + {{#operation}} + {{#servers}} + {{#-first}} + put("{{{classname}}}.{{{operationId}}}", new ArrayList(Arrays.asList( + {{/-first}} + new ServerConfiguration( + "{{{url}}}", + "{{{description}}}{{^description}}No description provided{{/description}}", + new HashMap(){{#variables}}{{#-first}} {{ +{{/-first}} put("{{{name}}}", new ServerVariable( + "{{{description}}}{{^description}}No description provided{{/description}}", + "{{{defaultValue}}}", + new HashSet( + {{#enumValues}} + {{#-first}} + Arrays.asList( + {{/-first}} + "{{{.}}}"{{^-last}},{{/-last}} + {{#-last}} + ) + {{/-last}} + {{/enumValues}} + ) + )); + {{#-last}} + }}{{/-last}}{{/variables}} + ){{^-last}},{{/-last}} + {{#-last}} + )));{{/-last}} + {{/servers}} + {{/operation}} + {{/operations}} + {{/apis}} + {{/apiInfo}} + }}; + protected Map operationServerIndex = new HashMap(); + protected Map> operationServerVariables = new HashMap>(); + protected boolean debugging = false; + protected ClientConfig clientConfig; + protected int connectionTimeout = 0; + private int readTimeout = 0; + + protected Client httpClient; + protected JSON json; + protected String tempFolderPath = null; + + protected Map authentications; + protected Map authenticationLookup; + + protected DateFormat dateFormat; + /** + * Constructs a new ApiClient with default parameters. + */ public ApiClient() { + this(null); + } + + /** + * Constructs a new ApiClient with the specified authentication parameters. + * + * @param authMap A hash map containing authentication parameters. + */ + public ApiClient(Map authMap) { json = new JSON(); - httpClient = buildHttpClient(debugging); + httpClient = buildHttpClient(); this.dateFormat = new RFC3339DateFormat(); @@ -84,16 +191,59 @@ public class ApiClient { setUserAgent("{{#httpUserAgent}}{{{.}}}{{/httpUserAgent}}{{^httpUserAgent}}OpenAPI-Generator/{{{artifactVersion}}}/java{{/httpUserAgent}}"); // Setup authentications (key: authentication name, value: authentication). - authentications = new HashMap();{{#authMethods}}{{#isBasic}} - authentications.put("{{name}}", new HttpBasicAuth());{{/isBasic}}{{#isApiKey}} - authentications.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}"));{{/isApiKey}}{{#isOAuth}} - authentications.put("{{name}}", new OAuth());{{/isOAuth}}{{/authMethods}} + authentications = new HashMap(); + Authentication auth = null; + {{#authMethods}} + if (authMap != null) { + auth = authMap.get("{{name}}"); + } + {{#isBasic}} + {{#isBasicBasic}} + if (auth instanceof HttpBasicAuth) { + authentications.put("{{name}}", auth); + } else { + authentications.put("{{name}}", new HttpBasicAuth()); + } + {{/isBasicBasic}} + {{#isBasicBearer}} + if (auth instanceof HttpBearerAuth) { + authentications.put("{{name}}", auth); + } else { + authentications.put("{{name}}", new HttpBearerAuth("{{scheme}}")); + } + {{/isBasicBearer}} + {{#isHttpSignature}} + if (auth instanceof HttpSignatureAuth) { + authentications.put("{{name}}", auth); + } + {{/isHttpSignature}} + {{/isBasic}} + {{#isApiKey}} + if (auth instanceof ApiKeyAuth) { + authentications.put("{{name}}", auth); + } else { + authentications.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}")); + } + {{/isApiKey}} + {{#isOAuth}} + if (auth instanceof OAuth) { + authentications.put("{{name}}", auth); + } else { + authentications.put("{{name}}", new OAuth(basePath, "{{tokenUrl}}")); + } + {{/isOAuth}} + {{/authMethods}} // Prevent the authentications from being modified. authentications = Collections.unmodifiableMap(authentications); + + // Setup authentication lookup (key: authentication alias, value: authentication name) + authenticationLookup = new HashMap();{{#authMethods}}{{#vendorExtensions.x-auth-id-alias}} + authenticationLookup.put("{{name}}", "{{.}}");{{/vendorExtensions.x-auth-id-alias}}{{/authMethods}} } /** * Gets the JSON instance to do JSON serialization and deserialization. + * * @return JSON */ public JSON getJSON() { @@ -109,33 +259,77 @@ public class ApiClient { return this; } + /** + * Returns the base URL to the location where the OpenAPI document is being served. + * + * @return The base URL to the target host. + */ public String getBasePath() { return basePath; } + /** + * Sets the base URL to the location where the OpenAPI document is being served. + * + * @param basePath The base URL to the target host. + */ public ApiClient setBasePath(String basePath) { this.basePath = basePath; + {{#hasOAuthMethods}} + setOauthBasePath(basePath); + {{/hasOAuthMethods}} return this; } - /** - * Gets the status code of the previous request - * @return Status code - */ - public int getStatusCode() { - return statusCode; + public List getServers() { + return servers; } - /** - * Gets the response headers of the previous request - * @return Response headers - */ - public Map> getResponseHeaders() { - return responseHeaders; + public ApiClient setServers(List servers) { + this.servers = servers; + updateBasePath(); + return this; + } + + public Integer getServerIndex() { + return serverIndex; + } + + public ApiClient setServerIndex(Integer serverIndex) { + this.serverIndex = serverIndex; + updateBasePath(); + return this; + } + + public Map getServerVariables() { + return serverVariables; + } + + public ApiClient setServerVariables(Map serverVariables) { + this.serverVariables = serverVariables; + updateBasePath(); + return this; + } + + private void updateBasePath() { + if (serverIndex != null) { + setBasePath(servers.get(serverIndex).URL(serverVariables)); + } } + {{#hasOAuthMethods}} + private void setOauthBasePath(String basePath) { + for(Authentication auth : authentications.values()) { + if (auth instanceof OAuth) { + ((OAuth) auth).setBasePath(basePath); + } + } + } + + {{/hasOAuthMethods}} /** * Get authentications (key: authentication name, value: authentication). + * * @return Map of authentication object */ public Map getAuthentications() { @@ -154,13 +348,14 @@ public class ApiClient { /** * Helper method to set username for the first HTTP basic authentication. + * * @param username Username */ - public void setUsername(String username) { + public ApiClient setUsername(String username) { for (Authentication auth : authentications.values()) { if (auth instanceof HttpBasicAuth) { ((HttpBasicAuth) auth).setUsername(username); - return; + return this; } } throw new RuntimeException("No HTTP basic authentication configured!"); @@ -168,13 +363,14 @@ public class ApiClient { /** * Helper method to set password for the first HTTP basic authentication. + * * @param password Password */ - public void setPassword(String password) { + public ApiClient setPassword(String password) { for (Authentication auth : authentications.values()) { if (auth instanceof HttpBasicAuth) { ((HttpBasicAuth) auth).setPassword(password); - return; + return this; } } throw new RuntimeException("No HTTP basic authentication configured!"); @@ -182,56 +378,167 @@ public class ApiClient { /** * Helper method to set API key value for the first API key authentication. + * * @param apiKey API key */ - public void setApiKey(String apiKey) { + public ApiClient setApiKey(String apiKey) { for (Authentication auth : authentications.values()) { if (auth instanceof ApiKeyAuth) { ((ApiKeyAuth) auth).setApiKey(apiKey); - return; + return this; } } throw new RuntimeException("No API key authentication configured!"); } + /** + * Helper method to configure authentications which respects aliases of API keys. + * + * @param secrets Hash map from authentication name to its secret. + */ + public ApiClient configureApiKeys(Map secrets) { + for (Map.Entry authEntry : authentications.entrySet()) { + Authentication auth = authEntry.getValue(); + if (auth instanceof ApiKeyAuth) { + String name = authEntry.getKey(); + // respect x-auth-id-alias property + name = authenticationLookup.containsKey(name) ? authenticationLookup.get(name) : name; + if (secrets.containsKey(name)) { + ((ApiKeyAuth) auth).setApiKey(secrets.get(name)); + } + } + } + return this; + } + /** * Helper method to set API key prefix for the first API key authentication. + * * @param apiKeyPrefix API key prefix */ - public void setApiKeyPrefix(String apiKeyPrefix) { + public ApiClient setApiKeyPrefix(String apiKeyPrefix) { for (Authentication auth : authentications.values()) { if (auth instanceof ApiKeyAuth) { ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); - return; + return this; } } throw new RuntimeException("No API key authentication configured!"); } + /** + * Helper method to set bearer token for the first Bearer authentication. + * + * @param bearerToken Bearer token + */ + public ApiClient setBearerToken(String bearerToken) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBearerAuth) { + ((HttpBearerAuth) auth).setBearerToken(bearerToken); + return this; + } + } + throw new RuntimeException("No Bearer authentication configured!"); + } + + + {{#hasOAuthMethods}} /** * Helper method to set access token for the first OAuth2 authentication. * @param accessToken Access token */ - public void setAccessToken(String accessToken) { + public ApiClient setAccessToken(String accessToken) { for (Authentication auth : authentications.values()) { if (auth instanceof OAuth) { ((OAuth) auth).setAccessToken(accessToken); - return; + return this; } } throw new RuntimeException("No OAuth2 authentication configured!"); } + /** + * Helper method to set the credentials for the first OAuth2 authentication. + * + * @param clientId the client ID + * @param clientSecret the client secret + */ + public ApiClient setOauthCredentials(String clientId, String clientSecret) { + for (Authentication auth : authentications.values()) { + if (auth instanceof OAuth) { + ((OAuth) auth).setCredentials(clientId, clientSecret, isDebugging()); + return this; + } + } + throw new RuntimeException("No OAuth2 authentication configured!"); + } + + /** + * Helper method to set the password flow for the first OAuth2 authentication. + * + * @param username the user name + * @param password the user password + */ + public ApiClient setOauthPasswordFlow(String username, String password) { + for (Authentication auth : authentications.values()) { + if (auth instanceof OAuth) { + ((OAuth) auth).usePasswordFlow(username, password); + return this; + } + } + throw new RuntimeException("No OAuth2 authentication configured!"); + } + + /** + * Helper method to set the authorization code flow for the first OAuth2 authentication. + * + * @param code the authorization code + */ + public ApiClient setOauthAuthorizationCodeFlow(String code) { + for (Authentication auth : authentications.values()) { + if (auth instanceof OAuth) { + ((OAuth) auth).useAuthorizationCodeFlow(code); + return this; + } + } + throw new RuntimeException("No OAuth2 authentication configured!"); + } + + /** + * Helper method to set the scopes for the first OAuth2 authentication. + * + * @param scope the oauth scope + */ + public ApiClient setOauthScope(String scope) { + for (Authentication auth : authentications.values()) { + if (auth instanceof OAuth) { + ((OAuth) auth).setScope(scope); + return this; + } + } + throw new RuntimeException("No OAuth2 authentication configured!"); + } + + {{/hasOAuthMethods}} /** * Set the User-Agent header's value (by adding to the default header map). * @param userAgent Http user agent * @return API client */ public ApiClient setUserAgent(String userAgent) { + userAgent = userAgent; addDefaultHeader("User-Agent", userAgent); return this; } + /** + * Get the User-Agent header's value. + * @return User-Agent string + */ + public String getUserAgent(){ + return userAgent; + } + /** * Add a default header. * @@ -244,6 +551,39 @@ public class ApiClient { return this; } + /** + * Add a default cookie. + * + * @param key The cookie's key + * @param value The cookie's value + * @return API client + */ + public ApiClient addDefaultCookie(String key, String value) { + defaultCookieMap.put(key, value); + return this; + } + + /** + * Gets the client config. + * @return Client config + */ + public ClientConfig getClientConfig() { + return clientConfig; + } + + /** + * Set the client config. + * + * @param clientConfig Set the client config + * @return API client + */ + public ApiClient setClientConfig(ClientConfig clientConfig) { + this.clientConfig = clientConfig; + // Rebuild HTTP Client according to the new "clientConfig" value. + this.httpClient = buildHttpClient(); + return this; + } + /** * Check that whether debugging is enabled for this API client. * @return True if debugging is switched on @@ -261,7 +601,7 @@ public class ApiClient { public ApiClient setDebugging(boolean debugging) { this.debugging = debugging; // Rebuild HTTP Client according to the new "debugging" value. - this.httpClient = buildHttpClient(debugging); + this.httpClient = buildHttpClient(); return this; } @@ -307,6 +647,27 @@ public class ApiClient { return this; } + /** + * read timeout (in milliseconds). + * @return Read timeout + */ + public int getReadTimeout() { + return readTimeout; + } + + /** + * Set the read timeout (in milliseconds). + * A value of 0 means no timeout, otherwise values must be between 1 and + * {@link Integer#MAX_VALUE}. + * @param readTimeout Read timeout in milliseconds + * @return API client + */ + public ApiClient setReadTimeout(int readTimeout) { + this.readTimeout = readTimeout; + httpClient.property(ClientProperties.READ_TIMEOUT, readTimeout); + return this; + } + /** * Get the date format used to parse/format date parameters. * @return Date format @@ -359,7 +720,9 @@ public class ApiClient { return ""; } else if (param instanceof Date) { return formatDate((Date) param); - } else if (param instanceof Collection) { + } {{#jsr310}}else if (param instanceof OffsetDateTime) { + return formatOffsetDateTime((OffsetDateTime) param); + } {{/jsr310}}else if (param instanceof Collection) { StringBuilder b = new StringBuilder(); for(Object o : (Collection)param) { if(b.length() > 0) { @@ -439,11 +802,14 @@ public class ApiClient { * application/json * application/json; charset=UTF8 * APPLICATION/JSON + * application/vnd.company+json + * "* / *" is also default to JSON * @param mime MIME * @return True if the MIME type is JSON */ public boolean isJsonMime(String mime) { - return mime != null && mime.matches("(?i)application\\/json(;.*)?"); + String jsonMime = "(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$"; + return mime != null && (mime.matches(jsonMime) || mime.equals("*/*")); } /** @@ -510,7 +876,7 @@ public class ApiClient { * @return Entity * @throws ApiException API exception */ - public Entity serialize(Object obj, Map formParams, String contentType) throws ApiException { + public Entity serialize(Object obj, Map formParams, String contentType, boolean isBodyNullable) throws ApiException { Entity entity; if (contentType.startsWith("multipart/form-data")) { MultiPart multiPart = new MultiPart(); @@ -534,11 +900,60 @@ public class ApiClient { entity = Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE); } else { // We let jersey handle the serialization - entity = Entity.entity(obj, contentType); + if (isBodyNullable) { // payload is nullable + if (obj instanceof String) { + entity = Entity.entity(obj == null ? "null" : "\"" + ((String)obj).replaceAll("\"", Matcher.quoteReplacement("\\\"")) + "\"", contentType); + } else { + entity = Entity.entity(obj == null ? "null" : obj, contentType); + } + } else { + if (obj instanceof String) { + entity = Entity.entity(obj == null ? "" : "\"" + ((String)obj).replaceAll("\"", Matcher.quoteReplacement("\\\"")) + "\"", contentType); + } else { + entity = Entity.entity(obj == null ? "" : obj, contentType); + } + } } return entity; } + /** + * Serialize the given Java object into string according the given + * Content-Type (only JSON, HTTP form is supported for now). + * @param obj Object + * @param formParams Form parameters + * @param contentType Context type + * @param isBodyNullable True if the body is nullable + * @return String + * @throws ApiException API exception + */ + public String serializeToString(Object obj, Map formParams, String contentType, boolean isBodyNullable) throws ApiException { + try { + if (contentType.startsWith("multipart/form-data")) { + throw new ApiException("multipart/form-data not yet supported for serializeToString (http signature authentication)"); + } else if (contentType.startsWith("application/x-www-form-urlencoded")) { + String formString = ""; + for (Entry param : formParams.entrySet()) { + formString = param.getKey() + "=" + URLEncoder.encode(parameterToString(param.getValue()), "UTF-8") + "&"; + } + + if (formString.length() == 0) { // empty string + return formString; + } else { + return formString.substring(0, formString.length() - 1); + } + } else { + if (isBodyNullable) { + return obj == null ? "null" : json.getMapper().writeValueAsString(obj); + } else { + return obj == null ? "" : json.getMapper().writeValueAsString(obj); + } + } + } catch (Exception ex) { + throw new ApiException("Failed to perform serializeToString: " + ex.toString()); + } + } + /** * Deserialize response body to Java object according to the Content-Type. * @param Type @@ -566,8 +981,9 @@ public class ApiClient { List contentTypes = response.getHeaders().get("Content-Type"); if (contentTypes != null && !contentTypes.isEmpty()) contentType = String.valueOf(contentTypes.get(0)); - if (contentType == null) - throw new ApiException(500, "missing Content-Type in response"); + + // read the entity stream multiple times + response.bufferEntity(); return response.readEntity(returnType); } @@ -581,13 +997,7 @@ public class ApiClient { public File downloadFileFromResponse(Response response) throws ApiException { try { File file = prepareDownloadFile(response); -{{^supportJava6}} Files.copy(response.readEntity(InputStream.class), file.toPath(), StandardCopyOption.REPLACE_EXISTING); -{{/supportJava6}} -{{#supportJava6}} - // Java6 falls back to commons.io for file copying - FileUtils.copyToFile(response.readEntity(InputStream.class), file); -{{/supportJava6}} return file; } catch (IOException e) { throw new ApiException(e); @@ -618,132 +1028,286 @@ public class ApiClient { prefix = filename.substring(0, pos) + "-"; suffix = filename.substring(pos); } - // File.createTempFile requires the prefix to be at least three characters long + // Files.createTempFile requires the prefix to be at least three characters long if (prefix.length() < 3) prefix = "download-"; } if (tempFolderPath == null) - return File.createTempFile(prefix, suffix); + return Files.createTempFile(prefix, suffix).toFile(); else - return File.createTempFile(prefix, suffix, new File(tempFolderPath)); + return Files.createTempFile(Paths.get(tempFolderPath), prefix, suffix).toFile(); } /** * Invoke API by sending HTTP request with the given options. * * @param Type + * @param operation The qualified name of the operation * @param path The sub-path of the HTTP URL - * @param method The request method, one of "GET", "POST", "PUT", and "DELETE" + * @param method The request method, one of "GET", "POST", "PUT", "HEAD" and "DELETE" * @param queryParams The query parameters * @param body The request body object * @param headerParams The header parameters + * @param cookieParams The cookie parameters * @param formParams The form parameters * @param accept The request's Accept header * @param contentType The request's Content-Type header * @param authNames The authentications to apply * @param returnType The return type into which to deserialize the response + * @param isBodyNullable True if the body is nullable * @return The response body in type of string * @throws ApiException API exception */ - public T invokeAPI(String path, String method, List queryParams, Object body, Map headerParams, Map formParams, String accept, String contentType, String[] authNames, GenericType returnType) throws ApiException { - updateParamsForAuth(authNames, queryParams, headerParams); - - // Not using `.target(this.basePath).path(path)` below, + public ApiResponse invokeAPI( + String operation, + String path, + String method, + List queryParams, + Object body, + Map headerParams, + Map cookieParams, + Map formParams, + String accept, + String contentType, + String[] authNames, + GenericType returnType, + boolean isBodyNullable) + throws ApiException { + + // Not using `.target(targetURL).path(path)` below, // to support (constant) query string in `path`, e.g. "/posts?draft=1" - WebTarget target = httpClient.target(this.basePath + path); + String targetURL; + if (serverIndex != null && operationServers.containsKey(operation)) { + Integer index = operationServerIndex.containsKey(operation) ? operationServerIndex.get(operation) : serverIndex; + Map variables = operationServerVariables.containsKey(operation) ? + operationServerVariables.get(operation) : serverVariables; + List serverConfigurations = operationServers.get(operation); + if (index < 0 || index >= serverConfigurations.size()) { + throw new ArrayIndexOutOfBoundsException( + String.format( + "Invalid index %d when selecting the host settings. Must be less than %d", + index, serverConfigurations.size())); + } + targetURL = serverConfigurations.get(index).URL(variables) + path; + } else { + targetURL = this.basePath + path; + } + WebTarget target = httpClient.target(targetURL); if (queryParams != null) { for (Pair queryParam : queryParams) { if (queryParam.getValue() != null) { - target = target.queryParam(queryParam.getName(), queryParam.getValue()); + target = target.queryParam(queryParam.getName(), escapeString(queryParam.getValue())); } } } Invocation.Builder invocationBuilder = target.request().accept(accept); - for (Entry entry : headerParams.entrySet()) { + for (Entry entry : cookieParams.entrySet()) { + String value = entry.getValue(); + if (value != null) { + invocationBuilder = invocationBuilder.cookie(entry.getKey(), value); + } + } + + for (Entry entry : defaultCookieMap.entrySet()) { + String value = entry.getValue(); + if (value != null) { + invocationBuilder = invocationBuilder.cookie(entry.getKey(), value); + } + } + + Entity entity = serialize(body, formParams, contentType, isBodyNullable); + + // put all headers in one place + Map allHeaderParams = new HashMap<>(defaultHeaderMap); + allHeaderParams.putAll(headerParams); + + // update different parameters (e.g. headers) for authentication + updateParamsForAuth( + authNames, + queryParams, + allHeaderParams, + cookieParams, + serializeToString(body, formParams, contentType, isBodyNullable), + method, + target.getUri()); + + for (Entry entry : allHeaderParams.entrySet()) { String value = entry.getValue(); if (value != null) { invocationBuilder = invocationBuilder.header(entry.getKey(), value); } } - for (Entry entry : defaultHeaderMap.entrySet()) { - String key = entry.getKey(); - if (!headerParams.containsKey(key)) { - String value = entry.getValue(); - if (value != null) { - invocationBuilder = invocationBuilder.header(key, value); + Response response = null; + + try { + response = sendRequest(method, invocationBuilder, entity); + + {{#hasOAuthMethods}} + // If OAuth is used and a status 401 is received, renew the access token and retry the request + if (response.getStatusInfo() == Status.UNAUTHORIZED) { + for (String authName : authNames) { + Authentication authentication = authentications.get(authName); + if (authentication instanceof OAuth) { + OAuth2AccessToken accessToken = ((OAuth) authentication).renewAccessToken(); + if (accessToken != null) { + invocationBuilder.header("Authorization", null); + invocationBuilder.header("Authorization", "Bearer " + accessToken.getAccessToken()); + response = sendRequest(method, invocationBuilder, entity); + } + break; + } } } - } - Entity entity = serialize(body, formParams, contentType); + {{/hasOAuthMethods}} + int statusCode = response.getStatusInfo().getStatusCode(); + Map> responseHeaders = buildResponseHeaders(response); - Response response; + if (response.getStatusInfo() == Status.NO_CONTENT) { + return new ApiResponse(statusCode, responseHeaders); + } else if (response.getStatusInfo().getFamily() == Status.Family.SUCCESSFUL) { + if (returnType == null) { + return new ApiResponse(statusCode, responseHeaders); + } else { + return new ApiResponse(statusCode, responseHeaders, deserialize(response, returnType)); + } + } else { + String message = "error"; + String respBody = null; + if (response.hasEntity()) { + try { + respBody = String.valueOf(response.readEntity(String.class)); + message = respBody; + } catch (RuntimeException e) { + // e.printStackTrace(); + } + } + throw new ApiException( + response.getStatus(), message, buildResponseHeaders(response), respBody); + } + } finally { + try { + response.close(); + } catch (Exception e) { + // it's not critical, since the response object is local in method invokeAPI; that's fine, + // just continue + } + } + } - if ("GET".equals(method)) { - response = invocationBuilder.get(); - } else if ("POST".equals(method)) { + private Response sendRequest(String method, Invocation.Builder invocationBuilder, Entity entity) { + Response response; + if ("POST".equals(method)) { response = invocationBuilder.post(entity); } else if ("PUT".equals(method)) { response = invocationBuilder.put(entity); } else if ("DELETE".equals(method)) { - response = invocationBuilder.delete(); + response = invocationBuilder.method("DELETE", entity); } else if ("PATCH".equals(method)) { - response = invocationBuilder.header("X-HTTP-Method-Override", "PATCH").post(entity); + response = invocationBuilder.method("PATCH", entity); } else { - throw new ApiException(500, "unknown method type " + method); + response = invocationBuilder.method(method); } + return response; + } - statusCode = response.getStatusInfo().getStatusCode(); - responseHeaders = buildResponseHeaders(response); - - if (response.getStatus() == Status.NO_CONTENT.getStatusCode()) { - return null; - } else if (response.getStatusInfo().getFamily() == Status.Family.SUCCESSFUL) { - if (returnType == null) - return null; - else - return deserialize(response, returnType); - } else { - String message = "error"; - String respBody = null; - if (response.hasEntity()) { - try { - respBody = String.valueOf(response.readEntity(String.class)); - message = respBody; - } catch (RuntimeException e) { - // e.printStackTrace(); - } - } - throw new ApiException( - response.getStatus(), - message, - buildResponseHeaders(response), - respBody); - } + /** + * @deprecated Add qualified name of the operation as a first parameter. + */ + @Deprecated + public ApiResponse invokeAPI(String path, String method, List queryParams, Object body, Map headerParams, Map cookieParams, Map formParams, String accept, String contentType, String[] authNames, GenericType returnType, boolean isBodyNullable) throws ApiException { + return invokeAPI(null, path, method, queryParams, body, headerParams, cookieParams, formParams, accept, contentType, authNames, returnType, isBodyNullable); } /** * Build the Client used to make HTTP requests. - * @param debugging Debug setting * @return Client */ - private Client buildHttpClient(boolean debugging) { - final ClientConfig clientConfig = new ClientConfig(); + protected Client buildHttpClient() { + // recreate the client config to pickup changes + clientConfig = getDefaultClientConfig(); + + ClientBuilder clientBuilder = ClientBuilder.newBuilder(); + customizeClientBuilder(clientBuilder); + clientBuilder = clientBuilder.withConfig(clientConfig); + return clientBuilder.build(); + } + + /** + * Get the default client config. + * @return Client config + */ + public ClientConfig getDefaultClientConfig() { + ClientConfig clientConfig = new ClientConfig(); clientConfig.register(MultiPartFeature.class); clientConfig.register(json); clientConfig.register(JacksonFeature.class); + clientConfig.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true); + // turn off compliance validation to be able to send payloads with DELETE calls + clientConfig.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); if (debugging) { - clientConfig.register(LoggingFilter.class); + clientConfig.register(new LoggingFeature(java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), java.util.logging.Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, 1024*50 /* Log payloads up to 50K */)); + clientConfig.property(LoggingFeature.LOGGING_FEATURE_VERBOSITY, LoggingFeature.Verbosity.PAYLOAD_ANY); + // Set logger to ALL + java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME).setLevel(java.util.logging.Level.ALL); + } else { + // suppress warnings for payloads with DELETE calls: + java.util.logging.Logger.getLogger("org.glassfish.jersey.client").setLevel(java.util.logging.Level.SEVERE); } - return ClientBuilder.newClient(clientConfig); + + return clientConfig; } - private Map> buildResponseHeaders(Response response) { + /** + * Customize the client builder. + * + * This method can be overriden to customize the API client. For example, this can be used to: + * 1. Set the hostname verifier to be used by the client to verify the endpoint's hostname + * against its identification information. + * 2. Set the client-side key store. + * 3. Set the SSL context that will be used when creating secured transport connections to + * server endpoints from web targets created by the client instance that is using this SSL context. + * 4. Set the client-side trust store. + * + * To completely disable certificate validation (at your own risk), you can + * override this method and invoke disableCertificateValidation(clientBuilder). + */ + protected void customizeClientBuilder(ClientBuilder clientBuilder) { + // No-op extension point + } + + /** + * Disable X.509 certificate validation in TLS connections. + * + * Please note that trusting all certificates is extremely risky. + * This may be useful in a development environment with self-signed certificates. + */ + protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException { + TrustManager[] trustAllCerts = new X509TrustManager[] { + new X509TrustManager() { + @Override + public X509Certificate[] getAcceptedIssuers() { + return null; + } + @Override + public void checkClientTrusted(X509Certificate[] certs, String authType) { + } + @Override + public void checkServerTrusted(X509Certificate[] certs, String authType) { + } + } + }; + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, trustAllCerts, new SecureRandom()); + clientBuilder.sslContext(sslContext); + } + + protected Map> buildResponseHeaders(Response response) { Map> responseHeaders = new HashMap>(); for (Entry> entry: response.getHeaders().entrySet()) { List values = entry.getValue(); @@ -760,12 +1324,20 @@ public class ApiClient { * Update query and header parameters based on authentication settings. * * @param authNames The authentications to apply + * @param queryParams List of query parameters + * @param headerParams Map of header parameters + * @param cookieParams Map of cookie parameters + * @param method HTTP method (e.g. POST) + * @param uri HTTP URI */ - private void updateParamsForAuth(String[] authNames, List queryParams, Map headerParams) { + protected void updateParamsForAuth(String[] authNames, List queryParams, Map headerParams, + Map cookieParams, String payload, String method, URI uri) throws ApiException { for (String authName : authNames) { Authentication auth = authentications.get(authName); - if (auth == null) throw new RuntimeException("Authentication undefined: " + authName); - auth.applyToParams(queryParams, headerParams); + if (auth == null) { + continue; + } + auth.applyToParams(queryParams, headerParams, cookieParams, payload, method, uri); } } } diff --git a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/JSON.mustache b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/JSON.mustache index 52e94ec9326a..3297c77e49b2 100644 --- a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/JSON.mustache +++ b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/JSON.mustache @@ -1,18 +1,32 @@ -//overloaded template file within library folder to add this comment - package {{invokerPackage}}; +{{#threetenbp}} +import org.threeten.bp.*; +{{/threetenbp}} import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.*; +{{#openApiNullable}} +import org.openapitools.jackson.nullable.JsonNullableModule; +{{/openApiNullable}} {{#java8}} -import com.fasterxml.jackson.datatype.jsr310.*; -{{/java8}} -{{^java8}} -import com.fasterxml.jackson.datatype.joda.*; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; {{/java8}} +{{#joda}} +import com.fasterxml.jackson.datatype.joda.JodaModule; +{{/joda}} +{{#threetenbp}} +import com.fasterxml.jackson.datatype.threetenbp.ThreeTenModule; +{{/threetenbp}} +{{#models.0}} +import {{modelPackage}}.*; +{{/models.0}} import java.text.DateFormat; - +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import javax.ws.rs.core.GenericType; import javax.ws.rs.ext.ContextResolver; {{>generatedAnnotation}} @@ -22,7 +36,9 @@ public class JSON implements ContextResolver { public JSON() { mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(MapperFeature.ALLOW_COERCION_OF_SCALARS, false); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true); + mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, true); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); @@ -30,9 +46,20 @@ public class JSON implements ContextResolver { {{#java8}} mapper.registerModule(new JavaTimeModule()); {{/java8}} - {{^java8}} + {{#joda}} mapper.registerModule(new JodaModule()); - {{/java8}} + {{/joda}} + {{#threetenbp}} + ThreeTenModule module = new ThreeTenModule(); + module.addDeserializer(Instant.class, CustomInstantDeserializer.INSTANT); + module.addDeserializer(OffsetDateTime.class, CustomInstantDeserializer.OFFSET_DATE_TIME); + module.addDeserializer(ZonedDateTime.class, CustomInstantDeserializer.ZONED_DATE_TIME); + mapper.registerModule(module); + {{/threetenbp}} + {{#openApiNullable}} + JsonNullableModule jnm = new JsonNullableModule(); + mapper.registerModule(jnm); + {{/openApiNullable}} } /** @@ -47,4 +74,204 @@ public class JSON implements ContextResolver { public ObjectMapper getContext(Class type) { return mapper; } + + /** + * Get the object mapper + * + * @return object mapper + */ + public ObjectMapper getMapper() { return mapper; } + + /** + * Returns the target model class that should be used to deserialize the input data. + * The discriminator mappings are used to determine the target model class. + * + * @param node The input data. + * @param modelClass The class that contains the discriminator mappings. + */ + public static Class getClassForElement(JsonNode node, Class modelClass) { + ClassDiscriminatorMapping cdm = modelDiscriminators.get(modelClass); + if (cdm != null) { + return cdm.getClassForElement(node, new HashSet>()); + } + return null; + } + + /** + * Helper class to register the discriminator mappings. + */ + private static class ClassDiscriminatorMapping { + // The model class name. + Class modelClass; + // The name of the discriminator property. + String discriminatorName; + // The discriminator mappings for a model class. + Map> discriminatorMappings; + + // Constructs a new class discriminator. + ClassDiscriminatorMapping(Class cls, String propertyName, Map> mappings) { + modelClass = cls; + discriminatorName = propertyName; + discriminatorMappings = new HashMap>(); + if (mappings != null) { + discriminatorMappings.putAll(mappings); + } + } + + // Return the name of the discriminator property for this model class. + String getDiscriminatorPropertyName() { + return discriminatorName; + } + + // Return the discriminator value or null if the discriminator is not + // present in the payload. + String getDiscriminatorValue(JsonNode node) { + // Determine the value of the discriminator property in the input data. + if (discriminatorName != null) { + // Get the value of the discriminator property, if present in the input payload. + node = node.get(discriminatorName); + if (node != null && node.isValueNode()) { + String discrValue = node.asText(); + if (discrValue != null) { + return discrValue; + } + } + } + return null; + } + + /** + * Returns the target model class that should be used to deserialize the input data. + * This function can be invoked for anyOf/oneOf composed models with discriminator mappings. + * The discriminator mappings are used to determine the target model class. + * + * @param node The input data. + * @param visitedClasses The set of classes that have already been visited. + */ + Class getClassForElement(JsonNode node, Set> visitedClasses) { + if (visitedClasses.contains(modelClass)) { + // Class has already been visited. + return null; + } + // Determine the value of the discriminator property in the input data. + String discrValue = getDiscriminatorValue(node); + if (discrValue == null) { + return null; + } + Class cls = discriminatorMappings.get(discrValue); + // It may not be sufficient to return this cls directly because that target class + // may itself be a composed schema, possibly with its own discriminator. + visitedClasses.add(modelClass); + for (Class childClass : discriminatorMappings.values()) { + ClassDiscriminatorMapping childCdm = modelDiscriminators.get(childClass); + if (childCdm == null) { + continue; + } + if (!discriminatorName.equals(childCdm.discriminatorName)) { + discrValue = getDiscriminatorValue(node); + if (discrValue == null) { + continue; + } + } + if (childCdm != null) { + // Recursively traverse the discriminator mappings. + Class childDiscr = childCdm.getClassForElement(node, visitedClasses); + if (childDiscr != null) { + return childDiscr; + } + } + } + return cls; + } + } + + /** + * Returns true if inst is an instance of modelClass in the OpenAPI model hierarchy. + * + * The Java class hierarchy is not implemented the same way as the OpenAPI model hierarchy, + * so it's not possible to use the instanceof keyword. + * + * @param modelClass A OpenAPI model class. + * @param inst The instance object. + */ + public static boolean isInstanceOf(Class modelClass, Object inst, Set> visitedClasses) { + if (modelClass.isInstance(inst)) { + // This handles the 'allOf' use case with single parent inheritance. + return true; + } + if (visitedClasses.contains(modelClass)) { + // This is to prevent infinite recursion when the composed schemas have + // a circular dependency. + return false; + } + visitedClasses.add(modelClass); + + // Traverse the oneOf/anyOf composed schemas. + Map descendants = modelDescendants.get(modelClass); + if (descendants != null) { + for (GenericType childType : descendants.values()) { + if (isInstanceOf(childType.getRawType(), inst, visitedClasses)) { + return true; + } + } + } + return false; + } + + /** + * A map of discriminators for all model classes. + */ + private static Map, ClassDiscriminatorMapping> modelDiscriminators = new HashMap, ClassDiscriminatorMapping>(); + + /** + * A map of oneOf/anyOf descendants for each model class. + */ + private static Map, Map> modelDescendants = new HashMap, Map>(); + + /** + * Register a model class discriminator. + * + * @param modelClass the model class + * @param discriminatorPropertyName the name of the discriminator property + * @param mappings a map with the discriminator mappings. + */ + public static void registerDiscriminator(Class modelClass, String discriminatorPropertyName, Map> mappings) { + ClassDiscriminatorMapping m = new ClassDiscriminatorMapping(modelClass, discriminatorPropertyName, mappings); + modelDiscriminators.put(modelClass, m); + } + + /** + * Register the oneOf/anyOf descendants of the modelClass. + * + * @param modelClass the model class + * @param descendants a map of oneOf/anyOf descendants. + */ + public static void registerDescendants(Class modelClass, Map descendants) { + modelDescendants.put(modelClass, descendants); + } + + private static JSON json; + + static + { + json = new JSON(); + } + + /** + * Get the default JSON instance. + * + * @return the default JSON instance + */ + public static JSON getDefault() { + return json; + } + + /** + * Set the default JSON instance. + * + * @param json JSON instance to be used + */ + public static void setDefault(JSON json) { + JSON.json = json; + } } diff --git a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/api.mustache b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/api.mustache index e6e83d3550b8..666430c834e1 100644 --- a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/api.mustache +++ b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/api.mustache @@ -1,9 +1,8 @@ -//overloaded template file within library folder to add this comment - package {{package}}; import {{invokerPackage}}.ApiException; import {{invokerPackage}}.ApiClient; +import {{invokerPackage}}.ApiResponse; import {{invokerPackage}}.Configuration; import {{invokerPackage}}.Pair; @@ -17,8 +16,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -{{/fullJavaUtil}} +{{/fullJavaUtil}} {{>generatedAnnotation}} {{#operations}} public class {{classname}} { @@ -32,15 +31,26 @@ public class {{classname}} { this.apiClient = apiClient; } + /** + * Get the API cilent + * + * @return API client + */ public ApiClient getApiClient() { return apiClient; } + /** + * Set the API cilent + * + * @param apiClient an instance of API client + */ public void setApiClient(ApiClient apiClient) { this.apiClient = apiClient; } {{#operation}} + {{^vendorExtensions.x-group-parameters}} /** * {{summary}} * {{notes}} @@ -51,8 +61,61 @@ public class {{classname}} { * @return {{returnType}} {{/returnType}} * @throws ApiException if fails to make API call + {{#responses.0}} + * @http.response.details + + + {{#responses}} + + {{/responses}} +
Status Code Description Response Headers
{{code}} {{message}} {{#headers}} * {{baseName}} - {{description}}
{{/headers}}{{^headers.0}} - {{/headers.0}}
+ {{/responses.0}} + {{#isDeprecated}} + * @deprecated + {{/isDeprecated}} + {{#externalDocs}} + * {{description}} + * @see {{summary}} Documentation + {{/externalDocs}} */ + {{#isDeprecated}} + @Deprecated + {{/isDeprecated}} public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}}{{operationId}}({{#allParams}}{{{dataType}}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws ApiException { + {{#returnType}}return {{/returnType}}{{operationId}}WithHttpInfo({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}){{#returnType}}.getData(){{/returnType}}; + } + {{/vendorExtensions.x-group-parameters}} + + {{^vendorExtensions.x-group-parameters}} + /** + * {{summary}} + * {{notes}} + {{#allParams}} + * @param {{paramName}} {{description}}{{#required}} (required){{/required}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} + {{/allParams}} + * @return ApiResponse<{{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}Void{{/returnType}}> + * @throws ApiException if fails to make API call + {{#responses.0}} + * @http.response.details + + + {{#responses}} + + {{/responses}} +
Status Code Description Response Headers
{{code}} {{message}} {{#headers}} * {{baseName}} - {{description}}
{{/headers}}{{^headers.0}} - {{/headers.0}}
+ {{/responses.0}} + {{#isDeprecated}} + * @deprecated + {{/isDeprecated}} + {{#externalDocs}} + * {{description}} + * @see {{summary}} Documentation + {{/externalDocs}} + */ + {{#isDeprecated}} + @Deprecated + {{/isDeprecated}} + public{{/vendorExtensions.x-group-parameters}}{{#vendorExtensions.x-group-parameters}}private{{/vendorExtensions.x-group-parameters}} ApiResponse<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {{operationId}}WithHttpInfo({{#allParams}}{{{dataType}}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws ApiException { Object localVarPostBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; {{#allParams}}{{#required}} // verify the required parameter '{{paramName}}' is set @@ -61,12 +124,13 @@ public class {{classname}} { } {{/required}}{{/allParams}} // create path and map variables - String localVarPath = "{{{path}}}".replaceAll("\\{format\\}","json"){{#pathParams}} + String localVarPath = "{{{path}}}"{{#pathParams}} .replaceAll("\\{" + "{{baseName}}" + "\\}", apiClient.escapeString({{{paramName}}}.toString())){{/pathParams}}; // query params {{javaUtilPrefix}}List localVarQueryParams = new {{javaUtilPrefix}}ArrayList(); {{javaUtilPrefix}}Map localVarHeaderParams = new {{javaUtilPrefix}}HashMap(); + {{javaUtilPrefix}}Map localVarCookieParams = new {{javaUtilPrefix}}HashMap(); {{javaUtilPrefix}}Map localVarFormParams = new {{javaUtilPrefix}}HashMap(); {{#queryParams}} @@ -77,6 +141,10 @@ public class {{classname}} { localVarHeaderParams.put("{{baseName}}", apiClient.parameterToString({{paramName}})); {{/headerParams}} + {{#cookieParams}}if ({{paramName}} != null) + localVarCookieParams.put("{{baseName}}", apiClient.parameterToString({{paramName}})); + {{/cookieParams}} + {{#formParams}}if ({{paramName}} != null) localVarFormParams.put("{{baseName}}", {{paramName}}); {{/formParams}} @@ -95,11 +163,100 @@ public class {{classname}} { {{#returnType}} GenericType<{{{returnType}}}> localVarReturnType = new GenericType<{{{returnType}}}>() {}; - return apiClient.invokeAPI(localVarPath, "{{httpMethod}}", localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); - {{/returnType}}{{^returnType}} - apiClient.invokeAPI(localVarPath, "{{httpMethod}}", localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarAccept, localVarContentType, localVarAuthNames, null); + {{/returnType}} + return apiClient.invokeAPI("{{classname}}.{{operationId}}", localVarPath, "{{httpMethod}}", localVarQueryParams, localVarPostBody, + localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAccept, localVarContentType, + localVarAuthNames, {{#returnType}}localVarReturnType{{/returnType}}{{^returnType}}null{{/returnType}}, {{#bodyParam}}{{#isNullable}}true{{/isNullable}}{{^isNullable}}false{{/isNullable}}{{/bodyParam}}{{^bodyParam}}false{{/bodyParam}}); + } + {{#vendorExtensions.x-group-parameters}} + + public class API{{operationId}}Request { + {{#allParams}} + private {{#isRequired}}final {{/isRequired}}{{{dataType}}} {{paramName}}; + {{/allParams}} + + private API{{operationId}}Request({{#pathParams}}{{{dataType}}} {{paramName}}{{^-last}}, {{/-last}}{{/pathParams}}) { + {{#pathParams}} + this.{{paramName}} = {{paramName}}; + {{/pathParams}} + } + {{#allParams}} + {{^isPathParam}} + + /** + * Set {{paramName}} + * @param {{paramName}} {{description}} ({{^required}}optional{{^isContainer}}{{#defaultValue}}, default to {{.}}{{/defaultValue}}{{/isContainer}}{{/required}}{{#required}}required{{/required}}) + * @return API{{operationId}}Request + */ + public API{{operationId}}Request {{paramName}}({{{dataType}}} {{paramName}}) { + this.{{paramName}} = {{paramName}}; + return this; + } + {{/isPathParam}} + {{/allParams}} + + /** + * Execute {{operationId}} request + {{#returnType}}* @return {{.}}{{/returnType}} + * @throws ApiException if fails to make API call + {{#responses.0}} + * @http.response.details + + + {{#responses}} + + {{/responses}} +
Status Code Description Response Headers
{{code}} {{message}} {{#headers}} * {{baseName}} - {{description}}
{{/headers}}{{^headers.0}} - {{/headers.0}}
+ {{/responses.0}} + {{#isDeprecated}}* @deprecated{{/isDeprecated}} + */ + {{#isDeprecated}}@Deprecated{{/isDeprecated}} + public {{#returnType}}{{{.}}}{{/returnType}}{{^returnType}}void{{/returnType}} execute() throws ApiException { + {{#returnType}}return {{/returnType}}this.executeWithHttpInfo().getData(); + } + + /** + * Execute {{operationId}} request with HTTP info returned + * @return ApiResponse<{{#returnType}}{{.}}{{/returnType}}{{^returnType}}Void{{/returnType}}> + * @throws ApiException if fails to make API call + {{#responses.0}} + * @http.response.details + + + {{#responses}} + + {{/responses}} +
Status Code Description Response Headers
{{code}} {{message}} {{#headers}} * {{baseName}} - {{description}}
{{/headers}}{{^headers.0}} - {{/headers.0}}
+ {{/responses.0}} + {{#isDeprecated}} + * @deprecated{{/isDeprecated}} + */ + {{#isDeprecated}} + @Deprecated + {{/isDeprecated}} + public ApiResponse<{{#returnType}}{{{.}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> executeWithHttpInfo() throws ApiException { + return {{operationId}}WithHttpInfo({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}); + } + } + + /** + * {{summary}} + * {{notes}}{{#pathParams}} + * @param {{paramName}} {{description}} (required){{/pathParams}} + * @return {{operationId}}Request + * @throws ApiException if fails to make API call + {{#isDeprecated}}* @deprecated{{/isDeprecated}} + {{#externalDocs}}* {{description}} + * @see {{summary}} Documentation{{/externalDocs}} + */ + {{#isDeprecated}} + @Deprecated + {{/isDeprecated}} + public API{{operationId}}Request {{operationId}}({{#pathParams}}{{{dataType}}} {{paramName}}{{^-last}}, {{/-last}}{{/pathParams}}) throws ApiException { + return new API{{operationId}}Request({{#pathParams}}{{paramName}}{{^-last}}, {{/-last}}{{/pathParams}}); } + {{/vendorExtensions.x-group-parameters}} {{/operation}} } {{/operations}} diff --git a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/build.gradle.mustache b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/build.gradle.mustache index c76ec3218088..378de9fb1e1f 100644 --- a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/build.gradle.mustache +++ b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/build.gradle.mustache @@ -1,5 +1,3 @@ -//overloaded template file within library folder to add this comment - apply plugin: 'idea' apply plugin: 'eclipse' @@ -8,11 +6,12 @@ version = '{{artifactVersion}}' buildscript { repositories { + maven { url "https://repo1.maven.org/maven2" } jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.5.+' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' + classpath 'com.android.tools.build:gradle:2.3.+' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' } } @@ -27,18 +26,13 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'com.github.dcendents.android-maven' android { - compileSdkVersion 23 - buildToolsVersion '23.0.2' + compileSdkVersion 25 + buildToolsVersion '25.0.2' defaultConfig { minSdkVersion 14 - targetSdkVersion 23 + targetSdkVersion 25 } compileOptions { - {{#supportJava6}} - sourceCompatibility JavaVersion.VERSION_1_6 - targetCompatibility JavaVersion.VERSION_1_6 - {{/supportJava6}} - {{^supportJava6}} {{#java8}} sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 @@ -47,7 +41,6 @@ if(hasProperty('target') && target == 'android') { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 {{/java8}} - {{/supportJava6}} } // Rename the aar correctly @@ -91,11 +84,6 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'java' apply plugin: 'maven' - {{#supportJava6}} - sourceCompatibility = JavaVersion.VERSION_1_6 - targetCompatibility = JavaVersion.VERSION_1_6 - {{/supportJava6}} - {{^supportJava6}} {{#java8}} sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 @@ -104,7 +92,6 @@ if(hasProperty('target') && target == 'android') { sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 {{/java8}} - {{/supportJava6}} install { repositories.mavenInstaller { @@ -119,38 +106,61 @@ if(hasProperty('target') && target == 'android') { } ext { - swagger_annotations_version = "1.5.8" - jackson_version = "2.7.5" - jersey_version = "2.22.2" - {{^java8}} - jodatime_version = "2.9.4" - {{/java8}} - {{#supportJava6}} - commons_io_version=2.5 - commons_lang3_version=3.5 - {{/supportJava6}} - junit_version = "4.13" + swagger_annotations_version = "1.5.22" + jackson_version = "2.10.5" + jackson_databind_version = "2.10.5.1" + {{#openApiNullable}} + jackson_databind_nullable_version = "0.2.1" + {{/openApiNullable}} + jersey_version = "2.27" + junit_version = "4.13.1" + {{#threetenbp}} + threetenbp_version = "2.9.10" + {{/threetenbp}} + {{#hasOAuthMethods}} + scribejava_apis_version = "6.9.0" + {{/hasOAuthMethods}} + {{#hasHttpSignatureMethods}} + tomitribe_http_signatures_version = "1.5" + {{/hasHttpSignatureMethods}} } dependencies { implementation "io.swagger:swagger-annotations:$swagger_annotations_version" + implementation "com.google.code.findbugs:jsr305:3.0.2" implementation "org.glassfish.jersey.core:jersey-client:$jersey_version" + implementation "org.glassfish.jersey.inject:jersey-hk2:$jersey_version" implementation "org.glassfish.jersey.media:jersey-media-multipart:$jersey_version" implementation "org.glassfish.jersey.media:jersey-media-json-jackson:$jersey_version" + implementation "org.glassfish.jersey.connectors:jersey-apache-connector:$jersey_version" implementation "com.fasterxml.jackson.core:jackson-core:$jackson_version" implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_version" - implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_version" + implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_databind_version" + {{#openApiNullable}} + implementation "org.openapitools:jackson-databind-nullable:$jackson_databind_nullable_version" + {{/openApiNullable}} + {{#joda}} + implementation "com.fasterxml.jackson.datatype:jackson-datatype-joda:$jackson_version" + {{/joda}} {{#java8}} implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jackson_version" {{/java8}} + {{#hasOAuthMethods}} + implementation "com.github.scribejava:scribejava-apis:$scribejava_apis_version" + {{/hasOAuthMethods}} + {{#hasHttpSignatureMethods}} + implementation "org.tomitribe:tomitribe-http-signatures:$tomitribe_http_signatures_version" + {{/hasHttpSignatureMethods}} + {{#threetenbp}} + implementation "com.github.joschi.jackson:jackson-datatype-threetenbp:$threetenbp_version" + {{/threetenbp}} {{^java8}} - implementation "com.fasterxml.jackson.datatype:jackson-datatype-joda:$jackson_version" - implementation "joda-time:joda-time:$jodatime_version" implementation "com.brsanthu:migbase64:2.2" {{/java8}} - {{#supportJava6}} - implementation "commons-io:commons-io:$commons_io_version" - implementation "org.apache.commons:commons-lang3:$commons_lang3_version" - {{/supportJava6}} + implementation 'javax.annotation:javax.annotation-api:1.3.2' testImplementation "junit:junit:$junit_version" } + +javadoc { + options.tags = [ "http.response.details:a:Http Response Details" ] +} diff --git a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/build.sbt.mustache b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/build.sbt.mustache index 1049751cf3a4..9823c3c657e9 100644 --- a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/build.sbt.mustache +++ b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/build.sbt.mustache @@ -1,5 +1,3 @@ -//overloaded template file within library folder to add this comment - lazy val root = (project in file(".")). settings( organization := "{{groupId}}", @@ -11,26 +9,35 @@ lazy val root = (project in file(".")). publishArtifact in (Compile, packageDoc) := false, resolvers += Resolver.mavenLocal, libraryDependencies ++= Seq( - "io.swagger" % "swagger-annotations" % "1.5.8", - "org.glassfish.jersey.core" % "jersey-client" % "2.22.2", - "org.glassfish.jersey.media" % "jersey-media-multipart" % "2.22.2", - "org.glassfish.jersey.media" % "jersey-media-json-jackson" % "2.22.2", - "com.fasterxml.jackson.core" % "jackson-core" % "2.7.5", - "com.fasterxml.jackson.core" % "jackson-annotations" % "2.7.5", - "com.fasterxml.jackson.core" % "jackson-databind" % "2.7.5", + "io.swagger" % "swagger-annotations" % "1.5.22", + "org.glassfish.jersey.core" % "jersey-client" % "2.27", + "org.glassfish.jersey.inject" % "jersey-hk2" % "2.27", + "org.glassfish.jersey.media" % "jersey-media-multipart" % "2.27", + "org.glassfish.jersey.media" % "jersey-media-json-jackson" % "2.27", + "org.glassfish.jersey.connectors" % "jersey-apache-connector" % "2.27", + "com.fasterxml.jackson.core" % "jackson-core" % "2.10.5" % "compile", + "com.fasterxml.jackson.core" % "jackson-annotations" % "2.10.5.1" % "compile", + "com.fasterxml.jackson.core" % "jackson-databind" % "2.10.5.1" % "compile", + {{#joda}} + "com.fasterxml.jackson.datatype" % "jackson-datatype-joda" % "2.9.10" % "compile", + {{/joda}} {{#java8}} - "com.fasterxml.jackson.datatype" % "jackson-datatype-jsr310" % "2.7.5", - {{/java8}} - {{^java8}} - "com.fasterxml.jackson.datatype" % "jackson-datatype-joda" % "2.7.5", - "joda-time" % "joda-time" % "2.9.4", + "com.fasterxml.jackson.datatype" % "jackson-datatype-jsr310" % "2.9.10" % "compile", + {{/java8}} + {{#threetenbp}} + "com.github.joschi.jackson" % "jackson-datatype-threetenbp" % "2.9.10" % "compile", + {{/threetenbp}} + {{#hasOAuthMethods}} + "com.github.scribejava" % "scribejava-apis" % "6.9.0" % "compile", + {{/hasOAuthMethods}} + {{#hasHttpSignatureMethods}} + "org.tomitribe" % "tomitribe-http-signatures" % "1.5" % "compile", + {{/hasHttpSignatureMethods}} + {{^java8}} "com.brsanthu" % "migbase64" % "2.2", {{/java8}} - {{#supportJava6}} - "org.apache.commons" % "commons-lang3" % "3.5", - "commons-io" % "commons-io" % "2.5", - {{/supportJava6}} - "junit" % "junit" % "4.13" % "test", + "javax.annotation" % "javax.annotation-api" % "1.3.2" % "compile", + "junit" % "junit" % "4.13.1" % "test", "com.novocode" % "junit-interface" % "0.10" % "test" ) ) diff --git a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/pom.mustache b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/pom.mustache index 3e1a02651469..f36f0cd88178 100644 --- a/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/pom.mustache +++ b/modules/openapi-generator/src/test/resources/2_0/templates/Java/libraries/jersey2/pom.mustache @@ -1,5 +1,3 @@ -//overloaded template file within library folder to add this comment - 4.0.0 @@ -15,6 +13,13 @@ {{scmDeveloperConnection}} {{scmUrl}} +{{#parentOverridden}} + + {{{parentGroupId}}} + {{{parentArtifactId}}} + {{{parentVersion}}} + +{{/parentOverridden}} @@ -58,7 +63,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.12 + 3.0.0-M4 @@ -68,7 +73,8 @@ -Xms512m -Xmx1500m methods - pertest + 10 + false @@ -106,6 +112,7 @@ org.codehaus.mojo build-helper-maven-plugin + 1.10 add_sources @@ -115,8 +122,7 @@ - - src/main/java + src/main/java @@ -128,8 +134,7 @@ - - src/test/java + src/test/java @@ -138,7 +143,7 @@ org.apache.maven.plugins maven-compiler-plugin - 2.5.1 + 3.8.1 {{#java8}} 1.8 @@ -148,15 +153,19 @@ 1.7 1.7 {{/java8}} + true + 128m + 512m + + -Xlint:all + -J-Xss4m + org.apache.maven.plugins maven-javadoc-plugin 3.1.1 - - none - attach-javadocs @@ -165,6 +174,22 @@ + + none + {{#java8}} + 1.8 + {{/java8}} + {{^java8}} + 1.7 + {{/java8}} + + + http.response.details + a + Http Response Details: + + + org.apache.maven.plugins @@ -210,7 +235,14 @@ io.swagger swagger-annotations - ${swagger-core-version} + ${swagger-annotations-version} + + + + + com.google.code.findbugs + jsr305 + 3.0.2 @@ -219,6 +251,11 @@ jersey-client ${jersey-version} + + org.glassfish.jersey.inject + jersey-hk2 + ${jersey-version} + org.glassfish.jersey.media jersey-media-multipart @@ -244,49 +281,86 @@ com.fasterxml.jackson.core jackson-databind + ${jackson-databind-version} + + {{#openApiNullable}} + + org.openapitools + jackson-databind-nullable + ${jackson-databind-nullable-version} + + {{/openApiNullable}} + {{#withXml}} + + + org.glassfish.jersey.media + jersey-media-jaxb + ${jersey-version} + + {{/withXml}} + {{#joda}} + + com.fasterxml.jackson.datatype + jackson-datatype-joda ${jackson-version} + {{/joda}} {{#java8}} - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - ${jackson-version} - + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson-version} + {{/java8}} + {{#threetenbp}} + + com.github.joschi.jackson + jackson-datatype-threetenbp + ${threetenbp-version} + + {{/threetenbp}} {{^java8}} - - com.fasterxml.jackson.datatype - jackson-datatype-joda - ${jackson-version} - - - joda-time - joda-time - ${jodatime-version} - - - - - com.brsanthu - migbase64 - 2.2 - + + + com.brsanthu + migbase64 + 2.2 + {{/java8}} - - {{#supportJava6}} - - org.apache.commons - commons-lang3 - ${commons_lang3_version} - - - - commons-io - commons-io - ${commons_io_version} - - {{/supportJava6}} - + {{#hasHttpSignatureMethods}} + + org.tomitribe + tomitribe-http-signatures + ${http-signature-version} + + {{/hasHttpSignatureMethods}} + {{#hasOAuthMethods}} + + com.github.scribejava + scribejava-apis + ${scribejava-apis-version} + + {{/hasOAuthMethods}} + {{#useBeanValidation}} + + + javax.validation + validation-api + 1.1.0.Final + provided + + {{/useBeanValidation}} + + javax.annotation + javax.annotation-api + ${javax-annotation-version} + provided + + + org.glassfish.jersey.connectors + jersey-apache-connector + ${jersey-version} + junit @@ -297,17 +371,21 @@ UTF-8 - 1.5.18 - 2.22.2 - 2.8.9 - {{^java8}} - 2.9.4 - {{/java8}} - {{#supportJava6}} - 2.5 - 3.5 - {{/supportJava6}} - 1.0.0 - 4.13 + 1.6.1 + 2.30.1 + 2.10.5 + 2.10.5.1 + 0.2.1 + {{#threetenbp}} + 2.9.10 + {{/threetenbp}} + 1.3.2 + 4.13.1 + {{#hasHttpSignatureMethods}} + 1.5 + {{/hasHttpSignatureMethods}} + {{#hasOAuthMethods}} + 6.9.0 + {{/hasOAuthMethods}} diff --git a/modules/openapi-generator/src/test/resources/2_0/templates/Java/model.mustache b/modules/openapi-generator/src/test/resources/2_0/templates/Java/model.mustache index 07adf19139f6..8fd078eb3d62 100644 --- a/modules/openapi-generator/src/test/resources/2_0/templates/Java/model.mustache +++ b/modules/openapi-generator/src/test/resources/2_0/templates/Java/model.mustache @@ -1,31 +1,54 @@ -//overloaded main template file to add this comment - {{>licenseInfo}} package {{package}}; -{{^supportJava6}} +{{#useReflectionEqualsHashCode}} +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; +{{/useReflectionEqualsHashCode}} import java.util.Objects; -{{/supportJava6}} -{{#supportJava6}} -import org.apache.commons.lang3.ObjectUtils; -{{/supportJava6}} +import java.util.Arrays; {{#imports}} import {{import}}; {{/imports}} {{#serializableModel}} import java.io.Serializable; {{/serializableModel}} +{{#jackson}} +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +{{#withXml}} +import com.fasterxml.jackson.dataformat.xml.annotation.*; +{{/withXml}} +{{/jackson}} +{{#withXml}} +import javax.xml.bind.annotation.*; +{{/withXml}} +{{#jsonb}} +import java.lang.reflect.Type; +import javax.json.bind.annotation.JsonbTypeDeserializer; +import javax.json.bind.annotation.JsonbTypeSerializer; +import javax.json.bind.serializer.DeserializationContext; +import javax.json.bind.serializer.JsonbDeserializer; +import javax.json.bind.serializer.JsonbSerializer; +import javax.json.bind.serializer.SerializationContext; +import javax.json.stream.JsonGenerator; +import javax.json.stream.JsonParser; +import javax.json.bind.annotation.JsonbProperty; +{{/jsonb}} {{#parcelableModel}} import android.os.Parcelable; import android.os.Parcel; {{/parcelableModel}} {{#useBeanValidation}} import javax.validation.constraints.*; +import javax.validation.Valid; {{/useBeanValidation}} +{{#performBeanValidation}} +import org.hibernate.validator.constraints.*; +{{/performBeanValidation}} {{#models}} {{#model}} -{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{>pojo}}{{/isEnum}} +{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}} {{/model}} {{/models}} diff --git a/samples/server/petstore/scala-akka-http-server/.openapi-generator/FILES b/samples/server/petstore/scala-akka-http-server/.openapi-generator/FILES new file mode 100644 index 000000000000..cfcbab175e5d --- /dev/null +++ b/samples/server/petstore/scala-akka-http-server/.openapi-generator/FILES @@ -0,0 +1,15 @@ +README.md +build.sbt +src/main/scala/org/openapitools/server/AkkaHttpHelper.scala +src/main/scala/org/openapitools/server/Controller.scala +src/main/scala/org/openapitools/server/MultipartDirectives.scala +src/main/scala/org/openapitools/server/StringDirectives.scala +src/main/scala/org/openapitools/server/api/PetApi.scala +src/main/scala/org/openapitools/server/api/StoreApi.scala +src/main/scala/org/openapitools/server/api/UserApi.scala +src/main/scala/org/openapitools/server/model/ApiResponse.scala +src/main/scala/org/openapitools/server/model/Category.scala +src/main/scala/org/openapitools/server/model/Order.scala +src/main/scala/org/openapitools/server/model/Pet.scala +src/main/scala/org/openapitools/server/model/Tag.scala +src/main/scala/org/openapitools/server/model/User.scala diff --git a/samples/server/petstore/scala-akka-http-server/.openapi-generator/VERSION b/samples/server/petstore/scala-akka-http-server/.openapi-generator/VERSION index d99e7162d01f..d509cc92aa80 100644 --- a/samples/server/petstore/scala-akka-http-server/.openapi-generator/VERSION +++ b/samples/server/petstore/scala-akka-http-server/.openapi-generator/VERSION @@ -1 +1 @@ -5.0.0-SNAPSHOT \ No newline at end of file +5.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/scala-akka-http-server/src/main/scala/org/openapitools/server/MultipartDirectives.scala b/samples/server/petstore/scala-akka-http-server/src/main/scala/org/openapitools/server/MultipartDirectives.scala index 79891d7095a8..2ebbd943db2f 100644 --- a/samples/server/petstore/scala-akka-http-server/src/main/scala/org/openapitools/server/MultipartDirectives.scala +++ b/samples/server/petstore/scala-akka-http-server/src/main/scala/org/openapitools/server/MultipartDirectives.scala @@ -1,6 +1,7 @@ package org.openapitools.server import java.io.File +import java.nio.file.Files import akka.annotation.ApiMayChange import akka.http.scaladsl.model.Multipart.FormData @@ -69,7 +70,7 @@ trait MultipartDirectives { object MultipartDirectives extends MultipartDirectives with FileUploadDirectives { val tempFileFromFileInfo: FileInfo => File = { - file: FileInfo => File.createTempFile(file.fileName, ".tmp") + file: FileInfo => Files.createTempFile(file.fileName, ".tmp").toFile() } } From ad9e2395ac22f8ec6c5c3076455f802e0b329858 Mon Sep 17 00:00:00 2001 From: Andre Praca Date: Wed, 28 Apr 2021 10:08:50 +0300 Subject: [PATCH 064/186] [PHP] Fix parentSchema conditional causing parent call when parent isn't present (#8705) * Fix parentSchema conditional we cannot call `parent::` if parent isn't present. Everywhere else in the schema we're checking for `{{parentSchema}}` but here we're checking for `{{parent}}` which is causing errors when parent is not present * Update samples --- .../src/main/resources/php/model_generic.mustache | 8 ++++---- .../php/OpenAPIClient-php/lib/Model/NullableClass.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/php/model_generic.mustache b/modules/openapi-generator/src/main/resources/php/model_generic.mustache index 276b2bd9d8cf..64bb657af16d 100644 --- a/modules/openapi-generator/src/main/resources/php/model_generic.mustache +++ b/modules/openapi-generator/src/main/resources/php/model_generic.mustache @@ -188,12 +188,12 @@ class {{classname}} {{#parentSchema}}extends {{{parent}}}{{/parentSchema}}{{^par */ public function listInvalidProperties() { - {{#parent}} + {{#parentSchema}} $invalidProperties = parent::listInvalidProperties(); - {{/parent}} - {{^parent}} + {{/parentSchema}} + {{^parentSchema}} $invalidProperties = []; - {{/parent}} + {{/parentSchema}} {{#vars}} {{#required}} diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php index 353f25b955c4..95cfccff0f3b 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php @@ -254,7 +254,7 @@ public function __construct(array $data = null) */ public function listInvalidProperties() { - $invalidProperties = parent::listInvalidProperties(); + $invalidProperties = []; return $invalidProperties; } From 83adc064a475e65cd35acc85d5938043af6cf317 Mon Sep 17 00:00:00 2001 From: Toby Murray <65908556+toby-murray-snow-software@users.noreply.github.com> Date: Wed, 28 Apr 2021 04:55:12 -0400 Subject: [PATCH 065/186] Fixes #9151: Bump OkHTTP dependency to latest (#9353) In 5.0.1 the generated line in `ApiClient` was: ``` return RequestBody.create(MediaType.parse(contentType), (byte[]) obj); ``` in 5.1.0 it is: ``` return RequestBody.create((byte[]) obj, MediaType.parse(contentType)); ``` Looks like this change was introduced in #8969, and requires a more recent version of OkHttp to compile in some (all?) circumstances. --- .../Java/libraries/okhttp-gson/build.gradle.mustache | 4 ++-- .../petstore/java/okhttp-gson-dynamicOperations/build.gradle | 4 ++-- .../petstore/java/okhttp-gson-parcelableModel/build.gradle | 4 ++-- samples/client/petstore/java/okhttp-gson/build.gradle | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache index 0bd85e8b2dae..7e3d97298ea9 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.gradle.mustache @@ -104,8 +104,8 @@ if(hasProperty('target') && target == 'android') { dependencies { implementation 'io.swagger:swagger-annotations:1.5.24' implementation "com.google.code.findbugs:jsr305:3.0.2" - implementation 'com.squareup.okhttp3:okhttp:3.14.7' - implementation 'com.squareup.okhttp3:logging-interceptor:3.14.7' + implementation 'com.squareup.okhttp3:okhttp:4.9.1' + implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1' implementation 'com.google.code.gson:gson:2.8.6' implementation 'io.gsonfire:gson-fire:1.8.4' {{#hasOAuthMethods}} diff --git a/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.gradle b/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.gradle index f21bac4c229d..9daaafc56616 100644 --- a/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.gradle +++ b/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.gradle @@ -100,8 +100,8 @@ if(hasProperty('target') && target == 'android') { dependencies { implementation 'io.swagger:swagger-annotations:1.5.24' implementation "com.google.code.findbugs:jsr305:3.0.2" - implementation 'com.squareup.okhttp3:okhttp:3.14.7' - implementation 'com.squareup.okhttp3:logging-interceptor:3.14.7' + implementation 'com.squareup.okhttp3:okhttp:4.9.1' + implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1' implementation 'com.google.code.gson:gson:2.8.6' implementation 'io.gsonfire:gson-fire:1.8.4' implementation group: 'org.apache.oltu.oauth2', name: 'org.apache.oltu.oauth2.client', version: '1.0.1' diff --git a/samples/client/petstore/java/okhttp-gson-parcelableModel/build.gradle b/samples/client/petstore/java/okhttp-gson-parcelableModel/build.gradle index f0e701eea225..5809e790fce1 100644 --- a/samples/client/petstore/java/okhttp-gson-parcelableModel/build.gradle +++ b/samples/client/petstore/java/okhttp-gson-parcelableModel/build.gradle @@ -100,8 +100,8 @@ if(hasProperty('target') && target == 'android') { dependencies { implementation 'io.swagger:swagger-annotations:1.5.24' implementation "com.google.code.findbugs:jsr305:3.0.2" - implementation 'com.squareup.okhttp3:okhttp:3.14.7' - implementation 'com.squareup.okhttp3:logging-interceptor:3.14.7' + implementation 'com.squareup.okhttp3:okhttp:4.9.1' + implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1' implementation 'com.google.code.gson:gson:2.8.6' implementation 'io.gsonfire:gson-fire:1.8.4' implementation group: 'org.apache.oltu.oauth2', name: 'org.apache.oltu.oauth2.client', version: '1.0.1' diff --git a/samples/client/petstore/java/okhttp-gson/build.gradle b/samples/client/petstore/java/okhttp-gson/build.gradle index 8db6d52554dd..3488028c4669 100644 --- a/samples/client/petstore/java/okhttp-gson/build.gradle +++ b/samples/client/petstore/java/okhttp-gson/build.gradle @@ -100,8 +100,8 @@ if(hasProperty('target') && target == 'android') { dependencies { implementation 'io.swagger:swagger-annotations:1.5.24' implementation "com.google.code.findbugs:jsr305:3.0.2" - implementation 'com.squareup.okhttp3:okhttp:3.14.7' - implementation 'com.squareup.okhttp3:logging-interceptor:3.14.7' + implementation 'com.squareup.okhttp3:okhttp:4.9.1' + implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1' implementation 'com.google.code.gson:gson:2.8.6' implementation 'io.gsonfire:gson-fire:1.8.4' implementation group: 'org.apache.oltu.oauth2', name: 'org.apache.oltu.oauth2.client', version: '1.0.1' From 057c1080f888f9fc8a9bec804d686f738be22b70 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 28 Apr 2021 05:03:22 -0400 Subject: [PATCH 066/186] [Codegen] Add hasDefaultResponse property (#9203) Check if there's a default response in the specs. --- .../openapitools/codegen/CodegenOperation.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java index b41adac44871..0a8e7b31991c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenOperation.java @@ -29,7 +29,7 @@ public class CodegenOperation { isArray, isMultipart, isResponseBinary = false, isResponseFile = false, hasReference = false, isRestfulIndex, isRestfulShow, isRestfulCreate, isRestfulUpdate, isRestfulDestroy, - isRestful, isDeprecated, isCallbackRequest, uniqueItems; + isRestful, isDeprecated, isCallbackRequest, uniqueItems, hasDefaultResponse = false; public String path, operationId, returnType, returnFormat, httpMethod, returnBaseType, returnContainer, summary, unescapedNotes, notes, baseName, defaultResponse; public CodegenDiscriminator discriminator; @@ -168,6 +168,15 @@ public boolean getHasExamples() { return nonempty(examples); } + /** + * Check if there's a default response + * + * @return true if responses contain a default response, false otherwise + */ + public boolean getHasDefaultResponse() { + return responses.stream().filter(response -> response.isDefault).findFirst().isPresent(); + } + /** * Check if act as Restful index method * @@ -270,6 +279,7 @@ public String toString() { sb.append(", isResponseBinary=").append(isResponseBinary); sb.append(", isResponseFile=").append(isResponseFile); sb.append(", hasReference=").append(hasReference); + sb.append(", hasDefaultResponse=").append(hasDefaultResponse); sb.append(", isRestfulIndex=").append(isRestfulIndex); sb.append(", isRestfulShow=").append(isRestfulShow); sb.append(", isRestfulCreate=").append(isRestfulCreate); @@ -343,6 +353,7 @@ public boolean equals(Object o) { isResponseBinary == that.isResponseBinary && isResponseFile == that.isResponseFile && hasReference == that.hasReference && + hasDefaultResponse == that.hasDefaultResponse && isRestfulIndex == that.isRestfulIndex && isRestfulShow == that.isRestfulShow && isRestfulCreate == that.isRestfulCreate && @@ -400,7 +411,7 @@ public int hashCode() { return Objects.hash(responseHeaders, hasAuthMethods, hasConsumes, hasProduces, hasParams, hasOptionalParams, hasRequiredParams, returnTypeIsPrimitive, returnSimpleType, subresourceOperation, isMap, - isArray, isMultipart, isResponseBinary, isResponseFile, hasReference, isRestfulIndex, + isArray, isMultipart, isResponseBinary, isResponseFile, hasReference, hasDefaultResponse, isRestfulIndex, isRestfulShow, isRestfulCreate, isRestfulUpdate, isRestfulDestroy, isRestful, isDeprecated, isCallbackRequest, uniqueItems, path, operationId, returnType, httpMethod, returnBaseType, returnContainer, summary, unescapedNotes, notes, baseName, defaultResponse, discriminator, consumes, From 73564bc04618ffd052c3544c7de6e90a2e5dc9be Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 28 Apr 2021 17:57:26 +0800 Subject: [PATCH 067/186] update samples --- .../petstore/bash/.openapi-generator/VERSION | 2 +- .../petstore_api/model_utils.py | 31 +++++++++++++------ ...ineAdditionalPropertiesPayloadArrayData.md | 1 + .../InlineAdditionalPropertiesRefPayload.md | 1 + .../petstore/python/docs/InlineObject6.md | 1 + .../client/petstore/python/docs/Readonly.md | 1 + .../python/docs/SomeObjectWithSelfAttr.md | 1 + ...dditional_properties_payload_array_data.py | 8 ++++- ...nline_additional_properties_ref_payload.py | 9 +++++- .../petstore_api/model/inline_object6.py | 9 +++++- .../python/petstore_api/model/readonly.py | 8 ++++- .../model/some_object_with_self_attr.py | 8 ++++- .../go-echo-server/.openapi-generator/VERSION | 2 +- 13 files changed, 65 insertions(+), 17 deletions(-) diff --git a/samples/client/petstore/bash/.openapi-generator/VERSION b/samples/client/petstore/bash/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/client/petstore/bash/.openapi-generator/VERSION +++ b/samples/client/petstore/bash/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py index b6d5934170a3..3a555f0a88c4 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py @@ -1508,13 +1508,19 @@ def model_to_dict(model_instance, serialize=True): # exist in attribute_map attr = model_instance.attribute_map.get(attr, attr) if isinstance(value, list): - if not value or isinstance(value[0], PRIMITIVE_TYPES): - # empty list or primitive types - result[attr] = value - elif isinstance(value[0], ModelSimple): - result[attr] = [x.value for x in value] - else: - result[attr] = [model_to_dict(x, serialize=serialize) for x in value] + if not value: + # empty list or None + result[attr] = value + else: + res = [] + for v in value: + if isinstance(v, PRIMITIVE_TYPES) or v is None: + res.append(v) + elif isinstance(v, ModelSimple): + res.append(v.value) + else: + res.append(model_to_dict(v, serialize=serialize)) + result[attr] = res elif isinstance(value, dict): result[attr] = dict(map( lambda item: (item[0], @@ -1574,11 +1580,16 @@ def get_valid_classes_phrase(input_classes): def convert_js_args_to_python_args(fn): from functools import wraps @wraps(fn) - def wrapped_init(self, *args, **kwargs): + def wrapped_init(_self, *args, **kwargs): + """ + An attribute named `self` received from the api will conflicts with the reserved `self` + parameter of a class method. During generation, `self` attributes are mapped + to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. + """ spec_property_naming = kwargs.get('_spec_property_naming', False) if spec_property_naming: - kwargs = change_keys_js_to_python(kwargs, self.__class__) - return fn(self, *args, **kwargs) + kwargs = change_keys_js_to_python(kwargs, _self.__class__) + return fn(_self, *args, **kwargs) return wrapped_init diff --git a/samples/openapi3/client/petstore/python/docs/FakeGetInlineAdditionalPropertiesPayloadArrayData.md b/samples/openapi3/client/petstore/python/docs/FakeGetInlineAdditionalPropertiesPayloadArrayData.md index 0ba4e3b8e5a4..6c3418d8c079 100644 --- a/samples/openapi3/client/petstore/python/docs/FakeGetInlineAdditionalPropertiesPayloadArrayData.md +++ b/samples/openapi3/client/petstore/python/docs/FakeGetInlineAdditionalPropertiesPayloadArrayData.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **labels** | **[str, none_type]** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/InlineAdditionalPropertiesRefPayload.md b/samples/openapi3/client/petstore/python/docs/InlineAdditionalPropertiesRefPayload.md index 130320d1daa0..5922fc61f1a7 100644 --- a/samples/openapi3/client/petstore/python/docs/InlineAdditionalPropertiesRefPayload.md +++ b/samples/openapi3/client/petstore/python/docs/InlineAdditionalPropertiesRefPayload.md @@ -6,6 +6,7 @@ this payload is used for verification that some model_to_dict issues are fixed Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **array_data** | [**[FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type**](FakeGetInlineAdditionalPropertiesPayloadArrayData.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/InlineObject6.md b/samples/openapi3/client/petstore/python/docs/InlineObject6.md index 6e4975b3542a..fc83501c1546 100644 --- a/samples/openapi3/client/petstore/python/docs/InlineObject6.md +++ b/samples/openapi3/client/petstore/python/docs/InlineObject6.md @@ -6,6 +6,7 @@ this payload is used for verification that some model_to_dict issues are fixed Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **array_data** | [**[FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type**](FakeGetInlineAdditionalPropertiesPayloadArrayData.md) | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/Readonly.md b/samples/openapi3/client/petstore/python/docs/Readonly.md index 4f4ba8ede251..e94598c9d388 100644 --- a/samples/openapi3/client/petstore/python/docs/Readonly.md +++ b/samples/openapi3/client/petstore/python/docs/Readonly.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **name** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/SomeObjectWithSelfAttr.md b/samples/openapi3/client/petstore/python/docs/SomeObjectWithSelfAttr.md index ee0aeb17ce1a..6704f480eb3b 100644 --- a/samples/openapi3/client/petstore/python/docs/SomeObjectWithSelfAttr.md +++ b/samples/openapi3/client/petstore/python/docs/SomeObjectWithSelfAttr.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **_self** | **str** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py b/samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py index bbbc449b4298..833bbdd8261c 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py @@ -57,7 +57,13 @@ class FakeGetInlineAdditionalPropertiesPayloadArrayData(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py b/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py index 4d8e8aecff39..9c78998902a2 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py @@ -61,7 +61,14 @@ class InlineAdditionalPropertiesRefPayload(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py b/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py index d60fec5fa687..ee93b74eac98 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py @@ -61,7 +61,14 @@ class InlineObject6(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + lazy_import() + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py b/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py index b5d137b467d3..7d038917bb43 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py @@ -57,7 +57,13 @@ class Readonly(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/some_object_with_self_attr.py b/samples/openapi3/client/petstore/python/petstore_api/model/some_object_with_self_attr.py index 343122b65f3b..3fba94014b5c 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/some_object_with_self_attr.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/some_object_with_self_attr.py @@ -57,7 +57,13 @@ class SomeObjectWithSelfAttr(ModelNormal): validations = { } - additional_properties_type = None + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False diff --git a/samples/server/petstore/go-echo-server/.openapi-generator/VERSION b/samples/server/petstore/go-echo-server/.openapi-generator/VERSION index d509cc92aa80..6555596f9311 100644 --- a/samples/server/petstore/go-echo-server/.openapi-generator/VERSION +++ b/samples/server/petstore/go-echo-server/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file From 53398a08505b5756c635fce8789db34d2c368f96 Mon Sep 17 00:00:00 2001 From: Rustam Date: Wed, 28 Apr 2021 15:57:15 +0200 Subject: [PATCH 068/186] Ktor server upgrade (#9088) * Update to new ktor version #9087 * Update doc #9087 * Cleanup #9087 --- docs/generators/kotlin-server.md | 1 + .../languages/KotlinServerCodegen.java | 27 ++- .../resources/kotlin-server/README.mustache | 4 +- .../kotlin-server/data_class.mustache | 2 +- .../kotlin-server/enum_class.mustache | 2 +- .../libraries/ktor/ApiKeyAuth.kt.mustache | 126 +++++++------ .../libraries/ktor/AppMain.kt.mustache | 28 +-- .../libraries/ktor/Configuration.kt.mustache | 12 +- .../libraries/ktor/Paths.kt.mustache | 3 +- .../libraries/ktor/README.mustache | 4 +- .../libraries/ktor/_api_body.mustache | 20 +-- .../libraries/ktor/_principal.mustache | 6 +- .../libraries/ktor/_response.mustache | 2 +- .../kotlin-server/libraries/ktor/api.mustache | 51 +++--- .../libraries/ktor/build.gradle.mustache | 11 +- .../kotlin-server/licenseInfo.mustache | 18 +- .../petstore/kotlin-server/ktor/README.md | 4 +- .../petstore/kotlin-server/ktor/build.gradle | 9 +- .../kotlin/org/openapitools/server/AppMain.kt | 22 +-- .../org/openapitools/server/Configuration.kt | 12 +- .../kotlin/org/openapitools/server/Paths.kt | 82 ++++++++- .../org/openapitools/server/apis/PetApi.kt | 167 +++++++----------- .../org/openapitools/server/apis/StoreApi.kt | 69 ++++---- .../org/openapitools/server/apis/UserApi.kt | 57 +++--- .../server/infrastructure/ApiKeyAuth.kt | 126 +++++++------ .../openapitools/server/models/ApiResponse.kt | 2 +- .../openapitools/server/models/Category.kt | 2 +- .../org/openapitools/server/models/Order.kt | 2 +- .../org/openapitools/server/models/Pet.kt | 6 +- .../org/openapitools/server/models/Tag.kt | 2 +- .../org/openapitools/server/models/User.kt | 2 +- 31 files changed, 476 insertions(+), 405 deletions(-) diff --git a/docs/generators/kotlin-server.md b/docs/generators/kotlin-server.md index ecaf99a294f2..b45dc3ffb4d2 100644 --- a/docs/generators/kotlin-server.md +++ b/docs/generators/kotlin-server.md @@ -16,6 +16,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |featureCompression|Adds ability to compress outgoing content using gzip, deflate or custom encoder and thus reduce size of the response.| |true| |featureConditionalHeaders|Avoid sending content if client already has same content, by checking ETag or LastModified properties.| |false| |featureHSTS|Avoid sending content if client already has same content, by checking ETag or LastModified properties.| |true| +|featureLocations|Generates routes in a typed way, for both: constructing URLs and reading the parameters.| |true| |groupId|Generated artifact package's organization (i.e. maven groupId).| |org.openapitools| |library|library template (sub-template)|
**ktor**
ktor framework
|ktor| |modelMutable|Create mutable models| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java index d4d9902da7f0..0c182417c943 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java @@ -42,15 +42,17 @@ public class KotlinServerCodegen extends AbstractKotlinCodegen { private Boolean hstsFeatureEnabled = true; private Boolean corsFeatureEnabled = false; private Boolean compressionFeatureEnabled = true; + private Boolean locationsFeatureEnabled = true; - // This is here to potentially warn the user when an option is not supoprted by the target framework. + // This is here to potentially warn the user when an option is not supported by the target framework. private Map> optionsSupportedPerFramework = new ImmutableMap.Builder>() .put(Constants.KTOR, Arrays.asList( Constants.AUTOMATIC_HEAD_REQUESTS, Constants.CONDITIONAL_HEADERS, Constants.HSTS, Constants.CORS, - Constants.COMPRESSION + Constants.COMPRESSION, + Constants.LOCATIONS )) .build(); @@ -85,6 +87,8 @@ public KotlinServerCodegen() { artifactId = "kotlin-server"; packageName = "org.openapitools.server"; + typeMapping.put("array", "kotlin.collections.List"); + // cliOptions default redefinition need to be updated updateOption(CodegenConstants.ARTIFACT_ID, this.artifactId); updateOption(CodegenConstants.PACKAGE_NAME, this.packageName); @@ -110,6 +114,7 @@ public KotlinServerCodegen() { addSwitch(Constants.HSTS, Constants.HSTS_DESC, getHstsFeatureEnabled()); addSwitch(Constants.CORS, Constants.CORS_DESC, getCorsFeatureEnabled()); addSwitch(Constants.COMPRESSION, Constants.COMPRESSION_DESC, getCompressionFeatureEnabled()); + addSwitch(Constants.LOCATIONS, Constants.LOCATIONS_DESC, getLocationsFeatureEnabled()); } public Boolean getAutoHeadFeatureEnabled() { @@ -156,6 +161,14 @@ public void setHstsFeatureEnabled(Boolean hstsFeatureEnabled) { this.hstsFeatureEnabled = hstsFeatureEnabled; } + public Boolean getLocationsFeatureEnabled() { + return locationsFeatureEnabled; + } + + public void setLocationsFeatureEnabled(Boolean locationsFeatureEnabled) { + this.locationsFeatureEnabled = locationsFeatureEnabled; + } + public String getName() { return "kotlin-server"; } @@ -209,6 +222,12 @@ public void processOpts() { additionalProperties.put(Constants.COMPRESSION, getCompressionFeatureEnabled()); } + if (additionalProperties.containsKey(Constants.LOCATIONS)) { + setLocationsFeatureEnabled(convertPropertyToBooleanAndWriteBack(Constants.LOCATIONS)); + } else { + additionalProperties.put(Constants.LOCATIONS, getLocationsFeatureEnabled()); + } + boolean generateApis = additionalProperties.containsKey(CodegenConstants.GENERATE_APIS) && (Boolean) additionalProperties.get(CodegenConstants.GENERATE_APIS); String packageFolder = (sourceFolder + File.separator + packageName).replace(".", File.separator); String resourcesFolder = "src/main/resources"; // not sure this can be user configurable. @@ -223,7 +242,7 @@ public void processOpts() { supportingFiles.add(new SupportingFile("AppMain.kt.mustache", packageFolder, "AppMain.kt")); supportingFiles.add(new SupportingFile("Configuration.kt.mustache", packageFolder, "Configuration.kt")); - if (generateApis) { + if (generateApis && locationsFeatureEnabled) { supportingFiles.add(new SupportingFile("Paths.kt.mustache", packageFolder, "Paths.kt")); } @@ -247,6 +266,8 @@ public static class Constants { public final static String CORS_DESC = "Ktor by default provides an interceptor for implementing proper support for Cross-Origin Resource Sharing (CORS). See enable-cors.org."; public final static String COMPRESSION = "featureCompression"; public final static String COMPRESSION_DESC = "Adds ability to compress outgoing content using gzip, deflate or custom encoder and thus reduce size of the response."; + public final static String LOCATIONS = "featureLocations"; + public final static String LOCATIONS_DESC = "Generates routes in a typed way, for both: constructing URLs and reading the parameters."; } @Override diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/README.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/README.mustache index 24c4728fdd3a..910f1a9c9e21 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/README.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/README.mustache @@ -2,8 +2,8 @@ ## Requires -* Kotlin 1.1.2 -* Gradle 3.3 +* Kotlin 1.4.31 +* Gradle 6.8.2 ## Build diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache index e22559b5cc98..215a291253f1 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache @@ -15,7 +15,7 @@ import java.io.Serializable {{#parcelizeModels}} @Parcelize {{/parcelizeModels}} -data class {{classname}} ( +data class {{classname}}( {{#requiredVars}} {{>data_class_req_var}}{{^-last}}, {{/-last}}{{/requiredVars}}{{#hasRequired}}{{#hasOptional}}, diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/enum_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/enum_class.mustache index 791398b97894..2f24a1de76b2 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/enum_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/enum_class.mustache @@ -2,7 +2,7 @@ * {{{description}}} * Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} */ -enum class {{classname}}(val value: {{dataType}}){ +enum class {{classname}}(val value: {{dataType}}) { {{#allowableValues}}{{#enumVars}} {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}} {{/enumVars}}{{/allowableValues}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/ApiKeyAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/ApiKeyAuth.kt.mustache index e50c0793be45..a0abbcddfd04 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/ApiKeyAuth.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/ApiKeyAuth.kt.mustache @@ -1,85 +1,105 @@ package {{packageName}}.infrastructure -import io.ktor.application.ApplicationCall -import io.ktor.application.call -import io.ktor.auth.Authentication -import io.ktor.auth.AuthenticationFailedCause -import io.ktor.auth.AuthenticationPipeline -import io.ktor.auth.AuthenticationProvider -import io.ktor.auth.Credential -import io.ktor.auth.Principal -import io.ktor.auth.UnauthorizedResponse -import io.ktor.http.auth.HeaderValueEncoding -import io.ktor.http.auth.HttpAuthHeader -import io.ktor.request.ApplicationRequest -import io.ktor.response.respond +import io.ktor.application.* +import io.ktor.auth.* +import io.ktor.http.auth.* +import io.ktor.request.* +import io.ktor.response.* enum class ApiKeyLocation(val location: String) { QUERY("query"), HEADER("header") } -data class ApiKeyCredential(val value: String): Credential -data class ApiPrincipal(val apiKeyCredential: ApiKeyCredential?) : Principal - +data class ApiKeyCredential(val value: String) : Credential +data class ApiPrincipal(val apiKeyCredential: ApiKeyCredential?) : Principal /** * Represents a Api Key authentication provider * @param name is the name of the provider, or `null` for a default provider */ -class ApiKeyAuthenticationProvider(name: String?) : AuthenticationProvider(name) { - internal var authenticationFunction: suspend ApplicationCall.(ApiKeyCredential) -> Principal? = { null } +class ApiKeyAuthenticationProvider(configuration: Configuration) : AuthenticationProvider(configuration) { - var apiKeyName: String = ""; + private val authenticationFunction = configuration.authenticationFunction - var apiKeyLocation: ApiKeyLocation = ApiKeyLocation.QUERY; + private val apiKeyName: String = configuration.apiKeyName - /** - * Sets a validation function that will check given [ApiKeyCredential] instance and return [Principal], - * or null if credential does not correspond to an authenticated principal - */ - fun validate(body: suspend ApplicationCall.(ApiKeyCredential) -> Principal?) { - authenticationFunction = body - } -} + private val apiKeyLocation: ApiKeyLocation = configuration.apiKeyLocation -fun Authentication.Configuration.apiKeyAuth(name: String? = null, configure: ApiKeyAuthenticationProvider.() -> Unit) { - val provider = ApiKeyAuthenticationProvider(name).apply(configure) - val apiKeyName = provider.apiKeyName - val apiKeyLocation = provider.apiKeyLocation - val authenticate = provider.authenticationFunction + internal fun install() { + pipeline.intercept(AuthenticationPipeline.RequestAuthentication) { context -> + val credentials = call.request.apiKeyAuthenticationCredentials(apiKeyName, apiKeyLocation) + val principal = credentials?.let { authenticationFunction(call, it) } - provider.pipeline.intercept(AuthenticationPipeline.RequestAuthentication) { context -> - val credentials = call.request.apiKeyAuthenticationCredentials(apiKeyName, apiKeyLocation) - val principal = credentials?.let { authenticate(call, it) } + val cause = when { + credentials == null -> AuthenticationFailedCause.NoCredentials + principal == null -> AuthenticationFailedCause.InvalidCredentials + else -> null + } - val cause = when { - credentials == null -> AuthenticationFailedCause.NoCredentials - principal == null -> AuthenticationFailedCause.InvalidCredentials - else -> null - } + if (cause != null) { + context.challenge(apiKeyName, cause) { + call.respond( + UnauthorizedResponse( + HttpAuthHeader.Parameterized( + "API_KEY", + mapOf("key" to apiKeyName), + HeaderValueEncoding.QUOTED_ALWAYS + ) + ) + ) + it.complete() + } + } - if (cause != null) { - context.challenge(apiKeyName, cause) { - // TODO: Verify correct response structure here. - call.respond(UnauthorizedResponse(HttpAuthHeader.Parameterized("API_KEY", mapOf("key" to apiKeyName), HeaderValueEncoding.QUOTED_ALWAYS))) - it.complete() + if (principal != null) { + context.principal(principal) } } + } + + class Configuration internal constructor(name: String?) : AuthenticationProvider.Configuration(name) { + + internal var authenticationFunction: suspend ApplicationCall.(ApiKeyCredential) -> Principal? = { + throw NotImplementedError( + "Api Key auth validate function is not specified. Use apiKeyAuth { validate { ... } } to fix." + ) + } - if (principal != null) { - context.principal(principal) + var apiKeyName: String = "" + + var apiKeyLocation: ApiKeyLocation = ApiKeyLocation.QUERY + + /** + * Sets a validation function that will check given [ApiKeyCredential] instance and return [Principal], + * or null if credential does not correspond to an authenticated principal + */ + fun validate(body: suspend ApplicationCall.(ApiKeyCredential) -> Principal?) { + authenticationFunction = body } } } -fun ApplicationRequest.apiKeyAuthenticationCredentials(apiKeyName: String, apiKeyLocation: ApiKeyLocation): ApiKeyCredential? { - val value: String? = when(apiKeyLocation) { +fun Authentication.Configuration.apiKeyAuth( + name: String? = null, + configure: ApiKeyAuthenticationProvider.Configuration.() -> Unit +) { + val configuration = ApiKeyAuthenticationProvider.Configuration(name).apply(configure) + val provider = ApiKeyAuthenticationProvider(configuration) + provider.install() + register(provider) +} + +fun ApplicationRequest.apiKeyAuthenticationCredentials( + apiKeyName: String, + apiKeyLocation: ApiKeyLocation +): ApiKeyCredential? { + val value: String? = when (apiKeyLocation) { ApiKeyLocation.QUERY -> this.queryParameters[apiKeyName] ApiKeyLocation.HEADER -> this.headers[apiKeyName] } - when (value) { - null -> return null - else -> return ApiKeyCredential(value) + return when (value) { + null -> null + else -> ApiKeyCredential(value) } } diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache index bef736de059b..1556c44ae58f 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache @@ -28,15 +28,16 @@ import io.ktor.features.HSTS {{/featureHSTS}} import io.ktor.gson.GsonConverter import io.ktor.http.ContentType +{{#featureLocations}} import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.Locations -import io.ktor.metrics.Metrics +{{/featureLocations}} import io.ktor.routing.Routing import java.util.concurrent.TimeUnit -import io.ktor.util.KtorExperimentalAPI {{#hasAuthMethods}} import io.ktor.auth.Authentication import io.ktor.auth.oauth +import io.ktor.metrics.dropwizard.DropwizardMetrics import org.openapitools.server.infrastructure.ApiKeyCredential import org.openapitools.server.infrastructure.ApiPrincipal import org.openapitools.server.infrastructure.apiKeyAuth @@ -44,23 +45,23 @@ import org.openapitools.server.infrastructure.apiKeyAuth {{#generateApis}}{{#apiInfo}}{{#apis}}import {{apiPackage}}.{{classname}} {{/apis}}{{/apiInfo}}{{/generateApis}} -@KtorExperimentalAPI internal val settings = HoconApplicationConfig(ConfigFactory.defaultApplication(HTTP::class.java.classLoader)) object HTTP { val client = HttpClient(Apache) } -@KtorExperimentalAPI +{{#featureLocations}} @KtorExperimentalLocationsAPI +{{/featureLocations}} fun Application.main() { install(DefaultHeaders) - install(Metrics) { + install(DropwizardMetrics) { val reporter = Slf4jReporter.forRegistry(registry) - .outputTo(log) - .convertRatesTo(TimeUnit.SECONDS) - .convertDurationsTo(TimeUnit.MILLISECONDS) - .build() + .outputTo(log) + .convertRatesTo(TimeUnit.SECONDS) + .convertDurationsTo(TimeUnit.MILLISECONDS) + .build() reporter.start(10, TimeUnit.SECONDS) } {{#generateApis}} @@ -82,7 +83,9 @@ fun Application.main() { {{#featureCompression}} install(Compression, ApplicationCompressionConfiguration()) // see http://ktor.io/features/compression.html {{/featureCompression}} + {{#featureLocations}} install(Locations) // see http://ktor.io/features/locations.html + {{/featureLocations}} {{#hasAuthMethods}} install(Authentication) { {{#authMethods}} @@ -117,8 +120,8 @@ fun Application.main() { client = HttpClient(Apache) providerLookup = { ApplicationAuthProviders["{{{name}}}"] } urlProvider = { _ -> - // TODO: define a callback url here. - "/" + // TODO: define a callback url here. + "/" } } {{/bodyAllowed}} @@ -138,8 +141,7 @@ fun Application.main() { {{/generateApis}} - environment.monitor.subscribe(ApplicationStopping) - { + environment.monitor.subscribe(ApplicationStopping) { HTTP.client.close() } } diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Configuration.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Configuration.kt.mustache index 3b568d21eba9..a8956ec59052 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Configuration.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Configuration.kt.mustache @@ -8,11 +8,7 @@ import io.ktor.features.deflate import io.ktor.features.gzip import io.ktor.features.minimumSize import io.ktor.http.HttpMethod -import io.ktor.util.KtorExperimentalAPI -import java.time.Duration -import java.util.concurrent.Executors - -import {{packageName}}.settings +import java.util.concurrent.TimeUnit {{#featureCORS}} /** @@ -49,7 +45,7 @@ internal fun ApplicationCORSConfiguration(): CORS.Configuration.() -> Unit { */ internal fun ApplicationHstsConfiguration(): HSTS.Configuration.() -> Unit { return { - maxAge = Duration.ofDays(365) + maxAgeInSeconds = TimeUnit.DAYS.toSeconds(365) includeSubDomains = true preload = false @@ -82,7 +78,6 @@ internal fun ApplicationCompressionConfiguration(): Compression.Configuration.() {{/featureCompression}} // Defines authentication mechanisms used throughout the application. -@KtorExperimentalAPI val ApplicationAuthProviders: Map = listOf( {{#authMethods}} {{#isOAuth}} @@ -109,6 +104,3 @@ val ApplicationAuthProviders: Map = listOflibraries/ktor/_principal}} -if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) -} else { - {{#examples}} - {{#-first}} - {{#lambda.indented}}{{>_response}}{{/lambda.indented}} - {{/-first}} - {{/examples}} - {{^examples}} - call.respond(HttpStatusCode.NotImplemented) - {{/examples}} -} +{{#examples}} +{{#-first}} +{{#lambda.indented}}{{>_response}}{{/lambda.indented}} +{{/-first}} +{{/examples}} +{{^examples}} +call.respond(HttpStatusCode.NotImplemented) +{{/examples}} {{/hasAuthMethods}} {{^hasAuthMethods}} {{#examples}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_principal.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_principal.mustache index d49c5d537f01..09ae65906ea2 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_principal.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_principal.mustache @@ -1,11 +1,11 @@ {{#authMethods}} {{#isBasic}} -val principal = call.authentication.principal() +val principal = call.authentication.principal()!! {{/isBasic}} {{#isApiKey}} -val principal = call.authentication.principal() +val principal = call.authentication.principal()!! {{/isApiKey}} {{#isOAuth}} -val principal = call.authentication.principal() +val principal = call.authentication.principal()!! {{/isOAuth}} {{/authMethods}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_response.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_response.mustache index fb26fb4a7f1b..931dad98f5e1 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_response.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_response.mustache @@ -1,7 +1,7 @@ val exampleContentType = "{{{contentType}}}" val exampleContentString = """{{&example}}""" -when(exampleContentType) { +when (exampleContentType) { "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/api.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/api.mustache index 881e3b108ec3..a3d8c124e817 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/api.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/api.mustache @@ -10,17 +10,29 @@ import io.ktor.auth.OAuthAccessTokenResponse import io.ktor.auth.OAuthServerSettings import io.ktor.http.ContentType import io.ktor.http.HttpStatusCode -import io.ktor.locations.KtorExperimentalLocationsAPI -import io.ktor.locations.delete -import io.ktor.locations.get import io.ktor.response.respond import io.ktor.response.respondText import io.ktor.routing.Route +{{#featureLocations}} +import {{packageName}}.Paths +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.delete +import io.ktor.locations.get +import io.ktor.locations.post +import io.ktor.locations.put +import io.ktor.locations.options +import io.ktor.locations.head +{{/featureLocations}} +{{^featureLocations}} +import io.ktor.routing.delete +import io.ktor.routing.get import io.ktor.routing.post import io.ktor.routing.put +import io.ktor.routing.options +import io.ktor.routing.head import io.ktor.routing.route +{{/featureLocations}} -import {{packageName}}.Paths import {{packageName}}.infrastructure.ApiPrincipal @@ -28,34 +40,33 @@ import {{packageName}}.infrastructure.ApiPrincipal {{/imports}} {{#operations}} + {{#featureLocations}} @KtorExperimentalLocationsAPI + {{/featureLocations}} fun Route.{{classname}}() { val gson = Gson() val empty = mutableMapOf() {{#operation}} - {{#bodyAllowed}} - + {{#hasAuthMethods}} + {{#authMethods}} + authenticate("{{{name}}}") { + {{/authMethods}} + {{/hasAuthMethods}} + {{^featureLocations}} route("{{path}}") { - {{#hasAuthMethods}} - {{#authMethods}} - authenticate("{{{name}}}") { - {{/authMethods}} - {{/hasAuthMethods}} {{#lambda.lowercase}}{{httpMethod}}{{/lambda.lowercase}} { {{#lambda.indented_12}}{{>libraries/ktor/_api_body}}{{/lambda.indented_12}} } - {{#hasAuthMethods}} - } - {{/hasAuthMethods}} } - {{/bodyAllowed}} - {{^bodyAllowed}} - - {{! NOTE: Locations can be used on routes without body parameters.}} - {{#lambda.lowercase}}{{httpMethod}}{{/lambda.lowercase}} { _: Paths.{{operationId}} -> + {{/featureLocations}} + {{#featureLocations}} + {{#lambda.lowercase}}{{httpMethod}}{{/lambda.lowercase}} { {{#lambda.indented_8}}{{>libraries/ktor/_api_body}}{{/lambda.indented_8}} } - {{/bodyAllowed}} + {{/featureLocations}} + {{#hasAuthMethods}} + } + {{/hasAuthMethods}} {{/operation}} } diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.mustache index 08c317ea6669..173686fdf88d 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.mustache @@ -2,13 +2,13 @@ group '{{groupId}}' version '{{artifactVersion}}' wrapper { - gradleVersion = '4.9' + gradleVersion = '6.8.2' distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip" } buildscript { - ext.kotlin_version = '1.3.21' - ext.ktor_version = '1.1.3' + ext.kotlin_version = '1.4.31' + ext.ktor_version = '1.5.2' ext.shadow_version = '2.0.3' repositories { @@ -29,7 +29,7 @@ apply plugin: 'application' mainClassName = "io.ktor.server.netty.DevelopmentEngine" -// Initialization order with shadow 2.0.1 and Gradle 4.3 is weird. +// Initialization order with shadow 2.0.1 and Gradle 6.8.2 is weird. // See https://github.com/johnrengelman/shadow/issues/336#issuecomment-355402508 apply plugin: 'com.github.johnrengelman.shadow' @@ -59,7 +59,10 @@ dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "io.ktor:ktor-server-netty:$ktor_version" compile "io.ktor:ktor-metrics:$ktor_version" + compile "io.ktor:ktor-auth:$ktor_version" +{{#featureLocations}} compile "io.ktor:ktor-locations:$ktor_version" +{{/featureLocations}} compile "io.ktor:ktor-gson:$ktor_version" compile "io.ktor:ktor-client-core:$ktor_version" compile "io.ktor:ktor-client-apache:$ktor_version" diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/licenseInfo.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/licenseInfo.mustache index 3a547de74bb7..d890606a94ff 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/licenseInfo.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/licenseInfo.mustache @@ -1,11 +1,11 @@ /** -* {{{appName}}} -* {{{appDescription}}} -* -* {{#version}}The version of the OpenAPI document: {{{version}}}{{/version}} -* {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. + * {{{appName}}} + * {{{appDescription}}} + * + * {{#version}}The version of the OpenAPI document: {{{version}}}{{/version}} + * {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. */ \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server/ktor/README.md b/samples/server/petstore/kotlin-server/ktor/README.md index 118998788067..0312e13cdf7c 100644 --- a/samples/server/petstore/kotlin-server/ktor/README.md +++ b/samples/server/petstore/kotlin-server/ktor/README.md @@ -6,8 +6,8 @@ Generated by OpenAPI Generator 5.2.0-SNAPSHOT. ## Requires -* Kotlin 1.3.21 -* Gradle 4.9 +* Kotlin 1.4.31 +* Gradle 6.8.2 ## Build diff --git a/samples/server/petstore/kotlin-server/ktor/build.gradle b/samples/server/petstore/kotlin-server/ktor/build.gradle index 25536d4e5316..c69f129160f5 100644 --- a/samples/server/petstore/kotlin-server/ktor/build.gradle +++ b/samples/server/petstore/kotlin-server/ktor/build.gradle @@ -2,13 +2,13 @@ group 'org.openapitools' version '1.0.0' wrapper { - gradleVersion = '4.9' + gradleVersion = '6.8.2' distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip" } buildscript { - ext.kotlin_version = '1.3.21' - ext.ktor_version = '1.1.3' + ext.kotlin_version = '1.4.31' + ext.ktor_version = '1.5.2' ext.shadow_version = '2.0.3' repositories { @@ -29,7 +29,7 @@ apply plugin: 'application' mainClassName = "io.ktor.server.netty.DevelopmentEngine" -// Initialization order with shadow 2.0.1 and Gradle 4.3 is weird. +// Initialization order with shadow 2.0.1 and Gradle 6.8.2 is weird. // See https://github.com/johnrengelman/shadow/issues/336#issuecomment-355402508 apply plugin: 'com.github.johnrengelman.shadow' @@ -59,6 +59,7 @@ dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "io.ktor:ktor-server-netty:$ktor_version" compile "io.ktor:ktor-metrics:$ktor_version" + compile "io.ktor:ktor-auth:$ktor_version" compile "io.ktor:ktor-locations:$ktor_version" compile "io.ktor:ktor-gson:$ktor_version" compile "io.ktor:ktor-client-core:$ktor_version" diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt index 2b0cd5cdb5fd..54658d6ba5df 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt @@ -18,12 +18,11 @@ import io.ktor.gson.GsonConverter import io.ktor.http.ContentType import io.ktor.locations.KtorExperimentalLocationsAPI import io.ktor.locations.Locations -import io.ktor.metrics.Metrics import io.ktor.routing.Routing import java.util.concurrent.TimeUnit -import io.ktor.util.KtorExperimentalAPI import io.ktor.auth.Authentication import io.ktor.auth.oauth +import io.ktor.metrics.dropwizard.DropwizardMetrics import org.openapitools.server.infrastructure.ApiKeyCredential import org.openapitools.server.infrastructure.ApiPrincipal import org.openapitools.server.infrastructure.apiKeyAuth @@ -32,23 +31,21 @@ import org.openapitools.server.apis.StoreApi import org.openapitools.server.apis.UserApi -@KtorExperimentalAPI internal val settings = HoconApplicationConfig(ConfigFactory.defaultApplication(HTTP::class.java.classLoader)) object HTTP { val client = HttpClient(Apache) } -@KtorExperimentalAPI @KtorExperimentalLocationsAPI fun Application.main() { install(DefaultHeaders) - install(Metrics) { + install(DropwizardMetrics) { val reporter = Slf4jReporter.forRegistry(registry) - .outputTo(log) - .convertRatesTo(TimeUnit.SECONDS) - .convertDurationsTo(TimeUnit.MILLISECONDS) - .build() + .outputTo(log) + .convertRatesTo(TimeUnit.SECONDS) + .convertDurationsTo(TimeUnit.MILLISECONDS) + .build() reporter.start(10, TimeUnit.SECONDS) } install(ContentNegotiation) { @@ -72,8 +69,8 @@ fun Application.main() { client = HttpClient(Apache) providerLookup = { ApplicationAuthProviders["petstore_auth"] } urlProvider = { _ -> - // TODO: define a callback url here. - "/" + // TODO: define a callback url here. + "/" } } } @@ -84,8 +81,7 @@ fun Application.main() { } - environment.monitor.subscribe(ApplicationStopping) - { + environment.monitor.subscribe(ApplicationStopping) { HTTP.client.close() } } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt index c16a32ef70f0..8483e64319d0 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt @@ -8,11 +8,7 @@ import io.ktor.features.deflate import io.ktor.features.gzip import io.ktor.features.minimumSize import io.ktor.http.HttpMethod -import io.ktor.util.KtorExperimentalAPI -import java.time.Duration -import java.util.concurrent.Executors - -import org.openapitools.server.settings +import java.util.concurrent.TimeUnit /** @@ -25,7 +21,7 @@ import org.openapitools.server.settings */ internal fun ApplicationHstsConfiguration(): HSTS.Configuration.() -> Unit { return { - maxAge = Duration.ofDays(365) + maxAgeInSeconds = TimeUnit.DAYS.toSeconds(365) includeSubDomains = true preload = false @@ -55,7 +51,6 @@ internal fun ApplicationCompressionConfiguration(): Compression.Configuration.() } // Defines authentication mechanisms used throughout the application. -@KtorExperimentalAPI val ApplicationAuthProviders: Map = listOf( OAuthServerSettings.OAuth2ServerSettings( name = "petstore_auth", @@ -77,6 +72,3 @@ val ApplicationAuthProviders: Map = listOf) + @Location("/pet/findByStatus") class findPetsByStatus(val status: kotlin.collections.List) /** * Finds Pets by tags @@ -38,7 +47,7 @@ object Paths { * @param tags Tags to filter by */ @KtorExperimentalLocationsAPI - @Location("/pet/findByTags") class findPetsByTags(val tags: kotlin.Array) + @Location("/pet/findByTags") class findPetsByTags(val tags: kotlin.collections.List) /** * Find pet by ID @@ -48,6 +57,34 @@ object Paths { @KtorExperimentalLocationsAPI @Location("/pet/{petId}") class getPetById(val petId: kotlin.Long) + /** + * Update an existing pet + * + * @param body Pet object that needs to be added to the store + */ + @KtorExperimentalLocationsAPI + @Location("/pet") class updatePet(val body: Pet) + + /** + * Updates a pet in the store with form data + * + * @param petId ID of pet that needs to be updated + * @param name Updated name of the pet (optional) + * @param status Updated status of the pet (optional) + */ + @KtorExperimentalLocationsAPI + @Location("/pet/{petId}") class updatePetWithForm(val petId: kotlin.Long, val name: kotlin.String? = null, val status: kotlin.String? = null) + + /** + * uploads an image + * + * @param petId ID of pet to update + * @param additionalMetadata Additional data to pass to server (optional) + * @param file file to upload (optional) + */ + @KtorExperimentalLocationsAPI + @Location("/pet/{petId}/uploadImage") class uploadFile(val petId: kotlin.Long, val additionalMetadata: kotlin.String? = null, val file: java.io.File? = null) + /** * Delete purchase order by ID * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors @@ -71,6 +108,38 @@ object Paths { @KtorExperimentalLocationsAPI @Location("/store/order/{orderId}") class getOrderById(val orderId: kotlin.Long) + /** + * Place an order for a pet + * + * @param body order placed for purchasing the pet + */ + @KtorExperimentalLocationsAPI + @Location("/store/order") class placeOrder(val body: Order) + + /** + * Create user + * This can only be done by the logged in user. + * @param body Created user object + */ + @KtorExperimentalLocationsAPI + @Location("/user") class createUser(val body: User) + + /** + * Creates list of users with given input array + * + * @param body List of user object + */ + @KtorExperimentalLocationsAPI + @Location("/user/createWithArray") class createUsersWithArrayInput(val body: kotlin.collections.List) + + /** + * Creates list of users with given input array + * + * @param body List of user object + */ + @KtorExperimentalLocationsAPI + @Location("/user/createWithList") class createUsersWithListInput(val body: kotlin.collections.List) + /** * Delete user * This can only be done by the logged in user. @@ -103,4 +172,13 @@ object Paths { @KtorExperimentalLocationsAPI @Location("/user/logout") class logoutUser() + /** + * Updated user + * This can only be done by the logged in user. + * @param username name that need to be deleted + * @param body Updated user object + */ + @KtorExperimentalLocationsAPI + @Location("/user/{username}") class updateUser(val username: kotlin.String, val body: User) + } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt index 3ac3578638d5..9226541eb34e 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt @@ -20,17 +20,18 @@ import io.ktor.auth.OAuthAccessTokenResponse import io.ktor.auth.OAuthServerSettings import io.ktor.http.ContentType import io.ktor.http.HttpStatusCode -import io.ktor.locations.KtorExperimentalLocationsAPI -import io.ktor.locations.delete -import io.ktor.locations.get import io.ktor.response.respond import io.ktor.response.respondText import io.ktor.routing.Route -import io.ktor.routing.post -import io.ktor.routing.put -import io.ktor.routing.route - import org.openapitools.server.Paths +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.delete +import io.ktor.locations.get +import io.ktor.locations.post +import io.ktor.locations.put +import io.ktor.locations.options +import io.ktor.locations.head + import org.openapitools.server.infrastructure.ApiPrincipal @@ -41,40 +42,27 @@ import org.openapitools.server.models.Pet fun Route.PetApi() { val gson = Gson() val empty = mutableMapOf() - - route("/pet") { - authenticate("petstore_auth") { - post { - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - call.respond(HttpStatusCode.NotImplemented) - } - } - } + authenticate("petstore_auth") { + post { + val principal = call.authentication.principal()!! + + call.respond(HttpStatusCode.NotImplemented) + } } - - delete { _: Paths.deletePet -> - val principal = call.authentication.principal() + authenticate("petstore_auth") { + delete { + val principal = call.authentication.principal()!! - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - call.respond(HttpStatusCode.NotImplemented) - } + call.respond(HttpStatusCode.NotImplemented) + } } - - get { _: Paths.findPetsByStatus -> - val principal = call.authentication.principal() + authenticate("petstore_auth") { + get { + val principal = call.authentication.principal()!! - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - val exampleContentType = "application/json" + val exampleContentType = "application/json" val exampleContentString = """{ "photoUrls" : [ "photoUrls", "photoUrls" ], "name" : "doggie", @@ -93,22 +81,19 @@ fun Route.PetApi() { "status" : "available" }""" - when(exampleContentType) { + when (exampleContentType) { "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } - } + } } - - get { _: Paths.findPetsByTags -> - val principal = call.authentication.principal() + authenticate("petstore_auth") { + get { + val principal = call.authentication.principal()!! - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - val exampleContentType = "application/json" + val exampleContentType = "application/json" val exampleContentString = """{ "photoUrls" : [ "photoUrls", "photoUrls" ], "name" : "doggie", @@ -127,22 +112,19 @@ fun Route.PetApi() { "status" : "available" }""" - when(exampleContentType) { + when (exampleContentType) { "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } - } + } } - - get { _: Paths.getPetById -> - val principal = call.authentication.principal() + authenticate("api_key") { + get { + val principal = call.authentication.principal()!! - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - val exampleContentType = "application/json" + val exampleContentType = "application/json" val exampleContentString = """{ "photoUrls" : [ "photoUrls", "photoUrls" ], "name" : "doggie", @@ -161,68 +143,47 @@ fun Route.PetApi() { "status" : "available" }""" - when(exampleContentType) { + when (exampleContentType) { "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } - } } - - - route("/pet") { - authenticate("petstore_auth") { - put { - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - call.respond(HttpStatusCode.NotImplemented) - } - } - } } - - route("/pet/{petId}") { - authenticate("petstore_auth") { - post { - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - call.respond(HttpStatusCode.NotImplemented) - } - } - } + authenticate("petstore_auth") { + put { + val principal = call.authentication.principal()!! + + call.respond(HttpStatusCode.NotImplemented) + } } + authenticate("petstore_auth") { + post { + val principal = call.authentication.principal()!! + + call.respond(HttpStatusCode.NotImplemented) + } + } - route("/pet/{petId}/uploadImage") { - authenticate("petstore_auth") { - post { - val principal = call.authentication.principal() + authenticate("petstore_auth") { + post { + val principal = call.authentication.principal()!! + + val exampleContentType = "application/json" + val exampleContentString = """{ + "code" : 0, + "type" : "type", + "message" : "message" + }""" - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - val exampleContentType = "application/json" - val exampleContentString = """{ - "code" : 0, - "type" : "type", - "message" : "message" - }""" - - when(exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) - "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) - else -> call.respondText(exampleContentString) - } - } - } + when (exampleContentType) { + "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) + else -> call.respondText(exampleContentString) } } + } } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt index 17b2c526bd9c..2e5f4ab8b96c 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt @@ -20,17 +20,18 @@ import io.ktor.auth.OAuthAccessTokenResponse import io.ktor.auth.OAuthServerSettings import io.ktor.http.ContentType import io.ktor.http.HttpStatusCode -import io.ktor.locations.KtorExperimentalLocationsAPI -import io.ktor.locations.delete -import io.ktor.locations.get import io.ktor.response.respond import io.ktor.response.respondText import io.ktor.routing.Route -import io.ktor.routing.post -import io.ktor.routing.put -import io.ktor.routing.route - import org.openapitools.server.Paths +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.delete +import io.ktor.locations.get +import io.ktor.locations.post +import io.ktor.locations.put +import io.ktor.locations.options +import io.ktor.locations.head + import org.openapitools.server.infrastructure.ApiPrincipal @@ -40,24 +41,19 @@ import org.openapitools.server.models.Order fun Route.StoreApi() { val gson = Gson() val empty = mutableMapOf() - - delete { _: Paths.deleteOrder -> + delete { call.respond(HttpStatusCode.NotImplemented) } - - get { _: Paths.getInventory -> - val principal = call.authentication.principal() + authenticate("api_key") { + get { + val principal = call.authentication.principal()!! - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - call.respond(HttpStatusCode.NotImplemented) - } + call.respond(HttpStatusCode.NotImplemented) + } } - - get { _: Paths.getOrderById -> + get { val exampleContentType = "application/json" val exampleContentString = """{ "petId" : 6, @@ -68,31 +64,28 @@ fun Route.StoreApi() { "status" : "placed" }""" - when(exampleContentType) { + when (exampleContentType) { "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } } - - route("/store/order") { - post { - val exampleContentType = "application/json" - val exampleContentString = """{ - "petId" : 6, - "quantity" : 1, - "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", - "complete" : false, - "status" : "placed" - }""" - - when(exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) - "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) - else -> call.respondText(exampleContentString) - } + post { + val exampleContentType = "application/json" + val exampleContentString = """{ + "petId" : 6, + "quantity" : 1, + "id" : 0, + "shipDate" : "2000-01-23T04:56:07.000+00:00", + "complete" : false, + "status" : "placed" + }""" + + when (exampleContentType) { + "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) + else -> call.respondText(exampleContentString) } } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt index 7fc0b78fa995..e248d75ae0cc 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt @@ -20,17 +20,18 @@ import io.ktor.auth.OAuthAccessTokenResponse import io.ktor.auth.OAuthServerSettings import io.ktor.http.ContentType import io.ktor.http.HttpStatusCode -import io.ktor.locations.KtorExperimentalLocationsAPI -import io.ktor.locations.delete -import io.ktor.locations.get import io.ktor.response.respond import io.ktor.response.respondText import io.ktor.routing.Route -import io.ktor.routing.post -import io.ktor.routing.put -import io.ktor.routing.route - import org.openapitools.server.Paths +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.delete +import io.ktor.locations.get +import io.ktor.locations.post +import io.ktor.locations.put +import io.ktor.locations.options +import io.ktor.locations.head + import org.openapitools.server.infrastructure.ApiPrincipal @@ -40,34 +41,23 @@ import org.openapitools.server.models.User fun Route.UserApi() { val gson = Gson() val empty = mutableMapOf() - - route("/user") { - post { - call.respond(HttpStatusCode.NotImplemented) - } + post { + call.respond(HttpStatusCode.NotImplemented) } - - route("/user/createWithArray") { - post { - call.respond(HttpStatusCode.NotImplemented) - } + post { + call.respond(HttpStatusCode.NotImplemented) } - - route("/user/createWithList") { - post { - call.respond(HttpStatusCode.NotImplemented) - } + post { + call.respond(HttpStatusCode.NotImplemented) } - - delete { _: Paths.deleteUser -> + delete { call.respond(HttpStatusCode.NotImplemented) } - - get { _: Paths.getUserByName -> + get { val exampleContentType = "application/json" val exampleContentString = """{ "firstName" : "firstName", @@ -80,28 +70,23 @@ fun Route.UserApi() { "username" : "username" }""" - when(exampleContentType) { + when (exampleContentType) { "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } } - - get { _: Paths.loginUser -> + get { call.respond(HttpStatusCode.NotImplemented) } - - get { _: Paths.logoutUser -> + get { call.respond(HttpStatusCode.NotImplemented) } - - route("/user/{username}") { - put { - call.respond(HttpStatusCode.NotImplemented) - } + put { + call.respond(HttpStatusCode.NotImplemented) } } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt index 8de972967ef3..de09ba8b6b62 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt @@ -1,85 +1,105 @@ package org.openapitools.server.infrastructure -import io.ktor.application.ApplicationCall -import io.ktor.application.call -import io.ktor.auth.Authentication -import io.ktor.auth.AuthenticationFailedCause -import io.ktor.auth.AuthenticationPipeline -import io.ktor.auth.AuthenticationProvider -import io.ktor.auth.Credential -import io.ktor.auth.Principal -import io.ktor.auth.UnauthorizedResponse -import io.ktor.http.auth.HeaderValueEncoding -import io.ktor.http.auth.HttpAuthHeader -import io.ktor.request.ApplicationRequest -import io.ktor.response.respond +import io.ktor.application.* +import io.ktor.auth.* +import io.ktor.http.auth.* +import io.ktor.request.* +import io.ktor.response.* enum class ApiKeyLocation(val location: String) { QUERY("query"), HEADER("header") } -data class ApiKeyCredential(val value: String): Credential -data class ApiPrincipal(val apiKeyCredential: ApiKeyCredential?) : Principal - +data class ApiKeyCredential(val value: String) : Credential +data class ApiPrincipal(val apiKeyCredential: ApiKeyCredential?) : Principal /** * Represents a Api Key authentication provider * @param name is the name of the provider, or `null` for a default provider */ -class ApiKeyAuthenticationProvider(name: String?) : AuthenticationProvider(name) { - internal var authenticationFunction: suspend ApplicationCall.(ApiKeyCredential) -> Principal? = { null } +class ApiKeyAuthenticationProvider(configuration: Configuration) : AuthenticationProvider(configuration) { - var apiKeyName: String = ""; + private val authenticationFunction = configuration.authenticationFunction - var apiKeyLocation: ApiKeyLocation = ApiKeyLocation.QUERY; + private val apiKeyName: String = configuration.apiKeyName - /** - * Sets a validation function that will check given [ApiKeyCredential] instance and return [Principal], - * or null if credential does not correspond to an authenticated principal - */ - fun validate(body: suspend ApplicationCall.(ApiKeyCredential) -> Principal?) { - authenticationFunction = body - } -} + private val apiKeyLocation: ApiKeyLocation = configuration.apiKeyLocation -fun Authentication.Configuration.apiKeyAuth(name: String? = null, configure: ApiKeyAuthenticationProvider.() -> Unit) { - val provider = ApiKeyAuthenticationProvider(name).apply(configure) - val apiKeyName = provider.apiKeyName - val apiKeyLocation = provider.apiKeyLocation - val authenticate = provider.authenticationFunction + internal fun install() { + pipeline.intercept(AuthenticationPipeline.RequestAuthentication) { context -> + val credentials = call.request.apiKeyAuthenticationCredentials(apiKeyName, apiKeyLocation) + val principal = credentials?.let { authenticationFunction(call, it) } - provider.pipeline.intercept(AuthenticationPipeline.RequestAuthentication) { context -> - val credentials = call.request.apiKeyAuthenticationCredentials(apiKeyName, apiKeyLocation) - val principal = credentials?.let { authenticate(call, it) } + val cause = when { + credentials == null -> AuthenticationFailedCause.NoCredentials + principal == null -> AuthenticationFailedCause.InvalidCredentials + else -> null + } - val cause = when { - credentials == null -> AuthenticationFailedCause.NoCredentials - principal == null -> AuthenticationFailedCause.InvalidCredentials - else -> null - } + if (cause != null) { + context.challenge(apiKeyName, cause) { + call.respond( + UnauthorizedResponse( + HttpAuthHeader.Parameterized( + "API_KEY", + mapOf("key" to apiKeyName), + HeaderValueEncoding.QUOTED_ALWAYS + ) + ) + ) + it.complete() + } + } - if (cause != null) { - context.challenge(apiKeyName, cause) { - // TODO: Verify correct response structure here. - call.respond(UnauthorizedResponse(HttpAuthHeader.Parameterized("API_KEY", mapOf("key" to apiKeyName), HeaderValueEncoding.QUOTED_ALWAYS))) - it.complete() + if (principal != null) { + context.principal(principal) } } + } + + class Configuration internal constructor(name: String?) : AuthenticationProvider.Configuration(name) { + + internal var authenticationFunction: suspend ApplicationCall.(ApiKeyCredential) -> Principal? = { + throw NotImplementedError( + "Api Key auth validate function is not specified. Use apiKeyAuth { validate { ... } } to fix." + ) + } - if (principal != null) { - context.principal(principal) + var apiKeyName: String = "" + + var apiKeyLocation: ApiKeyLocation = ApiKeyLocation.QUERY + + /** + * Sets a validation function that will check given [ApiKeyCredential] instance and return [Principal], + * or null if credential does not correspond to an authenticated principal + */ + fun validate(body: suspend ApplicationCall.(ApiKeyCredential) -> Principal?) { + authenticationFunction = body } } } -fun ApplicationRequest.apiKeyAuthenticationCredentials(apiKeyName: String, apiKeyLocation: ApiKeyLocation): ApiKeyCredential? { - val value: String? = when(apiKeyLocation) { +fun Authentication.Configuration.apiKeyAuth( + name: String? = null, + configure: ApiKeyAuthenticationProvider.Configuration.() -> Unit +) { + val configuration = ApiKeyAuthenticationProvider.Configuration(name).apply(configure) + val provider = ApiKeyAuthenticationProvider(configuration) + provider.install() + register(provider) +} + +fun ApplicationRequest.apiKeyAuthenticationCredentials( + apiKeyName: String, + apiKeyLocation: ApiKeyLocation +): ApiKeyCredential? { + val value: String? = when (apiKeyLocation) { ApiKeyLocation.QUERY -> this.queryParameters[apiKeyName] ApiKeyLocation.HEADER -> this.headers[apiKeyName] } - when (value) { - null -> return null - else -> return ApiKeyCredential(value) + return when (value) { + null -> null + else -> ApiKeyCredential(value) } } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt index 457607909909..14f50dbb9ad6 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt @@ -19,7 +19,7 @@ import java.io.Serializable * @param type * @param message */ -data class ApiResponse ( +data class ApiResponse( val code: kotlin.Int? = null, val type: kotlin.String? = null, val message: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt index ee26d4c76e50..9d8571921384 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -18,7 +18,7 @@ import java.io.Serializable * @param id * @param name */ -data class Category ( +data class Category( val id: kotlin.Long? = null, val name: kotlin.String? = null ) : Serializable diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt index 7889abe12ee2..5e9e18b0328c 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -22,7 +22,7 @@ import java.io.Serializable * @param status Order Status * @param complete */ -data class Order ( +data class Order( val id: kotlin.Long? = null, val petId: kotlin.Long? = null, val quantity: kotlin.Int? = null, diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt index 8dc13b7ea6e2..8b98ce0469c5 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -24,12 +24,12 @@ import java.io.Serializable * @param tags * @param status pet status in the store */ -data class Pet ( +data class Pet( val name: kotlin.String, - val photoUrls: kotlin.Array, + val photoUrls: kotlin.collections.List, val id: kotlin.Long? = null, val category: Category? = null, - val tags: kotlin.Array? = null, + val tags: kotlin.collections.List? = null, /* pet status in the store */ val status: Pet.Status? = null ) : Serializable diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt index 49c2887a5039..e9626b25c6d1 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -18,7 +18,7 @@ import java.io.Serializable * @param id * @param name */ -data class Tag ( +data class Tag( val id: kotlin.Long? = null, val name: kotlin.String? = null ) : Serializable diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt index dee8de740bde..fdbdb4e1cff4 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt @@ -24,7 +24,7 @@ import java.io.Serializable * @param phone * @param userStatus User Status */ -data class User ( +data class User( val id: kotlin.Long? = null, val username: kotlin.String? = null, val firstName: kotlin.String? = null, From 5d946289efe1cd69fc680ab5efc16ac37a02a7db Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 28 Apr 2021 22:36:29 +0800 Subject: [PATCH 069/186] Bump OkHTTP dependency to latest in build.sbt (#9361) --- .../resources/Java/libraries/okhttp-gson/build.sbt.mustache | 4 ++-- .../petstore/java/okhttp-gson-dynamicOperations/build.sbt | 4 ++-- .../petstore/java/okhttp-gson-parcelableModel/build.sbt | 4 ++-- samples/client/petstore/java/okhttp-gson/build.sbt | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.sbt.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.sbt.mustache index a14047e79984..8979b10a7f8c 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.sbt.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/okhttp-gson/build.sbt.mustache @@ -10,8 +10,8 @@ lazy val root = (project in file(".")). resolvers += Resolver.mavenLocal, libraryDependencies ++= Seq( "io.swagger" % "swagger-annotations" % "1.5.24", - "com.squareup.okhttp3" % "okhttp" % "3.14.7", - "com.squareup.okhttp3" % "logging-interceptor" % "3.14.7", + "com.squareup.okhttp3" % "okhttp" % "4.9.1", + "com.squareup.okhttp3" % "logging-interceptor" % "4.9.1", "com.google.code.gson" % "gson" % "2.8.6", "org.apache.commons" % "commons-lang3" % "3.10", {{#hasOAuthMethods}} diff --git a/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.sbt b/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.sbt index 289532fdd680..020460f4527d 100644 --- a/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.sbt +++ b/samples/client/petstore/java/okhttp-gson-dynamicOperations/build.sbt @@ -10,8 +10,8 @@ lazy val root = (project in file(".")). resolvers += Resolver.mavenLocal, libraryDependencies ++= Seq( "io.swagger" % "swagger-annotations" % "1.5.24", - "com.squareup.okhttp3" % "okhttp" % "3.14.7", - "com.squareup.okhttp3" % "logging-interceptor" % "3.14.7", + "com.squareup.okhttp3" % "okhttp" % "4.9.1", + "com.squareup.okhttp3" % "logging-interceptor" % "4.9.1", "com.google.code.gson" % "gson" % "2.8.6", "org.apache.commons" % "commons-lang3" % "3.10", "org.apache.oltu.oauth2" % "org.apache.oltu.oauth2.client" % "1.0.1", diff --git a/samples/client/petstore/java/okhttp-gson-parcelableModel/build.sbt b/samples/client/petstore/java/okhttp-gson-parcelableModel/build.sbt index d3bf50f4d7f6..c36bbc5ca081 100644 --- a/samples/client/petstore/java/okhttp-gson-parcelableModel/build.sbt +++ b/samples/client/petstore/java/okhttp-gson-parcelableModel/build.sbt @@ -10,8 +10,8 @@ lazy val root = (project in file(".")). resolvers += Resolver.mavenLocal, libraryDependencies ++= Seq( "io.swagger" % "swagger-annotations" % "1.5.24", - "com.squareup.okhttp3" % "okhttp" % "3.14.7", - "com.squareup.okhttp3" % "logging-interceptor" % "3.14.7", + "com.squareup.okhttp3" % "okhttp" % "4.9.1", + "com.squareup.okhttp3" % "logging-interceptor" % "4.9.1", "com.google.code.gson" % "gson" % "2.8.6", "org.apache.commons" % "commons-lang3" % "3.10", "org.apache.oltu.oauth2" % "org.apache.oltu.oauth2.client" % "1.0.1", diff --git a/samples/client/petstore/java/okhttp-gson/build.sbt b/samples/client/petstore/java/okhttp-gson/build.sbt index ae1791028e0f..6dfd0d7f733b 100644 --- a/samples/client/petstore/java/okhttp-gson/build.sbt +++ b/samples/client/petstore/java/okhttp-gson/build.sbt @@ -10,8 +10,8 @@ lazy val root = (project in file(".")). resolvers += Resolver.mavenLocal, libraryDependencies ++= Seq( "io.swagger" % "swagger-annotations" % "1.5.24", - "com.squareup.okhttp3" % "okhttp" % "3.14.7", - "com.squareup.okhttp3" % "logging-interceptor" % "3.14.7", + "com.squareup.okhttp3" % "okhttp" % "4.9.1", + "com.squareup.okhttp3" % "logging-interceptor" % "4.9.1", "com.google.code.gson" % "gson" % "2.8.6", "org.apache.commons" % "commons-lang3" % "3.10", "org.apache.oltu.oauth2" % "org.apache.oltu.oauth2.client" % "1.0.1", From ccbb78e1b2ff46f569df7b49c99231a9ff1ca050 Mon Sep 17 00:00:00 2001 From: Rustam Date: Thu, 29 Apr 2021 02:26:57 +0200 Subject: [PATCH 070/186] Keep old Ktor server generator for backward compatibility (#9365) --- .../kotlin-server-ktor-deprecated.yaml | 8 + docs/generators.md | 1 + docs/generators/README.md | 1 + docs/generators/kotlin-server-deprecated.md | 214 ++++++++++++++ .../KotlinServerDeprecatedCodegen.java | 263 ++++++++++++++++++ .../org.openapitools.codegen.CodegenConfig | 1 + .../kotlin-server-deprecated/README.mustache | 84 ++++++ .../kotlin-server-deprecated/api_doc.mustache | 65 +++++ .../class_doc.mustache | 15 + .../data_class.mustache | 52 ++++ .../data_class_opt_var.mustache | 4 + .../data_class_req_var.mustache | 4 + .../enum_class.mustache | 9 + .../enum_doc.mustache | 7 + .../libraries/ktor/ApiKeyAuth.kt.mustache | 85 ++++++ .../libraries/ktor/AppMain.kt.mustache | 145 ++++++++++ .../libraries/ktor/Configuration.kt.mustache | 114 ++++++++ .../libraries/ktor/Dockerfile.mustache | 7 + .../libraries/ktor/Paths.kt.mustache | 28 ++ .../libraries/ktor/README.mustache | 101 +++++++ .../libraries/ktor/_api_body.mustache | 25 ++ .../libraries/ktor/_principal.mustache | 11 + .../libraries/ktor/_response.mustache | 8 + .../libraries/ktor/api.mustache | 62 +++++ .../libraries/ktor/application.conf.mustache | 27 ++ .../libraries/ktor/build.gradle.mustache | 68 +++++ .../libraries/ktor/gradle.properties | 1 + .../libraries/ktor/licenseInfo.mustache | 11 + .../libraries/ktor/logback.xml | 15 + .../licenseInfo.mustache | 11 + .../kotlin-server-deprecated/model.mustache | 11 + .../modelMutable.mustache | 1 + .../model_doc.mustache | 3 + .../settings.gradle.mustache | 1 + .../kotlin/KotlinModelCodegenTest.java | 2 + .../ktor/.openapi-generator-ignore | 23 ++ .../ktor/.openapi-generator/FILES | 20 ++ .../ktor/.openapi-generator/VERSION | 1 + .../kotlin-server-deprecated/ktor/Dockerfile | 7 + .../kotlin-server-deprecated/ktor/README.md | 104 +++++++ .../ktor/build.gradle | 68 +++++ .../ktor/gradle.properties | 1 + .../ktor/settings.gradle | 1 + .../kotlin/org/openapitools/server/AppMain.kt | 91 ++++++ .../org/openapitools/server/Configuration.kt | 82 ++++++ .../kotlin/org/openapitools/server/Paths.kt | 106 +++++++ .../org/openapitools/server/apis/PetApi.kt | 228 +++++++++++++++ .../org/openapitools/server/apis/StoreApi.kt | 99 +++++++ .../org/openapitools/server/apis/UserApi.kt | 107 +++++++ .../server/infrastructure/ApiKeyAuth.kt | 85 ++++++ .../openapitools/server/models/ApiResponse.kt | 32 +++ .../openapitools/server/models/Category.kt | 30 ++ .../org/openapitools/server/models/Order.kt | 48 ++++ .../org/openapitools/server/models/Pet.kt | 50 ++++ .../org/openapitools/server/models/Tag.kt | 30 ++ .../org/openapitools/server/models/User.kt | 43 +++ .../ktor/src/main/resources/application.conf | 23 ++ .../ktor/src/main/resources/logback.xml | 15 + 58 files changed, 2759 insertions(+) create mode 100644 bin/configs/kotlin-server-ktor-deprecated.yaml create mode 100644 docs/generators/kotlin-server-deprecated.md create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerDeprecatedCodegen.java create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/README.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/api_doc.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/class_doc.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class_opt_var.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class_req_var.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/enum_class.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/enum_doc.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/ApiKeyAuth.kt.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/AppMain.kt.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Configuration.kt.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Dockerfile.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Paths.kt.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/README.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_api_body.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_principal.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_response.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/api.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/application.conf.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/build.gradle.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/gradle.properties create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/licenseInfo.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/logback.xml create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/licenseInfo.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/model.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/modelMutable.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/model_doc.mustache create mode 100644 modules/openapi-generator/src/main/resources/kotlin-server-deprecated/settings.gradle.mustache create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator-ignore create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/FILES create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/VERSION create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/Dockerfile create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/README.md create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/build.gradle create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/gradle.properties create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/settings.gradle create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Paths.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/User.kt create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/application.conf create mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/logback.xml diff --git a/bin/configs/kotlin-server-ktor-deprecated.yaml b/bin/configs/kotlin-server-ktor-deprecated.yaml new file mode 100644 index 000000000000..818b279073a5 --- /dev/null +++ b/bin/configs/kotlin-server-ktor-deprecated.yaml @@ -0,0 +1,8 @@ +generatorName: kotlin-server-deprecated +outputDir: samples/server/petstore/kotlin-server-deprecated/ktor +library: ktor +inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml +templateDir: modules/openapi-generator/src/main/resources/kotlin-server-deprecated +additionalProperties: + hideGenerationTimestamp: "true" + serializableModel: "true" diff --git a/docs/generators.md b/docs/generators.md index 521bdc3dbf0e..5dace860f9ee 100644 --- a/docs/generators.md +++ b/docs/generators.md @@ -106,6 +106,7 @@ The following generators are available: * [jaxrs-resteasy-eap](generators/jaxrs-resteasy-eap.md) * [jaxrs-spec](generators/jaxrs-spec.md) * [kotlin-server](generators/kotlin-server.md) +* [kotlin-server-deprecated](generators/kotlin-server-deprecated.md) * [kotlin-spring](generators/kotlin-spring.md) * [kotlin-vertx (beta)](generators/kotlin-vertx.md) * [nodejs-express-server (beta)](generators/nodejs-express-server.md) diff --git a/docs/generators/README.md b/docs/generators/README.md index 6510770e47a9..a8ac9c9310c3 100644 --- a/docs/generators/README.md +++ b/docs/generators/README.md @@ -91,6 +91,7 @@ The following generators are available: * [jaxrs-resteasy-eap](jaxrs-resteasy-eap.md) * [jaxrs-spec](jaxrs-spec.md) * [kotlin-server](kotlin-server.md) +* [kotlin-server-deprecated](kotlin-server-deprecated.md) * [kotlin-spring](kotlin-spring.md) * [kotlin-vertx (beta)](kotlin-vertx.md) * [nodejs-express-server (beta)](nodejs-express-server.md) diff --git a/docs/generators/kotlin-server-deprecated.md b/docs/generators/kotlin-server-deprecated.md new file mode 100644 index 000000000000..5499354747c5 --- /dev/null +++ b/docs/generators/kotlin-server-deprecated.md @@ -0,0 +1,214 @@ +--- +title: Config Options for kotlin-server-deprecated +sidebar_label: kotlin-server-deprecated +--- + +These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. + +| Option | Description | Values | Default | +| ------ | ----------- | ------ | ------- | +|apiSuffix|suffix for api classes| |Api| +|artifactId|Generated artifact id (name of jar).| |kotlin-server-deprecated| +|artifactVersion|Generated artifact's package version.| |1.0.0| +|enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |camelCase| +|featureAutoHead|Automatically provide responses to HEAD requests for existing routes that have the GET verb defined.| |true| +|featureCORS|Ktor by default provides an interceptor for implementing proper support for Cross-Origin Resource Sharing (CORS). See enable-cors.org.| |false| +|featureCompression|Adds ability to compress outgoing content using gzip, deflate or custom encoder and thus reduce size of the response.| |true| +|featureConditionalHeaders|Avoid sending content if client already has same content, by checking ETag or LastModified properties.| |false| +|featureHSTS|Avoid sending content if client already has same content, by checking ETag or LastModified properties.| |true| +|groupId|Generated artifact package's organization (i.e. maven groupId).| |org.openapitools| +|library|library template (sub-template)|
**ktor**
ktor framework
|ktor| +|modelMutable|Create mutable models| |false| +|packageName|Generated artifact package name.| |org.openapitools.server| +|parcelizeModels|toggle "@Parcelize" for generated models| |null| +|serializableModel|boolean - toggle "implements Serializable" for generated models| |null| +|serializationLibrary|What serialization library to use: 'moshi' (default), or 'gson' or 'jackson'| |moshi| +|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |null| +|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |null| +|sourceFolder|source folder for generated code| |src/main/kotlin| + +## IMPORT MAPPING + +| Type/Alias | Imports | +| ---------- | ------- | +|BigDecimal|java.math.BigDecimal| +|Date|java.time.LocalDate| +|DateTime|java.time.OffsetDateTime| +|File|java.io.File| +|LocalDate|java.time.LocalDate| +|LocalDateTime|java.time.LocalDateTime| +|LocalTime|java.time.LocalTime| +|Timestamp|java.sql.Timestamp| +|URI|java.net.URI| +|UUID|java.util.UUID| + + +## INSTANTIATION TYPES + +| Type/Alias | Instantiated By | +| ---------- | --------------- | +|array|kotlin.collections.ArrayList| +|list|kotlin.collections.ArrayList| +|map|kotlin.collections.HashMap| + + +## LANGUAGE PRIMITIVES + +
    +
  • kotlin.Array
  • +
  • kotlin.Boolean
  • +
  • kotlin.Byte
  • +
  • kotlin.ByteArray
  • +
  • kotlin.Char
  • +
  • kotlin.Double
  • +
  • kotlin.Float
  • +
  • kotlin.Int
  • +
  • kotlin.Long
  • +
  • kotlin.Short
  • +
  • kotlin.String
  • +
  • kotlin.collections.List
  • +
  • kotlin.collections.Map
  • +
  • kotlin.collections.Set
  • +
+ +## RESERVED WORDS + +
    +
  • as
  • +
  • break
  • +
  • class
  • +
  • continue
  • +
  • do
  • +
  • else
  • +
  • false
  • +
  • for
  • +
  • fun
  • +
  • if
  • +
  • in
  • +
  • interface
  • +
  • is
  • +
  • null
  • +
  • object
  • +
  • package
  • +
  • return
  • +
  • super
  • +
  • this
  • +
  • throw
  • +
  • true
  • +
  • try
  • +
  • typealias
  • +
  • typeof
  • +
  • val
  • +
  • var
  • +
  • when
  • +
  • while
  • +
+ +## FEATURE SET + + +### Client Modification Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasePath|✗|ToolingExtension +|Authorizations|✗|ToolingExtension +|UserAgent|✗|ToolingExtension +|MockServer|✗|ToolingExtension + +### Data Type Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Custom|✗|OAS2,OAS3 +|Int32|✓|OAS2,OAS3 +|Int64|✓|OAS2,OAS3 +|Float|✓|OAS2,OAS3 +|Double|✓|OAS2,OAS3 +|Decimal|✓|ToolingExtension +|String|✓|OAS2,OAS3 +|Byte|✓|OAS2,OAS3 +|Binary|✓|OAS2,OAS3 +|Boolean|✓|OAS2,OAS3 +|Date|✓|OAS2,OAS3 +|DateTime|✓|OAS2,OAS3 +|Password|✓|OAS2,OAS3 +|File|✓|OAS2 +|Array|✓|OAS2,OAS3 +|Maps|✓|ToolingExtension +|CollectionFormat|✓|OAS2 +|CollectionFormatMulti|✓|OAS2 +|Enum|✓|OAS2,OAS3 +|ArrayOfEnum|✓|ToolingExtension +|ArrayOfModel|✓|ToolingExtension +|ArrayOfCollectionOfPrimitives|✓|ToolingExtension +|ArrayOfCollectionOfModel|✓|ToolingExtension +|ArrayOfCollectionOfEnum|✓|ToolingExtension +|MapOfEnum|✓|ToolingExtension +|MapOfModel|✓|ToolingExtension +|MapOfCollectionOfPrimitives|✓|ToolingExtension +|MapOfCollectionOfModel|✓|ToolingExtension +|MapOfCollectionOfEnum|✓|ToolingExtension + +### Documentation Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Readme|✓|ToolingExtension +|Model|✓|ToolingExtension +|Api|✓|ToolingExtension + +### Global Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Host|✓|OAS2,OAS3 +|BasePath|✓|OAS2,OAS3 +|Info|✓|OAS2,OAS3 +|Schemes|✗|OAS2,OAS3 +|PartialSchemes|✓|OAS2,OAS3 +|Consumes|✓|OAS2 +|Produces|✓|OAS2 +|ExternalDocumentation|✓|OAS2,OAS3 +|Examples|✓|OAS2,OAS3 +|XMLStructureDefinitions|✗|OAS2,OAS3 +|MultiServer|✗|OAS3 +|ParameterizedServer|✗|OAS3 +|ParameterStyling|✗|OAS3 +|Callbacks|✗|OAS3 +|LinkObjects|✗|OAS3 + +### Parameter Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Path|✓|OAS2,OAS3 +|Query|✓|OAS2,OAS3 +|Header|✓|OAS2,OAS3 +|Body|✓|OAS2 +|FormUnencoded|✓|OAS2 +|FormMultipart|✓|OAS2 +|Cookie|✗|OAS3 + +### Schema Support Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Simple|✓|OAS2,OAS3 +|Composite|✓|OAS2,OAS3 +|Polymorphism|✗|OAS2,OAS3 +|Union|✗|OAS3 + +### Security Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasicAuth|✓|OAS2,OAS3 +|ApiKey|✓|OAS2,OAS3 +|OpenIDConnect|✗|OAS3 +|BearerToken|✗|OAS3 +|OAuth2_Implicit|✓|OAS2,OAS3 +|OAuth2_Password|✗|OAS2,OAS3 +|OAuth2_ClientCredentials|✗|OAS2,OAS3 +|OAuth2_AuthorizationCode|✗|OAS2,OAS3 + +### Wire Format Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|JSON|✓|OAS2,OAS3 +|XML|✓|OAS2,OAS3 +|PROTOBUF|✗|ToolingExtension +|Custom|✗|OAS2,OAS3 diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerDeprecatedCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerDeprecatedCodegen.java new file mode 100644 index 000000000000..46579134a219 --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerDeprecatedCodegen.java @@ -0,0 +1,263 @@ +/* + * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech) + * Copyright 2018 SmartBear Software + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openapitools.codegen.languages; + +import com.google.common.collect.ImmutableMap; +import org.apache.commons.lang3.StringUtils; +import org.openapitools.codegen.CliOption; +import org.openapitools.codegen.CodegenConstants; +import org.openapitools.codegen.CodegenType; +import org.openapitools.codegen.SupportingFile; +import org.openapitools.codegen.meta.features.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.util.Arrays; +import java.util.EnumSet; +import java.util.List; +import java.util.Map; + +public class KotlinServerDeprecatedCodegen extends AbstractKotlinCodegen { + + public static final String DEFAULT_LIBRARY = Constants.KTOR; + private final Logger LOGGER = LoggerFactory.getLogger(KotlinServerDeprecatedCodegen.class); + private Boolean autoHeadFeatureEnabled = true; + private Boolean conditionalHeadersFeatureEnabled = false; + private Boolean hstsFeatureEnabled = true; + private Boolean corsFeatureEnabled = false; + private Boolean compressionFeatureEnabled = true; + + // This is here to potentially warn the user when an option is not supported by the target framework. + private Map> optionsSupportedPerFramework = new ImmutableMap.Builder>() + .put(Constants.KTOR, Arrays.asList( + Constants.AUTOMATIC_HEAD_REQUESTS, + Constants.CONDITIONAL_HEADERS, + Constants.HSTS, + Constants.CORS, + Constants.COMPRESSION + )) + .build(); + + /** + * Constructs an instance of `KotlinServerCodegen`. + */ + public KotlinServerDeprecatedCodegen() { + super(); + + modifyFeatureSet(features -> features + .includeDocumentationFeatures(DocumentationFeature.Readme) + .wireFormatFeatures(EnumSet.of(WireFormatFeature.JSON, WireFormatFeature.XML)) + .securityFeatures(EnumSet.of( + SecurityFeature.BasicAuth, + SecurityFeature.ApiKey, + SecurityFeature.OAuth2_Implicit + )) + .excludeGlobalFeatures( + GlobalFeature.XMLStructureDefinitions, + GlobalFeature.Callbacks, + GlobalFeature.LinkObjects, + GlobalFeature.ParameterStyling + ) + .excludeSchemaSupportFeatures( + SchemaSupportFeature.Polymorphism + ) + .excludeParameterFeatures( + ParameterFeature.Cookie + ) + ); + + artifactId = "kotlin-server-deprecated"; + packageName = "org.openapitools.server"; + + // cliOptions default redefinition need to be updated + updateOption(CodegenConstants.ARTIFACT_ID, this.artifactId); + updateOption(CodegenConstants.PACKAGE_NAME, this.packageName); + + outputFolder = "generated-code" + File.separator + "kotlin-server-deprecated"; + modelTemplateFiles.put("model.mustache", ".kt"); + apiTemplateFiles.put("api.mustache", ".kt"); + embeddedTemplateDir = templateDir = "kotlin-server-deprecated"; + apiPackage = packageName + ".apis"; + modelPackage = packageName + ".models"; + + supportedLibraries.put(Constants.KTOR, "ktor framework"); + + // TODO: Configurable server engine. Defaults to netty in build.gradle. + CliOption library = new CliOption(CodegenConstants.LIBRARY, CodegenConstants.LIBRARY_DESC); + library.setDefault(DEFAULT_LIBRARY); + library.setEnum(supportedLibraries); + + cliOptions.add(library); + + addSwitch(Constants.AUTOMATIC_HEAD_REQUESTS, Constants.AUTOMATIC_HEAD_REQUESTS_DESC, getAutoHeadFeatureEnabled()); + addSwitch(Constants.CONDITIONAL_HEADERS, Constants.CONDITIONAL_HEADERS_DESC, getConditionalHeadersFeatureEnabled()); + addSwitch(Constants.HSTS, Constants.HSTS_DESC, getHstsFeatureEnabled()); + addSwitch(Constants.CORS, Constants.CORS_DESC, getCorsFeatureEnabled()); + addSwitch(Constants.COMPRESSION, Constants.COMPRESSION_DESC, getCompressionFeatureEnabled()); + } + + public Boolean getAutoHeadFeatureEnabled() { + return autoHeadFeatureEnabled; + } + + public void setAutoHeadFeatureEnabled(Boolean autoHeadFeatureEnabled) { + this.autoHeadFeatureEnabled = autoHeadFeatureEnabled; + } + + public Boolean getCompressionFeatureEnabled() { + return compressionFeatureEnabled; + } + + public void setCompressionFeatureEnabled(Boolean compressionFeatureEnabled) { + this.compressionFeatureEnabled = compressionFeatureEnabled; + } + + public Boolean getConditionalHeadersFeatureEnabled() { + return conditionalHeadersFeatureEnabled; + } + + public void setConditionalHeadersFeatureEnabled(Boolean conditionalHeadersFeatureEnabled) { + this.conditionalHeadersFeatureEnabled = conditionalHeadersFeatureEnabled; + } + + public Boolean getCorsFeatureEnabled() { + return corsFeatureEnabled; + } + + public void setCorsFeatureEnabled(Boolean corsFeatureEnabled) { + this.corsFeatureEnabled = corsFeatureEnabled; + } + + public String getHelp() { + return "Generates a Kotlin server."; + } + + public Boolean getHstsFeatureEnabled() { + return hstsFeatureEnabled; + } + + public void setHstsFeatureEnabled(Boolean hstsFeatureEnabled) { + this.hstsFeatureEnabled = hstsFeatureEnabled; + } + + public String getName() { + return "kotlin-server-deprecated"; + } + + public CodegenType getTag() { + return CodegenType.SERVER; + } + + @Override + public void processOpts() { + super.processOpts(); + + if (additionalProperties.containsKey(CodegenConstants.LIBRARY)) { + this.setLibrary((String) additionalProperties.get(CodegenConstants.LIBRARY)); + } + + // set default library to "ktor" + if (StringUtils.isEmpty(library)) { + this.setLibrary(DEFAULT_LIBRARY); + additionalProperties.put(CodegenConstants.LIBRARY, DEFAULT_LIBRARY); + LOGGER.info("`library` option is empty. Default to " + DEFAULT_LIBRARY); + } + + if (additionalProperties.containsKey(Constants.AUTOMATIC_HEAD_REQUESTS)) { + setAutoHeadFeatureEnabled(convertPropertyToBooleanAndWriteBack(Constants.AUTOMATIC_HEAD_REQUESTS)); + } else { + additionalProperties.put(Constants.AUTOMATIC_HEAD_REQUESTS, getAutoHeadFeatureEnabled()); + } + + if (additionalProperties.containsKey(Constants.CONDITIONAL_HEADERS)) { + setConditionalHeadersFeatureEnabled(convertPropertyToBooleanAndWriteBack(Constants.CONDITIONAL_HEADERS)); + } else { + additionalProperties.put(Constants.CONDITIONAL_HEADERS, getConditionalHeadersFeatureEnabled()); + } + + if (additionalProperties.containsKey(Constants.HSTS)) { + setHstsFeatureEnabled(convertPropertyToBooleanAndWriteBack(Constants.HSTS)); + } else { + additionalProperties.put(Constants.HSTS, getHstsFeatureEnabled()); + } + + if (additionalProperties.containsKey(Constants.CORS)) { + setCorsFeatureEnabled(convertPropertyToBooleanAndWriteBack(Constants.CORS)); + } else { + additionalProperties.put(Constants.CORS, getCorsFeatureEnabled()); + } + + if (additionalProperties.containsKey(Constants.COMPRESSION)) { + setCompressionFeatureEnabled(convertPropertyToBooleanAndWriteBack(Constants.COMPRESSION)); + } else { + additionalProperties.put(Constants.COMPRESSION, getCompressionFeatureEnabled()); + } + + boolean generateApis = additionalProperties.containsKey(CodegenConstants.GENERATE_APIS) && (Boolean) additionalProperties.get(CodegenConstants.GENERATE_APIS); + String packageFolder = (sourceFolder + File.separator + packageName).replace(".", File.separator); + String resourcesFolder = "src/main/resources"; // not sure this can be user configurable. + + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + supportingFiles.add(new SupportingFile("Dockerfile.mustache", "", "Dockerfile")); + + supportingFiles.add(new SupportingFile("build.gradle.mustache", "", "build.gradle")); + supportingFiles.add(new SupportingFile("settings.gradle.mustache", "", "settings.gradle")); + supportingFiles.add(new SupportingFile("gradle.properties", "", "gradle.properties")); + + supportingFiles.add(new SupportingFile("AppMain.kt.mustache", packageFolder, "AppMain.kt")); + supportingFiles.add(new SupportingFile("Configuration.kt.mustache", packageFolder, "Configuration.kt")); + + if (generateApis) { + supportingFiles.add(new SupportingFile("Paths.kt.mustache", packageFolder, "Paths.kt")); + } + + supportingFiles.add(new SupportingFile("application.conf.mustache", resourcesFolder, "application.conf")); + supportingFiles.add(new SupportingFile("logback.xml", resourcesFolder, "logback.xml")); + + final String infrastructureFolder = (sourceFolder + File.separator + packageName + File.separator + "infrastructure").replace(".", File.separator); + + supportingFiles.add(new SupportingFile("ApiKeyAuth.kt.mustache", infrastructureFolder, "ApiKeyAuth.kt")); + } + + public static class Constants { + public final static String KTOR = "ktor"; + public final static String AUTOMATIC_HEAD_REQUESTS = "featureAutoHead"; + public final static String AUTOMATIC_HEAD_REQUESTS_DESC = "Automatically provide responses to HEAD requests for existing routes that have the GET verb defined."; + public final static String CONDITIONAL_HEADERS = "featureConditionalHeaders"; + public final static String CONDITIONAL_HEADERS_DESC = "Avoid sending content if client already has same content, by checking ETag or LastModified properties."; + public final static String HSTS = "featureHSTS"; + public final static String HSTS_DESC = "Avoid sending content if client already has same content, by checking ETag or LastModified properties."; + public final static String CORS = "featureCORS"; + public final static String CORS_DESC = "Ktor by default provides an interceptor for implementing proper support for Cross-Origin Resource Sharing (CORS). See enable-cors.org."; + public final static String COMPRESSION = "featureCompression"; + public final static String COMPRESSION_DESC = "Adds ability to compress outgoing content using gzip, deflate or custom encoder and thus reduce size of the response."; + } + + @Override + public void postProcess() { + System.out.println("################################################################################"); + System.out.println("# Thanks for using OpenAPI Generator. #"); + System.out.println("# Please consider donation to help us maintain this project \uD83D\uDE4F #"); + System.out.println("# https://opencollective.com/openapi_generator/donate #"); + System.out.println("# #"); + System.out.println("# This generator's contributed by Jim Schubert (https://github.com/jimschubert)#"); + System.out.println("# Please support his work directly via https://patreon.com/jimschubert \uD83D\uDE4F #"); + System.out.println("################################################################################"); + } +} diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig index 87ab2b5e352c..4226cade162a 100644 --- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig +++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig @@ -44,6 +44,7 @@ org.openapitools.codegen.languages.GraphQLNodeJSExpressServerCodegen org.openapitools.codegen.languages.GroovyClientCodegen org.openapitools.codegen.languages.KotlinClientCodegen org.openapitools.codegen.languages.KotlinServerCodegen +org.openapitools.codegen.languages.KotlinServerDeprecatedCodegen org.openapitools.codegen.languages.KotlinSpringServerCodegen org.openapitools.codegen.languages.KotlinVertxServerCodegen org.openapitools.codegen.languages.KtormSchemaCodegen diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/README.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/README.mustache new file mode 100644 index 000000000000..24c4728fdd3a --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/README.mustache @@ -0,0 +1,84 @@ +# {{packageName}} - Kotlin Server library for {{appName}} + +## Requires + +* Kotlin 1.1.2 +* Gradle 3.3 + +## Build + +First, create the gradle wrapper script: + +``` +gradle wrapper +``` + +Then, run: + +``` +./gradlew check assemble +``` + +This runs all tests and packages the library. + +## Features/Implementation Notes + +* Supports JSON inputs/outputs, File inputs, and Form inputs. +* Supports collection formats for query parameters: csv, tsv, ssv, pipes. +* Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. + +{{#generateApiDocs}} + +## Documentation for API Endpoints + +All URIs are relative to *{{{basePath}}}* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**]({{apiDocPath}}{{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{{summary}}}{{/summary}} +{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} +{{/generateApiDocs}} + +{{#generateModelDocs}} + +## Documentation for Models + +{{#modelPackage}} +{{#models}}{{#model}} - [{{{modelPackage}}}.{{{classname}}}]({{modelDocPath}}{{{classname}}}.md) +{{/model}}{{/models}} +{{/modelPackage}} +{{^modelPackage}} +No model defined in this package +{{/modelPackage}} +{{/generateModelDocs}} + +{{! TODO: optional documentation for authorization? }} +## Documentation for Authorization + +{{^authMethods}} +All endpoints do not require authorization. +{{/authMethods}} +{{#authMethods}} +{{#last}} +Authentication schemes defined for the API: +{{/last}} +{{/authMethods}} +{{#authMethods}} + +### {{name}} + +{{#isApiKey}}- **Type**: API key +- **API key parameter name**: {{keyParamName}} +- **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}} +{{/isApiKey}} +{{#isBasic}}- **Type**: HTTP basic authentication +{{/isBasic}} +{{#isOAuth}}- **Type**: OAuth +- **Flow**: {{flow}} +- **Authorization URL**: {{authorizationUrl}} +- **Scopes**: {{^scopes}}N/A{{/scopes}} +{{#scopes}} - {{scope}}: {{description}} +{{/scopes}} +{{/isOAuth}} + +{{/authMethods}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/api_doc.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/api_doc.mustache new file mode 100644 index 000000000000..08d90eef4a2b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/api_doc.mustache @@ -0,0 +1,65 @@ +# {{classname}}{{#description}} +{{description}}{{/description}} + +All URIs are relative to *{{basePath}}* + +Method | HTTP request | Description +------------- | ------------- | ------------- +{{#operations}}{{#operation}}[**{{operationId}}**]({{classname}}.md#{{operationId}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{summary}}{{/summary}} +{{/operation}}{{/operations}} + +{{#operations}} +{{#operation}} + +# **{{operationId}}** +> {{#returnType}}{{returnType}} {{/returnType}}{{operationId}}({{#allParams}}{{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}) + +{{summary}}{{#notes}} + +{{notes}}{{/notes}} + +### Example +```kotlin +// Import classes: +//import {{{packageName}}}.infrastructure.* +//import {{{modelPackage}}}.* + +{{! TODO: Auth method documentation examples}} +val apiInstance = {{{classname}}}() +{{#allParams}} +val {{{paramName}}} : {{{dataType}}} = {{{example}}} // {{{dataType}}} | {{{description}}} +{{/allParams}} +try { + {{#returnType}}val result : {{{returnType}}} = {{/returnType}}apiInstance.{{{operationId}}}({{#allParams}}{{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}){{#returnType}} + println(result){{/returnType}} +} catch (e: ClientException) { + println("4xx response calling {{{classname}}}#{{{operationId}}}") + e.printStackTrace() +} catch (e: ServerException) { + println("5xx response calling {{{classname}}}#{{{operationId}}}") + e.printStackTrace() +} +``` + +### Parameters +{{^allParams}}This endpoint does not need any parameter.{{/allParams}}{{#allParams}}{{#-last}} +Name | Type | Description | Notes +------------- | ------------- | ------------- | -------------{{/-last}}{{/allParams}} +{{#allParams}} **{{paramName}}** | {{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}{{#isFile}}**{{dataType}}**{{/isFile}}{{^isFile}}{{#generateModelDocs}}[**{{dataType}}**]({{baseType}}.md){{/generateModelDocs}}{{^generateModelDocs}}**{{dataType}}**{{/generateModelDocs}}{{/isFile}}{{/isPrimitiveType}}| {{description}} |{{^required}} [optional]{{/required}}{{#defaultValue}} [default to {{defaultValue}}]{{/defaultValue}}{{#allowableValues}} [enum: {{#values}}{{{.}}}{{^-last}}, {{/-last}}{{/values}}]{{/allowableValues}} +{{/allParams}} + +### Return type + +{{#returnType}}{{#returnTypeIsPrimitive}}**{{returnType}}**{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}{{#generateModelDocs}}[**{{returnType}}**]({{returnBaseType}}.md){{/generateModelDocs}}{{^generateModelDocs}}**{{returnType}}**{{/generateModelDocs}}{{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}null (empty response body){{/returnType}} + +### Authorization + +{{^authMethods}}No authorization required{{/authMethods}}{{#authMethods}}[{{name}}](../README.md#{{name}}){{^-last}}, {{/-last}}{{/authMethods}} + +### HTTP request headers + + - **Content-Type**: {{#consumes}}{{{mediaType}}}{{^-last}}, {{/-last}}{{/consumes}}{{^consumes}}Not defined{{/consumes}} + - **Accept**: {{#produces}}{{{mediaType}}}{{^-last}}, {{/-last}}{{/produces}}{{^produces}}Not defined{{/produces}} + +{{/operation}} +{{/operations}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/class_doc.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/class_doc.mustache new file mode 100644 index 000000000000..a3405b25c845 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/class_doc.mustache @@ -0,0 +1,15 @@ +# {{classname}} + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +{{#vars}}**{{name}}** | {{#isEnum}}[**inline**](#{{datatypeWithEnum}}){{/isEnum}}{{^isEnum}}{{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{dataType}}**]({{complexType}}.md){{/isPrimitiveType}}{{/isEnum}} | {{description}} | {{^required}} [optional]{{/required}}{{#isReadOnly}} [readonly]{{/isReadOnly}} +{{/vars}} +{{#vars}}{{#isEnum}} + +{{!NOTE: see java's resources "pojo_doc.mustache" once enums are fully implemented}} +## Enum: {{baseName}} +Name | Value +---- | -----{{#allowableValues}} +{{name}} | {{#values}}{{.}}{{^-last}}, {{/-last}}{{/values}}{{/allowableValues}} +{{/isEnum}}{{/vars}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class.mustache new file mode 100644 index 000000000000..e22559b5cc98 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class.mustache @@ -0,0 +1,52 @@ +{{#parcelizeModels}} +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +{{/parcelizeModels}} +{{#serializableModel}} +import java.io.Serializable +{{/serializableModel}} +/** + * {{{description}}} +{{#vars}} + * @param {{name}} {{{description}}} +{{/vars}} + */ +{{#parcelizeModels}} +@Parcelize +{{/parcelizeModels}} +data class {{classname}} ( +{{#requiredVars}} +{{>data_class_req_var}}{{^-last}}, +{{/-last}}{{/requiredVars}}{{#hasRequired}}{{#hasOptional}}, +{{/hasOptional}}{{/hasRequired}}{{#optionalVars}}{{>data_class_opt_var}}{{^-last}}, +{{/-last}}{{/optionalVars}} +) {{^serializableModel}}{{#parcelizeModels}} : Parcelable{{/parcelizeModels}}{{/serializableModel}}{{^parcelizeModels}}{{#serializableModel}}: Serializable {{/serializableModel}}{{/parcelizeModels}}{{#parcelizeModels}}{{#serializableModel}} : Parcelable, Serializable {{/serializableModel}}{{/parcelizeModels}} +{{#vendorExtensions.x-has-data-class-body}} +{ +{{/vendorExtensions.x-has-data-class-body}} +{{#serializableModel}} + companion object { + private const val serialVersionUID: Long = 123 + } +{{/serializableModel}} +{{#hasEnums}} + {{#vars}} + {{#isEnum}} + /** + * {{{description}}} + * Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} + */ + enum class {{nameInCamelCase}}(val value: {{dataType}}){ + {{#allowableValues}} + {{#enumVars}} + {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}} + {{/enumVars}} + {{/allowableValues}} + } +{{/isEnum}} +{{/vars}} +{{/hasEnums}} +{{#vendorExtensions.x-has-data-class-body}} +} +{{/vendorExtensions.x-has-data-class-body}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class_opt_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class_opt_var.mustache new file mode 100644 index 000000000000..b10601187320 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class_opt_var.mustache @@ -0,0 +1,4 @@ +{{#description}} + /* {{{description}}} */ +{{/description}} + {{>modelMutable}} {{{name}}}: {{#isEnum}}{{classname}}.{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}? = {{#defaultvalue}}{{defaultvalue}}{{/defaultvalue}}{{^defaultvalue}}null{{/defaultvalue}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class_req_var.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class_req_var.mustache new file mode 100644 index 000000000000..c79bfec01bd0 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/data_class_req_var.mustache @@ -0,0 +1,4 @@ +{{#description}} + /* {{{description}}} */ +{{/description}} + {{>modelMutable}} {{{name}}}: {{#isEnum}}{{classname}}.{{nameInCamelCase}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/enum_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/enum_class.mustache new file mode 100644 index 000000000000..791398b97894 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/enum_class.mustache @@ -0,0 +1,9 @@ +/** +* {{{description}}} +* Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} +*/ +enum class {{classname}}(val value: {{dataType}}){ +{{#allowableValues}}{{#enumVars}} + {{&name}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}} +{{/enumVars}}{{/allowableValues}} +} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/enum_doc.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/enum_doc.mustache new file mode 100644 index 000000000000..fcb3d7e61aa6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/enum_doc.mustache @@ -0,0 +1,7 @@ +# {{classname}} + +## Enum + +{{#allowableValues}}{{#enumVars}} + * `{{name}}` (value: `{{{value}}}`) +{{/enumVars}}{{/allowableValues}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/ApiKeyAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/ApiKeyAuth.kt.mustache new file mode 100644 index 000000000000..e50c0793be45 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/ApiKeyAuth.kt.mustache @@ -0,0 +1,85 @@ +package {{packageName}}.infrastructure + +import io.ktor.application.ApplicationCall +import io.ktor.application.call +import io.ktor.auth.Authentication +import io.ktor.auth.AuthenticationFailedCause +import io.ktor.auth.AuthenticationPipeline +import io.ktor.auth.AuthenticationProvider +import io.ktor.auth.Credential +import io.ktor.auth.Principal +import io.ktor.auth.UnauthorizedResponse +import io.ktor.http.auth.HeaderValueEncoding +import io.ktor.http.auth.HttpAuthHeader +import io.ktor.request.ApplicationRequest +import io.ktor.response.respond + +enum class ApiKeyLocation(val location: String) { + QUERY("query"), + HEADER("header") +} +data class ApiKeyCredential(val value: String): Credential +data class ApiPrincipal(val apiKeyCredential: ApiKeyCredential?) : Principal + + + +/** +* Represents a Api Key authentication provider +* @param name is the name of the provider, or `null` for a default provider +*/ +class ApiKeyAuthenticationProvider(name: String?) : AuthenticationProvider(name) { + internal var authenticationFunction: suspend ApplicationCall.(ApiKeyCredential) -> Principal? = { null } + + var apiKeyName: String = ""; + + var apiKeyLocation: ApiKeyLocation = ApiKeyLocation.QUERY; + + /** + * Sets a validation function that will check given [ApiKeyCredential] instance and return [Principal], + * or null if credential does not correspond to an authenticated principal + */ + fun validate(body: suspend ApplicationCall.(ApiKeyCredential) -> Principal?) { + authenticationFunction = body + } +} + +fun Authentication.Configuration.apiKeyAuth(name: String? = null, configure: ApiKeyAuthenticationProvider.() -> Unit) { + val provider = ApiKeyAuthenticationProvider(name).apply(configure) + val apiKeyName = provider.apiKeyName + val apiKeyLocation = provider.apiKeyLocation + val authenticate = provider.authenticationFunction + + provider.pipeline.intercept(AuthenticationPipeline.RequestAuthentication) { context -> + val credentials = call.request.apiKeyAuthenticationCredentials(apiKeyName, apiKeyLocation) + val principal = credentials?.let { authenticate(call, it) } + + val cause = when { + credentials == null -> AuthenticationFailedCause.NoCredentials + principal == null -> AuthenticationFailedCause.InvalidCredentials + else -> null + } + + if (cause != null) { + context.challenge(apiKeyName, cause) { + // TODO: Verify correct response structure here. + call.respond(UnauthorizedResponse(HttpAuthHeader.Parameterized("API_KEY", mapOf("key" to apiKeyName), HeaderValueEncoding.QUOTED_ALWAYS))) + it.complete() + } + } + + if (principal != null) { + context.principal(principal) + } + } +} + +fun ApplicationRequest.apiKeyAuthenticationCredentials(apiKeyName: String, apiKeyLocation: ApiKeyLocation): ApiKeyCredential? { + val value: String? = when(apiKeyLocation) { + ApiKeyLocation.QUERY -> this.queryParameters[apiKeyName] + ApiKeyLocation.HEADER -> this.headers[apiKeyName] + } + when (value) { + null -> return null + else -> return ApiKeyCredential(value) + } +} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/AppMain.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/AppMain.kt.mustache new file mode 100644 index 000000000000..bef736de059b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/AppMain.kt.mustache @@ -0,0 +1,145 @@ +package {{packageName}} + +import com.codahale.metrics.Slf4jReporter +import com.typesafe.config.ConfigFactory +import io.ktor.application.Application +import io.ktor.application.ApplicationStopping +import io.ktor.application.install +import io.ktor.application.log +import io.ktor.client.HttpClient +import io.ktor.client.engine.apache.Apache +import io.ktor.config.HoconApplicationConfig +{{#featureAutoHead}} +import io.ktor.features.AutoHeadResponse +{{/featureAutoHead}} +{{#featureCompression}} +import io.ktor.features.Compression +{{/featureCompression}} +{{#featureCORS}} +import io.ktor.features.CORS +{{/featureCORS}} +{{#featureConditionalHeaders}} +import io.ktor.features.ConditionalHeaders +{{/featureConditionalHeaders}} +import io.ktor.features.ContentNegotiation +import io.ktor.features.DefaultHeaders +{{#featureHSTS}} +import io.ktor.features.HSTS +{{/featureHSTS}} +import io.ktor.gson.GsonConverter +import io.ktor.http.ContentType +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.Locations +import io.ktor.metrics.Metrics +import io.ktor.routing.Routing +import java.util.concurrent.TimeUnit +import io.ktor.util.KtorExperimentalAPI +{{#hasAuthMethods}} +import io.ktor.auth.Authentication +import io.ktor.auth.oauth +import org.openapitools.server.infrastructure.ApiKeyCredential +import org.openapitools.server.infrastructure.ApiPrincipal +import org.openapitools.server.infrastructure.apiKeyAuth +{{/hasAuthMethods}} +{{#generateApis}}{{#apiInfo}}{{#apis}}import {{apiPackage}}.{{classname}} +{{/apis}}{{/apiInfo}}{{/generateApis}} + +@KtorExperimentalAPI +internal val settings = HoconApplicationConfig(ConfigFactory.defaultApplication(HTTP::class.java.classLoader)) + +object HTTP { + val client = HttpClient(Apache) +} + +@KtorExperimentalAPI +@KtorExperimentalLocationsAPI +fun Application.main() { + install(DefaultHeaders) + install(Metrics) { + val reporter = Slf4jReporter.forRegistry(registry) + .outputTo(log) + .convertRatesTo(TimeUnit.SECONDS) + .convertDurationsTo(TimeUnit.MILLISECONDS) + .build() + reporter.start(10, TimeUnit.SECONDS) + } +{{#generateApis}} + install(ContentNegotiation) { + register(ContentType.Application.Json, GsonConverter()) + } + {{#featureAutoHead}} + install(AutoHeadResponse) // see http://ktor.io/features/autoheadresponse.html + {{/featureAutoHead}} + {{#featureConditionalHeaders}} + install(ConditionalHeaders) // see http://ktor.io/features/conditional-headers.html + {{/featureConditionalHeaders}} + {{#featureHSTS}} + install(HSTS, ApplicationHstsConfiguration()) // see http://ktor.io/features/hsts.html + {{/featureHSTS}} + {{#featureCORS}} + install(CORS, ApplicationCORSConfiguration()) // see http://ktor.io/features/cors.html + {{/featureCORS}} + {{#featureCompression}} + install(Compression, ApplicationCompressionConfiguration()) // see http://ktor.io/features/compression.html + {{/featureCompression}} + install(Locations) // see http://ktor.io/features/locations.html + {{#hasAuthMethods}} + install(Authentication) { + {{#authMethods}} + {{#isBasic}} + basic("{{{name}}}") { + validate { credentials -> + // TODO: "Apply your basic authentication functionality." + // Accessible in-method via call.principal() + if (credentials.name == "Swagger" && "Codegen" == credentials.password) { + UserIdPrincipal(credentials.name) + } else { + null + } + } + {{/isBasic}} + {{#isApiKey}} + // "Implement API key auth ({{{name}}}) for parameter name '{{{keyParamName}}}'." + apiKeyAuth("{{{name}}}") { + validate { apikeyCredential: ApiKeyCredential -> + when { + apikeyCredential.value == "keyboardcat" -> ApiPrincipal(apikeyCredential) + else -> null + } + } + } + {{/isApiKey}} + {{#isOAuth}} + {{#bodyAllowed}} + {{/bodyAllowed}} + {{^bodyAllowed}} + oauth("{{name}}") { + client = HttpClient(Apache) + providerLookup = { ApplicationAuthProviders["{{{name}}}"] } + urlProvider = { _ -> + // TODO: define a callback url here. + "/" + } + } + {{/bodyAllowed}} + {{/isOAuth}} + {{/authMethods}} + } + {{/hasAuthMethods}} + install(Routing) { + {{#apiInfo}} + {{#apis}} + {{#operations}} + {{classname}}() + {{/operations}} + {{/apis}} + {{/apiInfo}} + } + +{{/generateApis}} + + environment.monitor.subscribe(ApplicationStopping) + { + HTTP.client.close() + } +} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Configuration.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Configuration.kt.mustache new file mode 100644 index 000000000000..3b568d21eba9 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Configuration.kt.mustache @@ -0,0 +1,114 @@ +package {{packageName}} + +// Use this file to hold package-level internal functions that return receiver object passed to the `install` method. +import io.ktor.auth.OAuthServerSettings +import io.ktor.features.Compression +import io.ktor.features.HSTS +import io.ktor.features.deflate +import io.ktor.features.gzip +import io.ktor.features.minimumSize +import io.ktor.http.HttpMethod +import io.ktor.util.KtorExperimentalAPI +import java.time.Duration +import java.util.concurrent.Executors + +import {{packageName}}.settings + +{{#featureCORS}} +/** + * Application block for [CORS] configuration. + * + * This file may be excluded in .openapi-generator-ignore, + * and application specific configuration can be applied in this function. + * + * See http://ktor.io/features/cors.html + */ +internal fun ApplicationCORSConfiguration(): CORS.Configuration.() -> Unit { + return { + // method(HttpMethod.Options) + // header(HttpHeaders.XForwardedProto) + // anyHost() + // host("my-host") + // host("my-host:80") + // host("my-host", subDomains = listOf("www")) + // host("my-host", schemes = listOf("http", "https")) + // allowCredentials = true + // maxAge = Duration.ofDays(1) + } +} +{{/featureCORS}} + +{{#featureHSTS}} +/** + * Application block for [HSTS] configuration. + * + * This file may be excluded in .openapi-generator-ignore, + * and application specific configuration can be applied in this function. + * + * See http://ktor.io/features/hsts.html + */ +internal fun ApplicationHstsConfiguration(): HSTS.Configuration.() -> Unit { + return { + maxAge = Duration.ofDays(365) + includeSubDomains = true + preload = false + + // You may also apply any custom directives supported by specific user-agent. For example: + // customDirectives.put("redirectHttpToHttps", "false") + } +} +{{/featureHSTS}} + +{{#featureCompression}} +/** + * Application block for [Compression] configuration. + * + * This file may be excluded in .openapi-generator-ignore, + * and application specific configuration can be applied in this function. + * + * See http://ktor.io/features/compression.html + */ +internal fun ApplicationCompressionConfiguration(): Compression.Configuration.() -> Unit { + return { + gzip { + priority = 1.0 + } + deflate { + priority = 10.0 + minimumSize(1024) // condition + } + } +} +{{/featureCompression}} + +// Defines authentication mechanisms used throughout the application. +@KtorExperimentalAPI +val ApplicationAuthProviders: Map = listOf( +{{#authMethods}} + {{#isOAuth}} + OAuthServerSettings.OAuth2ServerSettings( + name = "{{name}}", + authorizeUrl = "{{authorizationUrl}}", + accessTokenUrl = "{{tokenUrl}}", + requestMethod = HttpMethod.Get, + {{! TODO: flow, doesn't seem to be supported yet by ktor }} + clientId = settings.property("auth.oauth.{{name}}.clientId").getString(), + clientSecret = settings.property("auth.oauth.{{name}}.clientSecret").getString(), + defaultScopes = listOf({{#scopes}}"{{scope}}"{{^-last}}, {{/-last}}{{/scopes}}) + ){{^-last}},{{/-last}} + {{/isOAuth}} +{{/authMethods}} +// OAuthServerSettings.OAuth2ServerSettings( +// name = "facebook", +// authorizeUrl = "https://graph.facebook.com/oauth/authorize", +// accessTokenUrl = "https://graph.facebook.com/oauth/access_token", +// requestMethod = HttpMethod.Post, +// +// clientId = "settings.property("auth.oauth.facebook.clientId").getString()", +// clientSecret = "settings.property("auth.oauth.facebook.clientSecret").getString()", +// defaultScopes = listOf("public_profile") +// ) +).associateBy { it.name } + +// Provides an application-level fixed thread pool on which to execute coroutines (mainly) +internal val ApplicationExecutors = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 4) diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Dockerfile.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Dockerfile.mustache new file mode 100644 index 000000000000..b9158ac26e39 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Dockerfile.mustache @@ -0,0 +1,7 @@ +FROM openjdk:8-jre-alpine + +COPY ./build/libs/{{artifactId}}.jar /root/{{artifactId}}.jar + +WORKDIR /root + +CMD ["java", "-server", "-Xms4g", "-Xmx4g", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-jar", "{{artifactId}}.jar"] \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Paths.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Paths.kt.mustache new file mode 100644 index 000000000000..610f48203aa0 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/Paths.kt.mustache @@ -0,0 +1,28 @@ +{{>licenseInfo}} +package {{packageName}} + +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.Location +{{#imports}}import {{import}} +{{/imports}} + +{{#apiInfo}} +object Paths { +{{#apis}} +{{#operations}} + {{#operation}} + {{^bodyAllowed}} + /** + * {{summary}} + * {{#unescapedNotes}}{{.}}{{/unescapedNotes}} + {{#allParams}}* @param {{paramName}} {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}} + {{/allParams}}*/ + @KtorExperimentalLocationsAPI + @Location("{{path}}") class {{operationId}}({{#allParams}}val {{paramName}}: {{{dataType}}}{{^required}}? = null{{/required}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) + + {{/bodyAllowed}} + {{/operation}} +{{/operations}} +{{/apis}} +} +{{/apiInfo}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/README.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/README.mustache new file mode 100644 index 000000000000..4c34e8f6bf2d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/README.mustache @@ -0,0 +1,101 @@ +# {{packageName}} - Kotlin Server library for {{appName}} + +{{#unescapedAppDescription}} +{{.}} +{{/unescapedAppDescription}} + +Generated by OpenAPI Generator {{generatorVersion}}{{^hideGenerationTimestamp}} ({{generatedDate}}){{/hideGenerationTimestamp}}. + +## Requires + +* Kotlin 1.3.21 +* Gradle 4.9 + +## Build + +First, create the gradle wrapper script: + +``` +gradle wrapper +``` + +Then, run: + +``` +./gradlew check assemble +``` + +This runs all tests and packages the library. + +## Running + +The server builds as a fat jar with a main entrypoint. To start the service, run `java -jar ./build/libs/{{artifactId}}.jar`. + +You may also run in docker: + +``` +docker build -t {{artifactId}} . +docker run -p 8080:8080 {{artifactId}} +``` + +## Features/Implementation Notes + +* Supports JSON inputs/outputs, File inputs, and Form inputs (see ktor documentation for more info). +* ~Supports collection formats for query parameters: csv, tsv, ssv, pipes.~ +* Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. + +{{#generateApiDocs}} + +## Documentation for API Endpoints + +All URIs are relative to *{{{basePath}}}* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**]({{apiDocPath}}{{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{{summary}}}{{/summary}} +{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} +{{/generateApiDocs}} + +{{#generateModelDocs}} + +## Documentation for Models + +{{#modelPackage}} +{{#models}}{{#model}} - [{{{modelPackage}}}.{{{classname}}}]({{modelDocPath}}{{{classname}}}.md) +{{/model}}{{/models}} +{{/modelPackage}} +{{^modelPackage}} +No model defined in this package +{{/modelPackage}} +{{/generateModelDocs}} + +{{! TODO: optional documentation for authorization? }} +## Documentation for Authorization + +{{^authMethods}} +All endpoints do not require authorization. +{{/authMethods}} +{{#authMethods}} +{{#last}} +Authentication schemes defined for the API: +{{/last}} +{{/authMethods}} +{{#authMethods}} + +### {{name}} + +{{#isApiKey}}- **Type**: API key +- **API key parameter name**: {{keyParamName}} +- **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}} +{{/isApiKey}} +{{#isBasic}}- **Type**: HTTP basic authentication +{{/isBasic}} +{{#isOAuth}}- **Type**: OAuth +- **Flow**: {{flow}} +- **Authorization URL**: {{authorizationUrl}} +- **Scopes**: {{^scopes}}N/A{{/scopes}} +{{#scopes}} - {{scope}}: {{description}} +{{/scopes}} +{{/isOAuth}} + +{{/authMethods}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_api_body.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_api_body.mustache new file mode 100644 index 000000000000..9dcf500f49be --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_api_body.mustache @@ -0,0 +1,25 @@ +{{#hasAuthMethods}} +{{>libraries/ktor/_principal}} +if (principal == null) { + call.respond(HttpStatusCode.Unauthorized) +} else { + {{#examples}} + {{#-first}} + {{#lambda.indented}}{{>_response}}{{/lambda.indented}} + {{/-first}} + {{/examples}} + {{^examples}} + call.respond(HttpStatusCode.NotImplemented) + {{/examples}} +} +{{/hasAuthMethods}} +{{^hasAuthMethods}} +{{#examples}} +{{#-first}} +{{>libraries/ktor/_response}} +{{/-first}} +{{/examples}} +{{^examples}} +call.respond(HttpStatusCode.NotImplemented) +{{/examples}} +{{/hasAuthMethods}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_principal.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_principal.mustache new file mode 100644 index 000000000000..d49c5d537f01 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_principal.mustache @@ -0,0 +1,11 @@ +{{#authMethods}} +{{#isBasic}} +val principal = call.authentication.principal() +{{/isBasic}} +{{#isApiKey}} +val principal = call.authentication.principal() +{{/isApiKey}} +{{#isOAuth}} +val principal = call.authentication.principal() +{{/isOAuth}} +{{/authMethods}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_response.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_response.mustache new file mode 100644 index 000000000000..fb26fb4a7f1b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/_response.mustache @@ -0,0 +1,8 @@ +val exampleContentType = "{{{contentType}}}" +val exampleContentString = """{{&example}}""" + +when(exampleContentType) { + "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) + else -> call.respondText(exampleContentString) +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/api.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/api.mustache new file mode 100644 index 000000000000..881e3b108ec3 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/api.mustache @@ -0,0 +1,62 @@ +{{>licenseInfo}} +package {{apiPackage}} + +import com.google.gson.Gson +import io.ktor.application.call +import io.ktor.auth.UserIdPrincipal +import io.ktor.auth.authentication +import io.ktor.auth.authenticate +import io.ktor.auth.OAuthAccessTokenResponse +import io.ktor.auth.OAuthServerSettings +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.delete +import io.ktor.locations.get +import io.ktor.response.respond +import io.ktor.response.respondText +import io.ktor.routing.Route +import io.ktor.routing.post +import io.ktor.routing.put +import io.ktor.routing.route + +import {{packageName}}.Paths +import {{packageName}}.infrastructure.ApiPrincipal + + +{{#imports}}import {{import}} +{{/imports}} + +{{#operations}} +@KtorExperimentalLocationsAPI +fun Route.{{classname}}() { + val gson = Gson() + val empty = mutableMapOf() +{{#operation}} + {{#bodyAllowed}} + + route("{{path}}") { + {{#hasAuthMethods}} + {{#authMethods}} + authenticate("{{{name}}}") { + {{/authMethods}} + {{/hasAuthMethods}} + {{#lambda.lowercase}}{{httpMethod}}{{/lambda.lowercase}} { + {{#lambda.indented_12}}{{>libraries/ktor/_api_body}}{{/lambda.indented_12}} + } + {{#hasAuthMethods}} + } + {{/hasAuthMethods}} + } + {{/bodyAllowed}} + {{^bodyAllowed}} + + {{! NOTE: Locations can be used on routes without body parameters.}} + {{#lambda.lowercase}}{{httpMethod}}{{/lambda.lowercase}} { _: Paths.{{operationId}} -> + {{#lambda.indented_8}}{{>libraries/ktor/_api_body}}{{/lambda.indented_8}} + } + {{/bodyAllowed}} + +{{/operation}} +} +{{/operations}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/application.conf.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/application.conf.mustache new file mode 100644 index 000000000000..032be42fa11d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/application.conf.mustache @@ -0,0 +1,27 @@ +ktor { + deployment { + environment = development + port = 8080 + autoreload = true + watch = [ {{packageName}} ] + } + + application { + modules = [ {{packageName}}.AppMainKt.main ] + } +} + +# Typesafe config allows multiple ways to provide configuration values without hard-coding them here. +# Please see https://github.com/lightbend/config for details. +auth { + oauth { +{{#authMethods}} +{{#isOAuth}} + {{name}} { + clientId = "" + clientSecret = "" + } +{{/isOAuth}} +{{/authMethods}} + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/build.gradle.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/build.gradle.mustache new file mode 100644 index 000000000000..08c317ea6669 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/build.gradle.mustache @@ -0,0 +1,68 @@ +group '{{groupId}}' +version '{{artifactVersion}}' + +wrapper { + gradleVersion = '4.9' + distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip" +} + +buildscript { + ext.kotlin_version = '1.3.21' + ext.ktor_version = '1.1.3' + ext.shadow_version = '2.0.3' + + repositories { + maven { url "https://repo1.maven.org/maven2" } + maven { + url = "https://plugins.gradle.org/m2/" + } + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "com.github.jengelman.gradle.plugins:shadow:$shadow_version" + } +} + +apply plugin: 'java' +apply plugin: 'kotlin' +apply plugin: 'application' + +mainClassName = "io.ktor.server.netty.DevelopmentEngine" + +// Initialization order with shadow 2.0.1 and Gradle 4.3 is weird. +// See https://github.com/johnrengelman/shadow/issues/336#issuecomment-355402508 +apply plugin: 'com.github.johnrengelman.shadow' + +sourceCompatibility = 1.8 + +compileKotlin { + kotlinOptions.jvmTarget = "1.8" +} + +compileTestKotlin { + kotlinOptions.jvmTarget = "1.8" +} + +shadowJar { + baseName = '{{artifactId}}' + classifier = null + version = null +} + +repositories { + maven { url "https://repo1.maven.org/maven2" } + maven { url "https://dl.bintray.com/kotlin/ktor" } + maven { url "https://dl.bintray.com/kotlin/kotlinx" } +} + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + compile "io.ktor:ktor-server-netty:$ktor_version" + compile "io.ktor:ktor-metrics:$ktor_version" + compile "io.ktor:ktor-locations:$ktor_version" + compile "io.ktor:ktor-gson:$ktor_version" + compile "io.ktor:ktor-client-core:$ktor_version" + compile "io.ktor:ktor-client-apache:$ktor_version" + compile "ch.qos.logback:logback-classic:1.2.1" + testCompile group: 'junit', name: 'junit', version: '4.13' +} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/gradle.properties b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/gradle.properties new file mode 100644 index 000000000000..5f1ed7bbe024 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/gradle.properties @@ -0,0 +1 @@ +org.gradle.caching=true \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/licenseInfo.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/licenseInfo.mustache new file mode 100644 index 000000000000..3a547de74bb7 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/licenseInfo.mustache @@ -0,0 +1,11 @@ +/** +* {{{appName}}} +* {{{appDescription}}} +* +* {{#version}}The version of the OpenAPI document: {{{version}}}{{/version}} +* {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/logback.xml b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/logback.xml new file mode 100644 index 000000000000..d0eaba8debd6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/libraries/ktor/logback.xml @@ -0,0 +1,15 @@ + + + + %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/licenseInfo.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/licenseInfo.mustache new file mode 100644 index 000000000000..3a547de74bb7 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/licenseInfo.mustache @@ -0,0 +1,11 @@ +/** +* {{{appName}}} +* {{{appDescription}}} +* +* {{#version}}The version of the OpenAPI document: {{{version}}}{{/version}} +* {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/model.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/model.mustache new file mode 100644 index 000000000000..780dd84b97e0 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/model.mustache @@ -0,0 +1,11 @@ +{{>licenseInfo}} +package {{modelPackage}} + +{{#imports}}import {{import}} +{{/imports}} + +{{#models}} +{{#model}} +{{#isEnum}}{{>enum_class}}{{/isEnum}}{{^isEnum}}{{>data_class}}{{/isEnum}} +{{/model}} +{{/models}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/modelMutable.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/modelMutable.mustache new file mode 100644 index 000000000000..4c7f39007171 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/modelMutable.mustache @@ -0,0 +1 @@ +{{#modelMutable}}var{{/modelMutable}}{{^modelMutable}}val{{/modelMutable}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/model_doc.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/model_doc.mustache new file mode 100644 index 000000000000..e3b718421188 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/model_doc.mustache @@ -0,0 +1,3 @@ +{{#models}}{{#model}} +{{#isEnum}}{{>enum_doc}}{{/isEnum}}{{^isEnum}}{{>class_doc}}{{/isEnum}} +{{/model}}{{/models}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/settings.gradle.mustache b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/settings.gradle.mustache new file mode 100644 index 000000000000..448dc07602e2 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/kotlin-server-deprecated/settings.gradle.mustache @@ -0,0 +1 @@ +rootProject.name = '{{artifactId}}' \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/kotlin/KotlinModelCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/kotlin/KotlinModelCodegenTest.java index 6885057c1c04..19829496e239 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/kotlin/KotlinModelCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/kotlin/KotlinModelCodegenTest.java @@ -9,6 +9,7 @@ import org.openapitools.codegen.languages.AbstractKotlinCodegen; import org.openapitools.codegen.languages.KotlinClientCodegen; import org.openapitools.codegen.languages.KotlinServerCodegen; +import org.openapitools.codegen.languages.KotlinServerDeprecatedCodegen; import org.openapitools.codegen.languages.KotlinSpringServerCodegen; import org.openapitools.codegen.languages.KotlinVertxServerCodegen; import org.testng.annotations.DataProvider; @@ -28,6 +29,7 @@ public Object[][] client() { return new Object[][]{ {new KotlinClientCodegen()}, {new KotlinServerCodegen()}, + {new KotlinServerDeprecatedCodegen()}, {new KotlinSpringServerCodegen()}, {new KotlinVertxServerCodegen()}, }; diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator-ignore b/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/FILES b/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/FILES new file mode 100644 index 000000000000..10c026f11ff7 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/FILES @@ -0,0 +1,20 @@ +Dockerfile +README.md +build.gradle +gradle.properties +settings.gradle +src/main/kotlin/org/openapitools/server/AppMain.kt +src/main/kotlin/org/openapitools/server/Configuration.kt +src/main/kotlin/org/openapitools/server/Paths.kt +src/main/kotlin/org/openapitools/server/apis/PetApi.kt +src/main/kotlin/org/openapitools/server/apis/StoreApi.kt +src/main/kotlin/org/openapitools/server/apis/UserApi.kt +src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt +src/main/kotlin/org/openapitools/server/models/ApiResponse.kt +src/main/kotlin/org/openapitools/server/models/Category.kt +src/main/kotlin/org/openapitools/server/models/Order.kt +src/main/kotlin/org/openapitools/server/models/Pet.kt +src/main/kotlin/org/openapitools/server/models/Tag.kt +src/main/kotlin/org/openapitools/server/models/User.kt +src/main/resources/application.conf +src/main/resources/logback.xml diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/VERSION b/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/VERSION new file mode 100644 index 000000000000..6555596f9311 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/Dockerfile b/samples/server/petstore/kotlin-server-deprecated/ktor/Dockerfile new file mode 100644 index 000000000000..5085d63db106 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/Dockerfile @@ -0,0 +1,7 @@ +FROM openjdk:8-jre-alpine + +COPY ./build/libs/kotlin-server-deprecated.jar /root/kotlin-server-deprecated.jar + +WORKDIR /root + +CMD ["java", "-server", "-Xms4g", "-Xmx4g", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-jar", "kotlin-server-deprecated.jar"] \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/README.md b/samples/server/petstore/kotlin-server-deprecated/ktor/README.md new file mode 100644 index 000000000000..12ea4fc58431 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/README.md @@ -0,0 +1,104 @@ +# org.openapitools.server - Kotlin Server library for OpenAPI Petstore + +This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + +Generated by OpenAPI Generator 5.2.0-SNAPSHOT. + +## Requires + +* Kotlin 1.3.21 +* Gradle 4.9 + +## Build + +First, create the gradle wrapper script: + +``` +gradle wrapper +``` + +Then, run: + +``` +./gradlew check assemble +``` + +This runs all tests and packages the library. + +## Running + +The server builds as a fat jar with a main entrypoint. To start the service, run `java -jar ./build/libs/kotlin-server-deprecated.jar`. + +You may also run in docker: + +``` +docker build -t kotlin-server-deprecated . +docker run -p 8080:8080 kotlin-server-deprecated +``` + +## Features/Implementation Notes + +* Supports JSON inputs/outputs, File inputs, and Form inputs (see ktor documentation for more info). +* ~Supports collection formats for query parameters: csv, tsv, ssv, pipes.~ +* Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. + + +## Documentation for API Endpoints + +All URIs are relative to *http://petstore.swagger.io/v2* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*PetApi* | [**addPet**](docs/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](docs/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](docs/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](docs/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](docs/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](docs/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](docs/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](docs/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*StoreApi* | [**deleteOrder**](docs/StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID +*StoreApi* | [**getInventory**](docs/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](docs/StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID +*StoreApi* | [**placeOrder**](docs/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](docs/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](docs/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](docs/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](docs/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](docs/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](docs/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](docs/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user + + + +## Documentation for Models + + - [org.openapitools.server.models.ApiResponse](docs/ApiResponse.md) + - [org.openapitools.server.models.Category](docs/Category.md) + - [org.openapitools.server.models.Order](docs/Order.md) + - [org.openapitools.server.models.Pet](docs/Pet.md) + - [org.openapitools.server.models.Tag](docs/Tag.md) + - [org.openapitools.server.models.User](docs/User.md) + + + +## Documentation for Authorization + + +### api_key + +- **Type**: API key +- **API key parameter name**: api_key +- **Location**: HTTP header + + +### petstore_auth + +- **Type**: OAuth +- **Flow**: implicit +- **Authorization URL**: http://petstore.swagger.io/api/oauth/dialog +- **Scopes**: + - write:pets: modify pets in your account + - read:pets: read your pets + diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/build.gradle b/samples/server/petstore/kotlin-server-deprecated/ktor/build.gradle new file mode 100644 index 000000000000..466d2ca7c395 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/build.gradle @@ -0,0 +1,68 @@ +group 'org.openapitools' +version '1.0.0' + +wrapper { + gradleVersion = '4.9' + distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip" +} + +buildscript { + ext.kotlin_version = '1.3.21' + ext.ktor_version = '1.1.3' + ext.shadow_version = '2.0.3' + + repositories { + maven { url "https://repo1.maven.org/maven2" } + maven { + url = "https://plugins.gradle.org/m2/" + } + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "com.github.jengelman.gradle.plugins:shadow:$shadow_version" + } +} + +apply plugin: 'java' +apply plugin: 'kotlin' +apply plugin: 'application' + +mainClassName = "io.ktor.server.netty.DevelopmentEngine" + +// Initialization order with shadow 2.0.1 and Gradle 4.3 is weird. +// See https://github.com/johnrengelman/shadow/issues/336#issuecomment-355402508 +apply plugin: 'com.github.johnrengelman.shadow' + +sourceCompatibility = 1.8 + +compileKotlin { + kotlinOptions.jvmTarget = "1.8" +} + +compileTestKotlin { + kotlinOptions.jvmTarget = "1.8" +} + +shadowJar { + baseName = 'kotlin-server-deprecated' + classifier = null + version = null +} + +repositories { + maven { url "https://repo1.maven.org/maven2" } + maven { url "https://dl.bintray.com/kotlin/ktor" } + maven { url "https://dl.bintray.com/kotlin/kotlinx" } +} + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + compile "io.ktor:ktor-server-netty:$ktor_version" + compile "io.ktor:ktor-metrics:$ktor_version" + compile "io.ktor:ktor-locations:$ktor_version" + compile "io.ktor:ktor-gson:$ktor_version" + compile "io.ktor:ktor-client-core:$ktor_version" + compile "io.ktor:ktor-client-apache:$ktor_version" + compile "ch.qos.logback:logback-classic:1.2.1" + testCompile group: 'junit', name: 'junit', version: '4.13' +} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/gradle.properties b/samples/server/petstore/kotlin-server-deprecated/ktor/gradle.properties new file mode 100644 index 000000000000..5f1ed7bbe024 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/gradle.properties @@ -0,0 +1 @@ +org.gradle.caching=true \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/settings.gradle b/samples/server/petstore/kotlin-server-deprecated/ktor/settings.gradle new file mode 100644 index 000000000000..84d57dfbffb1 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'kotlin-server-deprecated' \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt new file mode 100644 index 000000000000..2b0cd5cdb5fd --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt @@ -0,0 +1,91 @@ +package org.openapitools.server + +import com.codahale.metrics.Slf4jReporter +import com.typesafe.config.ConfigFactory +import io.ktor.application.Application +import io.ktor.application.ApplicationStopping +import io.ktor.application.install +import io.ktor.application.log +import io.ktor.client.HttpClient +import io.ktor.client.engine.apache.Apache +import io.ktor.config.HoconApplicationConfig +import io.ktor.features.AutoHeadResponse +import io.ktor.features.Compression +import io.ktor.features.ContentNegotiation +import io.ktor.features.DefaultHeaders +import io.ktor.features.HSTS +import io.ktor.gson.GsonConverter +import io.ktor.http.ContentType +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.Locations +import io.ktor.metrics.Metrics +import io.ktor.routing.Routing +import java.util.concurrent.TimeUnit +import io.ktor.util.KtorExperimentalAPI +import io.ktor.auth.Authentication +import io.ktor.auth.oauth +import org.openapitools.server.infrastructure.ApiKeyCredential +import org.openapitools.server.infrastructure.ApiPrincipal +import org.openapitools.server.infrastructure.apiKeyAuth +import org.openapitools.server.apis.PetApi +import org.openapitools.server.apis.StoreApi +import org.openapitools.server.apis.UserApi + + +@KtorExperimentalAPI +internal val settings = HoconApplicationConfig(ConfigFactory.defaultApplication(HTTP::class.java.classLoader)) + +object HTTP { + val client = HttpClient(Apache) +} + +@KtorExperimentalAPI +@KtorExperimentalLocationsAPI +fun Application.main() { + install(DefaultHeaders) + install(Metrics) { + val reporter = Slf4jReporter.forRegistry(registry) + .outputTo(log) + .convertRatesTo(TimeUnit.SECONDS) + .convertDurationsTo(TimeUnit.MILLISECONDS) + .build() + reporter.start(10, TimeUnit.SECONDS) + } + install(ContentNegotiation) { + register(ContentType.Application.Json, GsonConverter()) + } + install(AutoHeadResponse) // see http://ktor.io/features/autoheadresponse.html + install(HSTS, ApplicationHstsConfiguration()) // see http://ktor.io/features/hsts.html + install(Compression, ApplicationCompressionConfiguration()) // see http://ktor.io/features/compression.html + install(Locations) // see http://ktor.io/features/locations.html + install(Authentication) { + // "Implement API key auth (api_key) for parameter name 'api_key'." + apiKeyAuth("api_key") { + validate { apikeyCredential: ApiKeyCredential -> + when { + apikeyCredential.value == "keyboardcat" -> ApiPrincipal(apikeyCredential) + else -> null + } + } + } + oauth("petstore_auth") { + client = HttpClient(Apache) + providerLookup = { ApplicationAuthProviders["petstore_auth"] } + urlProvider = { _ -> + // TODO: define a callback url here. + "/" + } + } + } + install(Routing) { + PetApi() + StoreApi() + UserApi() + } + + + environment.monitor.subscribe(ApplicationStopping) + { + HTTP.client.close() + } +} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt new file mode 100644 index 000000000000..c16a32ef70f0 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt @@ -0,0 +1,82 @@ +package org.openapitools.server + +// Use this file to hold package-level internal functions that return receiver object passed to the `install` method. +import io.ktor.auth.OAuthServerSettings +import io.ktor.features.Compression +import io.ktor.features.HSTS +import io.ktor.features.deflate +import io.ktor.features.gzip +import io.ktor.features.minimumSize +import io.ktor.http.HttpMethod +import io.ktor.util.KtorExperimentalAPI +import java.time.Duration +import java.util.concurrent.Executors + +import org.openapitools.server.settings + + +/** + * Application block for [HSTS] configuration. + * + * This file may be excluded in .openapi-generator-ignore, + * and application specific configuration can be applied in this function. + * + * See http://ktor.io/features/hsts.html + */ +internal fun ApplicationHstsConfiguration(): HSTS.Configuration.() -> Unit { + return { + maxAge = Duration.ofDays(365) + includeSubDomains = true + preload = false + + // You may also apply any custom directives supported by specific user-agent. For example: + // customDirectives.put("redirectHttpToHttps", "false") + } +} + +/** + * Application block for [Compression] configuration. + * + * This file may be excluded in .openapi-generator-ignore, + * and application specific configuration can be applied in this function. + * + * See http://ktor.io/features/compression.html + */ +internal fun ApplicationCompressionConfiguration(): Compression.Configuration.() -> Unit { + return { + gzip { + priority = 1.0 + } + deflate { + priority = 10.0 + minimumSize(1024) // condition + } + } +} + +// Defines authentication mechanisms used throughout the application. +@KtorExperimentalAPI +val ApplicationAuthProviders: Map = listOf( + OAuthServerSettings.OAuth2ServerSettings( + name = "petstore_auth", + authorizeUrl = "http://petstore.swagger.io/api/oauth/dialog", + accessTokenUrl = "", + requestMethod = HttpMethod.Get, + clientId = settings.property("auth.oauth.petstore_auth.clientId").getString(), + clientSecret = settings.property("auth.oauth.petstore_auth.clientSecret").getString(), + defaultScopes = listOf("write:pets", "read:pets") + ) +// OAuthServerSettings.OAuth2ServerSettings( +// name = "facebook", +// authorizeUrl = "https://graph.facebook.com/oauth/authorize", +// accessTokenUrl = "https://graph.facebook.com/oauth/access_token", +// requestMethod = HttpMethod.Post, +// +// clientId = "settings.property("auth.oauth.facebook.clientId").getString()", +// clientSecret = "settings.property("auth.oauth.facebook.clientSecret").getString()", +// defaultScopes = listOf("public_profile") +// ) +).associateBy { it.name } + +// Provides an application-level fixed thread pool on which to execute coroutines (mainly) +internal val ApplicationExecutors = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 4) diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Paths.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Paths.kt new file mode 100644 index 000000000000..1983ab78a49d --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Paths.kt @@ -0,0 +1,106 @@ +/** +* OpenAPI Petstore +* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +* +* The version of the OpenAPI document: 1.0.0 +* +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +package org.openapitools.server + +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.Location + +object Paths { + /** + * Deletes a pet + * + * @param petId Pet id to delete + * @param apiKey (optional) + */ + @KtorExperimentalLocationsAPI + @Location("/pet/{petId}") class deletePet(val petId: kotlin.Long, val apiKey: kotlin.String? = null) + + /** + * Finds Pets by status + * Multiple status values can be provided with comma separated strings + * @param status Status values that need to be considered for filter + */ + @KtorExperimentalLocationsAPI + @Location("/pet/findByStatus") class findPetsByStatus(val status: kotlin.Array) + + /** + * Finds Pets by tags + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * @param tags Tags to filter by + */ + @KtorExperimentalLocationsAPI + @Location("/pet/findByTags") class findPetsByTags(val tags: kotlin.Array) + + /** + * Find pet by ID + * Returns a single pet + * @param petId ID of pet to return + */ + @KtorExperimentalLocationsAPI + @Location("/pet/{petId}") class getPetById(val petId: kotlin.Long) + + /** + * Delete purchase order by ID + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * @param orderId ID of the order that needs to be deleted + */ + @KtorExperimentalLocationsAPI + @Location("/store/order/{orderId}") class deleteOrder(val orderId: kotlin.String) + + /** + * Returns pet inventories by status + * Returns a map of status codes to quantities + */ + @KtorExperimentalLocationsAPI + @Location("/store/inventory") class getInventory() + + /** + * Find purchase order by ID + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * @param orderId ID of pet that needs to be fetched + */ + @KtorExperimentalLocationsAPI + @Location("/store/order/{orderId}") class getOrderById(val orderId: kotlin.Long) + + /** + * Delete user + * This can only be done by the logged in user. + * @param username The name that needs to be deleted + */ + @KtorExperimentalLocationsAPI + @Location("/user/{username}") class deleteUser(val username: kotlin.String) + + /** + * Get user by user name + * + * @param username The name that needs to be fetched. Use user1 for testing. + */ + @KtorExperimentalLocationsAPI + @Location("/user/{username}") class getUserByName(val username: kotlin.String) + + /** + * Logs user into the system + * + * @param username The user name for login + * @param password The password for login in clear text + */ + @KtorExperimentalLocationsAPI + @Location("/user/login") class loginUser(val username: kotlin.String, val password: kotlin.String) + + /** + * Logs out current logged in user session + * + */ + @KtorExperimentalLocationsAPI + @Location("/user/logout") class logoutUser() + +} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt new file mode 100644 index 000000000000..3ac3578638d5 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt @@ -0,0 +1,228 @@ +/** +* OpenAPI Petstore +* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +* +* The version of the OpenAPI document: 1.0.0 +* +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +package org.openapitools.server.apis + +import com.google.gson.Gson +import io.ktor.application.call +import io.ktor.auth.UserIdPrincipal +import io.ktor.auth.authentication +import io.ktor.auth.authenticate +import io.ktor.auth.OAuthAccessTokenResponse +import io.ktor.auth.OAuthServerSettings +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.delete +import io.ktor.locations.get +import io.ktor.response.respond +import io.ktor.response.respondText +import io.ktor.routing.Route +import io.ktor.routing.post +import io.ktor.routing.put +import io.ktor.routing.route + +import org.openapitools.server.Paths +import org.openapitools.server.infrastructure.ApiPrincipal + + +import org.openapitools.server.models.ApiResponse +import org.openapitools.server.models.Pet + +@KtorExperimentalLocationsAPI +fun Route.PetApi() { + val gson = Gson() + val empty = mutableMapOf() + + route("/pet") { + authenticate("petstore_auth") { + post { + val principal = call.authentication.principal() + + if (principal == null) { + call.respond(HttpStatusCode.Unauthorized) + } else { + call.respond(HttpStatusCode.NotImplemented) + } + } + } + } + + + delete { _: Paths.deletePet -> + val principal = call.authentication.principal() + + if (principal == null) { + call.respond(HttpStatusCode.Unauthorized) + } else { + call.respond(HttpStatusCode.NotImplemented) + } + } + + + get { _: Paths.findPetsByStatus -> + val principal = call.authentication.principal() + + if (principal == null) { + call.respond(HttpStatusCode.Unauthorized) + } else { + val exampleContentType = "application/json" + val exampleContentString = """{ + "photoUrls" : [ "photoUrls", "photoUrls" ], + "name" : "doggie", + "id" : 0, + "category" : { + "name" : "name", + "id" : 6 + }, + "tags" : [ { + "name" : "name", + "id" : 1 + }, { + "name" : "name", + "id" : 1 + } ], + "status" : "available" + }""" + + when(exampleContentType) { + "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) + else -> call.respondText(exampleContentString) + } + } + } + + + get { _: Paths.findPetsByTags -> + val principal = call.authentication.principal() + + if (principal == null) { + call.respond(HttpStatusCode.Unauthorized) + } else { + val exampleContentType = "application/json" + val exampleContentString = """{ + "photoUrls" : [ "photoUrls", "photoUrls" ], + "name" : "doggie", + "id" : 0, + "category" : { + "name" : "name", + "id" : 6 + }, + "tags" : [ { + "name" : "name", + "id" : 1 + }, { + "name" : "name", + "id" : 1 + } ], + "status" : "available" + }""" + + when(exampleContentType) { + "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) + else -> call.respondText(exampleContentString) + } + } + } + + + get { _: Paths.getPetById -> + val principal = call.authentication.principal() + + if (principal == null) { + call.respond(HttpStatusCode.Unauthorized) + } else { + val exampleContentType = "application/json" + val exampleContentString = """{ + "photoUrls" : [ "photoUrls", "photoUrls" ], + "name" : "doggie", + "id" : 0, + "category" : { + "name" : "name", + "id" : 6 + }, + "tags" : [ { + "name" : "name", + "id" : 1 + }, { + "name" : "name", + "id" : 1 + } ], + "status" : "available" + }""" + + when(exampleContentType) { + "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) + else -> call.respondText(exampleContentString) + } + } + } + + + route("/pet") { + authenticate("petstore_auth") { + put { + val principal = call.authentication.principal() + + if (principal == null) { + call.respond(HttpStatusCode.Unauthorized) + } else { + call.respond(HttpStatusCode.NotImplemented) + } + } + } + } + + + route("/pet/{petId}") { + authenticate("petstore_auth") { + post { + val principal = call.authentication.principal() + + if (principal == null) { + call.respond(HttpStatusCode.Unauthorized) + } else { + call.respond(HttpStatusCode.NotImplemented) + } + } + } + } + + + route("/pet/{petId}/uploadImage") { + authenticate("petstore_auth") { + post { + val principal = call.authentication.principal() + + if (principal == null) { + call.respond(HttpStatusCode.Unauthorized) + } else { + val exampleContentType = "application/json" + val exampleContentString = """{ + "code" : 0, + "type" : "type", + "message" : "message" + }""" + + when(exampleContentType) { + "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) + else -> call.respondText(exampleContentString) + } + } + } + } + } + +} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt new file mode 100644 index 000000000000..17b2c526bd9c --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt @@ -0,0 +1,99 @@ +/** +* OpenAPI Petstore +* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +* +* The version of the OpenAPI document: 1.0.0 +* +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +package org.openapitools.server.apis + +import com.google.gson.Gson +import io.ktor.application.call +import io.ktor.auth.UserIdPrincipal +import io.ktor.auth.authentication +import io.ktor.auth.authenticate +import io.ktor.auth.OAuthAccessTokenResponse +import io.ktor.auth.OAuthServerSettings +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.delete +import io.ktor.locations.get +import io.ktor.response.respond +import io.ktor.response.respondText +import io.ktor.routing.Route +import io.ktor.routing.post +import io.ktor.routing.put +import io.ktor.routing.route + +import org.openapitools.server.Paths +import org.openapitools.server.infrastructure.ApiPrincipal + + +import org.openapitools.server.models.Order + +@KtorExperimentalLocationsAPI +fun Route.StoreApi() { + val gson = Gson() + val empty = mutableMapOf() + + delete { _: Paths.deleteOrder -> + call.respond(HttpStatusCode.NotImplemented) + } + + + get { _: Paths.getInventory -> + val principal = call.authentication.principal() + + if (principal == null) { + call.respond(HttpStatusCode.Unauthorized) + } else { + call.respond(HttpStatusCode.NotImplemented) + } + } + + + get { _: Paths.getOrderById -> + val exampleContentType = "application/json" + val exampleContentString = """{ + "petId" : 6, + "quantity" : 1, + "id" : 0, + "shipDate" : "2000-01-23T04:56:07.000+00:00", + "complete" : false, + "status" : "placed" + }""" + + when(exampleContentType) { + "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) + else -> call.respondText(exampleContentString) + } + } + + + route("/store/order") { + post { + val exampleContentType = "application/json" + val exampleContentString = """{ + "petId" : 6, + "quantity" : 1, + "id" : 0, + "shipDate" : "2000-01-23T04:56:07.000+00:00", + "complete" : false, + "status" : "placed" + }""" + + when(exampleContentType) { + "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) + else -> call.respondText(exampleContentString) + } + } + } + +} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt new file mode 100644 index 000000000000..7fc0b78fa995 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt @@ -0,0 +1,107 @@ +/** +* OpenAPI Petstore +* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +* +* The version of the OpenAPI document: 1.0.0 +* +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +package org.openapitools.server.apis + +import com.google.gson.Gson +import io.ktor.application.call +import io.ktor.auth.UserIdPrincipal +import io.ktor.auth.authentication +import io.ktor.auth.authenticate +import io.ktor.auth.OAuthAccessTokenResponse +import io.ktor.auth.OAuthServerSettings +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.locations.KtorExperimentalLocationsAPI +import io.ktor.locations.delete +import io.ktor.locations.get +import io.ktor.response.respond +import io.ktor.response.respondText +import io.ktor.routing.Route +import io.ktor.routing.post +import io.ktor.routing.put +import io.ktor.routing.route + +import org.openapitools.server.Paths +import org.openapitools.server.infrastructure.ApiPrincipal + + +import org.openapitools.server.models.User + +@KtorExperimentalLocationsAPI +fun Route.UserApi() { + val gson = Gson() + val empty = mutableMapOf() + + route("/user") { + post { + call.respond(HttpStatusCode.NotImplemented) + } + } + + + route("/user/createWithArray") { + post { + call.respond(HttpStatusCode.NotImplemented) + } + } + + + route("/user/createWithList") { + post { + call.respond(HttpStatusCode.NotImplemented) + } + } + + + delete { _: Paths.deleteUser -> + call.respond(HttpStatusCode.NotImplemented) + } + + + get { _: Paths.getUserByName -> + val exampleContentType = "application/json" + val exampleContentString = """{ + "firstName" : "firstName", + "lastName" : "lastName", + "password" : "password", + "userStatus" : 6, + "phone" : "phone", + "id" : 0, + "email" : "email", + "username" : "username" + }""" + + when(exampleContentType) { + "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) + else -> call.respondText(exampleContentString) + } + } + + + get { _: Paths.loginUser -> + call.respond(HttpStatusCode.NotImplemented) + } + + + get { _: Paths.logoutUser -> + call.respond(HttpStatusCode.NotImplemented) + } + + + route("/user/{username}") { + put { + call.respond(HttpStatusCode.NotImplemented) + } + } + +} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt new file mode 100644 index 000000000000..8de972967ef3 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt @@ -0,0 +1,85 @@ +package org.openapitools.server.infrastructure + +import io.ktor.application.ApplicationCall +import io.ktor.application.call +import io.ktor.auth.Authentication +import io.ktor.auth.AuthenticationFailedCause +import io.ktor.auth.AuthenticationPipeline +import io.ktor.auth.AuthenticationProvider +import io.ktor.auth.Credential +import io.ktor.auth.Principal +import io.ktor.auth.UnauthorizedResponse +import io.ktor.http.auth.HeaderValueEncoding +import io.ktor.http.auth.HttpAuthHeader +import io.ktor.request.ApplicationRequest +import io.ktor.response.respond + +enum class ApiKeyLocation(val location: String) { + QUERY("query"), + HEADER("header") +} +data class ApiKeyCredential(val value: String): Credential +data class ApiPrincipal(val apiKeyCredential: ApiKeyCredential?) : Principal + + + +/** +* Represents a Api Key authentication provider +* @param name is the name of the provider, or `null` for a default provider +*/ +class ApiKeyAuthenticationProvider(name: String?) : AuthenticationProvider(name) { + internal var authenticationFunction: suspend ApplicationCall.(ApiKeyCredential) -> Principal? = { null } + + var apiKeyName: String = ""; + + var apiKeyLocation: ApiKeyLocation = ApiKeyLocation.QUERY; + + /** + * Sets a validation function that will check given [ApiKeyCredential] instance and return [Principal], + * or null if credential does not correspond to an authenticated principal + */ + fun validate(body: suspend ApplicationCall.(ApiKeyCredential) -> Principal?) { + authenticationFunction = body + } +} + +fun Authentication.Configuration.apiKeyAuth(name: String? = null, configure: ApiKeyAuthenticationProvider.() -> Unit) { + val provider = ApiKeyAuthenticationProvider(name).apply(configure) + val apiKeyName = provider.apiKeyName + val apiKeyLocation = provider.apiKeyLocation + val authenticate = provider.authenticationFunction + + provider.pipeline.intercept(AuthenticationPipeline.RequestAuthentication) { context -> + val credentials = call.request.apiKeyAuthenticationCredentials(apiKeyName, apiKeyLocation) + val principal = credentials?.let { authenticate(call, it) } + + val cause = when { + credentials == null -> AuthenticationFailedCause.NoCredentials + principal == null -> AuthenticationFailedCause.InvalidCredentials + else -> null + } + + if (cause != null) { + context.challenge(apiKeyName, cause) { + // TODO: Verify correct response structure here. + call.respond(UnauthorizedResponse(HttpAuthHeader.Parameterized("API_KEY", mapOf("key" to apiKeyName), HeaderValueEncoding.QUOTED_ALWAYS))) + it.complete() + } + } + + if (principal != null) { + context.principal(principal) + } + } +} + +fun ApplicationRequest.apiKeyAuthenticationCredentials(apiKeyName: String, apiKeyLocation: ApiKeyLocation): ApiKeyCredential? { + val value: String? = when(apiKeyLocation) { + ApiKeyLocation.QUERY -> this.queryParameters[apiKeyName] + ApiKeyLocation.HEADER -> this.headers[apiKeyName] + } + when (value) { + null -> return null + else -> return ApiKeyCredential(value) + } +} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt new file mode 100644 index 000000000000..457607909909 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt @@ -0,0 +1,32 @@ +/** +* OpenAPI Petstore +* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +* +* The version of the OpenAPI document: 1.0.0 +* +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +package org.openapitools.server.models + + +import java.io.Serializable +/** + * Describes the result of uploading an image resource + * @param code + * @param type + * @param message + */ +data class ApiResponse ( + val code: kotlin.Int? = null, + val type: kotlin.String? = null, + val message: kotlin.String? = null +) : Serializable +{ + companion object { + private const val serialVersionUID: Long = 123 + } +} + diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt new file mode 100644 index 000000000000..ee26d4c76e50 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -0,0 +1,30 @@ +/** +* OpenAPI Petstore +* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +* +* The version of the OpenAPI document: 1.0.0 +* +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +package org.openapitools.server.models + + +import java.io.Serializable +/** + * A category for a pet + * @param id + * @param name + */ +data class Category ( + val id: kotlin.Long? = null, + val name: kotlin.String? = null +) : Serializable +{ + companion object { + private const val serialVersionUID: Long = 123 + } +} + diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt new file mode 100644 index 000000000000..7889abe12ee2 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -0,0 +1,48 @@ +/** +* OpenAPI Petstore +* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +* +* The version of the OpenAPI document: 1.0.0 +* +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +package org.openapitools.server.models + + +import java.io.Serializable +/** + * An order for a pets from the pet store + * @param id + * @param petId + * @param quantity + * @param shipDate + * @param status Order Status + * @param complete + */ +data class Order ( + val id: kotlin.Long? = null, + val petId: kotlin.Long? = null, + val quantity: kotlin.Int? = null, + val shipDate: java.time.OffsetDateTime? = null, + /* Order Status */ + val status: Order.Status? = null, + val complete: kotlin.Boolean? = null +) : Serializable +{ + companion object { + private const val serialVersionUID: Long = 123 + } + /** + * Order Status + * Values: placed,approved,delivered + */ + enum class Status(val value: kotlin.String){ + placed("placed"), + approved("approved"), + delivered("delivered"); + } +} + diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt new file mode 100644 index 000000000000..8dc13b7ea6e2 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -0,0 +1,50 @@ +/** +* OpenAPI Petstore +* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +* +* The version of the OpenAPI document: 1.0.0 +* +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +package org.openapitools.server.models + +import org.openapitools.server.models.Category +import org.openapitools.server.models.Tag + +import java.io.Serializable +/** + * A pet for sale in the pet store + * @param name + * @param photoUrls + * @param id + * @param category + * @param tags + * @param status pet status in the store + */ +data class Pet ( + val name: kotlin.String, + val photoUrls: kotlin.Array, + val id: kotlin.Long? = null, + val category: Category? = null, + val tags: kotlin.Array? = null, + /* pet status in the store */ + val status: Pet.Status? = null +) : Serializable +{ + companion object { + private const val serialVersionUID: Long = 123 + } + /** + * pet status in the store + * Values: available,pending,sold + */ + enum class Status(val value: kotlin.String){ + available("available"), + pending("pending"), + sold("sold"); + } +} + diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt new file mode 100644 index 000000000000..49c2887a5039 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -0,0 +1,30 @@ +/** +* OpenAPI Petstore +* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +* +* The version of the OpenAPI document: 1.0.0 +* +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +package org.openapitools.server.models + + +import java.io.Serializable +/** + * A tag for a pet + * @param id + * @param name + */ +data class Tag ( + val id: kotlin.Long? = null, + val name: kotlin.String? = null +) : Serializable +{ + companion object { + private const val serialVersionUID: Long = 123 + } +} + diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/User.kt new file mode 100644 index 000000000000..dee8de740bde --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/User.kt @@ -0,0 +1,43 @@ +/** +* OpenAPI Petstore +* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +* +* The version of the OpenAPI document: 1.0.0 +* +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +package org.openapitools.server.models + + +import java.io.Serializable +/** + * A User who is purchasing from the pet store + * @param id + * @param username + * @param firstName + * @param lastName + * @param email + * @param password + * @param phone + * @param userStatus User Status + */ +data class User ( + val id: kotlin.Long? = null, + val username: kotlin.String? = null, + val firstName: kotlin.String? = null, + val lastName: kotlin.String? = null, + val email: kotlin.String? = null, + val password: kotlin.String? = null, + val phone: kotlin.String? = null, + /* User Status */ + val userStatus: kotlin.Int? = null +) : Serializable +{ + companion object { + private const val serialVersionUID: Long = 123 + } +} + diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/application.conf b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/application.conf new file mode 100644 index 000000000000..d33fe93f9937 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/application.conf @@ -0,0 +1,23 @@ +ktor { + deployment { + environment = development + port = 8080 + autoreload = true + watch = [ org.openapitools.server ] + } + + application { + modules = [ org.openapitools.server.AppMainKt.main ] + } +} + +# Typesafe config allows multiple ways to provide configuration values without hard-coding them here. +# Please see https://github.com/lightbend/config for details. +auth { + oauth { + petstore_auth { + clientId = "" + clientSecret = "" + } + } +} \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/logback.xml b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/logback.xml new file mode 100644 index 000000000000..d0eaba8debd6 --- /dev/null +++ b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/logback.xml @@ -0,0 +1,15 @@ + + + + %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + From 18cdb36d3e4999198544ae64729f20613a228098 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 29 Apr 2021 10:23:55 +0800 Subject: [PATCH 071/186] [Test] Migrate samples from 2.0 Spec to 3.0 spec (#9347) * nim petstore to use 3.0 spec * ktorm to use 3.0 spec * update c petstore to use 3.0 spec * Revert "update c petstore to use 3.0 spec" This reverts commit a8ff0517bacc52fd9ac945f5812a8c12294fc410. --- bin/configs/ktorm-schema.yaml | 4 ++-- bin/configs/nim.yaml | 2 +- .../petstore/nim/petstore/apis/api_pet.nim | 12 ++++++++---- .../petstore/nim/petstore/apis/api_store.nim | 4 ++-- .../petstore/nim/petstore/apis/api_user.nim | 16 ++++++++-------- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/bin/configs/ktorm-schema.yaml b/bin/configs/ktorm-schema.yaml index aff895cb279b..d3c5beb9a33b 100644 --- a/bin/configs/ktorm-schema.yaml +++ b/bin/configs/ktorm-schema.yaml @@ -1,7 +1,7 @@ generatorName: ktorm-schema outputDir: samples/schema/petstore/ktorm -inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml +inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml templateDir: modules/openapi-generator/src/main/resources/ktorm-schema additionalProperties: hideGenerationTimestamp: true - importModelPackageName: org.openapitools.client.models \ No newline at end of file + importModelPackageName: org.openapitools.client.models diff --git a/bin/configs/nim.yaml b/bin/configs/nim.yaml index 136a92764c3c..13a27a6b764c 100644 --- a/bin/configs/nim.yaml +++ b/bin/configs/nim.yaml @@ -1,6 +1,6 @@ generatorName: nim outputDir: samples/client/petstore/nim -inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml +inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml templateDir: modules/openapi-generator/src/main/resources/nim-client additionalProperties: packageName: petstore diff --git a/samples/client/petstore/nim/petstore/apis/api_pet.nim b/samples/client/petstore/nim/petstore/apis/api_pet.nim index 3644e392340a..b2f77c2bdbb8 100644 --- a/samples/client/petstore/nim/petstore/apis/api_pet.nim +++ b/samples/client/petstore/nim/petstore/apis/api_pet.nim @@ -39,10 +39,12 @@ template constructResult[T](response: Response): untyped = (none(T.typedesc), response) -proc addPet*(httpClient: HttpClient, body: Pet): Response = +proc addPet*(httpClient: HttpClient, pet: Pet): (Option[Pet], Response) = ## Add a new pet to the store httpClient.headers["Content-Type"] = "application/json" - httpClient.post(basepath & "/pet", $(%body)) + + let response = httpClient.post(basepath & "/pet", $(%pet)) + constructResult[Pet](response) proc deletePet*(httpClient: HttpClient, petId: int64, apiKey: string): Response = @@ -78,10 +80,12 @@ proc getPetById*(httpClient: HttpClient, petId: int64): (Option[Pet], Response) constructResult[Pet](response) -proc updatePet*(httpClient: HttpClient, body: Pet): Response = +proc updatePet*(httpClient: HttpClient, pet: Pet): (Option[Pet], Response) = ## Update an existing pet httpClient.headers["Content-Type"] = "application/json" - httpClient.put(basepath & "/pet", $(%body)) + + let response = httpClient.put(basepath & "/pet", $(%pet)) + constructResult[Pet](response) proc updatePetWithForm*(httpClient: HttpClient, petId: int64, name: string, status: string): Response = diff --git a/samples/client/petstore/nim/petstore/apis/api_store.nim b/samples/client/petstore/nim/petstore/apis/api_store.nim index 3c518e8dd31a..a2f018b7cf3d 100644 --- a/samples/client/petstore/nim/petstore/apis/api_store.nim +++ b/samples/client/petstore/nim/petstore/apis/api_store.nim @@ -57,10 +57,10 @@ proc getOrderById*(httpClient: HttpClient, orderId: int64): (Option[Order], Resp constructResult[Order](response) -proc placeOrder*(httpClient: HttpClient, body: Order): (Option[Order], Response) = +proc placeOrder*(httpClient: HttpClient, order: Order): (Option[Order], Response) = ## Place an order for a pet httpClient.headers["Content-Type"] = "application/json" - let response = httpClient.post(basepath & "/store/order", $(%body)) + let response = httpClient.post(basepath & "/store/order", $(%order)) constructResult[Order](response) diff --git a/samples/client/petstore/nim/petstore/apis/api_user.nim b/samples/client/petstore/nim/petstore/apis/api_user.nim index 87bef06818e4..618477db5954 100644 --- a/samples/client/petstore/nim/petstore/apis/api_user.nim +++ b/samples/client/petstore/nim/petstore/apis/api_user.nim @@ -38,22 +38,22 @@ template constructResult[T](response: Response): untyped = (none(T.typedesc), response) -proc createUser*(httpClient: HttpClient, body: User): Response = +proc createUser*(httpClient: HttpClient, user: User): Response = ## Create user httpClient.headers["Content-Type"] = "application/json" - httpClient.post(basepath & "/user", $(%body)) + httpClient.post(basepath & "/user", $(%user)) -proc createUsersWithArrayInput*(httpClient: HttpClient, body: seq[User]): Response = +proc createUsersWithArrayInput*(httpClient: HttpClient, user: seq[User]): Response = ## Creates list of users with given input array httpClient.headers["Content-Type"] = "application/json" - httpClient.post(basepath & "/user/createWithArray", $(%body)) + httpClient.post(basepath & "/user/createWithArray", $(%user)) -proc createUsersWithListInput*(httpClient: HttpClient, body: seq[User]): Response = +proc createUsersWithListInput*(httpClient: HttpClient, user: seq[User]): Response = ## Creates list of users with given input array httpClient.headers["Content-Type"] = "application/json" - httpClient.post(basepath & "/user/createWithList", $(%body)) + httpClient.post(basepath & "/user/createWithList", $(%user)) proc deleteUser*(httpClient: HttpClient, username: string): Response = @@ -84,8 +84,8 @@ proc logoutUser*(httpClient: HttpClient): Response = httpClient.get(basepath & "/user/logout") -proc updateUser*(httpClient: HttpClient, username: string, body: User): Response = +proc updateUser*(httpClient: HttpClient, username: string, user: User): Response = ## Updated user httpClient.headers["Content-Type"] = "application/json" - httpClient.put(basepath & fmt"/user/{username}", $(%body)) + httpClient.put(basepath & fmt"/user/{username}", $(%user)) From 1c1c6b465feaec5f8af463bda7c288cb033c244a Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 29 Apr 2021 11:50:05 +0800 Subject: [PATCH 072/186] [kotlin-server-deprecated] minor improvements (#9367) * minor wording change * remove samples * remove yaml --- .../kotlin-server-ktor-deprecated.yaml | 8 - docs/generators.md | 2 +- .../KotlinServerDeprecatedCodegen.java | 11 +- .../ktor/.openapi-generator-ignore | 23 -- .../ktor/.openapi-generator/FILES | 20 -- .../ktor/.openapi-generator/VERSION | 1 - .../kotlin-server-deprecated/ktor/Dockerfile | 7 - .../kotlin-server-deprecated/ktor/README.md | 104 -------- .../ktor/build.gradle | 68 ------ .../ktor/gradle.properties | 1 - .../ktor/settings.gradle | 1 - .../kotlin/org/openapitools/server/AppMain.kt | 91 ------- .../org/openapitools/server/Configuration.kt | 82 ------- .../kotlin/org/openapitools/server/Paths.kt | 106 -------- .../org/openapitools/server/apis/PetApi.kt | 228 ------------------ .../org/openapitools/server/apis/StoreApi.kt | 99 -------- .../org/openapitools/server/apis/UserApi.kt | 107 -------- .../server/infrastructure/ApiKeyAuth.kt | 85 ------- .../openapitools/server/models/ApiResponse.kt | 32 --- .../openapitools/server/models/Category.kt | 30 --- .../org/openapitools/server/models/Order.kt | 48 ---- .../org/openapitools/server/models/Pet.kt | 50 ---- .../org/openapitools/server/models/Tag.kt | 30 --- .../org/openapitools/server/models/User.kt | 43 ---- .../ktor/src/main/resources/application.conf | 23 -- .../ktor/src/main/resources/logback.xml | 15 -- 26 files changed, 10 insertions(+), 1305 deletions(-) delete mode 100644 bin/configs/kotlin-server-ktor-deprecated.yaml delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator-ignore delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/FILES delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/VERSION delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/Dockerfile delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/README.md delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/build.gradle delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/gradle.properties delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/settings.gradle delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Paths.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/User.kt delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/application.conf delete mode 100644 samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/logback.xml diff --git a/bin/configs/kotlin-server-ktor-deprecated.yaml b/bin/configs/kotlin-server-ktor-deprecated.yaml deleted file mode 100644 index 818b279073a5..000000000000 --- a/bin/configs/kotlin-server-ktor-deprecated.yaml +++ /dev/null @@ -1,8 +0,0 @@ -generatorName: kotlin-server-deprecated -outputDir: samples/server/petstore/kotlin-server-deprecated/ktor -library: ktor -inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml -templateDir: modules/openapi-generator/src/main/resources/kotlin-server-deprecated -additionalProperties: - hideGenerationTimestamp: "true" - serializableModel: "true" diff --git a/docs/generators.md b/docs/generators.md index 5dace860f9ee..6cb063b22308 100644 --- a/docs/generators.md +++ b/docs/generators.md @@ -106,7 +106,7 @@ The following generators are available: * [jaxrs-resteasy-eap](generators/jaxrs-resteasy-eap.md) * [jaxrs-spec](generators/jaxrs-spec.md) * [kotlin-server](generators/kotlin-server.md) -* [kotlin-server-deprecated](generators/kotlin-server-deprecated.md) +* [kotlin-server-deprecated (deprecated)](generators/kotlin-server-deprecated.md) * [kotlin-spring](generators/kotlin-spring.md) * [kotlin-vertx (beta)](generators/kotlin-vertx.md) * [nodejs-express-server (beta)](generators/nodejs-express-server.md) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerDeprecatedCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerDeprecatedCodegen.java index 46579134a219..84cee1d2aa97 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerDeprecatedCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerDeprecatedCodegen.java @@ -23,6 +23,8 @@ import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.CodegenType; import org.openapitools.codegen.SupportingFile; +import org.openapitools.codegen.meta.GeneratorMetadata; +import org.openapitools.codegen.meta.Stability; import org.openapitools.codegen.meta.features.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,7 +57,7 @@ public class KotlinServerDeprecatedCodegen extends AbstractKotlinCodegen { .build(); /** - * Constructs an instance of `KotlinServerCodegen`. + * Constructs an instance of `KotlinServerDeprecatedCodegen`. */ public KotlinServerDeprecatedCodegen() { super(); @@ -82,6 +84,10 @@ public KotlinServerDeprecatedCodegen() { ) ); + generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata) + .stability(Stability.DEPRECATED) + .build(); + artifactId = "kotlin-server-deprecated"; packageName = "org.openapitools.server"; @@ -145,7 +151,8 @@ public void setCorsFeatureEnabled(Boolean corsFeatureEnabled) { } public String getHelp() { - return "Generates a Kotlin server."; + return "Generates a Kotlin server (Ktor v1.1.3). IMPORTANT: this generator has been deprecated." + + " Please migrate to `kotlin-server` which supports Ktor v1.5.2+."; } public Boolean getHstsFeatureEnabled() { diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator-ignore b/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator-ignore deleted file mode 100644 index 7484ee590a38..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator-ignore +++ /dev/null @@ -1,23 +0,0 @@ -# OpenAPI Generator Ignore -# Generated by openapi-generator https://github.com/openapitools/openapi-generator - -# Use this file to prevent files from being overwritten by the generator. -# The patterns follow closely to .gitignore or .dockerignore. - -# As an example, the C# client generator defines ApiClient.cs. -# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: -#ApiClient.cs - -# You can match any string of characters against a directory, file or extension with a single asterisk (*): -#foo/*/qux -# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux - -# You can recursively match patterns against a directory, file or extension with a double asterisk (**): -#foo/**/qux -# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux - -# You can also negate patterns with an exclamation (!). -# For example, you can ignore all files in a docs folder with the file extension .md: -#docs/*.md -# Then explicitly reverse the ignore rule for a single file: -#!docs/README.md diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/FILES b/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/FILES deleted file mode 100644 index 10c026f11ff7..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/FILES +++ /dev/null @@ -1,20 +0,0 @@ -Dockerfile -README.md -build.gradle -gradle.properties -settings.gradle -src/main/kotlin/org/openapitools/server/AppMain.kt -src/main/kotlin/org/openapitools/server/Configuration.kt -src/main/kotlin/org/openapitools/server/Paths.kt -src/main/kotlin/org/openapitools/server/apis/PetApi.kt -src/main/kotlin/org/openapitools/server/apis/StoreApi.kt -src/main/kotlin/org/openapitools/server/apis/UserApi.kt -src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt -src/main/kotlin/org/openapitools/server/models/ApiResponse.kt -src/main/kotlin/org/openapitools/server/models/Category.kt -src/main/kotlin/org/openapitools/server/models/Order.kt -src/main/kotlin/org/openapitools/server/models/Pet.kt -src/main/kotlin/org/openapitools/server/models/Tag.kt -src/main/kotlin/org/openapitools/server/models/User.kt -src/main/resources/application.conf -src/main/resources/logback.xml diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/VERSION b/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/VERSION deleted file mode 100644 index 6555596f9311..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/.openapi-generator/VERSION +++ /dev/null @@ -1 +0,0 @@ -5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/Dockerfile b/samples/server/petstore/kotlin-server-deprecated/ktor/Dockerfile deleted file mode 100644 index 5085d63db106..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM openjdk:8-jre-alpine - -COPY ./build/libs/kotlin-server-deprecated.jar /root/kotlin-server-deprecated.jar - -WORKDIR /root - -CMD ["java", "-server", "-Xms4g", "-Xmx4g", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-jar", "kotlin-server-deprecated.jar"] \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/README.md b/samples/server/petstore/kotlin-server-deprecated/ktor/README.md deleted file mode 100644 index 12ea4fc58431..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/README.md +++ /dev/null @@ -1,104 +0,0 @@ -# org.openapitools.server - Kotlin Server library for OpenAPI Petstore - -This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. - -Generated by OpenAPI Generator 5.2.0-SNAPSHOT. - -## Requires - -* Kotlin 1.3.21 -* Gradle 4.9 - -## Build - -First, create the gradle wrapper script: - -``` -gradle wrapper -``` - -Then, run: - -``` -./gradlew check assemble -``` - -This runs all tests and packages the library. - -## Running - -The server builds as a fat jar with a main entrypoint. To start the service, run `java -jar ./build/libs/kotlin-server-deprecated.jar`. - -You may also run in docker: - -``` -docker build -t kotlin-server-deprecated . -docker run -p 8080:8080 kotlin-server-deprecated -``` - -## Features/Implementation Notes - -* Supports JSON inputs/outputs, File inputs, and Form inputs (see ktor documentation for more info). -* ~Supports collection formats for query parameters: csv, tsv, ssv, pipes.~ -* Some Kotlin and Java types are fully qualified to avoid conflicts with types defined in OpenAPI definitions. - - -## Documentation for API Endpoints - -All URIs are relative to *http://petstore.swagger.io/v2* - -Class | Method | HTTP request | Description ------------- | ------------- | ------------- | ------------- -*PetApi* | [**addPet**](docs/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](docs/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](docs/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](docs/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](docs/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](docs/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](docs/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](docs/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*StoreApi* | [**deleteOrder**](docs/StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID -*StoreApi* | [**getInventory**](docs/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](docs/StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID -*StoreApi* | [**placeOrder**](docs/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](docs/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](docs/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](docs/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](docs/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](docs/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](docs/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](docs/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](docs/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - - - -## Documentation for Models - - - [org.openapitools.server.models.ApiResponse](docs/ApiResponse.md) - - [org.openapitools.server.models.Category](docs/Category.md) - - [org.openapitools.server.models.Order](docs/Order.md) - - [org.openapitools.server.models.Pet](docs/Pet.md) - - [org.openapitools.server.models.Tag](docs/Tag.md) - - [org.openapitools.server.models.User](docs/User.md) - - - -## Documentation for Authorization - - -### api_key - -- **Type**: API key -- **API key parameter name**: api_key -- **Location**: HTTP header - - -### petstore_auth - -- **Type**: OAuth -- **Flow**: implicit -- **Authorization URL**: http://petstore.swagger.io/api/oauth/dialog -- **Scopes**: - - write:pets: modify pets in your account - - read:pets: read your pets - diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/build.gradle b/samples/server/petstore/kotlin-server-deprecated/ktor/build.gradle deleted file mode 100644 index 466d2ca7c395..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/build.gradle +++ /dev/null @@ -1,68 +0,0 @@ -group 'org.openapitools' -version '1.0.0' - -wrapper { - gradleVersion = '4.9' - distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip" -} - -buildscript { - ext.kotlin_version = '1.3.21' - ext.ktor_version = '1.1.3' - ext.shadow_version = '2.0.3' - - repositories { - maven { url "https://repo1.maven.org/maven2" } - maven { - url = "https://plugins.gradle.org/m2/" - } - } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath "com.github.jengelman.gradle.plugins:shadow:$shadow_version" - } -} - -apply plugin: 'java' -apply plugin: 'kotlin' -apply plugin: 'application' - -mainClassName = "io.ktor.server.netty.DevelopmentEngine" - -// Initialization order with shadow 2.0.1 and Gradle 4.3 is weird. -// See https://github.com/johnrengelman/shadow/issues/336#issuecomment-355402508 -apply plugin: 'com.github.johnrengelman.shadow' - -sourceCompatibility = 1.8 - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} - -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" -} - -shadowJar { - baseName = 'kotlin-server-deprecated' - classifier = null - version = null -} - -repositories { - maven { url "https://repo1.maven.org/maven2" } - maven { url "https://dl.bintray.com/kotlin/ktor" } - maven { url "https://dl.bintray.com/kotlin/kotlinx" } -} - -dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - compile "io.ktor:ktor-server-netty:$ktor_version" - compile "io.ktor:ktor-metrics:$ktor_version" - compile "io.ktor:ktor-locations:$ktor_version" - compile "io.ktor:ktor-gson:$ktor_version" - compile "io.ktor:ktor-client-core:$ktor_version" - compile "io.ktor:ktor-client-apache:$ktor_version" - compile "ch.qos.logback:logback-classic:1.2.1" - testCompile group: 'junit', name: 'junit', version: '4.13' -} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/gradle.properties b/samples/server/petstore/kotlin-server-deprecated/ktor/gradle.properties deleted file mode 100644 index 5f1ed7bbe024..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -org.gradle.caching=true \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/settings.gradle b/samples/server/petstore/kotlin-server-deprecated/ktor/settings.gradle deleted file mode 100644 index 84d57dfbffb1..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'kotlin-server-deprecated' \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt deleted file mode 100644 index 2b0cd5cdb5fd..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt +++ /dev/null @@ -1,91 +0,0 @@ -package org.openapitools.server - -import com.codahale.metrics.Slf4jReporter -import com.typesafe.config.ConfigFactory -import io.ktor.application.Application -import io.ktor.application.ApplicationStopping -import io.ktor.application.install -import io.ktor.application.log -import io.ktor.client.HttpClient -import io.ktor.client.engine.apache.Apache -import io.ktor.config.HoconApplicationConfig -import io.ktor.features.AutoHeadResponse -import io.ktor.features.Compression -import io.ktor.features.ContentNegotiation -import io.ktor.features.DefaultHeaders -import io.ktor.features.HSTS -import io.ktor.gson.GsonConverter -import io.ktor.http.ContentType -import io.ktor.locations.KtorExperimentalLocationsAPI -import io.ktor.locations.Locations -import io.ktor.metrics.Metrics -import io.ktor.routing.Routing -import java.util.concurrent.TimeUnit -import io.ktor.util.KtorExperimentalAPI -import io.ktor.auth.Authentication -import io.ktor.auth.oauth -import org.openapitools.server.infrastructure.ApiKeyCredential -import org.openapitools.server.infrastructure.ApiPrincipal -import org.openapitools.server.infrastructure.apiKeyAuth -import org.openapitools.server.apis.PetApi -import org.openapitools.server.apis.StoreApi -import org.openapitools.server.apis.UserApi - - -@KtorExperimentalAPI -internal val settings = HoconApplicationConfig(ConfigFactory.defaultApplication(HTTP::class.java.classLoader)) - -object HTTP { - val client = HttpClient(Apache) -} - -@KtorExperimentalAPI -@KtorExperimentalLocationsAPI -fun Application.main() { - install(DefaultHeaders) - install(Metrics) { - val reporter = Slf4jReporter.forRegistry(registry) - .outputTo(log) - .convertRatesTo(TimeUnit.SECONDS) - .convertDurationsTo(TimeUnit.MILLISECONDS) - .build() - reporter.start(10, TimeUnit.SECONDS) - } - install(ContentNegotiation) { - register(ContentType.Application.Json, GsonConverter()) - } - install(AutoHeadResponse) // see http://ktor.io/features/autoheadresponse.html - install(HSTS, ApplicationHstsConfiguration()) // see http://ktor.io/features/hsts.html - install(Compression, ApplicationCompressionConfiguration()) // see http://ktor.io/features/compression.html - install(Locations) // see http://ktor.io/features/locations.html - install(Authentication) { - // "Implement API key auth (api_key) for parameter name 'api_key'." - apiKeyAuth("api_key") { - validate { apikeyCredential: ApiKeyCredential -> - when { - apikeyCredential.value == "keyboardcat" -> ApiPrincipal(apikeyCredential) - else -> null - } - } - } - oauth("petstore_auth") { - client = HttpClient(Apache) - providerLookup = { ApplicationAuthProviders["petstore_auth"] } - urlProvider = { _ -> - // TODO: define a callback url here. - "/" - } - } - } - install(Routing) { - PetApi() - StoreApi() - UserApi() - } - - - environment.monitor.subscribe(ApplicationStopping) - { - HTTP.client.close() - } -} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt deleted file mode 100644 index c16a32ef70f0..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Configuration.kt +++ /dev/null @@ -1,82 +0,0 @@ -package org.openapitools.server - -// Use this file to hold package-level internal functions that return receiver object passed to the `install` method. -import io.ktor.auth.OAuthServerSettings -import io.ktor.features.Compression -import io.ktor.features.HSTS -import io.ktor.features.deflate -import io.ktor.features.gzip -import io.ktor.features.minimumSize -import io.ktor.http.HttpMethod -import io.ktor.util.KtorExperimentalAPI -import java.time.Duration -import java.util.concurrent.Executors - -import org.openapitools.server.settings - - -/** - * Application block for [HSTS] configuration. - * - * This file may be excluded in .openapi-generator-ignore, - * and application specific configuration can be applied in this function. - * - * See http://ktor.io/features/hsts.html - */ -internal fun ApplicationHstsConfiguration(): HSTS.Configuration.() -> Unit { - return { - maxAge = Duration.ofDays(365) - includeSubDomains = true - preload = false - - // You may also apply any custom directives supported by specific user-agent. For example: - // customDirectives.put("redirectHttpToHttps", "false") - } -} - -/** - * Application block for [Compression] configuration. - * - * This file may be excluded in .openapi-generator-ignore, - * and application specific configuration can be applied in this function. - * - * See http://ktor.io/features/compression.html - */ -internal fun ApplicationCompressionConfiguration(): Compression.Configuration.() -> Unit { - return { - gzip { - priority = 1.0 - } - deflate { - priority = 10.0 - minimumSize(1024) // condition - } - } -} - -// Defines authentication mechanisms used throughout the application. -@KtorExperimentalAPI -val ApplicationAuthProviders: Map = listOf( - OAuthServerSettings.OAuth2ServerSettings( - name = "petstore_auth", - authorizeUrl = "http://petstore.swagger.io/api/oauth/dialog", - accessTokenUrl = "", - requestMethod = HttpMethod.Get, - clientId = settings.property("auth.oauth.petstore_auth.clientId").getString(), - clientSecret = settings.property("auth.oauth.petstore_auth.clientSecret").getString(), - defaultScopes = listOf("write:pets", "read:pets") - ) -// OAuthServerSettings.OAuth2ServerSettings( -// name = "facebook", -// authorizeUrl = "https://graph.facebook.com/oauth/authorize", -// accessTokenUrl = "https://graph.facebook.com/oauth/access_token", -// requestMethod = HttpMethod.Post, -// -// clientId = "settings.property("auth.oauth.facebook.clientId").getString()", -// clientSecret = "settings.property("auth.oauth.facebook.clientSecret").getString()", -// defaultScopes = listOf("public_profile") -// ) -).associateBy { it.name } - -// Provides an application-level fixed thread pool on which to execute coroutines (mainly) -internal val ApplicationExecutors = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 4) diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Paths.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Paths.kt deleted file mode 100644 index 1983ab78a49d..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/Paths.kt +++ /dev/null @@ -1,106 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.server - -import io.ktor.locations.KtorExperimentalLocationsAPI -import io.ktor.locations.Location - -object Paths { - /** - * Deletes a pet - * - * @param petId Pet id to delete - * @param apiKey (optional) - */ - @KtorExperimentalLocationsAPI - @Location("/pet/{petId}") class deletePet(val petId: kotlin.Long, val apiKey: kotlin.String? = null) - - /** - * Finds Pets by status - * Multiple status values can be provided with comma separated strings - * @param status Status values that need to be considered for filter - */ - @KtorExperimentalLocationsAPI - @Location("/pet/findByStatus") class findPetsByStatus(val status: kotlin.Array) - - /** - * Finds Pets by tags - * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - * @param tags Tags to filter by - */ - @KtorExperimentalLocationsAPI - @Location("/pet/findByTags") class findPetsByTags(val tags: kotlin.Array) - - /** - * Find pet by ID - * Returns a single pet - * @param petId ID of pet to return - */ - @KtorExperimentalLocationsAPI - @Location("/pet/{petId}") class getPetById(val petId: kotlin.Long) - - /** - * Delete purchase order by ID - * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - * @param orderId ID of the order that needs to be deleted - */ - @KtorExperimentalLocationsAPI - @Location("/store/order/{orderId}") class deleteOrder(val orderId: kotlin.String) - - /** - * Returns pet inventories by status - * Returns a map of status codes to quantities - */ - @KtorExperimentalLocationsAPI - @Location("/store/inventory") class getInventory() - - /** - * Find purchase order by ID - * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - * @param orderId ID of pet that needs to be fetched - */ - @KtorExperimentalLocationsAPI - @Location("/store/order/{orderId}") class getOrderById(val orderId: kotlin.Long) - - /** - * Delete user - * This can only be done by the logged in user. - * @param username The name that needs to be deleted - */ - @KtorExperimentalLocationsAPI - @Location("/user/{username}") class deleteUser(val username: kotlin.String) - - /** - * Get user by user name - * - * @param username The name that needs to be fetched. Use user1 for testing. - */ - @KtorExperimentalLocationsAPI - @Location("/user/{username}") class getUserByName(val username: kotlin.String) - - /** - * Logs user into the system - * - * @param username The user name for login - * @param password The password for login in clear text - */ - @KtorExperimentalLocationsAPI - @Location("/user/login") class loginUser(val username: kotlin.String, val password: kotlin.String) - - /** - * Logs out current logged in user session - * - */ - @KtorExperimentalLocationsAPI - @Location("/user/logout") class logoutUser() - -} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt deleted file mode 100644 index 3ac3578638d5..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt +++ /dev/null @@ -1,228 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.server.apis - -import com.google.gson.Gson -import io.ktor.application.call -import io.ktor.auth.UserIdPrincipal -import io.ktor.auth.authentication -import io.ktor.auth.authenticate -import io.ktor.auth.OAuthAccessTokenResponse -import io.ktor.auth.OAuthServerSettings -import io.ktor.http.ContentType -import io.ktor.http.HttpStatusCode -import io.ktor.locations.KtorExperimentalLocationsAPI -import io.ktor.locations.delete -import io.ktor.locations.get -import io.ktor.response.respond -import io.ktor.response.respondText -import io.ktor.routing.Route -import io.ktor.routing.post -import io.ktor.routing.put -import io.ktor.routing.route - -import org.openapitools.server.Paths -import org.openapitools.server.infrastructure.ApiPrincipal - - -import org.openapitools.server.models.ApiResponse -import org.openapitools.server.models.Pet - -@KtorExperimentalLocationsAPI -fun Route.PetApi() { - val gson = Gson() - val empty = mutableMapOf() - - route("/pet") { - authenticate("petstore_auth") { - post { - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - call.respond(HttpStatusCode.NotImplemented) - } - } - } - } - - - delete { _: Paths.deletePet -> - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - call.respond(HttpStatusCode.NotImplemented) - } - } - - - get { _: Paths.findPetsByStatus -> - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - val exampleContentType = "application/json" - val exampleContentString = """{ - "photoUrls" : [ "photoUrls", "photoUrls" ], - "name" : "doggie", - "id" : 0, - "category" : { - "name" : "name", - "id" : 6 - }, - "tags" : [ { - "name" : "name", - "id" : 1 - }, { - "name" : "name", - "id" : 1 - } ], - "status" : "available" - }""" - - when(exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) - "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) - else -> call.respondText(exampleContentString) - } - } - } - - - get { _: Paths.findPetsByTags -> - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - val exampleContentType = "application/json" - val exampleContentString = """{ - "photoUrls" : [ "photoUrls", "photoUrls" ], - "name" : "doggie", - "id" : 0, - "category" : { - "name" : "name", - "id" : 6 - }, - "tags" : [ { - "name" : "name", - "id" : 1 - }, { - "name" : "name", - "id" : 1 - } ], - "status" : "available" - }""" - - when(exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) - "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) - else -> call.respondText(exampleContentString) - } - } - } - - - get { _: Paths.getPetById -> - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - val exampleContentType = "application/json" - val exampleContentString = """{ - "photoUrls" : [ "photoUrls", "photoUrls" ], - "name" : "doggie", - "id" : 0, - "category" : { - "name" : "name", - "id" : 6 - }, - "tags" : [ { - "name" : "name", - "id" : 1 - }, { - "name" : "name", - "id" : 1 - } ], - "status" : "available" - }""" - - when(exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) - "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) - else -> call.respondText(exampleContentString) - } - } - } - - - route("/pet") { - authenticate("petstore_auth") { - put { - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - call.respond(HttpStatusCode.NotImplemented) - } - } - } - } - - - route("/pet/{petId}") { - authenticate("petstore_auth") { - post { - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - call.respond(HttpStatusCode.NotImplemented) - } - } - } - } - - - route("/pet/{petId}/uploadImage") { - authenticate("petstore_auth") { - post { - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - val exampleContentType = "application/json" - val exampleContentString = """{ - "code" : 0, - "type" : "type", - "message" : "message" - }""" - - when(exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) - "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) - else -> call.respondText(exampleContentString) - } - } - } - } - } - -} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt deleted file mode 100644 index 17b2c526bd9c..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt +++ /dev/null @@ -1,99 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.server.apis - -import com.google.gson.Gson -import io.ktor.application.call -import io.ktor.auth.UserIdPrincipal -import io.ktor.auth.authentication -import io.ktor.auth.authenticate -import io.ktor.auth.OAuthAccessTokenResponse -import io.ktor.auth.OAuthServerSettings -import io.ktor.http.ContentType -import io.ktor.http.HttpStatusCode -import io.ktor.locations.KtorExperimentalLocationsAPI -import io.ktor.locations.delete -import io.ktor.locations.get -import io.ktor.response.respond -import io.ktor.response.respondText -import io.ktor.routing.Route -import io.ktor.routing.post -import io.ktor.routing.put -import io.ktor.routing.route - -import org.openapitools.server.Paths -import org.openapitools.server.infrastructure.ApiPrincipal - - -import org.openapitools.server.models.Order - -@KtorExperimentalLocationsAPI -fun Route.StoreApi() { - val gson = Gson() - val empty = mutableMapOf() - - delete { _: Paths.deleteOrder -> - call.respond(HttpStatusCode.NotImplemented) - } - - - get { _: Paths.getInventory -> - val principal = call.authentication.principal() - - if (principal == null) { - call.respond(HttpStatusCode.Unauthorized) - } else { - call.respond(HttpStatusCode.NotImplemented) - } - } - - - get { _: Paths.getOrderById -> - val exampleContentType = "application/json" - val exampleContentString = """{ - "petId" : 6, - "quantity" : 1, - "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", - "complete" : false, - "status" : "placed" - }""" - - when(exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) - "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) - else -> call.respondText(exampleContentString) - } - } - - - route("/store/order") { - post { - val exampleContentType = "application/json" - val exampleContentString = """{ - "petId" : 6, - "quantity" : 1, - "id" : 0, - "shipDate" : "2000-01-23T04:56:07.000+00:00", - "complete" : false, - "status" : "placed" - }""" - - when(exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) - "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) - else -> call.respondText(exampleContentString) - } - } - } - -} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt deleted file mode 100644 index 7fc0b78fa995..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt +++ /dev/null @@ -1,107 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.server.apis - -import com.google.gson.Gson -import io.ktor.application.call -import io.ktor.auth.UserIdPrincipal -import io.ktor.auth.authentication -import io.ktor.auth.authenticate -import io.ktor.auth.OAuthAccessTokenResponse -import io.ktor.auth.OAuthServerSettings -import io.ktor.http.ContentType -import io.ktor.http.HttpStatusCode -import io.ktor.locations.KtorExperimentalLocationsAPI -import io.ktor.locations.delete -import io.ktor.locations.get -import io.ktor.response.respond -import io.ktor.response.respondText -import io.ktor.routing.Route -import io.ktor.routing.post -import io.ktor.routing.put -import io.ktor.routing.route - -import org.openapitools.server.Paths -import org.openapitools.server.infrastructure.ApiPrincipal - - -import org.openapitools.server.models.User - -@KtorExperimentalLocationsAPI -fun Route.UserApi() { - val gson = Gson() - val empty = mutableMapOf() - - route("/user") { - post { - call.respond(HttpStatusCode.NotImplemented) - } - } - - - route("/user/createWithArray") { - post { - call.respond(HttpStatusCode.NotImplemented) - } - } - - - route("/user/createWithList") { - post { - call.respond(HttpStatusCode.NotImplemented) - } - } - - - delete { _: Paths.deleteUser -> - call.respond(HttpStatusCode.NotImplemented) - } - - - get { _: Paths.getUserByName -> - val exampleContentType = "application/json" - val exampleContentString = """{ - "firstName" : "firstName", - "lastName" : "lastName", - "password" : "password", - "userStatus" : 6, - "phone" : "phone", - "id" : 0, - "email" : "email", - "username" : "username" - }""" - - when(exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) - "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) - else -> call.respondText(exampleContentString) - } - } - - - get { _: Paths.loginUser -> - call.respond(HttpStatusCode.NotImplemented) - } - - - get { _: Paths.logoutUser -> - call.respond(HttpStatusCode.NotImplemented) - } - - - route("/user/{username}") { - put { - call.respond(HttpStatusCode.NotImplemented) - } - } - -} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt deleted file mode 100644 index 8de972967ef3..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/infrastructure/ApiKeyAuth.kt +++ /dev/null @@ -1,85 +0,0 @@ -package org.openapitools.server.infrastructure - -import io.ktor.application.ApplicationCall -import io.ktor.application.call -import io.ktor.auth.Authentication -import io.ktor.auth.AuthenticationFailedCause -import io.ktor.auth.AuthenticationPipeline -import io.ktor.auth.AuthenticationProvider -import io.ktor.auth.Credential -import io.ktor.auth.Principal -import io.ktor.auth.UnauthorizedResponse -import io.ktor.http.auth.HeaderValueEncoding -import io.ktor.http.auth.HttpAuthHeader -import io.ktor.request.ApplicationRequest -import io.ktor.response.respond - -enum class ApiKeyLocation(val location: String) { - QUERY("query"), - HEADER("header") -} -data class ApiKeyCredential(val value: String): Credential -data class ApiPrincipal(val apiKeyCredential: ApiKeyCredential?) : Principal - - - -/** -* Represents a Api Key authentication provider -* @param name is the name of the provider, or `null` for a default provider -*/ -class ApiKeyAuthenticationProvider(name: String?) : AuthenticationProvider(name) { - internal var authenticationFunction: suspend ApplicationCall.(ApiKeyCredential) -> Principal? = { null } - - var apiKeyName: String = ""; - - var apiKeyLocation: ApiKeyLocation = ApiKeyLocation.QUERY; - - /** - * Sets a validation function that will check given [ApiKeyCredential] instance and return [Principal], - * or null if credential does not correspond to an authenticated principal - */ - fun validate(body: suspend ApplicationCall.(ApiKeyCredential) -> Principal?) { - authenticationFunction = body - } -} - -fun Authentication.Configuration.apiKeyAuth(name: String? = null, configure: ApiKeyAuthenticationProvider.() -> Unit) { - val provider = ApiKeyAuthenticationProvider(name).apply(configure) - val apiKeyName = provider.apiKeyName - val apiKeyLocation = provider.apiKeyLocation - val authenticate = provider.authenticationFunction - - provider.pipeline.intercept(AuthenticationPipeline.RequestAuthentication) { context -> - val credentials = call.request.apiKeyAuthenticationCredentials(apiKeyName, apiKeyLocation) - val principal = credentials?.let { authenticate(call, it) } - - val cause = when { - credentials == null -> AuthenticationFailedCause.NoCredentials - principal == null -> AuthenticationFailedCause.InvalidCredentials - else -> null - } - - if (cause != null) { - context.challenge(apiKeyName, cause) { - // TODO: Verify correct response structure here. - call.respond(UnauthorizedResponse(HttpAuthHeader.Parameterized("API_KEY", mapOf("key" to apiKeyName), HeaderValueEncoding.QUOTED_ALWAYS))) - it.complete() - } - } - - if (principal != null) { - context.principal(principal) - } - } -} - -fun ApplicationRequest.apiKeyAuthenticationCredentials(apiKeyName: String, apiKeyLocation: ApiKeyLocation): ApiKeyCredential? { - val value: String? = when(apiKeyLocation) { - ApiKeyLocation.QUERY -> this.queryParameters[apiKeyName] - ApiKeyLocation.HEADER -> this.headers[apiKeyName] - } - when (value) { - null -> return null - else -> return ApiKeyCredential(value) - } -} diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt deleted file mode 100644 index 457607909909..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/ApiResponse.kt +++ /dev/null @@ -1,32 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.server.models - - -import java.io.Serializable -/** - * Describes the result of uploading an image resource - * @param code - * @param type - * @param message - */ -data class ApiResponse ( - val code: kotlin.Int? = null, - val type: kotlin.String? = null, - val message: kotlin.String? = null -) : Serializable -{ - companion object { - private const val serialVersionUID: Long = 123 - } -} - diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt deleted file mode 100644 index ee26d4c76e50..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt +++ /dev/null @@ -1,30 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.server.models - - -import java.io.Serializable -/** - * A category for a pet - * @param id - * @param name - */ -data class Category ( - val id: kotlin.Long? = null, - val name: kotlin.String? = null -) : Serializable -{ - companion object { - private const val serialVersionUID: Long = 123 - } -} - diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt deleted file mode 100644 index 7889abe12ee2..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt +++ /dev/null @@ -1,48 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.server.models - - -import java.io.Serializable -/** - * An order for a pets from the pet store - * @param id - * @param petId - * @param quantity - * @param shipDate - * @param status Order Status - * @param complete - */ -data class Order ( - val id: kotlin.Long? = null, - val petId: kotlin.Long? = null, - val quantity: kotlin.Int? = null, - val shipDate: java.time.OffsetDateTime? = null, - /* Order Status */ - val status: Order.Status? = null, - val complete: kotlin.Boolean? = null -) : Serializable -{ - companion object { - private const val serialVersionUID: Long = 123 - } - /** - * Order Status - * Values: placed,approved,delivered - */ - enum class Status(val value: kotlin.String){ - placed("placed"), - approved("approved"), - delivered("delivered"); - } -} - diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt deleted file mode 100644 index 8dc13b7ea6e2..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ /dev/null @@ -1,50 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.server.models - -import org.openapitools.server.models.Category -import org.openapitools.server.models.Tag - -import java.io.Serializable -/** - * A pet for sale in the pet store - * @param name - * @param photoUrls - * @param id - * @param category - * @param tags - * @param status pet status in the store - */ -data class Pet ( - val name: kotlin.String, - val photoUrls: kotlin.Array, - val id: kotlin.Long? = null, - val category: Category? = null, - val tags: kotlin.Array? = null, - /* pet status in the store */ - val status: Pet.Status? = null -) : Serializable -{ - companion object { - private const val serialVersionUID: Long = 123 - } - /** - * pet status in the store - * Values: available,pending,sold - */ - enum class Status(val value: kotlin.String){ - available("available"), - pending("pending"), - sold("sold"); - } -} - diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt deleted file mode 100644 index 49c2887a5039..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ /dev/null @@ -1,30 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.server.models - - -import java.io.Serializable -/** - * A tag for a pet - * @param id - * @param name - */ -data class Tag ( - val id: kotlin.Long? = null, - val name: kotlin.String? = null -) : Serializable -{ - companion object { - private const val serialVersionUID: Long = 123 - } -} - diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/User.kt deleted file mode 100644 index dee8de740bde..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/kotlin/org/openapitools/server/models/User.kt +++ /dev/null @@ -1,43 +0,0 @@ -/** -* OpenAPI Petstore -* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -* -* The version of the OpenAPI document: 1.0.0 -* -* -* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). -* https://openapi-generator.tech -* Do not edit the class manually. -*/ -package org.openapitools.server.models - - -import java.io.Serializable -/** - * A User who is purchasing from the pet store - * @param id - * @param username - * @param firstName - * @param lastName - * @param email - * @param password - * @param phone - * @param userStatus User Status - */ -data class User ( - val id: kotlin.Long? = null, - val username: kotlin.String? = null, - val firstName: kotlin.String? = null, - val lastName: kotlin.String? = null, - val email: kotlin.String? = null, - val password: kotlin.String? = null, - val phone: kotlin.String? = null, - /* User Status */ - val userStatus: kotlin.Int? = null -) : Serializable -{ - companion object { - private const val serialVersionUID: Long = 123 - } -} - diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/application.conf b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/application.conf deleted file mode 100644 index d33fe93f9937..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/application.conf +++ /dev/null @@ -1,23 +0,0 @@ -ktor { - deployment { - environment = development - port = 8080 - autoreload = true - watch = [ org.openapitools.server ] - } - - application { - modules = [ org.openapitools.server.AppMainKt.main ] - } -} - -# Typesafe config allows multiple ways to provide configuration values without hard-coding them here. -# Please see https://github.com/lightbend/config for details. -auth { - oauth { - petstore_auth { - clientId = "" - clientSecret = "" - } - } -} \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/logback.xml b/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/logback.xml deleted file mode 100644 index d0eaba8debd6..000000000000 --- a/samples/server/petstore/kotlin-server-deprecated/ktor/src/main/resources/logback.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - From dbb42f90278c92d7dde0627a4647f8082dfa13d5 Mon Sep 17 00:00:00 2001 From: Anders Aaen Springborg Date: Thu, 29 Apr 2021 12:23:13 +0200 Subject: [PATCH 073/186] [BUG] new.sh fix generator type , issue #9320 (#9321) * generation type on template dir path * remove gen_type from template and resources --- new.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/new.sh b/new.sh index 12cfec8cb579..7d33be840e55 100755 --- a/new.sh +++ b/new.sh @@ -178,7 +178,7 @@ public class ${lang_classname} extends DefaultCodegen implements CodegenConfig { outputFolder = "generated-code" + File.separator + "${gen_name_camel}"; modelTemplateFiles.put("model.mustache", ".zz"); apiTemplateFiles.put("api.mustache", ".zz"); - embeddedTemplateDir = templateDir = "${gen_name_camel}-${gen_type}"; + embeddedTemplateDir = templateDir = "${gen_name_camel}"; apiPackage = "Apis"; modelPackage = "Models"; supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); @@ -191,17 +191,17 @@ EOF echo -e "\norg.openapitools.codegen.languages.${lang_classname}" >> "${root}/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig" # Step 3: Create resource files -mkdir -p "${root}/modules/openapi-generator/src/main/resources/${gen_name_camel}-${gen_type}" -echo "Creating modules/openapi-generator/src/main/resources/${gen_name_camel}-${gen_type}/README.mustache" && \ - touch "${root}/modules/openapi-generator/src/main/resources/${gen_name_camel}-${gen_type}/README.mustache" -echo "Creating modules/openapi-generator/src/main/resources/${gen_name_camel}-${gen_type}/model.mustache" && \ - touch "${root}/modules/openapi-generator/src/main/resources/${gen_name_camel}-${gen_type}/model.mustache" -echo "Creating modules/openapi-generator/src/main/resources/${gen_name_camel}-${gen_type}/api.mustache" && \ - touch "${root}/modules/openapi-generator/src/main/resources/${gen_name_camel}-${gen_type}/api.mustache" +mkdir -p "${root}/modules/openapi-generator/src/main/resources/${gen_name_camel}" +echo "Creating modules/openapi-generator/src/main/resources/${gen_name_camel}/README.mustache" && \ + touch "${root}/modules/openapi-generator/src/main/resources/${gen_name_camel}/README.mustache" +echo "Creating modules/openapi-generator/src/main/resources/${gen_name_camel}/model.mustache" && \ + touch "${root}/modules/openapi-generator/src/main/resources/${gen_name_camel}/model.mustache" +echo "Creating modules/openapi-generator/src/main/resources/${gen_name_camel}/api.mustache" && \ + touch "${root}/modules/openapi-generator/src/main/resources/${gen_name_camel}/api.mustache" # Step 4: Create generation config scripts -echo "Creating bin/configs/${gen_name_camel}-${gen_type}-petstore-new.yaml" -cat > "${root}/bin/configs/${gen_name_camel}-${gen_type}-petstore-new.yaml"< "${root}/bin/configs/${gen_name_camel}-petstore-new.yaml"< Date: Thu, 29 Apr 2021 12:51:30 +0200 Subject: [PATCH 074/186] [scala][akka] Update dependencies for scala 2.13 in scala-akka (#8624) * [scala][akka] Update dependencies for scala 2.13 * Update pom.mustache to support multiple scala's version * Update pom.xml * Scala cross build 2.12 and 2.13 * Update version. Migrate to sbt * Remove space * Add pom.xml back --- .../languages/ScalaAkkaClientCodegen.java | 3 +- .../scala-akka-client/apiInvoker.mustache | 31 +++++++++++-------- .../scala-akka-client/apiSettings.mustache | 15 +++++++-- .../scala-akka-client/build.sbt.mustache | 24 ++++++++------ .../resources/scala-akka-client/pom.mustache | 30 +++++++++++------- .../project/build.properties.mustache | 1 + .../scalaakka/ScalaAkkaClientCodegenTest.java | 4 +-- .../scala-akka/.openapi-generator/FILES | 1 + samples/client/petstore/scala-akka/build.sbt | 24 ++++++++------ samples/client/petstore/scala-akka/pom.xml | 30 +++++++++++------- .../scala-akka/project/build.properties | 1 + .../openapitools/client/core/ApiInvoker.scala | 31 +++++++++++-------- .../client/core/ApiSettings.scala | 15 +++++++-- .../src/test/scala/PetApiTest.scala | 24 +++++++------- 14 files changed, 143 insertions(+), 91 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/scala-akka-client/project/build.properties.mustache create mode 100644 samples/client/petstore/scala-akka/project/build.properties diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java index 138e9bf9c1d8..a5e293c9879d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaAkkaClientCodegen.java @@ -166,8 +166,8 @@ public void processOpts() { additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); - supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); supportingFiles.add(new SupportingFile("build.sbt.mustache", "", "build.sbt")); + supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); supportingFiles.add(new SupportingFile("reference.mustache", resourcesFolder, "reference.conf")); final String invokerFolder = (sourceFolder + File.separator + invokerPackage).replace(".", File.separator); supportingFiles.add(new SupportingFile("apiRequest.mustache", invokerFolder, "ApiRequest.scala")); @@ -175,6 +175,7 @@ public void processOpts() { supportingFiles.add(new SupportingFile("requests.mustache", invokerFolder, "requests.scala")); supportingFiles.add(new SupportingFile("apiSettings.mustache", invokerFolder, "ApiSettings.scala")); final String apiFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator); + supportingFiles.add(new SupportingFile("project/build.properties.mustache", "project", "build.properties")); supportingFiles.add(new SupportingFile("enumsSerializers.mustache", apiFolder, "EnumsSerializers.scala")); supportingFiles.add(new SupportingFile("serializers.mustache", invokerFolder, "Serializers.scala")); } diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache index 8c81b0b2d8b5..a82135170c43 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/apiInvoker.mustache @@ -18,6 +18,7 @@ import de.heikoseeberger.akkahttpjson4s.Json4sSupport import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.json4s.jackson.Serialization +import scala.collection.compat._ import scala.collection.immutable import scala.concurrent.{ ExecutionContext, ExecutionContextExecutor, Future } @@ -86,7 +87,7 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC private val http = Http() - val CompressionFilter: HttpMessage ⇒ Boolean = (msg: HttpMessage) => + val CompressionFilter: HttpMessage => Boolean = (msg: HttpMessage) => Seq( { _: HttpMessage => settings.compressionEnabled }, Encoder.DefaultFilter, @@ -115,7 +116,7 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC private def headers(headers: Map[String, Any]): immutable.Seq[HttpHeader] = headers.asFormattedParams .map { case (name, value) => RawHeader(name, value.toString) } - .to[immutable.Seq] + .to(immutable.Seq) private def bodyPart(name: String, value: Any): BodyPart = { @@ -147,9 +148,9 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC case MediaTypes.`multipart/form-data` => Multipart.FormData(Source(params.toList.map { case (name, value) => bodyPart(name, value) })) case MediaTypes.`application/x-www-form-urlencoded` => - FormData(params.mapValues(_.toString)) + FormData(params.view.mapValues(_.toString).toMap) case _: MediaType => // Default : application/x-www-form-urlencoded. - FormData(params.mapValues(_.toString)) + FormData(params.view.mapValues(_.toString).toMap) } ) } @@ -187,7 +188,9 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC params + (keyName -> key.value) case (params, _) => params }.asFormattedParams + .view .mapValues(_.toString) + .toMap .foldRight[Query](Uri.Query.Empty) { case ((name, value), acc) => acc.+:(name, value) } @@ -196,7 +199,9 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC def makeUri(r: ApiRequest[_]): Uri = { val opPath = r.operationPath.replaceAll("\\{format\\}", "json") val opPathWithParams = r.pathParams.asFormattedParams + .view .mapValues(_.toString) + .toMap .foldLeft(opPath) { case (path, (name, value)) => path.replaceAll(s"\\{$name\\}", value) } @@ -213,13 +218,13 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC http .singleRequest(request) .map { response => - val decoder: Coder with StreamDecoder = response.encoding match { - case HttpEncodings.gzip ⇒ - Gzip - case HttpEncodings.deflate ⇒ - Deflate - case HttpEncodings.identity ⇒ - NoCoding + val decoder: Decoder with Decoder = response.encoding match { + case HttpEncodings.gzip => + Coders.Gzip + case HttpEncodings.deflate => + Coders.Deflate + case HttpEncodings.identity => + Coders.NoCoding case HttpEncoding(encoding) => throw new IllegalArgumentException(s"Unsupported encoding: $encoding") } @@ -247,13 +252,13 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC request .responseForCode(response.status.intValue) match { case Some((Manifest.Unit, state: ResponseState)) => - Future(responseForState(state, Unit).asInstanceOf[ApiResponse[T]]) + Future(responseForState(state, ()).asInstanceOf[ApiResponse[T]]) case Some((manifest, state: ResponseState)) if manifest == mf => implicit val m: Unmarshaller[HttpEntity, T] = unmarshaller[T](mf, serialization, formats) Unmarshal(response.entity) .to[T] .recoverWith { - case e ⇒ throw ApiError(response.status.intValue, s"Unable to unmarshall content to [$manifest]", Some(response.entity.toString), e) + case e => throw ApiError(response.status.intValue, s"Unable to unmarshall content to [$manifest]", Some(response.entity.toString), e) } .map(value => responseForState(state, value)) case None | Some(_) => diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/apiSettings.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/apiSettings.mustache index d5856ccc17d1..22f56080b01c 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/apiSettings.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/apiSettings.mustache @@ -3,12 +3,12 @@ package {{invokerPackage}} import java.util.concurrent.TimeUnit -import akka.actor.{ ExtendedActorSystem, Extension, ExtensionKey } +import akka.actor.{ActorSystem, ExtendedActorSystem, Extension, ExtensionId, ExtensionIdProvider} import akka.http.scaladsl.model.StatusCodes.CustomStatusCode import akka.http.scaladsl.model.headers.RawHeader import com.typesafe.config.Config -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters._ import scala.concurrent.duration.FiniteDuration class ApiSettings(config: Config) extends Extension { @@ -32,4 +32,13 @@ class ApiSettings(config: Config) extends Extension { } } -object ApiSettings extends ExtensionKey[ApiSettings] +object ApiSettings extends ExtensionId[ApiSettings] with ExtensionIdProvider { + + override def lookup = ApiSettings + + override def createExtension(system: ExtendedActorSystem): ApiSettings = + new ApiSettings(system) + + // needed to get the type right when used from Java + override def get(system: ActorSystem): ApiSettings = super.get(system) +} diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/build.sbt.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/build.sbt.mustache index c26dae841c7b..e4c21c19d0c0 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/build.sbt.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/build.sbt.mustache @@ -1,22 +1,26 @@ version := "{{artifactVersion}}" name := "{{artifactId}}" organization := "{{groupId}}" -scalaVersion := "2.12.8" + +scalaVersion := "2.12.13" +crossScalaVersions := Seq(scalaVersion.value, "2.13.4") + libraryDependencies ++= Seq( - "com.typesafe" % "config" % "1.3.3", - "com.typesafe.akka" %% "akka-actor" % "2.5.21", - "com.typesafe.akka" %% "akka-stream" % "2.5.21", - "com.typesafe.akka" %% "akka-http" % "10.1.7", + "com.typesafe" % "config" % "1.4.1", + "com.typesafe.akka" %% "akka-actor" % "2.6.12", + "com.typesafe.akka" %% "akka-stream" % "2.6.12", + "com.typesafe.akka" %% "akka-http" % "10.2.3", {{#joda}} "joda-time" % "joda-time" % "2.10.1", {{/joda}} - "org.json4s" %% "json4s-jackson" % "3.6.5", - "org.json4s" %% "json4s-ext" % "3.6.5", - "de.heikoseeberger" %% "akka-http-json4s" % "1.25.2", + "org.json4s" %% "json4s-jackson" % "3.6.7", + "org.json4s" %% "json4s-ext" % "3.6.7", + "de.heikoseeberger" %% "akka-http-json4s" % "1.27.0", + "org.scala-lang.modules" %% "scala-collection-compat" % "2.4.1", // test dependencies - "org.scalatest" %% "scalatest" % "3.0.5" % "test", - "junit" % "junit" % "4.13.1" % "test" + "org.scalatest" %% "scalatest" % "3.2.3" % "test", + "org.scalatestplus" %% "junit-4-13" % "3.2.3.0" % "test" ) resolvers ++= Seq(Resolver.mavenLocal) diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/pom.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/pom.mustache index 78cbec12128a..e82df0c17b9a 100644 --- a/modules/openapi-generator/src/main/resources/scala-akka-client/pom.mustache +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/pom.mustache @@ -15,18 +15,19 @@ UTF-8 1.8 - 2.12.8 - 3.5.3 - 3.2.11 - 2.5.21 - 10.1.7 + 2.12.13 + 3.6.7 + 3.6.7 + 2.6.12 + 10.2.3 {{#joda}} 2.10.1 {{/joda}} - 1.3.3 - 1.25.2 - 4.13.1 - 3.0.5 + 1.4.1 + 1.27.0 + 2.4.1 + 3.2.3 + 3.2.3.0 3.3.1 @@ -80,6 +81,11 @@ akka-http-json4s_2.12 ${akka.http.json4s.version} + + org.scala-lang.modules + scala-collection-compat_2.12 + ${scala.compat.version} + @@ -89,9 +95,9 @@ test - junit - junit - ${junit.version} + org.scalatestplus + junit-4-13_2.12 + ${scala.test.plus.version} test diff --git a/modules/openapi-generator/src/main/resources/scala-akka-client/project/build.properties.mustache b/modules/openapi-generator/src/main/resources/scala-akka-client/project/build.properties.mustache new file mode 100644 index 000000000000..dc07aed85e00 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/scala-akka-client/project/build.properties.mustache @@ -0,0 +1 @@ +sbt.version=1.3.10 \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java index d78b487d2860..4304e092bb16 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java @@ -472,7 +472,7 @@ public void mainPackageTest() throws Exception { Generator gen = generator.opts(clientOptInput); List files = gen.generate(); - Assert.assertEquals(files.size(), 15); + Assert.assertEquals(files.size(), 16); TestUtils.ensureContainsFile(files, output, "src/main/scala/hello/world/model/SomeObj.scala"); TestUtils.ensureContainsFile(files, output, "src/main/scala/hello/world/core/ApiSettings.scala"); @@ -509,7 +509,7 @@ public void overridePackagesTest() throws Exception { Generator gen = generator.opts(clientOptInput); List files = gen.generate(); - Assert.assertEquals(files.size(), 15); + Assert.assertEquals(files.size(), 16); TestUtils.ensureContainsFile(files, output, "src/main/scala/hello/world/model/package/SomeObj.scala"); TestUtils.ensureContainsFile(files, output, "src/main/scala/hello/world/package/invoker/ApiSettings.scala"); diff --git a/samples/client/petstore/scala-akka/.openapi-generator/FILES b/samples/client/petstore/scala-akka/.openapi-generator/FILES index 8d22043b5a91..2cd9737cf183 100644 --- a/samples/client/petstore/scala-akka/.openapi-generator/FILES +++ b/samples/client/petstore/scala-akka/.openapi-generator/FILES @@ -1,5 +1,6 @@ README.md build.sbt +project/build.properties src/main/resources/reference.conf src/main/scala/org/openapitools/client/api/EnumsSerializers.scala src/main/scala/org/openapitools/client/api/PetApi.scala diff --git a/samples/client/petstore/scala-akka/build.sbt b/samples/client/petstore/scala-akka/build.sbt index 038757790a5a..e9915b07f85f 100644 --- a/samples/client/petstore/scala-akka/build.sbt +++ b/samples/client/petstore/scala-akka/build.sbt @@ -1,19 +1,23 @@ version := "1.0.0" name := "scala-akka-petstore-client" organization := "org.openapitools" -scalaVersion := "2.12.8" + +scalaVersion := "2.12.13" +crossScalaVersions := Seq(scalaVersion.value, "2.13.4") + libraryDependencies ++= Seq( - "com.typesafe" % "config" % "1.3.3", - "com.typesafe.akka" %% "akka-actor" % "2.5.21", - "com.typesafe.akka" %% "akka-stream" % "2.5.21", - "com.typesafe.akka" %% "akka-http" % "10.1.7", - "org.json4s" %% "json4s-jackson" % "3.6.5", - "org.json4s" %% "json4s-ext" % "3.6.5", - "de.heikoseeberger" %% "akka-http-json4s" % "1.25.2", + "com.typesafe" % "config" % "1.4.1", + "com.typesafe.akka" %% "akka-actor" % "2.6.12", + "com.typesafe.akka" %% "akka-stream" % "2.6.12", + "com.typesafe.akka" %% "akka-http" % "10.2.3", + "org.json4s" %% "json4s-jackson" % "3.6.7", + "org.json4s" %% "json4s-ext" % "3.6.7", + "de.heikoseeberger" %% "akka-http-json4s" % "1.27.0", + "org.scala-lang.modules" %% "scala-collection-compat" % "2.4.1", // test dependencies - "org.scalatest" %% "scalatest" % "3.0.5" % "test", - "junit" % "junit" % "4.13.1" % "test" + "org.scalatest" %% "scalatest" % "3.2.3" % "test", + "org.scalatestplus" %% "junit-4-13" % "3.2.3.0" % "test" ) resolvers ++= Seq(Resolver.mavenLocal) diff --git a/samples/client/petstore/scala-akka/pom.xml b/samples/client/petstore/scala-akka/pom.xml index 42e08693b641..0f93bcb372b4 100644 --- a/samples/client/petstore/scala-akka/pom.xml +++ b/samples/client/petstore/scala-akka/pom.xml @@ -15,15 +15,16 @@ UTF-8 1.8 - 2.12.8 - 3.5.3 - 3.2.11 - 2.5.21 - 10.1.7 - 1.3.3 - 1.25.2 - 4.13 - 3.0.5 + 2.12.13 + 3.6.7 + 3.6.7 + 2.6.12 + 10.2.3 + 1.4.1 + 1.27.0 + 2.4.1 + 3.2.3 + 3.2.3.0 3.3.1 @@ -70,6 +71,11 @@ akka-http-json4s_2.12 ${akka.http.json4s.version} + + org.scala-lang.modules + scala-collection-compat_2.12 + ${scala.compat.version} + @@ -79,9 +85,9 @@ test - junit - junit - ${junit.version} + org.scalatestplus + junit-4-13_2.12 + ${scala.test.plus.version} test diff --git a/samples/client/petstore/scala-akka/project/build.properties b/samples/client/petstore/scala-akka/project/build.properties new file mode 100644 index 000000000000..dc07aed85e00 --- /dev/null +++ b/samples/client/petstore/scala-akka/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.3.10 \ No newline at end of file diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala index d3ff4cadb8ec..fe3910967139 100644 --- a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiInvoker.scala @@ -28,6 +28,7 @@ import de.heikoseeberger.akkahttpjson4s.Json4sSupport import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.json4s.jackson.Serialization +import scala.collection.compat._ import scala.collection.immutable import scala.concurrent.{ ExecutionContext, ExecutionContextExecutor, Future } @@ -96,7 +97,7 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC private val http = Http() - val CompressionFilter: HttpMessage ⇒ Boolean = (msg: HttpMessage) => + val CompressionFilter: HttpMessage => Boolean = (msg: HttpMessage) => Seq( { _: HttpMessage => settings.compressionEnabled }, Encoder.DefaultFilter, @@ -125,7 +126,7 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC private def headers(headers: Map[String, Any]): immutable.Seq[HttpHeader] = headers.asFormattedParams .map { case (name, value) => RawHeader(name, value.toString) } - .to[immutable.Seq] + .to(immutable.Seq) private def bodyPart(name: String, value: Any): BodyPart = { @@ -157,9 +158,9 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC case MediaTypes.`multipart/form-data` => Multipart.FormData(Source(params.toList.map { case (name, value) => bodyPart(name, value) })) case MediaTypes.`application/x-www-form-urlencoded` => - FormData(params.mapValues(_.toString)) + FormData(params.view.mapValues(_.toString).toMap) case _: MediaType => // Default : application/x-www-form-urlencoded. - FormData(params.mapValues(_.toString)) + FormData(params.view.mapValues(_.toString).toMap) } ) } @@ -197,7 +198,9 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC params + (keyName -> key.value) case (params, _) => params }.asFormattedParams + .view .mapValues(_.toString) + .toMap .foldRight[Query](Uri.Query.Empty) { case ((name, value), acc) => acc.+:(name, value) } @@ -206,7 +209,9 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC def makeUri(r: ApiRequest[_]): Uri = { val opPath = r.operationPath.replaceAll("\\{format\\}", "json") val opPathWithParams = r.pathParams.asFormattedParams + .view .mapValues(_.toString) + .toMap .foldLeft(opPath) { case (path, (name, value)) => path.replaceAll(s"\\{$name\\}", value) } @@ -223,13 +228,13 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC http .singleRequest(request) .map { response => - val decoder: Coder with StreamDecoder = response.encoding match { - case HttpEncodings.gzip ⇒ - Gzip - case HttpEncodings.deflate ⇒ - Deflate - case HttpEncodings.identity ⇒ - NoCoding + val decoder: Decoder with Decoder = response.encoding match { + case HttpEncodings.gzip => + Coders.Gzip + case HttpEncodings.deflate => + Coders.Deflate + case HttpEncodings.identity => + Coders.NoCoding case HttpEncoding(encoding) => throw new IllegalArgumentException(s"Unsupported encoding: $encoding") } @@ -257,13 +262,13 @@ class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomC request .responseForCode(response.status.intValue) match { case Some((Manifest.Unit, state: ResponseState)) => - Future(responseForState(state, Unit).asInstanceOf[ApiResponse[T]]) + Future(responseForState(state, ()).asInstanceOf[ApiResponse[T]]) case Some((manifest, state: ResponseState)) if manifest == mf => implicit val m: Unmarshaller[HttpEntity, T] = unmarshaller[T](mf, serialization, formats) Unmarshal(response.entity) .to[T] .recoverWith { - case e ⇒ throw ApiError(response.status.intValue, s"Unable to unmarshall content to [$manifest]", Some(response.entity.toString), e) + case e => throw ApiError(response.status.intValue, s"Unable to unmarshall content to [$manifest]", Some(response.entity.toString), e) } .map(value => responseForState(state, value)) case None | Some(_) => diff --git a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiSettings.scala b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiSettings.scala index 2553aeb3c875..2c02c47c7bac 100644 --- a/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiSettings.scala +++ b/samples/client/petstore/scala-akka/src/main/scala/org/openapitools/client/core/ApiSettings.scala @@ -13,12 +13,12 @@ package org.openapitools.client.core import java.util.concurrent.TimeUnit -import akka.actor.{ ExtendedActorSystem, Extension, ExtensionKey } +import akka.actor.{ActorSystem, ExtendedActorSystem, Extension, ExtensionId, ExtensionIdProvider} import akka.http.scaladsl.model.StatusCodes.CustomStatusCode import akka.http.scaladsl.model.headers.RawHeader import com.typesafe.config.Config -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters._ import scala.concurrent.duration.FiniteDuration class ApiSettings(config: Config) extends Extension { @@ -42,4 +42,13 @@ class ApiSettings(config: Config) extends Extension { } } -object ApiSettings extends ExtensionKey[ApiSettings] +object ApiSettings extends ExtensionId[ApiSettings] with ExtensionIdProvider { + + override def lookup = ApiSettings + + override def createExtension(system: ExtendedActorSystem): ApiSettings = + new ApiSettings(system) + + // needed to get the type right when used from Java + override def get(system: ActorSystem): ApiSettings = super.get(system) +} diff --git a/samples/client/petstore/scala-akka/src/test/scala/PetApiTest.scala b/samples/client/petstore/scala-akka/src/test/scala/PetApiTest.scala index e6229fb05f3a..48c8d4c644fd 100644 --- a/samples/client/petstore/scala-akka/src/test/scala/PetApiTest.scala +++ b/samples/client/petstore/scala-akka/src/test/scala/PetApiTest.scala @@ -5,18 +5,19 @@ import org.openapitools.client.api._ import org.openapitools.client.core.{ApiInvoker, ApiKeyValue} import org.openapitools.client.model._ import org.scalatest.Inspectors._ -import org.scalatest._ -import org.scalatest.junit.JUnitRunner +import org.scalatest.flatspec.AsyncFlatSpec +import org.scalatest.matchers.should.Matchers +import org.scalatestplus.junit.JUnitRunner @RunWith(classOf[JUnitRunner]) class PetApiTest extends AsyncFlatSpec with Matchers { - private implicit val system: ActorSystem = ActorSystem() + implicit private val system: ActorSystem = ActorSystem() behavior of "PetApi" - val api: PetApi = PetApi() - val invoker: ApiInvoker = ApiInvoker(EnumsSerializers.all) - private implicit val apiKey: ApiKeyValue = ApiKeyValue("special-key") + val api: PetApi = PetApi() + val invoker: ApiInvoker = ApiInvoker(EnumsSerializers.all) + implicit private val apiKey: ApiKeyValue = ApiKeyValue("special-key") it should "add and fetch a pet" in { val petId = 1000 @@ -34,7 +35,7 @@ class PetApiTest extends AsyncFlatSpec with Matchers { for { addResponse <- invoker.execute(addPetRequest) - response <- invoker.execute(getPetRequest) + response <- invoker.execute(getPetRequest) } yield { addResponse.code should be(200) @@ -54,7 +55,7 @@ class PetApiTest extends AsyncFlatSpec with Matchers { } it should "update a pet" in { - val petId = (Math.random()*1000000000).toLong + val petId = (Math.random() * 1000000000).toLong val createdPet = Pet( Some(petId), Some(Category(Some(1), Some("sold"))), @@ -64,12 +65,12 @@ class PetApiTest extends AsyncFlatSpec with Matchers { Some(PetEnums.Status.Available) ) - for { - createdPet <- invoker.execute(api.addPet(createdPet)) + for { + createdPet <- invoker.execute(api.addPet(createdPet)) pet: core.ApiResponse[Pet] <- invoker.execute(api.getPetById(createdPet.content.id.get)) updatedPet = pet.content.copy(status = Some(PetEnums.Status.Sold), name = "developer") updatedPetResponse: core.ApiResponse[Pet] <- invoker.execute(api.updatePet(updatedPet)) - updatedRequested: core.ApiResponse[Pet] <- invoker.execute(api.getPetById(createdPet.content.id.get)) + updatedRequested: core.ApiResponse[Pet] <- invoker.execute(api.getPetById(createdPet.content.id.get)) } yield { pet.content.name should be("programmer") pet.content.status should be(Some(PetEnums.Status.Available)) @@ -120,4 +121,3 @@ class PetApiTest extends AsyncFlatSpec with Matchers { } */ } - From a88313c40ce5fcc3264119670756ce5813bb24ac Mon Sep 17 00:00:00 2001 From: johnthagen Date: Fri, 30 Apr 2021 14:59:33 -0400 Subject: [PATCH 075/186] [Python] Avoid DeprecationWarning in inspect.getargspec on Python 3 (#9271) * Avoid DeprecationWarning in inspect.getargspec on Python 3 * Regenerate samples --- .../src/main/resources/python-legacy/model.mustache | 7 +++++-- .../petstore_api/models/additional_properties_any_type.py | 7 +++++-- .../petstore_api/models/additional_properties_array.py | 7 +++++-- .../petstore_api/models/additional_properties_boolean.py | 7 +++++-- .../petstore_api/models/additional_properties_class.py | 7 +++++-- .../petstore_api/models/additional_properties_integer.py | 7 +++++-- .../petstore_api/models/additional_properties_number.py | 7 +++++-- .../petstore_api/models/additional_properties_object.py | 7 +++++-- .../petstore_api/models/additional_properties_string.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/animal.py | 7 +++++-- .../python-asyncio/petstore_api/models/api_response.py | 7 +++++-- .../petstore_api/models/array_of_array_of_number_only.py | 7 +++++-- .../petstore_api/models/array_of_number_only.py | 7 +++++-- .../python-asyncio/petstore_api/models/array_test.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/big_cat.py | 7 +++++-- .../python-asyncio/petstore_api/models/big_cat_all_of.py | 7 +++++-- .../python-asyncio/petstore_api/models/capitalization.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/cat.py | 7 +++++-- .../python-asyncio/petstore_api/models/cat_all_of.py | 7 +++++-- .../python-asyncio/petstore_api/models/category.py | 7 +++++-- .../python-asyncio/petstore_api/models/class_model.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/client.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/dog.py | 7 +++++-- .../python-asyncio/petstore_api/models/dog_all_of.py | 7 +++++-- .../python-asyncio/petstore_api/models/enum_arrays.py | 7 +++++-- .../python-asyncio/petstore_api/models/enum_class.py | 7 +++++-- .../python-asyncio/petstore_api/models/enum_test.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/file.py | 7 +++++-- .../petstore_api/models/file_schema_test_class.py | 7 +++++-- .../python-asyncio/petstore_api/models/format_test.py | 7 +++++-- .../petstore_api/models/has_only_read_only.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/list.py | 7 +++++-- .../python-asyncio/petstore_api/models/map_test.py | 7 +++++-- .../mixed_properties_and_additional_properties_class.py | 7 +++++-- .../petstore_api/models/model200_response.py | 7 +++++-- .../python-asyncio/petstore_api/models/model_return.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/name.py | 7 +++++-- .../python-asyncio/petstore_api/models/number_only.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/order.py | 7 +++++-- .../python-asyncio/petstore_api/models/outer_composite.py | 7 +++++-- .../python-asyncio/petstore_api/models/outer_enum.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/pet.py | 7 +++++-- .../python-asyncio/petstore_api/models/read_only_first.py | 7 +++++-- .../petstore_api/models/special_model_name.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/tag.py | 7 +++++-- .../petstore_api/models/type_holder_default.py | 7 +++++-- .../petstore_api/models/type_holder_example.py | 7 +++++-- .../petstore/python-asyncio/petstore_api/models/user.py | 7 +++++-- .../python-asyncio/petstore_api/models/xml_item.py | 7 +++++-- .../petstore_api/models/additional_properties_any_type.py | 7 +++++-- .../petstore_api/models/additional_properties_array.py | 7 +++++-- .../petstore_api/models/additional_properties_boolean.py | 7 +++++-- .../petstore_api/models/additional_properties_class.py | 7 +++++-- .../petstore_api/models/additional_properties_integer.py | 7 +++++-- .../petstore_api/models/additional_properties_number.py | 7 +++++-- .../petstore_api/models/additional_properties_object.py | 7 +++++-- .../petstore_api/models/additional_properties_string.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/animal.py | 7 +++++-- .../python-legacy/petstore_api/models/api_response.py | 7 +++++-- .../petstore_api/models/array_of_array_of_number_only.py | 7 +++++-- .../petstore_api/models/array_of_number_only.py | 7 +++++-- .../python-legacy/petstore_api/models/array_test.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/big_cat.py | 7 +++++-- .../python-legacy/petstore_api/models/big_cat_all_of.py | 7 +++++-- .../python-legacy/petstore_api/models/capitalization.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/cat.py | 7 +++++-- .../python-legacy/petstore_api/models/cat_all_of.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/category.py | 7 +++++-- .../python-legacy/petstore_api/models/class_model.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/client.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/dog.py | 7 +++++-- .../python-legacy/petstore_api/models/dog_all_of.py | 7 +++++-- .../python-legacy/petstore_api/models/enum_arrays.py | 7 +++++-- .../python-legacy/petstore_api/models/enum_class.py | 7 +++++-- .../python-legacy/petstore_api/models/enum_test.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/file.py | 7 +++++-- .../petstore_api/models/file_schema_test_class.py | 7 +++++-- .../python-legacy/petstore_api/models/format_test.py | 7 +++++-- .../petstore_api/models/has_only_read_only.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/list.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/map_test.py | 7 +++++-- .../mixed_properties_and_additional_properties_class.py | 7 +++++-- .../python-legacy/petstore_api/models/model200_response.py | 7 +++++-- .../python-legacy/petstore_api/models/model_return.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/name.py | 7 +++++-- .../python-legacy/petstore_api/models/number_only.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/order.py | 7 +++++-- .../python-legacy/petstore_api/models/outer_composite.py | 7 +++++-- .../python-legacy/petstore_api/models/outer_enum.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/pet.py | 7 +++++-- .../python-legacy/petstore_api/models/read_only_first.py | 7 +++++-- .../petstore_api/models/special_model_name.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/tag.py | 7 +++++-- .../petstore_api/models/type_holder_default.py | 7 +++++-- .../petstore_api/models/type_holder_example.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/user.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/xml_item.py | 7 +++++-- .../petstore_api/models/additional_properties_any_type.py | 7 +++++-- .../petstore_api/models/additional_properties_array.py | 7 +++++-- .../petstore_api/models/additional_properties_boolean.py | 7 +++++-- .../petstore_api/models/additional_properties_class.py | 7 +++++-- .../petstore_api/models/additional_properties_integer.py | 7 +++++-- .../petstore_api/models/additional_properties_number.py | 7 +++++-- .../petstore_api/models/additional_properties_object.py | 7 +++++-- .../petstore_api/models/additional_properties_string.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/animal.py | 7 +++++-- .../python-tornado/petstore_api/models/api_response.py | 7 +++++-- .../petstore_api/models/array_of_array_of_number_only.py | 7 +++++-- .../petstore_api/models/array_of_number_only.py | 7 +++++-- .../python-tornado/petstore_api/models/array_test.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/big_cat.py | 7 +++++-- .../python-tornado/petstore_api/models/big_cat_all_of.py | 7 +++++-- .../python-tornado/petstore_api/models/capitalization.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/cat.py | 7 +++++-- .../python-tornado/petstore_api/models/cat_all_of.py | 7 +++++-- .../python-tornado/petstore_api/models/category.py | 7 +++++-- .../python-tornado/petstore_api/models/class_model.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/client.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/dog.py | 7 +++++-- .../python-tornado/petstore_api/models/dog_all_of.py | 7 +++++-- .../python-tornado/petstore_api/models/enum_arrays.py | 7 +++++-- .../python-tornado/petstore_api/models/enum_class.py | 7 +++++-- .../python-tornado/petstore_api/models/enum_test.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/file.py | 7 +++++-- .../petstore_api/models/file_schema_test_class.py | 7 +++++-- .../python-tornado/petstore_api/models/format_test.py | 7 +++++-- .../petstore_api/models/has_only_read_only.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/list.py | 7 +++++-- .../python-tornado/petstore_api/models/map_test.py | 7 +++++-- .../mixed_properties_and_additional_properties_class.py | 7 +++++-- .../petstore_api/models/model200_response.py | 7 +++++-- .../python-tornado/petstore_api/models/model_return.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/name.py | 7 +++++-- .../python-tornado/petstore_api/models/number_only.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/order.py | 7 +++++-- .../python-tornado/petstore_api/models/outer_composite.py | 7 +++++-- .../python-tornado/petstore_api/models/outer_enum.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/pet.py | 7 +++++-- .../python-tornado/petstore_api/models/read_only_first.py | 7 +++++-- .../petstore_api/models/special_model_name.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/tag.py | 7 +++++-- .../petstore_api/models/type_holder_default.py | 7 +++++-- .../petstore_api/models/type_holder_example.py | 7 +++++-- .../petstore/python-tornado/petstore_api/models/user.py | 7 +++++-- .../python-tornado/petstore_api/models/xml_item.py | 7 +++++-- .../petstore_api/models/additional_properties_class.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/animal.py | 7 +++++-- .../python-legacy/petstore_api/models/api_response.py | 7 +++++-- .../petstore_api/models/array_of_array_of_number_only.py | 7 +++++-- .../petstore_api/models/array_of_number_only.py | 7 +++++-- .../python-legacy/petstore_api/models/array_test.py | 7 +++++-- .../python-legacy/petstore_api/models/capitalization.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/cat.py | 7 +++++-- .../python-legacy/petstore_api/models/cat_all_of.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/category.py | 7 +++++-- .../python-legacy/petstore_api/models/class_model.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/client.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/dog.py | 7 +++++-- .../python-legacy/petstore_api/models/dog_all_of.py | 7 +++++-- .../python-legacy/petstore_api/models/enum_arrays.py | 7 +++++-- .../python-legacy/petstore_api/models/enum_class.py | 7 +++++-- .../python-legacy/petstore_api/models/enum_test.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/file.py | 7 +++++-- .../petstore_api/models/file_schema_test_class.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/foo.py | 7 +++++-- .../python-legacy/petstore_api/models/format_test.py | 7 +++++-- .../petstore_api/models/has_only_read_only.py | 7 +++++-- .../petstore_api/models/health_check_result.py | 7 +++++-- .../petstore_api/models/inline_response_default.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/list.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/map_test.py | 7 +++++-- .../mixed_properties_and_additional_properties_class.py | 7 +++++-- .../python-legacy/petstore_api/models/model200_response.py | 7 +++++-- .../python-legacy/petstore_api/models/model_return.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/name.py | 7 +++++-- .../python-legacy/petstore_api/models/nullable_class.py | 7 +++++-- .../python-legacy/petstore_api/models/number_only.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/order.py | 7 +++++-- .../python-legacy/petstore_api/models/outer_composite.py | 7 +++++-- .../python-legacy/petstore_api/models/outer_enum.py | 7 +++++-- .../petstore_api/models/outer_enum_default_value.py | 7 +++++-- .../petstore_api/models/outer_enum_integer.py | 7 +++++-- .../models/outer_enum_integer_default_value.py | 7 +++++-- .../petstore_api/models/outer_object_with_enum_property.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/pet.py | 7 +++++-- .../python-legacy/petstore_api/models/read_only_first.py | 7 +++++-- .../petstore_api/models/special_model_name.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/tag.py | 7 +++++-- .../petstore/python-legacy/petstore_api/models/user.py | 7 +++++-- 189 files changed, 945 insertions(+), 378 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/python-legacy/model.mustache b/modules/openapi-generator/src/main/resources/python-legacy/model.mustache index 5b4048915eb8..236b8f8c3a2e 100644 --- a/modules/openapi-generator/src/main/resources/python-legacy/model.mustache +++ b/modules/openapi-generator/src/main/resources/python-legacy/model.mustache @@ -2,7 +2,10 @@ {{>partial_header}} -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -203,7 +206,7 @@ class {{classname}}(object): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_any_type.py b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_any_type.py index 30e6e9b81766..01457faa3a33 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_any_type.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_any_type.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_array.py b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_array.py index 2f939711e0af..c7283e161360 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_array.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_array.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_boolean.py b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_boolean.py index 32b58c24ffa8..3a8ec8f66aac 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_boolean.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_boolean.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_class.py b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_class.py index dff689699744..52c475c4460c 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_class.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -339,7 +342,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_integer.py b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_integer.py index bba82b9c8cf9..d9ee889d7a33 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_integer.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_integer.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_number.py b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_number.py index 9adeedb7e792..756fc037970f 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_number.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_number.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_object.py b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_object.py index 85f94ac205df..bfbe2db1bef9 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_object.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_object.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_string.py b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_string.py index ee8d6383348c..7c33a16fe8fc 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_string.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/additional_properties_string.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/animal.py b/samples/client/petstore/python-asyncio/petstore_api/models/animal.py index a791a5173ba1..eee29f37f881 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/animal.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/animal.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -118,7 +121,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/api_response.py b/samples/client/petstore/python-asyncio/petstore_api/models/api_response.py index ab5e7999dd2f..bddac1eb10a3 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/api_response.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/api_response.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/array_of_array_of_number_only.py b/samples/client/petstore/python-asyncio/petstore_api/models/array_of_array_of_number_only.py index c9b65c7e5315..2975adc20e31 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/array_of_array_of_number_only.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/array_of_array_of_number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/array_of_number_only.py b/samples/client/petstore/python-asyncio/petstore_api/models/array_of_number_only.py index 870286e0fc08..2a3400e76660 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/array_of_number_only.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/array_of_number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/array_test.py b/samples/client/petstore/python-asyncio/petstore_api/models/array_test.py index 04d2cb6ec602..11394dcb7bc1 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/array_test.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/array_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/big_cat.py b/samples/client/petstore/python-asyncio/petstore_api/models/big_cat.py index 7136aa867207..9a108ce3717e 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/big_cat.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/big_cat.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -85,7 +88,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/big_cat_all_of.py b/samples/client/petstore/python-asyncio/petstore_api/models/big_cat_all_of.py index 127e7c6da31a..6d6c9aeb5c0c 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/big_cat_all_of.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/big_cat_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -85,7 +88,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/capitalization.py b/samples/client/petstore/python-asyncio/petstore_api/models/capitalization.py index 064dc2eb2ff5..cb8b0d985842 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/capitalization.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/capitalization.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -211,7 +214,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/cat.py b/samples/client/petstore/python-asyncio/petstore_api/models/cat.py index 3b6e6aa4c2e8..0d9a0b20bf1a 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/cat.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/cat.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/cat_all_of.py b/samples/client/petstore/python-asyncio/petstore_api/models/cat_all_of.py index 7755fd65b0c3..0633bbf58d0d 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/cat_all_of.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/cat_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/category.py b/samples/client/petstore/python-asyncio/petstore_api/models/category.py index c3dd5a4b9a17..ef52dcbf8c91 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/category.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/category.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -106,7 +109,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/class_model.py b/samples/client/petstore/python-asyncio/petstore_api/models/class_model.py index cd9439763d20..84c0de65b472 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/class_model.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/class_model.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/client.py b/samples/client/petstore/python-asyncio/petstore_api/models/client.py index f896b35240c7..8d7c83ecfe6b 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/client.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/client.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/dog.py b/samples/client/petstore/python-asyncio/petstore_api/models/dog.py index 39514284d5f2..61acd35cdfe2 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/dog.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/dog.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/dog_all_of.py b/samples/client/petstore/python-asyncio/petstore_api/models/dog_all_of.py index 207103a48745..3a052c3258ae 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/dog_all_of.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/dog_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/enum_arrays.py b/samples/client/petstore/python-asyncio/petstore_api/models/enum_arrays.py index b87cd37456e1..eb4f3ea4ca32 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/enum_arrays.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/enum_arrays.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -119,7 +122,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/enum_class.py b/samples/client/petstore/python-asyncio/petstore_api/models/enum_class.py index 4b11877863ac..79aac3570cb9 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/enum_class.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/enum_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/enum_test.py b/samples/client/petstore/python-asyncio/petstore_api/models/enum_test.py index d1778410dee2..1f3d7cb29b89 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/enum_test.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/enum_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -208,7 +211,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/file.py b/samples/client/petstore/python-asyncio/petstore_api/models/file.py index e40cd04b0149..2c1cccac0e11 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/file.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/file.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -81,7 +84,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/file_schema_test_class.py b/samples/client/petstore/python-asyncio/petstore_api/models/file_schema_test_class.py index d266755d260a..c5a23842d4f6 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/file_schema_test_class.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/file_schema_test_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/format_test.py b/samples/client/petstore/python-asyncio/petstore_api/models/format_test.py index c193f9313e96..452582251a59 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/format_test.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/format_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -463,7 +466,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/has_only_read_only.py b/samples/client/petstore/python-asyncio/petstore_api/models/has_only_read_only.py index dac8cfaff937..7175c2acc721 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/has_only_read_only.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/has_only_read_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/list.py b/samples/client/petstore/python-asyncio/petstore_api/models/list.py index b44257224741..6e1dea4e33b5 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/list.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/list.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/map_test.py b/samples/client/petstore/python-asyncio/petstore_api/models/map_test.py index 406f35db7500..21bd2ccda980 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/map_test.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/map_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -165,7 +168,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/mixed_properties_and_additional_properties_class.py b/samples/client/petstore/python-asyncio/petstore_api/models/mixed_properties_and_additional_properties_class.py index 14428a6536a8..9e727b07d5c7 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/mixed_properties_and_additional_properties_class.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/mixed_properties_and_additional_properties_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/model200_response.py b/samples/client/petstore/python-asyncio/petstore_api/models/model200_response.py index 5c90147467b5..db587fd24e2f 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/model200_response.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/model200_response.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/model_return.py b/samples/client/petstore/python-asyncio/petstore_api/models/model_return.py index 88174ef23083..5354fd56e2ce 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/model_return.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/model_return.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/name.py b/samples/client/petstore/python-asyncio/petstore_api/models/name.py index 528988ebd437..0191a3a934ae 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/name.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/name.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -158,7 +161,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/number_only.py b/samples/client/petstore/python-asyncio/petstore_api/models/number_only.py index ebbcc8996d01..59a252e0bb66 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/number_only.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/order.py b/samples/client/petstore/python-asyncio/petstore_api/models/order.py index 6513d48a3a5e..a267324d0d19 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/order.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/order.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -217,7 +220,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/outer_composite.py b/samples/client/petstore/python-asyncio/petstore_api/models/outer_composite.py index 44124e13c09b..e26160ab4302 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/outer_composite.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/outer_composite.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/outer_enum.py b/samples/client/petstore/python-asyncio/petstore_api/models/outer_enum.py index 77624ba15408..27cdfd1fb791 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/outer_enum.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/outer_enum.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/pet.py b/samples/client/petstore/python-asyncio/petstore_api/models/pet.py index e71589429ca0..22bb4a585e47 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/pet.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/pet.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -219,7 +222,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/read_only_first.py b/samples/client/petstore/python-asyncio/petstore_api/models/read_only_first.py index 3a320fe64f06..c2888eba7500 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/read_only_first.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/read_only_first.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/special_model_name.py b/samples/client/petstore/python-asyncio/petstore_api/models/special_model_name.py index 7669a508789f..4c848e1887c0 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/special_model_name.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/special_model_name.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/tag.py b/samples/client/petstore/python-asyncio/petstore_api/models/tag.py index dbac885ad8e9..a3e6789078d8 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/tag.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/tag.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/type_holder_default.py b/samples/client/petstore/python-asyncio/petstore_api/models/type_holder_default.py index c890f5531927..582b4c8d6dc2 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/type_holder_default.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/type_holder_default.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -188,7 +191,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/type_holder_example.py b/samples/client/petstore/python-asyncio/petstore_api/models/type_holder_example.py index d52425d442ea..268595ed8681 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/type_holder_example.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/type_holder_example.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -215,7 +218,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/user.py b/samples/client/petstore/python-asyncio/petstore_api/models/user.py index b70d84a6b40e..7ae2898f6c5a 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/user.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/user.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -263,7 +266,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-asyncio/petstore_api/models/xml_item.py b/samples/client/petstore/python-asyncio/petstore_api/models/xml_item.py index d63ab77acfde..5e6fecdd71c8 100644 --- a/samples/client/petstore/python-asyncio/petstore_api/models/xml_item.py +++ b/samples/client/petstore/python-asyncio/petstore_api/models/xml_item.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -807,7 +810,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_any_type.py b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_any_type.py index 30e6e9b81766..01457faa3a33 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_any_type.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_any_type.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_array.py b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_array.py index 2f939711e0af..c7283e161360 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_array.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_array.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_boolean.py b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_boolean.py index 32b58c24ffa8..3a8ec8f66aac 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_boolean.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_boolean.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_class.py b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_class.py index dff689699744..52c475c4460c 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_class.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -339,7 +342,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_integer.py b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_integer.py index bba82b9c8cf9..d9ee889d7a33 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_integer.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_integer.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_number.py b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_number.py index 9adeedb7e792..756fc037970f 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_number.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_number.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_object.py b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_object.py index 85f94ac205df..bfbe2db1bef9 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_object.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_object.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_string.py b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_string.py index ee8d6383348c..7c33a16fe8fc 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_string.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/additional_properties_string.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/animal.py b/samples/client/petstore/python-legacy/petstore_api/models/animal.py index a791a5173ba1..eee29f37f881 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/animal.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/animal.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -118,7 +121,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/api_response.py b/samples/client/petstore/python-legacy/petstore_api/models/api_response.py index ab5e7999dd2f..bddac1eb10a3 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/api_response.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/api_response.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/array_of_array_of_number_only.py b/samples/client/petstore/python-legacy/petstore_api/models/array_of_array_of_number_only.py index c9b65c7e5315..2975adc20e31 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/array_of_array_of_number_only.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/array_of_array_of_number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/array_of_number_only.py b/samples/client/petstore/python-legacy/petstore_api/models/array_of_number_only.py index 870286e0fc08..2a3400e76660 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/array_of_number_only.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/array_of_number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/array_test.py b/samples/client/petstore/python-legacy/petstore_api/models/array_test.py index 04d2cb6ec602..11394dcb7bc1 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/array_test.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/array_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/big_cat.py b/samples/client/petstore/python-legacy/petstore_api/models/big_cat.py index 7136aa867207..9a108ce3717e 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/big_cat.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/big_cat.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -85,7 +88,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/big_cat_all_of.py b/samples/client/petstore/python-legacy/petstore_api/models/big_cat_all_of.py index 127e7c6da31a..6d6c9aeb5c0c 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/big_cat_all_of.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/big_cat_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -85,7 +88,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/capitalization.py b/samples/client/petstore/python-legacy/petstore_api/models/capitalization.py index 064dc2eb2ff5..cb8b0d985842 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/capitalization.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/capitalization.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -211,7 +214,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/cat.py b/samples/client/petstore/python-legacy/petstore_api/models/cat.py index 3b6e6aa4c2e8..0d9a0b20bf1a 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/cat.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/cat.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/cat_all_of.py b/samples/client/petstore/python-legacy/petstore_api/models/cat_all_of.py index 7755fd65b0c3..0633bbf58d0d 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/cat_all_of.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/cat_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/category.py b/samples/client/petstore/python-legacy/petstore_api/models/category.py index c3dd5a4b9a17..ef52dcbf8c91 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/category.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/category.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -106,7 +109,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/class_model.py b/samples/client/petstore/python-legacy/petstore_api/models/class_model.py index cd9439763d20..84c0de65b472 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/class_model.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/class_model.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/client.py b/samples/client/petstore/python-legacy/petstore_api/models/client.py index f896b35240c7..8d7c83ecfe6b 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/client.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/client.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/dog.py b/samples/client/petstore/python-legacy/petstore_api/models/dog.py index 39514284d5f2..61acd35cdfe2 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/dog.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/dog.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/dog_all_of.py b/samples/client/petstore/python-legacy/petstore_api/models/dog_all_of.py index 207103a48745..3a052c3258ae 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/dog_all_of.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/dog_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/enum_arrays.py b/samples/client/petstore/python-legacy/petstore_api/models/enum_arrays.py index b87cd37456e1..eb4f3ea4ca32 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/enum_arrays.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/enum_arrays.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -119,7 +122,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/enum_class.py b/samples/client/petstore/python-legacy/petstore_api/models/enum_class.py index 4b11877863ac..79aac3570cb9 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/enum_class.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/enum_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/enum_test.py b/samples/client/petstore/python-legacy/petstore_api/models/enum_test.py index d1778410dee2..1f3d7cb29b89 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/enum_test.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/enum_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -208,7 +211,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/file.py b/samples/client/petstore/python-legacy/petstore_api/models/file.py index e40cd04b0149..2c1cccac0e11 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/file.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/file.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -81,7 +84,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/file_schema_test_class.py b/samples/client/petstore/python-legacy/petstore_api/models/file_schema_test_class.py index d266755d260a..c5a23842d4f6 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/file_schema_test_class.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/file_schema_test_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/format_test.py b/samples/client/petstore/python-legacy/petstore_api/models/format_test.py index c193f9313e96..452582251a59 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/format_test.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/format_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -463,7 +466,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/has_only_read_only.py b/samples/client/petstore/python-legacy/petstore_api/models/has_only_read_only.py index dac8cfaff937..7175c2acc721 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/has_only_read_only.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/has_only_read_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/list.py b/samples/client/petstore/python-legacy/petstore_api/models/list.py index b44257224741..6e1dea4e33b5 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/list.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/list.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/map_test.py b/samples/client/petstore/python-legacy/petstore_api/models/map_test.py index 406f35db7500..21bd2ccda980 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/map_test.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/map_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -165,7 +168,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/mixed_properties_and_additional_properties_class.py b/samples/client/petstore/python-legacy/petstore_api/models/mixed_properties_and_additional_properties_class.py index 14428a6536a8..9e727b07d5c7 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/mixed_properties_and_additional_properties_class.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/mixed_properties_and_additional_properties_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/model200_response.py b/samples/client/petstore/python-legacy/petstore_api/models/model200_response.py index 5c90147467b5..db587fd24e2f 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/model200_response.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/model200_response.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/model_return.py b/samples/client/petstore/python-legacy/petstore_api/models/model_return.py index 88174ef23083..5354fd56e2ce 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/model_return.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/model_return.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/name.py b/samples/client/petstore/python-legacy/petstore_api/models/name.py index 528988ebd437..0191a3a934ae 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/name.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/name.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -158,7 +161,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/number_only.py b/samples/client/petstore/python-legacy/petstore_api/models/number_only.py index ebbcc8996d01..59a252e0bb66 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/number_only.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/order.py b/samples/client/petstore/python-legacy/petstore_api/models/order.py index 6513d48a3a5e..a267324d0d19 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/order.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/order.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -217,7 +220,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/outer_composite.py b/samples/client/petstore/python-legacy/petstore_api/models/outer_composite.py index 44124e13c09b..e26160ab4302 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/outer_composite.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/outer_composite.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/outer_enum.py b/samples/client/petstore/python-legacy/petstore_api/models/outer_enum.py index 77624ba15408..27cdfd1fb791 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/outer_enum.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/outer_enum.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/pet.py b/samples/client/petstore/python-legacy/petstore_api/models/pet.py index e71589429ca0..22bb4a585e47 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/pet.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/pet.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -219,7 +222,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/read_only_first.py b/samples/client/petstore/python-legacy/petstore_api/models/read_only_first.py index 3a320fe64f06..c2888eba7500 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/read_only_first.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/read_only_first.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/special_model_name.py b/samples/client/petstore/python-legacy/petstore_api/models/special_model_name.py index 7669a508789f..4c848e1887c0 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/special_model_name.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/special_model_name.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/tag.py b/samples/client/petstore/python-legacy/petstore_api/models/tag.py index dbac885ad8e9..a3e6789078d8 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/tag.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/tag.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/type_holder_default.py b/samples/client/petstore/python-legacy/petstore_api/models/type_holder_default.py index c890f5531927..582b4c8d6dc2 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/type_holder_default.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/type_holder_default.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -188,7 +191,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/type_holder_example.py b/samples/client/petstore/python-legacy/petstore_api/models/type_holder_example.py index d52425d442ea..268595ed8681 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/type_holder_example.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/type_holder_example.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -215,7 +218,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/user.py b/samples/client/petstore/python-legacy/petstore_api/models/user.py index b70d84a6b40e..7ae2898f6c5a 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/user.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/user.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -263,7 +266,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-legacy/petstore_api/models/xml_item.py b/samples/client/petstore/python-legacy/petstore_api/models/xml_item.py index d63ab77acfde..5e6fecdd71c8 100644 --- a/samples/client/petstore/python-legacy/petstore_api/models/xml_item.py +++ b/samples/client/petstore/python-legacy/petstore_api/models/xml_item.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -807,7 +810,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_any_type.py b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_any_type.py index 30e6e9b81766..01457faa3a33 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_any_type.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_any_type.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_array.py b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_array.py index 2f939711e0af..c7283e161360 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_array.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_array.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_boolean.py b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_boolean.py index 32b58c24ffa8..3a8ec8f66aac 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_boolean.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_boolean.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_class.py b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_class.py index dff689699744..52c475c4460c 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_class.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -339,7 +342,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_integer.py b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_integer.py index bba82b9c8cf9..d9ee889d7a33 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_integer.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_integer.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_number.py b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_number.py index 9adeedb7e792..756fc037970f 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_number.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_number.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_object.py b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_object.py index 85f94ac205df..bfbe2db1bef9 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_object.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_object.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_string.py b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_string.py index ee8d6383348c..7c33a16fe8fc 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_string.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/additional_properties_string.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/animal.py b/samples/client/petstore/python-tornado/petstore_api/models/animal.py index a791a5173ba1..eee29f37f881 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/animal.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/animal.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -118,7 +121,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/api_response.py b/samples/client/petstore/python-tornado/petstore_api/models/api_response.py index ab5e7999dd2f..bddac1eb10a3 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/api_response.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/api_response.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/array_of_array_of_number_only.py b/samples/client/petstore/python-tornado/petstore_api/models/array_of_array_of_number_only.py index c9b65c7e5315..2975adc20e31 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/array_of_array_of_number_only.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/array_of_array_of_number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/array_of_number_only.py b/samples/client/petstore/python-tornado/petstore_api/models/array_of_number_only.py index 870286e0fc08..2a3400e76660 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/array_of_number_only.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/array_of_number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/array_test.py b/samples/client/petstore/python-tornado/petstore_api/models/array_test.py index 04d2cb6ec602..11394dcb7bc1 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/array_test.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/array_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/big_cat.py b/samples/client/petstore/python-tornado/petstore_api/models/big_cat.py index 7136aa867207..9a108ce3717e 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/big_cat.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/big_cat.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -85,7 +88,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/big_cat_all_of.py b/samples/client/petstore/python-tornado/petstore_api/models/big_cat_all_of.py index 127e7c6da31a..6d6c9aeb5c0c 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/big_cat_all_of.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/big_cat_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -85,7 +88,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/capitalization.py b/samples/client/petstore/python-tornado/petstore_api/models/capitalization.py index 064dc2eb2ff5..cb8b0d985842 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/capitalization.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/capitalization.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -211,7 +214,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/cat.py b/samples/client/petstore/python-tornado/petstore_api/models/cat.py index 3b6e6aa4c2e8..0d9a0b20bf1a 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/cat.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/cat.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/cat_all_of.py b/samples/client/petstore/python-tornado/petstore_api/models/cat_all_of.py index 7755fd65b0c3..0633bbf58d0d 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/cat_all_of.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/cat_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/category.py b/samples/client/petstore/python-tornado/petstore_api/models/category.py index c3dd5a4b9a17..ef52dcbf8c91 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/category.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/category.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -106,7 +109,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/class_model.py b/samples/client/petstore/python-tornado/petstore_api/models/class_model.py index cd9439763d20..84c0de65b472 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/class_model.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/class_model.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/client.py b/samples/client/petstore/python-tornado/petstore_api/models/client.py index f896b35240c7..8d7c83ecfe6b 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/client.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/client.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/dog.py b/samples/client/petstore/python-tornado/petstore_api/models/dog.py index 39514284d5f2..61acd35cdfe2 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/dog.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/dog.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/dog_all_of.py b/samples/client/petstore/python-tornado/petstore_api/models/dog_all_of.py index 207103a48745..3a052c3258ae 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/dog_all_of.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/dog_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/enum_arrays.py b/samples/client/petstore/python-tornado/petstore_api/models/enum_arrays.py index b87cd37456e1..eb4f3ea4ca32 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/enum_arrays.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/enum_arrays.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -119,7 +122,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/enum_class.py b/samples/client/petstore/python-tornado/petstore_api/models/enum_class.py index 4b11877863ac..79aac3570cb9 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/enum_class.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/enum_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/enum_test.py b/samples/client/petstore/python-tornado/petstore_api/models/enum_test.py index d1778410dee2..1f3d7cb29b89 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/enum_test.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/enum_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -208,7 +211,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/file.py b/samples/client/petstore/python-tornado/petstore_api/models/file.py index e40cd04b0149..2c1cccac0e11 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/file.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/file.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -81,7 +84,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/file_schema_test_class.py b/samples/client/petstore/python-tornado/petstore_api/models/file_schema_test_class.py index d266755d260a..c5a23842d4f6 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/file_schema_test_class.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/file_schema_test_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/format_test.py b/samples/client/petstore/python-tornado/petstore_api/models/format_test.py index c193f9313e96..452582251a59 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/format_test.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/format_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -463,7 +466,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/has_only_read_only.py b/samples/client/petstore/python-tornado/petstore_api/models/has_only_read_only.py index dac8cfaff937..7175c2acc721 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/has_only_read_only.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/has_only_read_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/list.py b/samples/client/petstore/python-tornado/petstore_api/models/list.py index b44257224741..6e1dea4e33b5 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/list.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/list.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/map_test.py b/samples/client/petstore/python-tornado/petstore_api/models/map_test.py index 406f35db7500..21bd2ccda980 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/map_test.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/map_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -165,7 +168,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/mixed_properties_and_additional_properties_class.py b/samples/client/petstore/python-tornado/petstore_api/models/mixed_properties_and_additional_properties_class.py index 14428a6536a8..9e727b07d5c7 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/mixed_properties_and_additional_properties_class.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/mixed_properties_and_additional_properties_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/model200_response.py b/samples/client/petstore/python-tornado/petstore_api/models/model200_response.py index 5c90147467b5..db587fd24e2f 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/model200_response.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/model200_response.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/model_return.py b/samples/client/petstore/python-tornado/petstore_api/models/model_return.py index 88174ef23083..5354fd56e2ce 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/model_return.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/model_return.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/name.py b/samples/client/petstore/python-tornado/petstore_api/models/name.py index 528988ebd437..0191a3a934ae 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/name.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/name.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -158,7 +161,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/number_only.py b/samples/client/petstore/python-tornado/petstore_api/models/number_only.py index ebbcc8996d01..59a252e0bb66 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/number_only.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/order.py b/samples/client/petstore/python-tornado/petstore_api/models/order.py index 6513d48a3a5e..a267324d0d19 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/order.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/order.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -217,7 +220,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/outer_composite.py b/samples/client/petstore/python-tornado/petstore_api/models/outer_composite.py index 44124e13c09b..e26160ab4302 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/outer_composite.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/outer_composite.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/outer_enum.py b/samples/client/petstore/python-tornado/petstore_api/models/outer_enum.py index 77624ba15408..27cdfd1fb791 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/outer_enum.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/outer_enum.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/pet.py b/samples/client/petstore/python-tornado/petstore_api/models/pet.py index e71589429ca0..22bb4a585e47 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/pet.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/pet.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -219,7 +222,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/read_only_first.py b/samples/client/petstore/python-tornado/petstore_api/models/read_only_first.py index 3a320fe64f06..c2888eba7500 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/read_only_first.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/read_only_first.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/special_model_name.py b/samples/client/petstore/python-tornado/petstore_api/models/special_model_name.py index 7669a508789f..4c848e1887c0 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/special_model_name.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/special_model_name.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/tag.py b/samples/client/petstore/python-tornado/petstore_api/models/tag.py index dbac885ad8e9..a3e6789078d8 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/tag.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/tag.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/type_holder_default.py b/samples/client/petstore/python-tornado/petstore_api/models/type_holder_default.py index c890f5531927..582b4c8d6dc2 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/type_holder_default.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/type_holder_default.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -188,7 +191,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/type_holder_example.py b/samples/client/petstore/python-tornado/petstore_api/models/type_holder_example.py index d52425d442ea..268595ed8681 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/type_holder_example.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/type_holder_example.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -215,7 +218,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/user.py b/samples/client/petstore/python-tornado/petstore_api/models/user.py index b70d84a6b40e..7ae2898f6c5a 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/user.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/user.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -263,7 +266,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/client/petstore/python-tornado/petstore_api/models/xml_item.py b/samples/client/petstore/python-tornado/petstore_api/models/xml_item.py index d63ab77acfde..5e6fecdd71c8 100644 --- a/samples/client/petstore/python-tornado/petstore_api/models/xml_item.py +++ b/samples/client/petstore/python-tornado/petstore_api/models/xml_item.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -807,7 +810,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/additional_properties_class.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/additional_properties_class.py index a846775889f8..f8303e680b26 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/additional_properties_class.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/additional_properties_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/animal.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/animal.py index 2427f910a97e..1a36f3398fff 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/animal.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/animal.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -117,7 +120,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/api_response.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/api_response.py index ab5e7999dd2f..bddac1eb10a3 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/api_response.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/api_response.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_of_array_of_number_only.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_of_array_of_number_only.py index c9b65c7e5315..2975adc20e31 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_of_array_of_number_only.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_of_array_of_number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_of_number_only.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_of_number_only.py index 870286e0fc08..2a3400e76660 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_of_number_only.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_of_number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_test.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_test.py index 0e0c17ef1909..5501a637f633 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_test.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/array_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -137,7 +140,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/capitalization.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/capitalization.py index 064dc2eb2ff5..cb8b0d985842 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/capitalization.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/capitalization.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -211,7 +214,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/cat.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/cat.py index 3b6e6aa4c2e8..0d9a0b20bf1a 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/cat.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/cat.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/cat_all_of.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/cat_all_of.py index 7755fd65b0c3..0633bbf58d0d 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/cat_all_of.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/cat_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/category.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/category.py index c3dd5a4b9a17..ef52dcbf8c91 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/category.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/category.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -106,7 +109,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/class_model.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/class_model.py index cd9439763d20..84c0de65b472 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/class_model.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/class_model.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/client.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/client.py index f896b35240c7..8d7c83ecfe6b 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/client.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/client.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/dog.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/dog.py index 39514284d5f2..61acd35cdfe2 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/dog.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/dog.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/dog_all_of.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/dog_all_of.py index 207103a48745..3a052c3258ae 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/dog_all_of.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/dog_all_of.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_arrays.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_arrays.py index b87cd37456e1..eb4f3ea4ca32 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_arrays.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_arrays.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -119,7 +122,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_class.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_class.py index 4b11877863ac..79aac3570cb9 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_class.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_test.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_test.py index 09d7d1e3d809..93333df88781 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_test.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/enum_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -285,7 +288,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/file.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/file.py index e40cd04b0149..2c1cccac0e11 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/file.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/file.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -81,7 +84,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/file_schema_test_class.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/file_schema_test_class.py index d266755d260a..c5a23842d4f6 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/file_schema_test_class.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/file_schema_test_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/foo.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/foo.py index 05abc6e9b9fe..cab632f369c4 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/foo.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/foo.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/format_test.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/format_test.py index a8323ade641e..4e96a7b9175e 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/format_test.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/format_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -522,7 +525,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/has_only_read_only.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/has_only_read_only.py index dac8cfaff937..7175c2acc721 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/has_only_read_only.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/has_only_read_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/health_check_result.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/health_check_result.py index cde33f5146a4..64a3f4b2b903 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/health_check_result.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/health_check_result.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -78,7 +81,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/inline_response_default.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/inline_response_default.py index d9da22a5fd3e..a199122621ff 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/inline_response_default.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/inline_response_default.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/list.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/list.py index b44257224741..6e1dea4e33b5 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/list.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/list.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/map_test.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/map_test.py index 406f35db7500..21bd2ccda980 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/map_test.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/map_test.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -165,7 +168,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/mixed_properties_and_additional_properties_class.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/mixed_properties_and_additional_properties_class.py index 14428a6536a8..9e727b07d5c7 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/mixed_properties_and_additional_properties_class.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/mixed_properties_and_additional_properties_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/model200_response.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/model200_response.py index 5c90147467b5..db587fd24e2f 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/model200_response.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/model200_response.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/model_return.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/model_return.py index 88174ef23083..5354fd56e2ce 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/model_return.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/model_return.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/name.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/name.py index 528988ebd437..0191a3a934ae 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/name.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/name.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -158,7 +161,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/nullable_class.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/nullable_class.py index 490eb2ba7d01..d36862f8526d 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/nullable_class.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/nullable_class.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -355,7 +358,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/number_only.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/number_only.py index ebbcc8996d01..59a252e0bb66 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/number_only.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/number_only.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/order.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/order.py index 6513d48a3a5e..a267324d0d19 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/order.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/order.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -217,7 +220,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_composite.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_composite.py index 44124e13c09b..e26160ab4302 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_composite.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_composite.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -131,7 +134,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum.py index 77624ba15408..27cdfd1fb791 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_default_value.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_default_value.py index aae43db66e67..982e9599d0e5 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_default_value.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_default_value.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_integer.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_integer.py index d3d9ca3dbf9f..3feec9c5a5a2 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_integer.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_integer.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_integer_default_value.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_integer_default_value.py index 9e0ed2c1a8b1..6757a4d63674 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_integer_default_value.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_enum_integer_default_value.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -60,7 +63,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_object_with_enum_property.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_object_with_enum_property.py index 8a50b129a7fb..b9572300b6f6 100644 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_object_with_enum_property.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/outer_object_with_enum_property.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -80,7 +83,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/pet.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/pet.py index e71589429ca0..22bb4a585e47 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/pet.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/pet.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -219,7 +222,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/read_only_first.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/read_only_first.py index 3a320fe64f06..c2888eba7500 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/read_only_first.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/read_only_first.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/special_model_name.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/special_model_name.py index 7669a508789f..4c848e1887c0 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/special_model_name.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/special_model_name.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -79,7 +82,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/tag.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/tag.py index dbac885ad8e9..a3e6789078d8 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/tag.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/tag.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -105,7 +108,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/user.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/user.py index b70d84a6b40e..7ae2898f6c5a 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/models/user.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/models/user.py @@ -10,7 +10,10 @@ """ -import inspect +try: + from inspect import getfullargspec +except ImportError: + from inspect import getargspec as getfullargspec import pprint import re # noqa: F401 import six @@ -263,7 +266,7 @@ def to_dict(self, serialize=False): def convert(x): if hasattr(x, "to_dict"): - args = inspect.getargspec(x.to_dict).args + args = getfullargspec(x.to_dict).args if len(args) == 1: return x.to_dict() else: From 3da1999135e8fdde892d67ade26e89559d30cab4 Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 3 May 2021 10:45:55 -0400 Subject: [PATCH 076/186] Fix typo in readme (#9387) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c27f86b1531d..2e3ff4b34d77 100644 --- a/README.md +++ b/README.md @@ -562,7 +562,7 @@ When code is generated from this project, it shall be considered **AS IS** and o ### [3.5 - IDE Integration](#table-of-contents) -Here is a list of community-conitributed IDE plug-ins that integrate with OpenAPI Generator: +Here is a list of community-contributed IDE plug-ins that integrate with OpenAPI Generator: - Eclipse: [Codewind OpenAPI Tools for Eclipse](https://www.eclipse.org/codewind/open-api-tools-for-eclipse.html) by [IBM](https://www.ibm.com) - IntelliJ IDEA: [OpenAPI Generator](https://plugins.jetbrains.com/plugin/8433-openapi-generator) by [Jim Schubert](https://jimschubert.us/#/) From d21743e9e59114814d703e8ff4b42598ba885138 Mon Sep 17 00:00:00 2001 From: Stefan Wendt Date: Mon, 3 May 2021 18:15:52 +0200 Subject: [PATCH 077/186] [TypeScript-fetch] Fix issue 9360 (#9362) * [TypeScript] Fix misplaced parentheses * [TypeScript] Run PR relevant scripts * [TypeScript] ensure up to date * Revert "[TypeScript] ensure up to date" This reverts commit 320ec45f * Revert "[TypeScript] Run PR relevant scripts" This reverts commit 23cda753 Co-authored-by: Stefan Wendt --- .../src/main/resources/typescript-fetch/modelGeneric.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache b/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache index 00d4e010fa0d..3036e3662907 100644 --- a/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-fetch/modelGeneric.mustache @@ -109,7 +109,7 @@ export function {{classname}}ToJSON(value?: {{classname}} | null): any { {{^isPrimitiveType}} {{#isArray}} {{#uniqueItems}} - '{{baseName}}': {{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}Array.from((value.{{name}} as Set).map({{#items}}{{datatype}}{{/items}}ToJSON))), + '{{baseName}}': {{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}Array.from(value.{{name}} as Set).map({{#items}}{{datatype}}{{/items}}ToJSON)), {{/uniqueItems}} {{^uniqueItems}} '{{baseName}}': {{^required}}value.{{name}} === undefined ? undefined : {{/required}}({{#isNullable}}value.{{name}} === null ? null : {{/isNullable}}(value.{{name}} as Array).map({{#items}}{{datatype}}{{/items}}ToJSON)), From e9fa93688617d0cb602c5805c48d80750d570289 Mon Sep 17 00:00:00 2001 From: Luca Mazzanti Date: Tue, 4 May 2021 17:58:20 +0200 Subject: [PATCH 078/186] [csharp][netcore-httpclient] Refactor of constructors: removed obsolete attribute (#9373) * Removed obsolete attribute on constructors without HttpClient prameter * add clickable link in the tooltip * update doc, add tests Co-authored-by: William Cheng --- .../resources/csharp-netcore/README.mustache | 11 +++ .../resources/csharp-netcore/api_doc.mustache | 11 +++ .../libraries/httpclient/ApiClient.mustache | 6 +- .../libraries/httpclient/api.mustache | 9 +- .../OpenAPIClient-httpclient/README.md | 6 +- .../docs/AnotherFakeApi.md | 6 +- .../docs/DefaultApi.md | 6 +- .../OpenAPIClient-httpclient/docs/FakeApi.md | 90 +++++++++++++++---- .../docs/FakeClassnameTags123Api.md | 6 +- .../OpenAPIClient-httpclient/docs/PetApi.md | 54 +++++++++-- .../OpenAPIClient-httpclient/docs/StoreApi.md | 24 ++++- .../OpenAPIClient-httpclient/docs/UserApi.md | 48 ++++++++-- .../Org.OpenAPITools.Test/Api/PetApiTests.cs | 12 ++- .../Org.OpenAPITools/Api/AnotherFakeApi.cs | 9 +- .../src/Org.OpenAPITools/Api/DefaultApi.cs | 9 +- .../src/Org.OpenAPITools/Api/FakeApi.cs | 9 +- .../Api/FakeClassnameTags123Api.cs | 9 +- .../src/Org.OpenAPITools/Api/PetApi.cs | 9 +- .../src/Org.OpenAPITools/Api/StoreApi.cs | 9 +- .../src/Org.OpenAPITools/Api/UserApi.cs | 9 +- .../src/Org.OpenAPITools/Client/ApiClient.cs | 6 +- 21 files changed, 287 insertions(+), 71 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/README.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/README.mustache index c5f3c0eadfa9..b15d2a25bf19 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/README.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/README.mustache @@ -137,6 +137,9 @@ services.AddHttpClient(httpClient => ```csharp using System.Collections.Generic; using System.Diagnostics; +{{#useHttpClient}} +using System.Net.Http; +{{/useHttpClient}} using {{packageName}}.{{apiPackage}}; using {{packageName}}.Client; using {{packageName}}.{{modelPackage}}; @@ -174,7 +177,15 @@ namespace Example {{/authMethods}} {{/hasAuthMethods}} + {{#useHttpClient}} + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new {{classname}}(httpClient, config, httpClientHandler); + {{/useHttpClient}} + {{^useHttpClient}} var apiInstance = new {{classname}}(config); + {{/useHttpClient}} {{#allParams}} {{#isPrimitiveType}} var {{paramName}} = {{{example}}}; // {{{dataType}}} | {{{description}}}{{^required}} (optional) {{/required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}} diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/api_doc.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/api_doc.mustache index 0fd9f8790611..d12ee22ea388 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/api_doc.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/api_doc.mustache @@ -22,6 +22,9 @@ Method | HTTP request | Description ```csharp using System.Collections.Generic; using System.Diagnostics; +{{#useHttpClient}} +using System.Net.Http; +{{/useHttpClient}} using {{packageName}}.{{apiPackage}}; using {{packageName}}.Client; using {{packageName}}.{{modelPackage}}; @@ -58,7 +61,15 @@ namespace Example {{/authMethods}} {{/hasAuthMethods}} + {{#useHttpClient}} + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new {{classname}}(httpClient, config, httpClientHandler); + {{/useHttpClient}} + {{^useHttpClient}} var apiInstance = new {{classname}}(config); + {{/useHttpClient}} {{#allParams}} {{#isPrimitiveType}} var {{paramName}} = {{{example}}}; // {{{dataType}}} | {{{description}}}{{^required}} (optional) {{/required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}} diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache index 619bcb6bfbb5..640e0335c119 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache @@ -191,8 +191,9 @@ namespace {{packageName}}.Client /// /// Initializes a new instance of the , defaulting to the global configurations' base url. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public ApiClient() : this({{packageName}}.Client.GlobalConfiguration.Instance.BasePath) { @@ -200,10 +201,11 @@ namespace {{packageName}}.Client /// /// Initializes a new instance of the . + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// The target service's base path in URL format. /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public ApiClient(String basePath) { if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/api.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/api.mustache index efa52cfbd418..0a3389d0a450 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/api.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/api.mustache @@ -106,20 +106,22 @@ namespace {{packageName}}.{{apiPackage}} /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public {{classname}}() : this((string)null) { } /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// The target service's base path in URL format. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public {{classname}}(String basePath) { this.Configuration = {{packageName}}.Client.Configuration.MergeConfigurations( @@ -136,11 +138,12 @@ namespace {{packageName}}.{{apiPackage}} /// /// Initializes a new instance of the class using Configuration object. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// An instance of Configuration. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public {{classname}}({{packageName}}.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/README.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/README.md index e16da183ea85..48379909c58f 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/README.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/README.md @@ -83,6 +83,7 @@ services.AddHttpClient(httpClient => ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -96,7 +97,10 @@ namespace Example Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new AnotherFakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new AnotherFakeApi(httpClient, config, httpClientHandler); var modelClient = new ModelClient(); // ModelClient | client model try diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/AnotherFakeApi.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/AnotherFakeApi.md index 93fca7e408ac..83cdaf2ae930 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/AnotherFakeApi.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/AnotherFakeApi.md @@ -19,6 +19,7 @@ To test special tags and operation ID starting with number ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -31,7 +32,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new AnotherFakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new AnotherFakeApi(httpClient, config, httpClientHandler); var modelClient = new ModelClient(); // ModelClient | client model try diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/DefaultApi.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/DefaultApi.md index 6f5de6b68511..ec7241832837 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/DefaultApi.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/DefaultApi.md @@ -17,6 +17,7 @@ Method | HTTP request | Description ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -29,7 +30,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new DefaultApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new DefaultApi(httpClient, config, httpClientHandler); try { diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeApi.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeApi.md index af8d565abfb1..947fbb114ef3 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeApi.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeApi.md @@ -31,6 +31,7 @@ Health check endpoint ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -43,7 +44,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); try { @@ -98,6 +102,7 @@ Test serialization of outer boolean types ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -110,7 +115,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var body = true; // bool? | Input boolean as post body (optional) try @@ -168,6 +176,7 @@ Test serialization of object with outer number type ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -180,7 +189,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var outerComposite = new OuterComposite(); // OuterComposite | Input composite as post body (optional) try @@ -238,6 +250,7 @@ Test serialization of outer number types ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -250,7 +263,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var body = 8.14; // decimal? | Input number as post body (optional) try @@ -308,6 +324,7 @@ Test serialization of outer string types ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -320,7 +337,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var body = body_example; // string | Input string as post body (optional) try @@ -376,6 +396,7 @@ Array of Enums ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -388,7 +409,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); try { @@ -443,6 +467,7 @@ For this test, the body for this request much reference a schema named `File`. ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -455,7 +480,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var fileSchemaTestClass = new FileSchemaTestClass(); // FileSchemaTestClass | try @@ -510,6 +538,7 @@ No authorization required ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -522,7 +551,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var query = query_example; // string | var user = new User(); // User | @@ -581,6 +613,7 @@ To test \"client\" model ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -593,7 +626,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var modelClient = new ModelClient(); // ModelClient | client model try @@ -652,6 +688,7 @@ Fake endpoint for testing various parameters 假端點 偽のエンドポイン ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -668,7 +705,10 @@ namespace Example config.Username = "YOUR_USERNAME"; config.Password = "YOUR_PASSWORD"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var number = 8.14; // decimal | None var _double = 1.2D; // double | None var patternWithoutDelimiter = patternWithoutDelimiter_example; // string | None @@ -753,6 +793,7 @@ To test enum parameters ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -765,7 +806,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var enumHeaderStringArray = enumHeaderStringArray_example; // List | Header parameter enum test (string array) (optional) var enumHeaderString = enumHeaderString_example; // string | Header parameter enum test (string) (optional) (default to -efg) var enumQueryStringArray = enumQueryStringArray_example; // List | Query parameter enum test (string array) (optional) @@ -838,6 +882,7 @@ Fake endpoint to test group parameters (optional) ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -853,7 +898,10 @@ namespace Example // Configure Bearer token for authorization: bearer_test config.AccessToken = "YOUR_BEARER_TOKEN"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var requiredStringGroup = 56; // int | Required String in group parameters var requiredBooleanGroup = true; // bool | Required Boolean in group parameters var requiredInt64Group = 789; // long | Required Integer in group parameters @@ -919,6 +967,7 @@ test inline additionalProperties ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -931,7 +980,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var requestBody = new Dictionary(); // Dictionary | request body try @@ -987,6 +1039,7 @@ test json serialization of form data ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -999,7 +1052,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var param = param_example; // string | field1 var param2 = param2_example; // string | field2 @@ -1059,6 +1115,7 @@ To test the collection format in query parameters ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -1071,7 +1128,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new FakeApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeApi(httpClient, config, httpClientHandler); var pipe = new List(); // List | var ioutil = new List(); // List | var http = new List(); // List | diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeClassnameTags123Api.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeClassnameTags123Api.md index 13235fbd10f0..4c748ad71c8e 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeClassnameTags123Api.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeClassnameTags123Api.md @@ -19,6 +19,7 @@ To test class name in snake case ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -36,7 +37,10 @@ namespace Example // Uncomment below to setup prefix (e.g. Bearer) for API key, if needed // config.AddApiKeyPrefix("api_key_query", "Bearer"); - var apiInstance = new FakeClassnameTags123Api(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new FakeClassnameTags123Api(httpClient, config, httpClientHandler); var modelClient = new ModelClient(); // ModelClient | client model try diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/PetApi.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/PetApi.md index 47820f406dd2..9f4ec108d05f 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/PetApi.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/PetApi.md @@ -25,6 +25,7 @@ Add a new pet to the store ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -40,7 +41,10 @@ namespace Example // Configure OAuth2 access token for authorization: petstore_auth config.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new PetApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new PetApi(httpClient, config, httpClientHandler); var pet = new Pet(); // Pet | Pet object that needs to be added to the store try @@ -96,6 +100,7 @@ Deletes a pet ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -111,7 +116,10 @@ namespace Example // Configure OAuth2 access token for authorization: petstore_auth config.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new PetApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new PetApi(httpClient, config, httpClientHandler); var petId = 789; // long | Pet id to delete var apiKey = apiKey_example; // string | (optional) @@ -171,6 +179,7 @@ Multiple status values can be provided with comma separated strings ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -186,7 +195,10 @@ namespace Example // Configure OAuth2 access token for authorization: petstore_auth config.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new PetApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new PetApi(httpClient, config, httpClientHandler); var status = status_example; // List | Status values that need to be considered for filter try @@ -246,6 +258,7 @@ Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -261,7 +274,10 @@ namespace Example // Configure OAuth2 access token for authorization: petstore_auth config.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new PetApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new PetApi(httpClient, config, httpClientHandler); var tags = new List(); // List | Tags to filter by try @@ -321,6 +337,7 @@ Returns a single pet ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -338,7 +355,10 @@ namespace Example // Uncomment below to setup prefix (e.g. Bearer) for API key, if needed // config.AddApiKeyPrefix("api_key", "Bearer"); - var apiInstance = new PetApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new PetApi(httpClient, config, httpClientHandler); var petId = 789; // long | ID of pet to return try @@ -397,6 +417,7 @@ Update an existing pet ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -412,7 +433,10 @@ namespace Example // Configure OAuth2 access token for authorization: petstore_auth config.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new PetApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new PetApi(httpClient, config, httpClientHandler); var pet = new Pet(); // Pet | Pet object that needs to be added to the store try @@ -470,6 +494,7 @@ Updates a pet in the store with form data ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -485,7 +510,10 @@ namespace Example // Configure OAuth2 access token for authorization: petstore_auth config.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new PetApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new PetApi(httpClient, config, httpClientHandler); var petId = 789; // long | ID of pet that needs to be updated var name = name_example; // string | Updated name of the pet (optional) var status = status_example; // string | Updated status of the pet (optional) @@ -545,6 +573,7 @@ uploads an image ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -560,7 +589,10 @@ namespace Example // Configure OAuth2 access token for authorization: petstore_auth config.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new PetApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new PetApi(httpClient, config, httpClientHandler); var petId = 789; // long | ID of pet to update var additionalMetadata = additionalMetadata_example; // string | Additional data to pass to server (optional) var file = BINARY_DATA_HERE; // System.IO.Stream | file to upload (optional) @@ -621,6 +653,7 @@ uploads an image (required) ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -636,7 +669,10 @@ namespace Example // Configure OAuth2 access token for authorization: petstore_auth config.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new PetApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new PetApi(httpClient, config, httpClientHandler); var petId = 789; // long | ID of pet to update var requiredFile = BINARY_DATA_HERE; // System.IO.Stream | file to upload var additionalMetadata = additionalMetadata_example; // string | Additional data to pass to server (optional) diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/StoreApi.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/StoreApi.md index 24e2480d5deb..248bf31f849c 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/StoreApi.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/StoreApi.md @@ -22,6 +22,7 @@ For valid response try integer IDs with value < 1000. Anything above 1000 or non ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -34,7 +35,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new StoreApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new StoreApi(httpClient, config, httpClientHandler); var orderId = orderId_example; // string | ID of the order that needs to be deleted try @@ -93,6 +97,7 @@ Returns a map of status codes to quantities ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -110,7 +115,10 @@ namespace Example // Uncomment below to setup prefix (e.g. Bearer) for API key, if needed // config.AddApiKeyPrefix("api_key", "Bearer"); - var apiInstance = new StoreApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new StoreApi(httpClient, config, httpClientHandler); try { @@ -165,6 +173,7 @@ For valid response try integer IDs with value <= 5 or > 10. Other values will ge ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -177,7 +186,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new StoreApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new StoreApi(httpClient, config, httpClientHandler); var orderId = 789; // long | ID of pet that needs to be fetched try @@ -236,6 +248,7 @@ Place an order for a pet ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -248,7 +261,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new StoreApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new StoreApi(httpClient, config, httpClientHandler); var order = new Order(); // Order | order placed for purchasing the pet try diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/UserApi.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/UserApi.md index aa12c26c69f1..417d9002cf94 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/UserApi.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/UserApi.md @@ -26,6 +26,7 @@ This can only be done by the logged in user. ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -38,7 +39,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new UserApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new UserApi(httpClient, config, httpClientHandler); var user = new User(); // User | Created user object try @@ -94,6 +98,7 @@ Creates list of users with given input array ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -106,7 +111,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new UserApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new UserApi(httpClient, config, httpClientHandler); var user = new List(); // List | List of user object try @@ -162,6 +170,7 @@ Creates list of users with given input array ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -174,7 +183,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new UserApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new UserApi(httpClient, config, httpClientHandler); var user = new List(); // List | List of user object try @@ -232,6 +244,7 @@ This can only be done by the logged in user. ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -244,7 +257,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new UserApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new UserApi(httpClient, config, httpClientHandler); var username = username_example; // string | The name that needs to be deleted try @@ -301,6 +317,7 @@ Get user by user name ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -313,7 +330,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new UserApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new UserApi(httpClient, config, httpClientHandler); var username = username_example; // string | The name that needs to be fetched. Use user1 for testing. try @@ -372,6 +392,7 @@ Logs user into the system ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -384,7 +405,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new UserApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new UserApi(httpClient, config, httpClientHandler); var username = username_example; // string | The user name for login var password = password_example; // string | The password for login in clear text @@ -444,6 +468,7 @@ Logs out current logged in user session ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -456,7 +481,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new UserApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new UserApi(httpClient, config, httpClientHandler); try { @@ -510,6 +538,7 @@ This can only be done by the logged in user. ```csharp using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using Org.OpenAPITools.Api; using Org.OpenAPITools.Client; using Org.OpenAPITools.Model; @@ -522,7 +551,10 @@ namespace Example { Configuration config = new Configuration(); config.BasePath = "http://petstore.swagger.io:80/v2"; - var apiInstance = new UserApi(config); + // create instances of HttpClient, HttpClientHandler to be reused later with different Api classes + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + var apiInstance = new UserApi(httpClient, config, httpClientHandler); var username = username_example; // string | name that need to be deleted var user = new User(); // User | Updated user object diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs index eca3164a17fd..04ef8503f955 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs @@ -16,6 +16,8 @@ using System.Reflection; using Xunit; +using System.Net.Http; + using Org.OpenAPITools.Client; using Org.OpenAPITools.Api; using Org.OpenAPITools.Model; @@ -73,8 +75,10 @@ private byte[] GetBytes(string str) } public PetApiTests() - { - instance = new PetApi(); + { + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + instance = new PetApi(httpClient, httpClientHandler); // create pet Pet p = createPet(); @@ -153,7 +157,9 @@ public void GetPetByIdTest() c1.Timeout = 10000; c1.UserAgent = "TEST_USER_AGENT"; - PetApi petApi = new PetApi(c1); + HttpClient httpClient = new HttpClient(); + HttpClientHandler httpClientHandler = new HttpClientHandler(); + PetApi petApi = new PetApi(httpClient, c1, httpClientHandler); Pet response = petApi.GetPetById(petId); Assert.IsType(response); diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs index 83a938cf365d..8498781b05c4 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/AnotherFakeApi.cs @@ -100,20 +100,22 @@ public partial class AnotherFakeApi : IDisposable, IAnotherFakeApi /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public AnotherFakeApi() : this((string)null) { } /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// The target service's base path in URL format. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public AnotherFakeApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -128,11 +130,12 @@ public AnotherFakeApi(String basePath) /// /// Initializes a new instance of the class using Configuration object. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// An instance of Configuration. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public AnotherFakeApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/DefaultApi.cs index 84b91a9a1712..299f2875b21c 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/DefaultApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/DefaultApi.cs @@ -93,20 +93,22 @@ public partial class DefaultApi : IDisposable, IDefaultApi /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public DefaultApi() : this((string)null) { } /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// The target service's base path in URL format. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public DefaultApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -121,11 +123,12 @@ public DefaultApi(String basePath) /// /// Initializes a new instance of the class using Configuration object. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// An instance of Configuration. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public DefaultApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs index 305a59a6b5bd..66f86c619fcf 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs @@ -817,20 +817,22 @@ public partial class FakeApi : IDisposable, IFakeApi /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeApi() : this((string)null) { } /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// The target service's base path in URL format. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -845,11 +847,12 @@ public FakeApi(String basePath) /// /// Initializes a new instance of the class using Configuration object. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// An instance of Configuration. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs index f9c9d3b33cea..efec560791ec 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeClassnameTags123Api.cs @@ -100,20 +100,22 @@ public partial class FakeClassnameTags123Api : IDisposable, IFakeClassnameTags12 /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeClassnameTags123Api() : this((string)null) { } /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// The target service's base path in URL format. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeClassnameTags123Api(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -128,11 +130,12 @@ public FakeClassnameTags123Api(String basePath) /// /// Initializes a new instance of the class using Configuration object. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// An instance of Configuration. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public FakeClassnameTags123Api(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs index b43e10ad1ffb..7f9a79b6bb3d 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs @@ -462,20 +462,22 @@ public partial class PetApi : IDisposable, IPetApi /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public PetApi() : this((string)null) { } /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// The target service's base path in URL format. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public PetApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -490,11 +492,12 @@ public PetApi(String basePath) /// /// Initializes a new instance of the class using Configuration object. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// An instance of Configuration. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public PetApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/StoreApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/StoreApi.cs index f174edf50628..d7b0b43698af 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/StoreApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/StoreApi.cs @@ -225,20 +225,22 @@ public partial class StoreApi : IDisposable, IStoreApi /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public StoreApi() : this((string)null) { } /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// The target service's base path in URL format. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public StoreApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -253,11 +255,12 @@ public StoreApi(String basePath) /// /// Initializes a new instance of the class using Configuration object. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// An instance of Configuration. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public StoreApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/UserApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/UserApi.cs index 0426a00745eb..9b4826f955eb 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/UserApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/UserApi.cs @@ -397,20 +397,22 @@ public partial class UserApi : IDisposable, IUserApi /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public UserApi() : this((string)null) { } /// /// Initializes a new instance of the class. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// The target service's base path in URL format. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public UserApi(String basePath) { this.Configuration = Org.OpenAPITools.Client.Configuration.MergeConfigurations( @@ -425,11 +427,12 @@ public UserApi(String basePath) /// /// Initializes a new instance of the class using Configuration object. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// An instance of Configuration. /// /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public UserApi(Org.OpenAPITools.Client.Configuration configuration) { if (configuration == null) throw new ArgumentNullException("configuration"); diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs index 26695dd48d45..9bdab1cf4c87 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs @@ -191,8 +191,9 @@ public partial class ApiClient : IDisposable, ISynchronousClient, IAsynchronousC /// /// Initializes a new instance of the , defaulting to the global configurations' base url. + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public ApiClient() : this(Org.OpenAPITools.Client.GlobalConfiguration.Instance.BasePath) { @@ -200,10 +201,11 @@ public partial class ApiClient : IDisposable, ISynchronousClient, IAsynchronousC /// /// Initializes a new instance of the . + /// **IMPORTANT** This will also create an istance of HttpClient, which is less than ideal. + /// It's better to reuse the HttpClient and HttpClientHander. /// /// The target service's base path in URL format. /// - [Obsolete("Constructors without HttpClient have non-trivial drawbacks and are thus considered deprecated. Check README.md for details.")] public ApiClient(String basePath) { if (string.IsNullOrEmpty(basePath)) throw new ArgumentException("basePath cannot be empty"); From 4d2b022619ccf85fe30f9dbf33f7c12e24933abf Mon Sep 17 00:00:00 2001 From: shylacs Date: Tue, 4 May 2021 09:08:15 -0700 Subject: [PATCH 079/186] Add VMware to users list (#9388) * Add VMware to users list LMK if I can provide the png for company logo. I tried uploading to img folder and could not. * add logo, update readme Co-authored-by: William Cheng --- README.md | 1 + website/src/dynamic/users.yml | 5 +++++ website/static/img/companies/vmware.png | Bin 0 -> 3140 bytes 3 files changed, 6 insertions(+) create mode 100644 website/static/img/companies/vmware.png diff --git a/README.md b/README.md index 2e3ff4b34d77..c994f615fa62 100644 --- a/README.md +++ b/README.md @@ -666,6 +666,7 @@ Here are some companies/projects (alphabetical order) using OpenAPI Generator in - [Twitter](https://twitter.com) - [unblu inc.](https://www.unblu.com/) - [Veamly](https://www.veamly.com/) +- [VMWare](https://www.vmware.com/) - [wbt-solutions](https://www.wbt-solutions.de/) - [Woleet](https://www.woleet.io/) - [WSO2](https://wso2.com/) diff --git a/website/src/dynamic/users.yml b/website/src/dynamic/users.yml index 38104947192d..7b955bfe3372 100644 --- a/website/src/dynamic/users.yml +++ b/website/src/dynamic/users.yml @@ -453,6 +453,11 @@ image: "img/companies/viadee.jpg" infoLink: "https://www.viadee.de" pinned: false +- + caption: "VMware" + image: "img/companies/vmware.png" + infoLink: "https://www.vmware.com/" + pinned: false - caption: Vonage image: "img/companies/vonage.png" diff --git a/website/static/img/companies/vmware.png b/website/static/img/companies/vmware.png new file mode 100644 index 0000000000000000000000000000000000000000..7e697256a9e1771186befa93dea15f8564c7e95b GIT binary patch literal 3140 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 e(f57+6<`32R!k6Gk%emj0000 Date: Wed, 5 May 2021 10:52:47 +0200 Subject: [PATCH 080/186] [C++] [Pistache] Model validation, general overhaul (#9251) * overhaul pistache templates * fix function signature in model-source return type now aligns with definition in model-header * use default keyword for destructors * generate pistache samples * move bin/configs/other/cpp-pistache-server-cpp-pistache.yaml to bin/configs/cpp-pistache-server-cpp-pistache.yaml * Only generate validation body if necessary * generate pistache samples --- .../cpp-pistache-server-cpp-pistache.yaml | 0 .../languages/CppPistacheServerCodegen.java | 1 + .../cpp-pistache-server/api-header.mustache | 37 ++-- .../api-impl-header.mustache | 15 +- .../api-impl-source.mustache | 7 +- .../cpp-pistache-server/api-source.mustache | 60 ++++-- .../helpers-header.mustache | 86 ++++++-- .../helpers-source.mustache | 76 +++++-- .../cpp-pistache-server/model-header.mustache | 31 ++- .../cpp-pistache-server/model-source.mustache | 78 +++++-- .../model-struct-header.mustache | 11 +- .../model-struct-source.mustache | 9 +- .../model-validation-body.mustache | 124 +++++++++++ .../cpp-pistache/.openapi-generator/VERSION | 2 +- .../petstore/cpp-pistache/api/PetApi.cpp | 174 ++++++++++------ .../server/petstore/cpp-pistache/api/PetApi.h | 45 ++-- .../petstore/cpp-pistache/api/StoreApi.cpp | 106 ++++++---- .../petstore/cpp-pistache/api/StoreApi.h | 39 ++-- .../petstore/cpp-pistache/api/UserApi.cpp | 194 ++++++++++++------ .../petstore/cpp-pistache/api/UserApi.h | 45 ++-- .../petstore/cpp-pistache/impl/PetApiImpl.cpp | 5 +- .../petstore/cpp-pistache/impl/PetApiImpl.h | 17 +- .../cpp-pistache/impl/StoreApiImpl.cpp | 5 +- .../petstore/cpp-pistache/impl/StoreApiImpl.h | 17 +- .../cpp-pistache/impl/UserApiImpl.cpp | 5 +- .../petstore/cpp-pistache/impl/UserApiImpl.h | 17 +- .../cpp-pistache/model/ApiResponse.cpp | 59 +++++- .../petstore/cpp-pistache/model/ApiResponse.h | 31 ++- .../petstore/cpp-pistache/model/Category.cpp | 55 ++++- .../petstore/cpp-pistache/model/Category.h | 31 ++- .../petstore/cpp-pistache/model/Helpers.cpp | 78 +++++-- .../petstore/cpp-pistache/model/Helpers.h | 88 ++++++-- .../petstore/cpp-pistache/model/Order.cpp | 71 ++++++- .../petstore/cpp-pistache/model/Order.h | 31 ++- .../petstore/cpp-pistache/model/Pet.cpp | 117 +++++++++-- .../server/petstore/cpp-pistache/model/Pet.h | 35 ++-- .../petstore/cpp-pistache/model/Tag.cpp | 55 ++++- .../server/petstore/cpp-pistache/model/Tag.h | 31 ++- .../petstore/cpp-pistache/model/User.cpp | 79 ++++++- .../server/petstore/cpp-pistache/model/User.h | 31 ++- 40 files changed, 1461 insertions(+), 537 deletions(-) rename bin/configs/{other => }/cpp-pistache-server-cpp-pistache.yaml (100%) create mode 100644 modules/openapi-generator/src/main/resources/cpp-pistache-server/model-validation-body.mustache diff --git a/bin/configs/other/cpp-pistache-server-cpp-pistache.yaml b/bin/configs/cpp-pistache-server-cpp-pistache.yaml similarity index 100% rename from bin/configs/other/cpp-pistache-server-cpp-pistache.yaml rename to bin/configs/cpp-pistache-server-cpp-pistache.yaml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java index bf49fd425e05..3064af52c20d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java @@ -128,6 +128,7 @@ public CppPistacheServerCodegen() { typeMapping.put("boolean", "bool"); typeMapping.put("array", "std::vector"); typeMapping.put("map", "std::map"); + typeMapping.put("set", "std::vector"); typeMapping.put("file", "std::string"); typeMapping.put("object", "Object"); typeMapping.put("binary", "std::string"); diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-header.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-header.mustache index 7beb0990a960..f614d478e96c 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-header.mustache @@ -14,24 +14,21 @@ #include #include {{^hasModelImport}}#include {{/hasModelImport}} +#include {{#imports}}{{{import}}} {{/imports}} -{{#apiNamespaceDeclarations}} -namespace {{this}} { -{{/apiNamespaceDeclarations}} - -{{#hasModelImport}} -using namespace {{modelNamespace}};{{/hasModelImport}} +namespace {{apiNamespace}} +{ class {{declspec}} {{classname}} { public: - {{classname}}(std::shared_ptr); - virtual ~{{classname}}() {} + explicit {{classname}}(const std::shared_ptr& rtr); + virtual ~{{classname}}() = default; void init(); - const std::string base = "{{basePathWithoutHost}}"; + static const std::string base; private: void setupRoutes(); @@ -41,9 +38,21 @@ private: {{/operation}} void {{classnameSnakeLowerCase}}_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); - std::shared_ptr router; - {{#operation}} + const std::shared_ptr router; + + /// + /// Helper function to handle unexpected Exceptions during Parameter parsing and validation. + /// May be overriden to return custom error formats. + /// + virtual std::pair handleParsingException(const std::exception& ex) const noexcept; + /// + /// Helper function to handle unexpected Exceptions during processing of the request in handler functions. + /// May be overriden to return custom error formats. + /// + virtual std::pair handleOperationException(const std::exception& ex) const noexcept; + + {{#operation}} /// /// {{summary}} /// @@ -54,7 +63,7 @@ private: {{#allParams}} /// {{description}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}} {{/allParams}} - virtual void {{operationIdSnakeCase}}({{#allParams}}const {{{dataType}}} &{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}Pistache::Http::ResponseWriter &response) = 0; + virtual void {{operationIdSnakeCase}}({{#allParams}}const {{#isModel}}{{modelNamespace}}::{{/isModel}}{{{dataType}}} &{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}Pistache::Http::ResponseWriter &response) = 0; {{/vendorExtensions.x-codegen-pistache-is-parsing-supported}} {{^vendorExtensions.x-codegen-pistache-is-parsing-supported}} virtual void {{operationIdSnakeCase}}(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter &response) = 0; @@ -63,9 +72,7 @@ private: }; -{{#apiNamespaceDeclarations}} -} -{{/apiNamespaceDeclarations}} +} // namespace {{apiNamespace}} #endif /* {{classname}}_H_ */ diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-impl-header.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-impl-header.mustache index 18ff119ae208..bd20c1bdf5ab 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-impl-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-impl-header.mustache @@ -22,17 +22,16 @@ {{#imports}}{{{import}}} {{/imports}} -{{#apiNamespaceDeclarations}} -namespace {{this}} { -{{/apiNamespaceDeclarations}} +namespace {{apiNamespace}} +{ {{#hasModelImport}} using namespace {{modelNamespace}};{{/hasModelImport}} class {{classname}}Impl : public {{apiNamespace}}::{{classname}} { public: - {{classname}}Impl(std::shared_ptr); - ~{{classname}}Impl() {} + explicit {{classname}}Impl(const std::shared_ptr& rtr); + ~{{classname}}Impl() override = default; {{#operation}} {{#vendorExtensions.x-codegen-pistache-is-parsing-supported}} @@ -45,11 +44,9 @@ public: }; -{{#apiNamespaceDeclarations}} -} -{{/apiNamespaceDeclarations}} +} // namespace {{apiNamespace}} {{/operations}} -#endif \ No newline at end of file +#endif diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-impl-source.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-impl-source.mustache index e5517bb487c1..2e25a8034b30 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-impl-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-impl-source.mustache @@ -10,9 +10,10 @@ namespace {{this}} { {{#hasModelImport}} using namespace {{modelNamespace}};{{/hasModelImport}} -{{classname}}Impl::{{classname}}Impl(std::shared_ptr rtr) +{{classname}}Impl::{{classname}}Impl(const std::shared_ptr& rtr) : {{classname}}(rtr) - { } +{ +} {{#operation}} {{#vendorExtensions.x-codegen-pistache-is-parsing-supported}} @@ -31,4 +32,4 @@ void {{classname}}Impl::{{operationIdSnakeCase}}(const Pistache::Rest::Request & } {{/apiNamespaceDeclarations}} -{{/operations}} \ No newline at end of file +{{/operations}} diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache index 9225a5610c70..9814ba0cd626 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache @@ -4,16 +4,18 @@ #include "{{classname}}.h" #include "{{prefix}}Helpers.h" -{{#apiNamespaceDeclarations}} -namespace {{this}} { -{{/apiNamespaceDeclarations}} +namespace {{apiNamespace}} +{ using namespace {{helpersNamespace}}; {{#hasModelImport}} using namespace {{modelNamespace}};{{/hasModelImport}} -{{classname}}::{{classname}}(std::shared_ptr rtr) { - router = rtr; +const std::string {{classname}}::base = "{{basePathWithoutHost}}"; + +{{classname}}::{{classname}}(const std::shared_ptr& rtr) + : router(rtr) +{ } void {{classname}}::init() { @@ -31,8 +33,26 @@ void {{classname}}::setupRoutes() { router->addCustomHandler(Routes::bind(&{{classname}}::{{classnameSnakeLowerCase}}_default_handler, this)); } +std::pair {{classname}}::handleParsingException(const std::exception& ex) const noexcept +{ + try { + throw ex; + } catch (nlohmann::detail::exception &e) { + return std::make_pair(Pistache::Http::Code::Bad_Request, e.what()); + } catch ({{helpersNamespace}}::ValidationException &e) { + return std::make_pair(Pistache::Http::Code::Bad_Request, e.what()); + } +} + +std::pair {{classname}}::handleOperationException(const std::exception& ex) const noexcept +{ + return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what()); +} + {{#operation}} void {{classname}}::{{operationIdSnakeCase}}_handler(const Pistache::Rest::Request &{{#hasParams}}request{{/hasParams}}, Pistache::Http::ResponseWriter response) { + try { + {{#vendorExtensions.x-codegen-pistache-is-parsing-supported}} {{#hasPathParams}} // Getting the path params @@ -71,32 +91,40 @@ void {{classname}}::{{operationIdSnakeCase}}_handler(const Pistache::Rest::Reque {{#hasBodyParam}} {{#bodyParam}} {{^isPrimitiveType}} - nlohmann::json::parse(request.body()).get_to({{paramName}}); + nlohmann::json::parse(request.body()).get_to({{paramName}}); + {{paramName}}.validate(); {{/isPrimitiveType}} {{#isPrimitiveType}} - {{paramName}} = request.body(); + {{paramName}} = request.body(); {{/isPrimitiveType}} + } catch (std::exception &e) { + const std::pair errorInfo = this->handleParsingException(e); + response.send(errorInfo.first, errorInfo.second); + return; + } + + try { {{/bodyParam}} {{/hasBodyParam}} - this->{{operationIdSnakeCase}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}response); + this->{{operationIdSnakeCase}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}response); {{/vendorExtensions.x-codegen-pistache-is-parsing-supported}} {{^vendorExtensions.x-codegen-pistache-is-parsing-supported}} try { this->{{operationIdSnakeCase}}(request, response); {{/vendorExtensions.x-codegen-pistache-is-parsing-supported}} - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } {{/operation}} @@ -104,8 +132,6 @@ void {{classname}}::{{classnameSnakeLowerCase}}_default_handler(const Pistache:: response.send(Pistache::Http::Code::Not_Found, "The requested method does not exist"); } -{{#apiNamespaceDeclarations}} -} -{{/apiNamespaceDeclarations}} +} // namespace {{apiNamespace}} {{/operations}} diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/helpers-header.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/helpers-header.mustache index c39cca04fe10..d3489fad4026 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/helpers-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/helpers-header.mustache @@ -14,16 +14,80 @@ #include #include -{{#helpersNamespaceDeclarations}} -namespace {{this}} { -{{/helpersNamespaceDeclarations}} +namespace {{helpersNamespace}} +{ + + class ValidationException : public std::runtime_error + { + public: + explicit ValidationException(const std::string& what) + : std::runtime_error(what) + { } + ~ValidationException() override = default; + }; + + /// + /// Validate a string against the full-date definition of RFC 3339, section 5.6. + /// + bool validateRfc3339_date(const std::string& str); + + /// + /// Validate a string against the date-time definition of RFC 3339, section 5.6. + /// + bool validateRfc3339_date_time(const std::string& str); + + namespace sfinae_helpers + { + struct NoType {}; + template NoType operator==(const T1&, const T2&); + + template class EqualsOperatorAvailable + { + public: + enum + { + value = !std::is_same< decltype(std::declval() == std::declval()), NoType >::value + }; + }; + } // namespace sfinae_helpers + + + /// + /// Determine if the given vector only has unique elements. T must provide the == operator. + /// + template + bool hasOnlyUniqueItems(const std::vector& vec) + { + static_assert(sfinae_helpers::EqualsOperatorAvailable::value, + "hasOnlyUniqueItems cannot be called, passed template type does not provide == operator."); + if (vec.size() <= 1) + { + return true; + } + // Compare every element of vec to every other element of vec. + // This isn't an elegant way to do this, since it's O(n^2), + // but it's the best solution working only with the == operator. + // This could be greatly improved if our models provided a valid hash + // and/or the < operator + for (size_t i = 0; i < vec.size() - 1; i++) + { + for (size_t j = i + 1; j < vec.size(); j++) + { + if (vec[i] == vec[j]) + { + return false; + } + } + } + return true; + } std::string toStringValue(const std::string &value); - std::string toStringValue(const int32_t &value); - std::string toStringValue(const int64_t &value); - std::string toStringValue(const bool &value); - std::string toStringValue(const float &value); - std::string toStringValue(const double &value); + std::string toStringValue(const int32_t value); + std::string toStringValue(const int64_t value); + std::string toStringValue(const bool value); + std::string toStringValue(const float value); + std::string toStringValue(const double value); bool fromStringValue(const std::string &inStr, std::string &value); bool fromStringValue(const std::string &inStr, int32_t &value); @@ -57,8 +121,6 @@ namespace {{this}} { return fromStringValue(inStrings, value); } -{{#helpersNamespaceDeclarations}} -} -{{/helpersNamespaceDeclarations}} +} // namespace {{helpersNamespace}} -#endif // {{prefix}}Helpers_H_ \ No newline at end of file +#endif // {{prefix}}Helpers_H_ diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/helpers-source.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/helpers-source.mustache index 82b4e2d81ef6..214086354d51 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/helpers-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/helpers-source.mustache @@ -1,32 +1,74 @@ {{>licenseInfo}} #include "{{prefix}}Helpers.h" +#include -{{#helpersNamespaceDeclarations}} -namespace {{this}} { -{{/helpersNamespaceDeclarations}} +namespace {{helpersNamespace}} +{ +const std::regex regexRfc3339_date(R"(^(\d{4})\-(\d{2})\-(\d{2})$)"); +const std::regex regexRfc3339_date_time( + R"(^(\d{4})\-(\d{2})\-(\d{2})[Tt](\d{2}):(\d{2}):(\d{2})(\.\d+)?([Zz]|([\+\-])(\d{2}):(\d{2}))$)" +); + + +namespace +{ + // Determine if given year is a leap year + // See RFC 3339, Appendix C https://tools.ietf.org/html/rfc3339#appendix-C + bool isLeapYear(const uint16_t year) { + return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)); + } + + bool validateDateValues(const uint16_t year, const uint16_t month, const uint16_t day) { + return !( + (month == 0 || month > 12) + || (day == 0) + || (month == 2 && day > (28 + (isLeapYear(year) ? 1 : 0))) + || (month <= 7 && day > (30 + month % 2)) + || (month >= 8 && day > (31 - month % 2)) + ); + } + + bool validateTimeValues(const uint16_t hours, const uint16_t minutes, const uint16_t seconds) { + return (hours <= 23) && (minutes <= 59) && (seconds <= 60); + } +} + +bool validateRfc3339_date(const std::string& str) { + std::smatch match; + const bool found = std::regex_search(str, match, regexRfc3339_date); + return found && validateDateValues(std::stoi(match[1]), std::stoi(match[2]), std::stoi(match[3])); +} + +bool validateRfc3339_date_time(const std::string& str) { + std::smatch match; + const bool found = std::regex_search(str, match, regexRfc3339_date_time); + return found + && validateDateValues(std::stoi(match[1]), std::stoi(match[2]), std::stoi(match[3])) + && validateTimeValues(std::stoi(match[4]), std::stoi(match[5]), std::stoi(match[6])); +} std::string toStringValue(const std::string &value){ return std::string(value); } -std::string toStringValue(const int32_t &value){ +std::string toStringValue(const int32_t value){ return std::to_string(value); } -std::string toStringValue(const int64_t &value){ +std::string toStringValue(const int64_t value){ return std::to_string(value); } -std::string toStringValue(const bool &value){ - return value?std::string("true"):std::string("false"); +std::string toStringValue(const bool value){ + return value ? std::string("true") : std::string("false"); } -std::string toStringValue(const float &value){ +std::string toStringValue(const float value){ return std::to_string(value); } -std::string toStringValue(const double &value){ +std::string toStringValue(const double value){ return std::to_string(value); } @@ -56,9 +98,15 @@ bool fromStringValue(const std::string &inStr, int64_t &value){ } bool fromStringValue(const std::string &inStr, bool &value){ - bool result = true; - inStr == "true"?value = true: inStr == "false"?value = false: result = false; - return result; + if (inStr == "true") { + value = true; + return true; + } + if (inStr == "false") { + value = false; + return true; + } + return false; } bool fromStringValue(const std::string &inStr, float &value){ @@ -81,6 +129,4 @@ bool fromStringValue(const std::string &inStr, double &value){ return true; } -{{#helpersNamespaceDeclarations}} -} -{{/helpersNamespaceDeclarations}} \ No newline at end of file +} // namespace {{helpersNamespace}} diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-header.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-header.mustache index c16fdbb09467..cb6d8d98ee06 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-header.mustache @@ -13,9 +13,8 @@ {{/imports}} #include -{{#modelNamespaceDeclarations}} -namespace {{this}} { -{{/modelNamespaceDeclarations}} +namespace {{modelNamespace}} +{ /// /// {{description}} @@ -24,7 +23,7 @@ class {{declspec}} {{classname}} { public: {{classname}}(); - virtual ~{{classname}}(); + virtual ~{{classname}}() = default; {{#isEnum}}{{#allowableValues}} enum class e{{classname}} { // To have a valid default value. @@ -35,7 +34,20 @@ public: {{{name}}}{{^-last}}, {{/-last}} {{/enumVars}} };{{/allowableValues}}{{/isEnum}} - void validate(); + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + bool operator==(const {{classname}}& rhs) const; + bool operator!=(const {{classname}}& rhs) const; ///////////////////////////////////////////// /// {{classname}} members @@ -44,7 +56,7 @@ public: /// /// {{description}} /// - {{{dataType}}}{{#isContainer}}&{{/isContainer}} {{getter}}(){{^isContainer}} const{{/isContainer}}; + {{{dataType}}} {{getter}}() const; void {{setter}}({{{dataType}}} const{{^isPrimitiveType}}&{{/isPrimitiveType}} value);{{^required}} bool {{nameInCamelCase}}IsSet() const; void unset{{name}}();{{/required}} @@ -65,11 +77,12 @@ protected: {{#isEnum}} {{classname}}::e{{classname}} m_value = {{classname}}::e{{classname}}::INVALID_VALUE_OPENAPI_GENERATED; {{/isEnum}} + + // Helper overload for validate. Used when one model stores another model and calls it's validate. + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; }; -{{#modelNamespaceDeclarations}} -} -{{/modelNamespaceDeclarations}} +} // namespace {{modelNamespace}} #endif /* {{classname}}_H_ */ {{/model}} diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-source.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-source.mustache index d603dc2186e0..8ef6abf0e4c5 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-source.mustache @@ -2,12 +2,12 @@ {{#models}}{{#model}} #include "{{classname}}.h" -{{#isEnum}}#include -#include {{/isEnum}} +#include "{{prefix}}Helpers.h" +{{#isEnum}}#include {{/isEnum}} +#include -{{#modelNamespaceDeclarations}} -namespace {{this}} { -{{/modelNamespaceDeclarations}} +namespace {{modelNamespace}} +{ {{classname}}::{{classname}}() { @@ -18,13 +18,69 @@ namespace {{this}} { {{/required}}{{/vars}} } -{{classname}}::~{{classname}}() +void {{classname}}::validate() const { + std::stringstream msg; + if (!validate(msg)) + { + throw {{helpersNamespace}}::ValidationException(msg.str()); + } } -void {{classname}}::validate() +bool {{classname}}::validate(std::stringstream& msg) const { - // TODO: implement validation + return validate(msg, ""); +} + +bool {{classname}}::validate(std::stringstream& msg, const std::string& pathPrefix) const +{ + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "{{classname}}" : pathPrefix; + + {{#isEnum}}{{! Special case for enum types }} + if (m_value == {{classname}}::e{{classname}}::INVALID_VALUE_OPENAPI_GENERATED) + { + success = false; + msg << _pathPrefix << ": has no value;"; + } + {{/isEnum}} + {{^isEnum}} + {{#vars}} + {{#isArray}} {{! Always generate validation body for array types }} + {{^required}}if ({{nameInCamelCase}}IsSet()){{/required}} + {{#required}}/* {{name}} */ {{/required}}{ + const {{{dataType}}}& value = m_{{name}}; + const std::string currentValuePath = _pathPrefix + ".{{nameInCamelCase}}"; + {{> model-validation-body }} + } + {{/isArray}}{{^isArray}}{{#hasValidation}} {{! Only generate validation if necessary }} + {{^required}}if ({{nameInCamelCase}}IsSet()){{/required}} + {{#required}}/* {{name}} */ {{/required}}{ + const {{{dataType}}}& value = m_{{name}}; + const std::string currentValuePath = _pathPrefix + ".{{nameInCamelCase}}"; + {{> model-validation-body }} + } + {{/hasValidation}}{{/isArray}} + {{/vars}} + {{/isEnum}} + + return success; +} + +bool {{classname}}::operator==(const {{classname}}& rhs) const +{ + return + {{#isEnum}}getValue() == rhs.getValue(){{/isEnum}} + {{^isEnum}}{{#vars}} + {{#required}}({{getter}}() == rhs.{{getter}}()){{/required}} + {{^required}}((!{{nameInCamelCase}}IsSet() && !rhs.{{nameInCamelCase}}IsSet()) || ({{nameInCamelCase}}IsSet() && rhs.{{nameInCamelCase}}IsSet() && {{getter}}() == rhs.{{getter}}())){{/required}}{{^-last}} &&{{/-last}} + {{/vars}}{{/isEnum}} + ; +} + +bool {{classname}}::operator!=(const {{classname}}& rhs) const +{ + return !(*this == rhs); } void to_json(nlohmann::json& j, const {{classname}}& o) @@ -74,7 +130,7 @@ void from_json(const nlohmann::json& j, {{classname}}& o) {{/enumVars}}{{/allowableValues}}{{/isEnum}} } -{{#vars}}{{{dataType}}}{{#isContainer}}&{{/isContainer}} {{classname}}::{{getter}}(){{^isContainer}} const{{/isContainer}} +{{#vars}}{{{dataType}}} {{classname}}::{{getter}}() const { return m_{{name}}; } @@ -102,9 +158,7 @@ void {{classname}}::setValue({{classname}}::e{{classname}} value) m_value = value; }{{/isEnum}} -{{#modelNamespaceDeclarations}} -} -{{/modelNamespaceDeclarations}} +} // namespace {{modelNamespace}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-struct-header.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-struct-header.mustache index bcc64257e409..be0ea874da8e 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-struct-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-struct-header.mustache @@ -14,9 +14,8 @@ #include {{#hasOptional}}#include {{/hasOptional}} -{{#modelNamespaceDeclarations}} -namespace {{this}} { -{{/modelNamespaceDeclarations}} +namespace {{modelNamespace}} +{ struct {{classname}} { @@ -34,9 +33,9 @@ struct {{classname}} void to_json(nlohmann::json& j, const {{classname}}& o); void from_json(const nlohmann::json& j, {{classname}}& o); -{{#modelNamespaceDeclarations}} -} // {{this}} -{{/modelNamespaceDeclarations}} + +} // namespace {{modelNamespace}} + #endif /* {{classname}}_H_ */ {{/model}} diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-struct-source.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-struct-source.mustache index 52d3526e867a..987926b7c4eb 100644 --- a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-struct-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-struct-source.mustache @@ -3,9 +3,8 @@ #include "{{classname}}.h" -{{#modelNamespaceDeclarations}} -namespace {{this}} { -{{/modelNamespaceDeclarations}} +namespace {{modelNamespace}} +{ nlohmann::json {{classname}}::to_json() const { @@ -51,9 +50,7 @@ void from_json(const nlohmann::json& j, {{classname}}& o) {{/vars}} } -{{#modelNamespaceDeclarations}} -} // {{this}} -{{/modelNamespaceDeclarations}} +} // namespace {{modelNamespace}} {{/model}} {{/models}} diff --git a/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-validation-body.mustache b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-validation-body.mustache new file mode 100644 index 000000000000..ef92f2c3fbd4 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/cpp-pistache-server/model-validation-body.mustache @@ -0,0 +1,124 @@ +{{! +This template generates the validation logic for a model. +This template file calls itself recursively for arrays. +}} +{{! Check for eunm properties that are their own schema }} +{{! These are in their own class with a validate function, the way to check for this is quite a hack +since isEnum, isString and isModel are all false. }} + {{^isString}}{{#allowableValues.enumVars.0.value}} + success = value.validate(msg, currentValuePath) && success; + {{/allowableValues.enumVars.0.value}}{{/isString}} + {{#isModel}}success = value.validate(msg, currentValuePath + ".{{nameInCamelCase}}") && success;{{/isModel}} +{{! Date validation }} + {{#isDate}} + if (!{{helpersNamespace}}::validateRfc3339_date(value)) + { + success = false; + msg << currentValuePath << ": must be a valid RFC 3339 date-full string;"; + } + {{/isDate}} +{{! Date-Time validation }} + {{#isDateTime}} + if (!{{helpersNamespace}}::validateRfc3339_date_time(value)) + { + success = false; + msg << currentValuePath << ": must be a valid RFC 3339 date-time string;"; + } + {{/isDateTime}} +{{! string validation }} + {{#isString}} + {{#minLength}} + if (value.length() < {{minLength}}) + { + success = false; + msg << currentValuePath << ": must be at least {{minLength}} characters long;"; + } + {{/minLength}} + {{#maxLength}} + if (value.length() > {{maxLength}}) + { + success = false; + msg << currentValuePath << ": must be at most {{maxLength}} characters long;"; + } + {{/maxLength}} +{{! +TODO validate regex of string using pattern variable. This has two challenges + - Is compatibility with the given regex pattern guaranteed? + - Creating the std::regex on every validation would be rather slow. Ideally one would + initialize them for the class once as a static const and use them. +}} +{{! string encoded enum validation }} + {{#isEnum}} + {{#allowableValues}} + if ({{#enumVars}} + value != "{{value}}"{{^-last}} &&{{/-last}}{{/enumVars}} + ) { + success = false; + msg << currentValuePath << ": has invalid value \"" << value << "\";"; + } + {{/allowableValues}} + {{/isEnum}} + {{/isString}} +{{! numeric validation }} + {{#isNumeric}} + {{#minimum}} + if (value <{{#exclusiveMinimum}}={{/exclusiveMinimum}} {{#isFloat}}static_cast({{/isFloat}}{{minimum}}{{#isFloat}}){{/isFloat}}{{#isLong}}ll{{/isLong}}) + { + success = false; + msg << currentValuePath << ": must be greater than{{^exclusiveMinimum}} or equal to{{/exclusiveMinimum}} {{minimum}};"; + } + {{/minimum}} + {{#maximum}} + if (value >{{#exclusiveMaximum}}={{/exclusiveMaximum}} {{#isFloat}}static_cast({{/isFloat}}{{maximum}}{{#isFloat}}){{/isFloat}}{{#isLong}}ll{{/isLong}}) + { + success = false; + msg << currentValuePath << ": must be less than{{^exclusiveMaximum}} or equal to{{/exclusiveMaximum}} {{maximum}};"; + } + {{/maximum}} + {{#multipleOf}} + {{#isInteger}}if (value % {{multipleOf}}{{#isLong}}ll{{/isLong}} != 0){{/isInteger}} + {{#isFloat}}if (std::fmod(value, static_cast({{multipleOf}})) != 0){{/isFloat}} + {{#isDouble}}if (std::fmod(value, {{multipleOf}}) != 0){{/isDouble}} + { + success = false; + msg << currentValuePath << ": must be a multiple of {{multipleOf}};"; + } + {{/multipleOf}} + {{/isNumeric}} +{{! Array validation }} + {{#isArray}} + {{#minItems}} + if (value.size() < {{minItems}}) + { + success = false; + msg << currentValuePath << ": must have at least {{minItems}} elements;"; + } + {{/minItems}} + {{#maxItems}} + if (value.size() > {{maxItems}}) + { + success = false; + msg << currentValuePath << ": must have at most {{maxItems}} elements;"; + } + {{/maxItems}} + {{#uniqueItems}} + if (!{{helpersNamespace}}::hasOnlyUniqueItems(value)) + { + success = false; + msg << currentValuePath << ": may not contain the same item more than once;"; + } + {{/uniqueItems}} + { // Recursive validation of array elements + const std::string oldValuePath = currentValuePath; + int i = 0; + {{! the element var has the same name as the vector, so that the recursive template works - what a wonderful hack }} + for (const {{{items.dataType}}}& value : value) + { {{! and I do a similar hack with currentValuePath... }} + const std::string currentValuePath = oldValuePath + "[" + std::to_string(i) + "]"; + {{#items}} + {{> model-validation-body }} {{! Recursively apply template to array - this is where things will probbaly go wrong }} + {{/items}} + i++; + } + } + {{/isArray}} diff --git a/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION b/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION index c30f0ec2be7f..d509cc92aa80 100644 --- a/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION +++ b/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.0-SNAPSHOT \ No newline at end of file +5.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/cpp-pistache/api/PetApi.cpp b/samples/server/petstore/cpp-pistache/api/PetApi.cpp index 80e15bd68625..7b3641599eef 100644 --- a/samples/server/petstore/cpp-pistache/api/PetApi.cpp +++ b/samples/server/petstore/cpp-pistache/api/PetApi.cpp @@ -13,16 +13,17 @@ #include "PetApi.h" #include "Helpers.h" -namespace org { -namespace openapitools { -namespace server { -namespace api { +namespace org::openapitools::server::api +{ using namespace org::openapitools::server::helpers; using namespace org::openapitools::server::model; -PetApi::PetApi(std::shared_ptr rtr) { - router = rtr; +const std::string PetApi::base = "/v2"; + +PetApi::PetApi(const std::shared_ptr& rtr) + : router(rtr) +{ } void PetApi::init() { @@ -45,30 +46,58 @@ void PetApi::setupRoutes() { router->addCustomHandler(Routes::bind(&PetApi::pet_api_default_handler, this)); } +std::pair PetApi::handleParsingException(const std::exception& ex) const noexcept +{ + try { + throw ex; + } catch (nlohmann::detail::exception &e) { + return std::make_pair(Pistache::Http::Code::Bad_Request, e.what()); + } catch (org::openapitools::server::helpers::ValidationException &e) { + return std::make_pair(Pistache::Http::Code::Bad_Request, e.what()); + } +} + +std::pair PetApi::handleOperationException(const std::exception& ex) const noexcept +{ + return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what()); +} + void PetApi::add_pet_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the body param Pet body; try { - nlohmann::json::parse(request.body()).get_to(body); - this->add_pet(body, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); + nlohmann::json::parse(request.body()).get_to(body); + body.validate(); + } catch (std::exception &e) { + const std::pair errorInfo = this->handleParsingException(e); + response.send(errorInfo.first, errorInfo.second); return; + } + + try { + this->add_pet(body, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void PetApi::delete_pet_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the path params auto petId = request.param(":petId").as(); @@ -76,22 +105,24 @@ void PetApi::delete_pet_handler(const Pistache::Rest::Request &request, Pistache auto apiKey = request.headers().tryGetRaw("api_key"); try { - this->delete_pet(petId, apiKey, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->delete_pet(petId, apiKey, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void PetApi::find_pets_by_status_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the query params auto statusQuery = request.query().get("status"); @@ -104,22 +135,24 @@ void PetApi::find_pets_by_status_handler(const Pistache::Rest::Request &request, } try { - this->find_pets_by_status(status, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->find_pets_by_status(status, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void PetApi::find_pets_by_tags_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the query params auto tagsQuery = request.query().get("tags"); @@ -132,105 +165,118 @@ void PetApi::find_pets_by_tags_handler(const Pistache::Rest::Request &request, P } try { - this->find_pets_by_tags(tags, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->find_pets_by_tags(tags, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void PetApi::get_pet_by_id_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the path params auto petId = request.param(":petId").as(); try { - this->get_pet_by_id(petId, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->get_pet_by_id(petId, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void PetApi::update_pet_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the body param Pet body; try { - nlohmann::json::parse(request.body()).get_to(body); - this->update_pet(body, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); + nlohmann::json::parse(request.body()).get_to(body); + body.validate(); + } catch (std::exception &e) { + const std::pair errorInfo = this->handleParsingException(e); + response.send(errorInfo.first, errorInfo.second); return; + } + + try { + this->update_pet(body, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void PetApi::update_pet_with_form_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + try { this->update_pet_with_form(request, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void PetApi::upload_file_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + try { this->upload_file(request, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void PetApi::pet_api_default_handler(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response) { response.send(Pistache::Http::Code::Not_Found, "The requested method does not exist"); } -} -} -} -} +} // namespace org::openapitools::server::api diff --git a/samples/server/petstore/cpp-pistache/api/PetApi.h b/samples/server/petstore/cpp-pistache/api/PetApi.h index d991d13abaed..f689a0675e15 100644 --- a/samples/server/petstore/cpp-pistache/api/PetApi.h +++ b/samples/server/petstore/cpp-pistache/api/PetApi.h @@ -24,25 +24,22 @@ #include #include +#include #include "ApiResponse.h" #include "Pet.h" #include -namespace org { -namespace openapitools { -namespace server { -namespace api { - -using namespace org::openapitools::server::model; +namespace org::openapitools::server::api +{ class PetApi { public: - PetApi(std::shared_ptr); - virtual ~PetApi() {} + explicit PetApi(const std::shared_ptr& rtr); + virtual ~PetApi() = default; void init(); - const std::string base = "/v2"; + static const std::string base; private: void setupRoutes(); @@ -57,7 +54,19 @@ class PetApi { void upload_file_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); void pet_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); - std::shared_ptr router; + const std::shared_ptr router; + + /// + /// Helper function to handle unexpected Exceptions during Parameter parsing and validation. + /// May be overriden to return custom error formats. + /// + virtual std::pair handleParsingException(const std::exception& ex) const noexcept; + + /// + /// Helper function to handle unexpected Exceptions during processing of the request in handler functions. + /// May be overriden to return custom error formats. + /// + virtual std::pair handleOperationException(const std::exception& ex) const noexcept; /// /// Add a new pet to the store @@ -66,8 +75,7 @@ class PetApi { /// /// /// Pet object that needs to be added to the store - virtual void add_pet(const Pet &body, Pistache::Http::ResponseWriter &response) = 0; - + virtual void add_pet(const org::openapitools::server::model::Pet &body, Pistache::Http::ResponseWriter &response) = 0; /// /// Deletes a pet /// @@ -77,7 +85,6 @@ class PetApi { /// Pet id to delete /// (optional, default to "") virtual void delete_pet(const int64_t &petId, const Pistache::Optional &apiKey, Pistache::Http::ResponseWriter &response) = 0; - /// /// Finds Pets by status /// @@ -86,7 +93,6 @@ class PetApi { /// /// Status values that need to be considered for filter virtual void find_pets_by_status(const Pistache::Optional> &status, Pistache::Http::ResponseWriter &response) = 0; - /// /// Finds Pets by tags /// @@ -95,7 +101,6 @@ class PetApi { /// /// Tags to filter by virtual void find_pets_by_tags(const Pistache::Optional> &tags, Pistache::Http::ResponseWriter &response) = 0; - /// /// Find pet by ID /// @@ -104,7 +109,6 @@ class PetApi { /// /// ID of pet to return virtual void get_pet_by_id(const int64_t &petId, Pistache::Http::ResponseWriter &response) = 0; - /// /// Update an existing pet /// @@ -112,8 +116,7 @@ class PetApi { /// /// /// Pet object that needs to be added to the store - virtual void update_pet(const Pet &body, Pistache::Http::ResponseWriter &response) = 0; - + virtual void update_pet(const org::openapitools::server::model::Pet &body, Pistache::Http::ResponseWriter &response) = 0; /// /// Updates a pet in the store with form data /// @@ -121,7 +124,6 @@ class PetApi { /// /// virtual void update_pet_with_form(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter &response) = 0; - /// /// uploads an image /// @@ -132,10 +134,7 @@ class PetApi { }; -} -} -} -} +} // namespace org::openapitools::server::api #endif /* PetApi_H_ */ diff --git a/samples/server/petstore/cpp-pistache/api/StoreApi.cpp b/samples/server/petstore/cpp-pistache/api/StoreApi.cpp index e3f1038f80a4..ea0c0e1793b8 100644 --- a/samples/server/petstore/cpp-pistache/api/StoreApi.cpp +++ b/samples/server/petstore/cpp-pistache/api/StoreApi.cpp @@ -13,16 +13,17 @@ #include "StoreApi.h" #include "Helpers.h" -namespace org { -namespace openapitools { -namespace server { -namespace api { +namespace org::openapitools::server::api +{ using namespace org::openapitools::server::helpers; using namespace org::openapitools::server::model; -StoreApi::StoreApi(std::shared_ptr rtr) { - router = rtr; +const std::string StoreApi::base = "/v2"; + +StoreApi::StoreApi(const std::shared_ptr& rtr) + : router(rtr) +{ } void StoreApi::init() { @@ -41,94 +42,123 @@ void StoreApi::setupRoutes() { router->addCustomHandler(Routes::bind(&StoreApi::store_api_default_handler, this)); } +std::pair StoreApi::handleParsingException(const std::exception& ex) const noexcept +{ + try { + throw ex; + } catch (nlohmann::detail::exception &e) { + return std::make_pair(Pistache::Http::Code::Bad_Request, e.what()); + } catch (org::openapitools::server::helpers::ValidationException &e) { + return std::make_pair(Pistache::Http::Code::Bad_Request, e.what()); + } +} + +std::pair StoreApi::handleOperationException(const std::exception& ex) const noexcept +{ + return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what()); +} + void StoreApi::delete_order_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the path params auto orderId = request.param(":orderId").as(); try { - this->delete_order(orderId, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->delete_order(orderId, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void StoreApi::get_inventory_handler(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response) { + try { + try { - this->get_inventory(response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->get_inventory(response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void StoreApi::get_order_by_id_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the path params auto orderId = request.param(":orderId").as(); try { - this->get_order_by_id(orderId, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->get_order_by_id(orderId, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void StoreApi::place_order_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the body param Order body; try { - nlohmann::json::parse(request.body()).get_to(body); - this->place_order(body, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); + nlohmann::json::parse(request.body()).get_to(body); + body.validate(); + } catch (std::exception &e) { + const std::pair errorInfo = this->handleParsingException(e); + response.send(errorInfo.first, errorInfo.second); return; + } + + try { + this->place_order(body, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void StoreApi::store_api_default_handler(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response) { response.send(Pistache::Http::Code::Not_Found, "The requested method does not exist"); } -} -} -} -} +} // namespace org::openapitools::server::api diff --git a/samples/server/petstore/cpp-pistache/api/StoreApi.h b/samples/server/petstore/cpp-pistache/api/StoreApi.h index f69875c4678d..6eb224387479 100644 --- a/samples/server/petstore/cpp-pistache/api/StoreApi.h +++ b/samples/server/petstore/cpp-pistache/api/StoreApi.h @@ -24,25 +24,22 @@ #include #include +#include #include "Order.h" #include #include -namespace org { -namespace openapitools { -namespace server { -namespace api { - -using namespace org::openapitools::server::model; +namespace org::openapitools::server::api +{ class StoreApi { public: - StoreApi(std::shared_ptr); - virtual ~StoreApi() {} + explicit StoreApi(const std::shared_ptr& rtr); + virtual ~StoreApi() = default; void init(); - const std::string base = "/v2"; + static const std::string base; private: void setupRoutes(); @@ -53,7 +50,19 @@ class StoreApi { void place_order_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); void store_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); - std::shared_ptr router; + const std::shared_ptr router; + + /// + /// Helper function to handle unexpected Exceptions during Parameter parsing and validation. + /// May be overriden to return custom error formats. + /// + virtual std::pair handleParsingException(const std::exception& ex) const noexcept; + + /// + /// Helper function to handle unexpected Exceptions during processing of the request in handler functions. + /// May be overriden to return custom error formats. + /// + virtual std::pair handleOperationException(const std::exception& ex) const noexcept; /// /// Delete purchase order by ID @@ -63,7 +72,6 @@ class StoreApi { /// /// ID of the order that needs to be deleted virtual void delete_order(const std::string &orderId, Pistache::Http::ResponseWriter &response) = 0; - /// /// Returns pet inventories by status /// @@ -71,7 +79,6 @@ class StoreApi { /// Returns a map of status codes to quantities /// virtual void get_inventory(Pistache::Http::ResponseWriter &response) = 0; - /// /// Find purchase order by ID /// @@ -80,7 +87,6 @@ class StoreApi { /// /// ID of pet that needs to be fetched virtual void get_order_by_id(const int64_t &orderId, Pistache::Http::ResponseWriter &response) = 0; - /// /// Place an order for a pet /// @@ -88,14 +94,11 @@ class StoreApi { /// /// /// order placed for purchasing the pet - virtual void place_order(const Order &body, Pistache::Http::ResponseWriter &response) = 0; + virtual void place_order(const org::openapitools::server::model::Order &body, Pistache::Http::ResponseWriter &response) = 0; }; -} -} -} -} +} // namespace org::openapitools::server::api #endif /* StoreApi_H_ */ diff --git a/samples/server/petstore/cpp-pistache/api/UserApi.cpp b/samples/server/petstore/cpp-pistache/api/UserApi.cpp index 93d275611d71..94903581dc4d 100644 --- a/samples/server/petstore/cpp-pistache/api/UserApi.cpp +++ b/samples/server/petstore/cpp-pistache/api/UserApi.cpp @@ -13,16 +13,17 @@ #include "UserApi.h" #include "Helpers.h" -namespace org { -namespace openapitools { -namespace server { -namespace api { +namespace org::openapitools::server::api +{ using namespace org::openapitools::server::helpers; using namespace org::openapitools::server::model; -UserApi::UserApi(std::shared_ptr rtr) { - router = rtr; +const std::string UserApi::base = "/v2"; + +UserApi::UserApi(const std::shared_ptr& rtr) + : router(rtr) +{ } void UserApi::init() { @@ -45,114 +46,166 @@ void UserApi::setupRoutes() { router->addCustomHandler(Routes::bind(&UserApi::user_api_default_handler, this)); } +std::pair UserApi::handleParsingException(const std::exception& ex) const noexcept +{ + try { + throw ex; + } catch (nlohmann::detail::exception &e) { + return std::make_pair(Pistache::Http::Code::Bad_Request, e.what()); + } catch (org::openapitools::server::helpers::ValidationException &e) { + return std::make_pair(Pistache::Http::Code::Bad_Request, e.what()); + } +} + +std::pair UserApi::handleOperationException(const std::exception& ex) const noexcept +{ + return std::make_pair(Pistache::Http::Code::Internal_Server_Error, ex.what()); +} + void UserApi::create_user_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the body param User body; try { - nlohmann::json::parse(request.body()).get_to(body); - this->create_user(body, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); + nlohmann::json::parse(request.body()).get_to(body); + body.validate(); + } catch (std::exception &e) { + const std::pair errorInfo = this->handleParsingException(e); + response.send(errorInfo.first, errorInfo.second); return; + } + + try { + this->create_user(body, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void UserApi::create_users_with_array_input_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the body param std::vector body; try { - nlohmann::json::parse(request.body()).get_to(body); - this->create_users_with_array_input(body, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); + nlohmann::json::parse(request.body()).get_to(body); + body.validate(); + } catch (std::exception &e) { + const std::pair errorInfo = this->handleParsingException(e); + response.send(errorInfo.first, errorInfo.second); return; + } + + try { + this->create_users_with_array_input(body, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void UserApi::create_users_with_list_input_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the body param std::vector body; try { - nlohmann::json::parse(request.body()).get_to(body); - this->create_users_with_list_input(body, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); + nlohmann::json::parse(request.body()).get_to(body); + body.validate(); + } catch (std::exception &e) { + const std::pair errorInfo = this->handleParsingException(e); + response.send(errorInfo.first, errorInfo.second); return; + } + + try { + this->create_users_with_list_input(body, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void UserApi::delete_user_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the path params auto username = request.param(":username").as(); try { - this->delete_user(username, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->delete_user(username, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void UserApi::get_user_by_name_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the path params auto username = request.param(":username").as(); try { - this->get_user_by_name(username, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->get_user_by_name(username, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void UserApi::login_user_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the query params auto usernameQuery = request.query().get("username"); @@ -173,40 +226,44 @@ void UserApi::login_user_handler(const Pistache::Rest::Request &request, Pistach } try { - this->login_user(username, password, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->login_user(username, password, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void UserApi::logout_user_handler(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response) { + try { + try { - this->logout_user(response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); - return; + this->logout_user(response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void UserApi::update_user_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response) { + try { + // Getting the path params auto username = request.param(":username").as(); @@ -215,29 +272,34 @@ void UserApi::update_user_handler(const Pistache::Rest::Request &request, Pistac User body; try { - nlohmann::json::parse(request.body()).get_to(body); - this->update_user(username, body, response); - } catch (nlohmann::detail::exception &e) { - //send a 400 error - response.send(Pistache::Http::Code::Bad_Request, e.what()); + nlohmann::json::parse(request.body()).get_to(body); + body.validate(); + } catch (std::exception &e) { + const std::pair errorInfo = this->handleParsingException(e); + response.send(errorInfo.first, errorInfo.second); return; + } + + try { + this->update_user(username, body, response); } catch (Pistache::Http::HttpError &e) { response.send(static_cast(e.code()), e.what()); return; } catch (std::exception &e) { - //send a 500 error - response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + const std::pair errorInfo = this->handleOperationException(e); + response.send(errorInfo.first, errorInfo.second); return; } + } catch (std::exception &e) { + response.send(Pistache::Http::Code::Internal_Server_Error, e.what()); + } + } void UserApi::user_api_default_handler(const Pistache::Rest::Request &, Pistache::Http::ResponseWriter response) { response.send(Pistache::Http::Code::Not_Found, "The requested method does not exist"); } -} -} -} -} +} // namespace org::openapitools::server::api diff --git a/samples/server/petstore/cpp-pistache/api/UserApi.h b/samples/server/petstore/cpp-pistache/api/UserApi.h index 6c589979dbc9..003b6db4df41 100644 --- a/samples/server/petstore/cpp-pistache/api/UserApi.h +++ b/samples/server/petstore/cpp-pistache/api/UserApi.h @@ -24,25 +24,22 @@ #include #include +#include #include "User.h" #include #include -namespace org { -namespace openapitools { -namespace server { -namespace api { - -using namespace org::openapitools::server::model; +namespace org::openapitools::server::api +{ class UserApi { public: - UserApi(std::shared_ptr); - virtual ~UserApi() {} + explicit UserApi(const std::shared_ptr& rtr); + virtual ~UserApi() = default; void init(); - const std::string base = "/v2"; + static const std::string base; private: void setupRoutes(); @@ -57,7 +54,19 @@ class UserApi { void update_user_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); void user_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response); - std::shared_ptr router; + const std::shared_ptr router; + + /// + /// Helper function to handle unexpected Exceptions during Parameter parsing and validation. + /// May be overriden to return custom error formats. + /// + virtual std::pair handleParsingException(const std::exception& ex) const noexcept; + + /// + /// Helper function to handle unexpected Exceptions during processing of the request in handler functions. + /// May be overriden to return custom error formats. + /// + virtual std::pair handleOperationException(const std::exception& ex) const noexcept; /// /// Create user @@ -66,8 +75,7 @@ class UserApi { /// This can only be done by the logged in user. /// /// Created user object - virtual void create_user(const User &body, Pistache::Http::ResponseWriter &response) = 0; - + virtual void create_user(const org::openapitools::server::model::User &body, Pistache::Http::ResponseWriter &response) = 0; /// /// Creates list of users with given input array /// @@ -76,7 +84,6 @@ class UserApi { /// /// List of user object virtual void create_users_with_array_input(const std::vector &body, Pistache::Http::ResponseWriter &response) = 0; - /// /// Creates list of users with given input array /// @@ -85,7 +92,6 @@ class UserApi { /// /// List of user object virtual void create_users_with_list_input(const std::vector &body, Pistache::Http::ResponseWriter &response) = 0; - /// /// Delete user /// @@ -94,7 +100,6 @@ class UserApi { /// /// The name that needs to be deleted virtual void delete_user(const std::string &username, Pistache::Http::ResponseWriter &response) = 0; - /// /// Get user by user name /// @@ -103,7 +108,6 @@ class UserApi { /// /// The name that needs to be fetched. Use user1 for testing. virtual void get_user_by_name(const std::string &username, Pistache::Http::ResponseWriter &response) = 0; - /// /// Logs user into the system /// @@ -113,7 +117,6 @@ class UserApi { /// The user name for login /// The password for login in clear text virtual void login_user(const Pistache::Optional &username, const Pistache::Optional &password, Pistache::Http::ResponseWriter &response) = 0; - /// /// Logs out current logged in user session /// @@ -121,7 +124,6 @@ class UserApi { /// /// virtual void logout_user(Pistache::Http::ResponseWriter &response) = 0; - /// /// Updated user /// @@ -130,14 +132,11 @@ class UserApi { /// /// name that need to be deleted /// Updated user object - virtual void update_user(const std::string &username, const User &body, Pistache::Http::ResponseWriter &response) = 0; + virtual void update_user(const std::string &username, const org::openapitools::server::model::User &body, Pistache::Http::ResponseWriter &response) = 0; }; -} -} -} -} +} // namespace org::openapitools::server::api #endif /* UserApi_H_ */ diff --git a/samples/server/petstore/cpp-pistache/impl/PetApiImpl.cpp b/samples/server/petstore/cpp-pistache/impl/PetApiImpl.cpp index 778117a18bbe..94b49b151e4e 100644 --- a/samples/server/petstore/cpp-pistache/impl/PetApiImpl.cpp +++ b/samples/server/petstore/cpp-pistache/impl/PetApiImpl.cpp @@ -19,9 +19,10 @@ namespace api { using namespace org::openapitools::server::model; -PetApiImpl::PetApiImpl(std::shared_ptr rtr) +PetApiImpl::PetApiImpl(const std::shared_ptr& rtr) : PetApi(rtr) - { } +{ +} void PetApiImpl::add_pet(const Pet &body, Pistache::Http::ResponseWriter &response) { response.send(Pistache::Http::Code::Ok, "Do some magic\n"); diff --git a/samples/server/petstore/cpp-pistache/impl/PetApiImpl.h b/samples/server/petstore/cpp-pistache/impl/PetApiImpl.h index 9e9f3d145baf..82c10b0a410c 100644 --- a/samples/server/petstore/cpp-pistache/impl/PetApiImpl.h +++ b/samples/server/petstore/cpp-pistache/impl/PetApiImpl.h @@ -33,17 +33,15 @@ #include "Pet.h" #include -namespace org { -namespace openapitools { -namespace server { -namespace api { +namespace org::openapitools::server::api +{ using namespace org::openapitools::server::model; class PetApiImpl : public org::openapitools::server::api::PetApi { public: - PetApiImpl(std::shared_ptr); - ~PetApiImpl() {} + explicit PetApiImpl(const std::shared_ptr& rtr); + ~PetApiImpl() override = default; void add_pet(const Pet &body, Pistache::Http::ResponseWriter &response); void delete_pet(const int64_t &petId, const Pistache::Optional &apiKey, Pistache::Http::ResponseWriter &response); @@ -56,11 +54,8 @@ class PetApiImpl : public org::openapitools::server::api::PetApi { }; -} -} -} -} +} // namespace org::openapitools::server::api -#endif \ No newline at end of file +#endif diff --git a/samples/server/petstore/cpp-pistache/impl/StoreApiImpl.cpp b/samples/server/petstore/cpp-pistache/impl/StoreApiImpl.cpp index ef164eb0543e..a746316b8039 100644 --- a/samples/server/petstore/cpp-pistache/impl/StoreApiImpl.cpp +++ b/samples/server/petstore/cpp-pistache/impl/StoreApiImpl.cpp @@ -19,9 +19,10 @@ namespace api { using namespace org::openapitools::server::model; -StoreApiImpl::StoreApiImpl(std::shared_ptr rtr) +StoreApiImpl::StoreApiImpl(const std::shared_ptr& rtr) : StoreApi(rtr) - { } +{ +} void StoreApiImpl::delete_order(const std::string &orderId, Pistache::Http::ResponseWriter &response) { response.send(Pistache::Http::Code::Ok, "Do some magic\n"); diff --git a/samples/server/petstore/cpp-pistache/impl/StoreApiImpl.h b/samples/server/petstore/cpp-pistache/impl/StoreApiImpl.h index c99372463184..c5dda64490f7 100644 --- a/samples/server/petstore/cpp-pistache/impl/StoreApiImpl.h +++ b/samples/server/petstore/cpp-pistache/impl/StoreApiImpl.h @@ -33,17 +33,15 @@ #include #include -namespace org { -namespace openapitools { -namespace server { -namespace api { +namespace org::openapitools::server::api +{ using namespace org::openapitools::server::model; class StoreApiImpl : public org::openapitools::server::api::StoreApi { public: - StoreApiImpl(std::shared_ptr); - ~StoreApiImpl() {} + explicit StoreApiImpl(const std::shared_ptr& rtr); + ~StoreApiImpl() override = default; void delete_order(const std::string &orderId, Pistache::Http::ResponseWriter &response); void get_inventory(Pistache::Http::ResponseWriter &response); @@ -52,11 +50,8 @@ class StoreApiImpl : public org::openapitools::server::api::StoreApi { }; -} -} -} -} +} // namespace org::openapitools::server::api -#endif \ No newline at end of file +#endif diff --git a/samples/server/petstore/cpp-pistache/impl/UserApiImpl.cpp b/samples/server/petstore/cpp-pistache/impl/UserApiImpl.cpp index 7163a560bd77..b477f053c5c8 100644 --- a/samples/server/petstore/cpp-pistache/impl/UserApiImpl.cpp +++ b/samples/server/petstore/cpp-pistache/impl/UserApiImpl.cpp @@ -19,9 +19,10 @@ namespace api { using namespace org::openapitools::server::model; -UserApiImpl::UserApiImpl(std::shared_ptr rtr) +UserApiImpl::UserApiImpl(const std::shared_ptr& rtr) : UserApi(rtr) - { } +{ +} void UserApiImpl::create_user(const User &body, Pistache::Http::ResponseWriter &response) { response.send(Pistache::Http::Code::Ok, "Do some magic\n"); diff --git a/samples/server/petstore/cpp-pistache/impl/UserApiImpl.h b/samples/server/petstore/cpp-pistache/impl/UserApiImpl.h index 8f22c4998894..856a30db5bb1 100644 --- a/samples/server/petstore/cpp-pistache/impl/UserApiImpl.h +++ b/samples/server/petstore/cpp-pistache/impl/UserApiImpl.h @@ -33,17 +33,15 @@ #include #include -namespace org { -namespace openapitools { -namespace server { -namespace api { +namespace org::openapitools::server::api +{ using namespace org::openapitools::server::model; class UserApiImpl : public org::openapitools::server::api::UserApi { public: - UserApiImpl(std::shared_ptr); - ~UserApiImpl() {} + explicit UserApiImpl(const std::shared_ptr& rtr); + ~UserApiImpl() override = default; void create_user(const User &body, Pistache::Http::ResponseWriter &response); void create_users_with_array_input(const std::vector &body, Pistache::Http::ResponseWriter &response); @@ -56,11 +54,8 @@ class UserApiImpl : public org::openapitools::server::api::UserApi { }; -} -} -} -} +} // namespace org::openapitools::server::api -#endif \ No newline at end of file +#endif diff --git a/samples/server/petstore/cpp-pistache/model/ApiResponse.cpp b/samples/server/petstore/cpp-pistache/model/ApiResponse.cpp index 4b9ca7419208..049f6c19d6d6 100644 --- a/samples/server/petstore/cpp-pistache/model/ApiResponse.cpp +++ b/samples/server/petstore/cpp-pistache/model/ApiResponse.cpp @@ -12,11 +12,12 @@ #include "ApiResponse.h" +#include "Helpers.h" -namespace org { -namespace openapitools { -namespace server { -namespace model { +#include + +namespace org::openapitools::server::model +{ ApiResponse::ApiResponse() { @@ -29,13 +30,52 @@ ApiResponse::ApiResponse() } -ApiResponse::~ApiResponse() +void ApiResponse::validate() const +{ + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } +} + +bool ApiResponse::validate(std::stringstream& msg) const +{ + return validate(msg, ""); +} + +bool ApiResponse::validate(std::stringstream& msg, const std::string& pathPrefix) const +{ + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "ApiResponse" : pathPrefix; + + + + + + return success; +} + +bool ApiResponse::operator==(const ApiResponse& rhs) const { + return + + + + ((!codeIsSet() && !rhs.codeIsSet()) || (codeIsSet() && rhs.codeIsSet() && getCode() == rhs.getCode())) && + + + ((!typeIsSet() && !rhs.typeIsSet()) || (typeIsSet() && rhs.typeIsSet() && getType() == rhs.getType())) && + + + ((!messageIsSet() && !rhs.messageIsSet()) || (messageIsSet() && rhs.messageIsSet() && getMessage() == rhs.getMessage())) + + ; } -void ApiResponse::validate() +bool ApiResponse::operator!=(const ApiResponse& rhs) const { - // TODO: implement validation + return !(*this == rhs); } void to_json(nlohmann::json& j, const ApiResponse& o) @@ -123,8 +163,5 @@ void ApiResponse::unsetMessage() } -} -} -} -} +} // namespace org::openapitools::server::model diff --git a/samples/server/petstore/cpp-pistache/model/ApiResponse.h b/samples/server/petstore/cpp-pistache/model/ApiResponse.h index 7ecb6c9a82ec..d963b76650bd 100644 --- a/samples/server/petstore/cpp-pistache/model/ApiResponse.h +++ b/samples/server/petstore/cpp-pistache/model/ApiResponse.h @@ -22,10 +22,8 @@ #include #include -namespace org { -namespace openapitools { -namespace server { -namespace model { +namespace org::openapitools::server::model +{ /// /// Describes the result of uploading an image resource @@ -34,9 +32,22 @@ class ApiResponse { public: ApiResponse(); - virtual ~ApiResponse(); + virtual ~ApiResponse() = default; - void validate(); + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + bool operator==(const ApiResponse& rhs) const; + bool operator!=(const ApiResponse& rhs) const; ///////////////////////////////////////////// /// ApiResponse members @@ -72,11 +83,11 @@ class ApiResponse bool m_TypeIsSet; std::string m_Message; bool m_MessageIsSet; + + // Helper overload for validate. Used when one model stores another model and calls it's validate. + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; }; -} -} -} -} +} // namespace org::openapitools::server::model #endif /* ApiResponse_H_ */ diff --git a/samples/server/petstore/cpp-pistache/model/Category.cpp b/samples/server/petstore/cpp-pistache/model/Category.cpp index 3b08114f61de..deb18ff9bb7e 100644 --- a/samples/server/petstore/cpp-pistache/model/Category.cpp +++ b/samples/server/petstore/cpp-pistache/model/Category.cpp @@ -12,11 +12,12 @@ #include "Category.h" +#include "Helpers.h" -namespace org { -namespace openapitools { -namespace server { -namespace model { +#include + +namespace org::openapitools::server::model +{ Category::Category() { @@ -27,13 +28,48 @@ Category::Category() } -Category::~Category() +void Category::validate() const { + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } } -void Category::validate() +bool Category::validate(std::stringstream& msg) const { - // TODO: implement validation + return validate(msg, ""); +} + +bool Category::validate(std::stringstream& msg, const std::string& pathPrefix) const +{ + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "Category" : pathPrefix; + + + + + return success; +} + +bool Category::operator==(const Category& rhs) const +{ + return + + + + ((!idIsSet() && !rhs.idIsSet()) || (idIsSet() && rhs.idIsSet() && getId() == rhs.getId())) && + + + ((!nameIsSet() && !rhs.nameIsSet()) || (nameIsSet() && rhs.nameIsSet() && getName() == rhs.getName())) + + ; +} + +bool Category::operator!=(const Category& rhs) const +{ + return !(*this == rhs); } void to_json(nlohmann::json& j, const Category& o) @@ -97,8 +133,5 @@ void Category::unsetName() } -} -} -} -} +} // namespace org::openapitools::server::model diff --git a/samples/server/petstore/cpp-pistache/model/Category.h b/samples/server/petstore/cpp-pistache/model/Category.h index fa12fdc0de8d..1929ce33e925 100644 --- a/samples/server/petstore/cpp-pistache/model/Category.h +++ b/samples/server/petstore/cpp-pistache/model/Category.h @@ -22,10 +22,8 @@ #include #include -namespace org { -namespace openapitools { -namespace server { -namespace model { +namespace org::openapitools::server::model +{ /// /// A category for a pet @@ -34,9 +32,22 @@ class Category { public: Category(); - virtual ~Category(); + virtual ~Category() = default; - void validate(); + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + bool operator==(const Category& rhs) const; + bool operator!=(const Category& rhs) const; ///////////////////////////////////////////// /// Category members @@ -63,11 +74,11 @@ class Category bool m_IdIsSet; std::string m_Name; bool m_NameIsSet; + + // Helper overload for validate. Used when one model stores another model and calls it's validate. + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; }; -} -} -} -} +} // namespace org::openapitools::server::model #endif /* Category_H_ */ diff --git a/samples/server/petstore/cpp-pistache/model/Helpers.cpp b/samples/server/petstore/cpp-pistache/model/Helpers.cpp index a7774194c82c..cfac2d78986a 100644 --- a/samples/server/petstore/cpp-pistache/model/Helpers.cpp +++ b/samples/server/petstore/cpp-pistache/model/Helpers.cpp @@ -10,34 +10,75 @@ * Do not edit the class manually. */ #include "Helpers.h" +#include -namespace org { -namespace openapitools { -namespace server { -namespace helpers { +namespace org::openapitools::server::helpers +{ +const std::regex regexRfc3339_date(R"(^(\d{4})\-(\d{2})\-(\d{2})$)"); +const std::regex regexRfc3339_date_time( + R"(^(\d{4})\-(\d{2})\-(\d{2})[Tt](\d{2}):(\d{2}):(\d{2})(\.\d+)?([Zz]|([\+\-])(\d{2}):(\d{2}))$)" +); + + +namespace +{ + // Determine if given year is a leap year + // See RFC 3339, Appendix C https://tools.ietf.org/html/rfc3339#appendix-C + bool isLeapYear(const uint16_t year) { + return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)); + } + + bool validateDateValues(const uint16_t year, const uint16_t month, const uint16_t day) { + return !( + (month == 0 || month > 12) + || (day == 0) + || (month == 2 && day > (28 + (isLeapYear(year) ? 1 : 0))) + || (month <= 7 && day > (30 + month % 2)) + || (month >= 8 && day > (31 - month % 2)) + ); + } + + bool validateTimeValues(const uint16_t hours, const uint16_t minutes, const uint16_t seconds) { + return (hours <= 23) && (minutes <= 59) && (seconds <= 60); + } +} + +bool validateRfc3339_date(const std::string& str) { + std::smatch match; + const bool found = std::regex_search(str, match, regexRfc3339_date); + return found && validateDateValues(std::stoi(match[1]), std::stoi(match[2]), std::stoi(match[3])); +} + +bool validateRfc3339_date_time(const std::string& str) { + std::smatch match; + const bool found = std::regex_search(str, match, regexRfc3339_date_time); + return found + && validateDateValues(std::stoi(match[1]), std::stoi(match[2]), std::stoi(match[3])) + && validateTimeValues(std::stoi(match[4]), std::stoi(match[5]), std::stoi(match[6])); +} std::string toStringValue(const std::string &value){ return std::string(value); } -std::string toStringValue(const int32_t &value){ +std::string toStringValue(const int32_t value){ return std::to_string(value); } -std::string toStringValue(const int64_t &value){ +std::string toStringValue(const int64_t value){ return std::to_string(value); } -std::string toStringValue(const bool &value){ - return value?std::string("true"):std::string("false"); +std::string toStringValue(const bool value){ + return value ? std::string("true") : std::string("false"); } -std::string toStringValue(const float &value){ +std::string toStringValue(const float value){ return std::to_string(value); } -std::string toStringValue(const double &value){ +std::string toStringValue(const double value){ return std::to_string(value); } @@ -67,9 +108,15 @@ bool fromStringValue(const std::string &inStr, int64_t &value){ } bool fromStringValue(const std::string &inStr, bool &value){ - bool result = true; - inStr == "true"?value = true: inStr == "false"?value = false: result = false; - return result; + if (inStr == "true") { + value = true; + return true; + } + if (inStr == "false") { + value = false; + return true; + } + return false; } bool fromStringValue(const std::string &inStr, float &value){ @@ -92,7 +139,4 @@ bool fromStringValue(const std::string &inStr, double &value){ return true; } -} -} -} -} +} // namespace org::openapitools::server::helpers diff --git a/samples/server/petstore/cpp-pistache/model/Helpers.h b/samples/server/petstore/cpp-pistache/model/Helpers.h index 9c8c02c4ae61..176b817de1eb 100644 --- a/samples/server/petstore/cpp-pistache/model/Helpers.h +++ b/samples/server/petstore/cpp-pistache/model/Helpers.h @@ -24,17 +24,80 @@ #include #include -namespace org { -namespace openapitools { -namespace server { -namespace helpers { +namespace org::openapitools::server::helpers +{ + + class ValidationException : public std::runtime_error + { + public: + explicit ValidationException(const std::string& what) + : std::runtime_error(what) + { } + ~ValidationException() override = default; + }; + + /// + /// Validate a string against the full-date definition of RFC 3339, section 5.6. + /// + bool validateRfc3339_date(const std::string& str); + + /// + /// Validate a string against the date-time definition of RFC 3339, section 5.6. + /// + bool validateRfc3339_date_time(const std::string& str); + + namespace sfinae_helpers + { + struct NoType {}; + template NoType operator==(const T1&, const T2&); + + template class EqualsOperatorAvailable + { + public: + enum + { + value = !std::is_same< decltype(std::declval() == std::declval()), NoType >::value + }; + }; + } // namespace sfinae_helpers + + + /// + /// Determine if the given vector only has unique elements. T must provide the == operator. + /// + template + bool hasOnlyUniqueItems(const std::vector& vec) + { + static_assert(sfinae_helpers::EqualsOperatorAvailable::value, + "hasOnlyUniqueItems cannot be called, passed template type does not provide == operator."); + if (vec.size() <= 1) + { + return true; + } + // Compare every element of vec to every other element of vec. + // This isn't an elegant way to do this, since it's O(n^2), + // but it's the best solution working only with the == operator. + // This could be greatly improved if our models provided a valid hash + // and/or the < operator + for (size_t i = 0; i < vec.size() - 1; i++) + { + for (size_t j = i + 1; j < vec.size(); j++) + { + if (vec[i] == vec[j]) + { + return false; + } + } + } + return true; + } std::string toStringValue(const std::string &value); - std::string toStringValue(const int32_t &value); - std::string toStringValue(const int64_t &value); - std::string toStringValue(const bool &value); - std::string toStringValue(const float &value); - std::string toStringValue(const double &value); + std::string toStringValue(const int32_t value); + std::string toStringValue(const int64_t value); + std::string toStringValue(const bool value); + std::string toStringValue(const float value); + std::string toStringValue(const double value); bool fromStringValue(const std::string &inStr, std::string &value); bool fromStringValue(const std::string &inStr, int32_t &value); @@ -68,9 +131,6 @@ namespace helpers { return fromStringValue(inStrings, value); } -} -} -} -} +} // namespace org::openapitools::server::helpers -#endif // Helpers_H_ \ No newline at end of file +#endif // Helpers_H_ diff --git a/samples/server/petstore/cpp-pistache/model/Order.cpp b/samples/server/petstore/cpp-pistache/model/Order.cpp index 986cf6b24fa9..2d04f0ac637b 100644 --- a/samples/server/petstore/cpp-pistache/model/Order.cpp +++ b/samples/server/petstore/cpp-pistache/model/Order.cpp @@ -12,11 +12,12 @@ #include "Order.h" +#include "Helpers.h" -namespace org { -namespace openapitools { -namespace server { -namespace model { +#include + +namespace org::openapitools::server::model +{ Order::Order() { @@ -35,13 +36,64 @@ Order::Order() } -Order::~Order() +void Order::validate() const { + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } } -void Order::validate() +bool Order::validate(std::stringstream& msg) const { - // TODO: implement validation + return validate(msg, ""); +} + +bool Order::validate(std::stringstream& msg, const std::string& pathPrefix) const +{ + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "Order" : pathPrefix; + + + + + + + + + return success; +} + +bool Order::operator==(const Order& rhs) const +{ + return + + + + ((!idIsSet() && !rhs.idIsSet()) || (idIsSet() && rhs.idIsSet() && getId() == rhs.getId())) && + + + ((!petIdIsSet() && !rhs.petIdIsSet()) || (petIdIsSet() && rhs.petIdIsSet() && getPetId() == rhs.getPetId())) && + + + ((!quantityIsSet() && !rhs.quantityIsSet()) || (quantityIsSet() && rhs.quantityIsSet() && getQuantity() == rhs.getQuantity())) && + + + ((!shipDateIsSet() && !rhs.shipDateIsSet()) || (shipDateIsSet() && rhs.shipDateIsSet() && getShipDate() == rhs.getShipDate())) && + + + ((!statusIsSet() && !rhs.statusIsSet()) || (statusIsSet() && rhs.statusIsSet() && getStatus() == rhs.getStatus())) && + + + ((!completeIsSet() && !rhs.completeIsSet()) || (completeIsSet() && rhs.completeIsSet() && isComplete() == rhs.isComplete())) + + ; +} + +bool Order::operator!=(const Order& rhs) const +{ + return !(*this == rhs); } void to_json(nlohmann::json& j, const Order& o) @@ -201,8 +253,5 @@ void Order::unsetComplete() } -} -} -} -} +} // namespace org::openapitools::server::model diff --git a/samples/server/petstore/cpp-pistache/model/Order.h b/samples/server/petstore/cpp-pistache/model/Order.h index d900b633f32c..3d28e1eef6ba 100644 --- a/samples/server/petstore/cpp-pistache/model/Order.h +++ b/samples/server/petstore/cpp-pistache/model/Order.h @@ -22,10 +22,8 @@ #include #include -namespace org { -namespace openapitools { -namespace server { -namespace model { +namespace org::openapitools::server::model +{ /// /// An order for a pets from the pet store @@ -34,9 +32,22 @@ class Order { public: Order(); - virtual ~Order(); + virtual ~Order() = default; - void validate(); + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + bool operator==(const Order& rhs) const; + bool operator!=(const Order& rhs) const; ///////////////////////////////////////////// /// Order members @@ -99,11 +110,11 @@ class Order bool m_StatusIsSet; bool m_Complete; bool m_CompleteIsSet; + + // Helper overload for validate. Used when one model stores another model and calls it's validate. + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; }; -} -} -} -} +} // namespace org::openapitools::server::model #endif /* Order_H_ */ diff --git a/samples/server/petstore/cpp-pistache/model/Pet.cpp b/samples/server/petstore/cpp-pistache/model/Pet.cpp index 434b1339cd06..9c7ba886a44c 100644 --- a/samples/server/petstore/cpp-pistache/model/Pet.cpp +++ b/samples/server/petstore/cpp-pistache/model/Pet.cpp @@ -12,11 +12,12 @@ #include "Pet.h" +#include "Helpers.h" -namespace org { -namespace openapitools { -namespace server { -namespace model { +#include + +namespace org::openapitools::server::model +{ Pet::Pet() { @@ -30,13 +31,106 @@ Pet::Pet() } -Pet::~Pet() +void Pet::validate() const +{ + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } +} + +bool Pet::validate(std::stringstream& msg) const { + return validate(msg, ""); } -void Pet::validate() +bool Pet::validate(std::stringstream& msg, const std::string& pathPrefix) const { - // TODO: implement validation + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "Pet" : pathPrefix; + + + + + + + /* PhotoUrls */ { + const std::vector& value = m_PhotoUrls; + const std::string currentValuePath = _pathPrefix + ".photoUrls"; + + + { // Recursive validation of array elements + const std::string oldValuePath = currentValuePath; + int i = 0; + for (const std::string& value : value) + { + const std::string currentValuePath = oldValuePath + "[" + std::to_string(i) + "]"; + + + + i++; + } + } + + } + + + if (tagsIsSet()) + { + const std::vector& value = m_Tags; + const std::string currentValuePath = _pathPrefix + ".tags"; + + + { // Recursive validation of array elements + const std::string oldValuePath = currentValuePath; + int i = 0; + for (const Tag& value : value) + { + const std::string currentValuePath = oldValuePath + "[" + std::to_string(i) + "]"; + + success = value.validate(msg, currentValuePath + ".tags") && success; + + i++; + } + } + + } + + + + return success; +} + +bool Pet::operator==(const Pet& rhs) const +{ + return + + + + ((!idIsSet() && !rhs.idIsSet()) || (idIsSet() && rhs.idIsSet() && getId() == rhs.getId())) && + + + ((!categoryIsSet() && !rhs.categoryIsSet()) || (categoryIsSet() && rhs.categoryIsSet() && getCategory() == rhs.getCategory())) && + + (getName() == rhs.getName()) + && + + (getPhotoUrls() == rhs.getPhotoUrls()) + && + + + ((!tagsIsSet() && !rhs.tagsIsSet()) || (tagsIsSet() && rhs.tagsIsSet() && getTags() == rhs.getTags())) && + + + ((!statusIsSet() && !rhs.statusIsSet()) || (statusIsSet() && rhs.statusIsSet() && getStatus() == rhs.getStatus())) + + ; +} + +bool Pet::operator!=(const Pet& rhs) const +{ + return !(*this == rhs); } void to_json(nlohmann::json& j, const Pet& o) @@ -124,7 +218,7 @@ void Pet::setName(std::string const& value) { m_Name = value; } -std::vector& Pet::getPhotoUrls() +std::vector Pet::getPhotoUrls() const { return m_PhotoUrls; } @@ -132,7 +226,7 @@ void Pet::setPhotoUrls(std::vector const& value) { m_PhotoUrls = value; } -std::vector& Pet::getTags() +std::vector Pet::getTags() const { return m_Tags; } @@ -168,8 +262,5 @@ void Pet::unsetStatus() } -} -} -} -} +} // namespace org::openapitools::server::model diff --git a/samples/server/petstore/cpp-pistache/model/Pet.h b/samples/server/petstore/cpp-pistache/model/Pet.h index eddf475f6ee3..1cd841a08fa7 100644 --- a/samples/server/petstore/cpp-pistache/model/Pet.h +++ b/samples/server/petstore/cpp-pistache/model/Pet.h @@ -25,10 +25,8 @@ #include #include -namespace org { -namespace openapitools { -namespace server { -namespace model { +namespace org::openapitools::server::model +{ /// /// A pet for sale in the pet store @@ -37,9 +35,22 @@ class Pet { public: Pet(); - virtual ~Pet(); + virtual ~Pet() = default; - void validate(); + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + bool operator==(const Pet& rhs) const; + bool operator!=(const Pet& rhs) const; ///////////////////////////////////////////// /// Pet members @@ -66,12 +77,12 @@ class Pet /// /// /// - std::vector& getPhotoUrls(); + std::vector getPhotoUrls() const; void setPhotoUrls(std::vector const& value); /// /// /// - std::vector& getTags(); + std::vector getTags() const; void setTags(std::vector const& value); bool tagsIsSet() const; void unsetTags(); @@ -98,11 +109,11 @@ class Pet bool m_TagsIsSet; std::string m_Status; bool m_StatusIsSet; + + // Helper overload for validate. Used when one model stores another model and calls it's validate. + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; }; -} -} -} -} +} // namespace org::openapitools::server::model #endif /* Pet_H_ */ diff --git a/samples/server/petstore/cpp-pistache/model/Tag.cpp b/samples/server/petstore/cpp-pistache/model/Tag.cpp index cba759bad1d0..659565e4034d 100644 --- a/samples/server/petstore/cpp-pistache/model/Tag.cpp +++ b/samples/server/petstore/cpp-pistache/model/Tag.cpp @@ -12,11 +12,12 @@ #include "Tag.h" +#include "Helpers.h" -namespace org { -namespace openapitools { -namespace server { -namespace model { +#include + +namespace org::openapitools::server::model +{ Tag::Tag() { @@ -27,13 +28,48 @@ Tag::Tag() } -Tag::~Tag() +void Tag::validate() const { + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } } -void Tag::validate() +bool Tag::validate(std::stringstream& msg) const { - // TODO: implement validation + return validate(msg, ""); +} + +bool Tag::validate(std::stringstream& msg, const std::string& pathPrefix) const +{ + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "Tag" : pathPrefix; + + + + + return success; +} + +bool Tag::operator==(const Tag& rhs) const +{ + return + + + + ((!idIsSet() && !rhs.idIsSet()) || (idIsSet() && rhs.idIsSet() && getId() == rhs.getId())) && + + + ((!nameIsSet() && !rhs.nameIsSet()) || (nameIsSet() && rhs.nameIsSet() && getName() == rhs.getName())) + + ; +} + +bool Tag::operator!=(const Tag& rhs) const +{ + return !(*this == rhs); } void to_json(nlohmann::json& j, const Tag& o) @@ -97,8 +133,5 @@ void Tag::unsetName() } -} -} -} -} +} // namespace org::openapitools::server::model diff --git a/samples/server/petstore/cpp-pistache/model/Tag.h b/samples/server/petstore/cpp-pistache/model/Tag.h index 4b422931d771..ddebeadae431 100644 --- a/samples/server/petstore/cpp-pistache/model/Tag.h +++ b/samples/server/petstore/cpp-pistache/model/Tag.h @@ -22,10 +22,8 @@ #include #include -namespace org { -namespace openapitools { -namespace server { -namespace model { +namespace org::openapitools::server::model +{ /// /// A tag for a pet @@ -34,9 +32,22 @@ class Tag { public: Tag(); - virtual ~Tag(); + virtual ~Tag() = default; - void validate(); + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + bool operator==(const Tag& rhs) const; + bool operator!=(const Tag& rhs) const; ///////////////////////////////////////////// /// Tag members @@ -63,11 +74,11 @@ class Tag bool m_IdIsSet; std::string m_Name; bool m_NameIsSet; + + // Helper overload for validate. Used when one model stores another model and calls it's validate. + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; }; -} -} -} -} +} // namespace org::openapitools::server::model #endif /* Tag_H_ */ diff --git a/samples/server/petstore/cpp-pistache/model/User.cpp b/samples/server/petstore/cpp-pistache/model/User.cpp index 2db9316b75d9..c997bf9734db 100644 --- a/samples/server/petstore/cpp-pistache/model/User.cpp +++ b/samples/server/petstore/cpp-pistache/model/User.cpp @@ -12,11 +12,12 @@ #include "User.h" +#include "Helpers.h" -namespace org { -namespace openapitools { -namespace server { -namespace model { +#include + +namespace org::openapitools::server::model +{ User::User() { @@ -39,13 +40,72 @@ User::User() } -User::~User() +void User::validate() const +{ + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } +} + +bool User::validate(std::stringstream& msg) const { + return validate(msg, ""); } -void User::validate() +bool User::validate(std::stringstream& msg, const std::string& pathPrefix) const { - // TODO: implement validation + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "User" : pathPrefix; + + + + + + + + + + + return success; +} + +bool User::operator==(const User& rhs) const +{ + return + + + + ((!idIsSet() && !rhs.idIsSet()) || (idIsSet() && rhs.idIsSet() && getId() == rhs.getId())) && + + + ((!usernameIsSet() && !rhs.usernameIsSet()) || (usernameIsSet() && rhs.usernameIsSet() && getUsername() == rhs.getUsername())) && + + + ((!firstNameIsSet() && !rhs.firstNameIsSet()) || (firstNameIsSet() && rhs.firstNameIsSet() && getFirstName() == rhs.getFirstName())) && + + + ((!lastNameIsSet() && !rhs.lastNameIsSet()) || (lastNameIsSet() && rhs.lastNameIsSet() && getLastName() == rhs.getLastName())) && + + + ((!emailIsSet() && !rhs.emailIsSet()) || (emailIsSet() && rhs.emailIsSet() && getEmail() == rhs.getEmail())) && + + + ((!passwordIsSet() && !rhs.passwordIsSet()) || (passwordIsSet() && rhs.passwordIsSet() && getPassword() == rhs.getPassword())) && + + + ((!phoneIsSet() && !rhs.phoneIsSet()) || (phoneIsSet() && rhs.phoneIsSet() && getPhone() == rhs.getPhone())) && + + + ((!userStatusIsSet() && !rhs.userStatusIsSet()) || (userStatusIsSet() && rhs.userStatusIsSet() && getUserStatus() == rhs.getUserStatus())) + + ; +} + +bool User::operator!=(const User& rhs) const +{ + return !(*this == rhs); } void to_json(nlohmann::json& j, const User& o) @@ -253,8 +313,5 @@ void User::unsetUserStatus() } -} -} -} -} +} // namespace org::openapitools::server::model diff --git a/samples/server/petstore/cpp-pistache/model/User.h b/samples/server/petstore/cpp-pistache/model/User.h index 1f4c17ce6a81..02bd5f4230a8 100644 --- a/samples/server/petstore/cpp-pistache/model/User.h +++ b/samples/server/petstore/cpp-pistache/model/User.h @@ -22,10 +22,8 @@ #include #include -namespace org { -namespace openapitools { -namespace server { -namespace model { +namespace org::openapitools::server::model +{ /// /// A User who is purchasing from the pet store @@ -34,9 +32,22 @@ class User { public: User(); - virtual ~User(); + virtual ~User() = default; - void validate(); + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + bool operator==(const User& rhs) const; + bool operator!=(const User& rhs) const; ///////////////////////////////////////////// /// User members @@ -117,11 +128,11 @@ class User bool m_PhoneIsSet; int32_t m_UserStatus; bool m_UserStatusIsSet; + + // Helper overload for validate. Used when one model stores another model and calls it's validate. + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; }; -} -} -} -} +} // namespace org::openapitools::server::model #endif /* User_H_ */ From ec085713cec7d51a5ee9e17e5fd4899740354efa Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 6 May 2021 10:42:46 +0800 Subject: [PATCH 081/186] [Erlang] migrate CI to drone.io (#9406) * test erlang client, server in drone.io * rearrange tests, add server folder * comment out erlang server tests --- CI/.drone.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CI/.drone.yml b/CI/.drone.yml index 037fb654724c..a4c8c9b0e95e 100644 --- a/CI/.drone.yml +++ b/CI/.drone.yml @@ -1,6 +1,5 @@ kind: pipeline name: default - steps: # test Java 11 HTTP client - name: java11-test @@ -54,3 +53,10 @@ steps: image: haskell:8.6.5 commands: - (cd samples/client/petstore/haskell-http-client/ && stack --install-ghc --no-haddock-deps haddock --fast && stack test --fast) +# test erlang client and server +- name: erlang + image: erlang:alpine + commands: + - (cd samples/client/petstore/erlang-client && rebar3 compile) + - (cd samples/client/petstore/erlang-proper && rebar3 compile) + #- (cd samples/server/petstore/erlang-server && rebar3 compile) From 45d55f6b73b166e55ed452cd384eb1a790082817 Mon Sep 17 00:00:00 2001 From: matt beary <1661988+hauntingEcho@users.noreply.github.com> Date: Wed, 5 May 2021 21:46:06 -0500 Subject: [PATCH 082/186] [aspnetcore] Fix incorrect logging messages (#9405) * fix incorrect aspnetcore logging messages * address comments from review cleans up log messages --- .../codegen/languages/AspNetCoreServerCodegen.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index a52fa88609a5..7786ba8b092d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -592,6 +592,7 @@ private void setModelClassModifier() { private void setBuildTarget() { setCliOption(buildTarget); if ("library".equals(buildTarget.getOptValue())) { + LOGGER.warn("buildTarget is {} so changing default isLibrary to true", buildTarget.getOptValue()); isLibrary = true; projectSdk = SDK_LIB; additionalProperties.put(CLASS_MODIFIER, "abstract"); @@ -636,7 +637,7 @@ private String determineTemplateVersion(String frameworkVersion) { private void setUseSwashbuckle() { if (isLibrary) { - LOGGER.warn("buildTarget is " + buildTarget.getOptValue() + " so changing default isLibrary to false "); + LOGGER.warn("isLibrary is true so changing default useSwashbuckle to false"); useSwashbuckle = false; } else { useSwashbuckle = true; From 32b2ea3291dc7cf209449155bcf5bd049f488723 Mon Sep 17 00:00:00 2001 From: matt beary <1661988+hauntingEcho@users.noreply.github.com> Date: Wed, 5 May 2021 22:23:32 -0500 Subject: [PATCH 083/186] Fixes #9398: fix aspnet enum documentation (#9404) --- docs/generators/aspnetcore.md | 12 ++++++------ .../codegen/languages/AspNetCoreServerCodegen.java | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/generators/aspnetcore.md b/docs/generators/aspnetcore.md index 0a30830099f5..99f0b789bdc3 100644 --- a/docs/generators/aspnetcore.md +++ b/docs/generators/aspnetcore.md @@ -7,9 +7,9 @@ These options may be applied as additional-properties (cli) or configOptions (pl | Option | Description | Values | Default | | ------ | ----------- | ------ | ------- | -|aspnetCoreVersion|ASP.NET Core version: 5.0, 3.1, 3.0, 2.2, 2.1, 2.0 (deprecated)| |3.1| -|buildTarget|Target to build an application or library| |program| -|classModifier|Class Modifier for controller classes: Empty string or abstract.| || +|aspnetCoreVersion|ASP.NET Core version: 5.0, 3.1, 3.0, 2.2, 2.1, 2.0 (deprecated)|
**2.0**
ASP.NET Core 2.0
**2.1**
ASP.NET Core 2.1
**2.2**
ASP.NET Core 2.2
**3.0**
ASP.NET Core 3.0
**3.1**
ASP.NET Core 3.1
**5.0**
ASP.NET Core 5.0
|3.1| +|buildTarget|Target to build an application or library|
**program**
Generate code for a standalone server
**library**
Generate code for a server abstract class library
|program| +|classModifier|Class Modifier for controller classes: Empty string or abstract.|
****
Keep class default with no modifier
**abstract**
Make class abstract
|| |compatibilityVersion|ASP.Net Core CompatibilityVersion| |Version_2_2| |enumNameSuffix|Suffix that will be appended to all enum names.| |Enum| |enumValueSuffix|Suffix that will be appended to all enum values.| |Enum| @@ -17,10 +17,10 @@ These options may be applied as additional-properties (cli) or configOptions (pl |isLibrary|Is the build a library| |false| |licenseName|The name of the license| |NoLicense| |licenseUrl|The URL of the license| |http://localhost| -|modelClassModifier|Model Class Modifier can be nothing or partial| |partial| +|modelClassModifier|Model Class Modifier can be nothing or partial|
****
Keep model class default with no modifier
**partial**
Make model class partial
|partial| |newtonsoftVersion|Version for Microsoft.AspNetCore.Mvc.NewtonsoftJson for ASP.NET Core 3.0+| |3.0.0| |operationIsAsync|Set methods to async or sync (default).| |false| -|operationModifier|Operation Modifier can be virtual or abstract| |virtual| +|operationModifier|Operation Modifier can be virtual or abstract|
**virtual**
Keep method virtual
**abstract**
Make method abstract
|virtual| |operationResultTask|Set methods result to Task<>.| |false| |packageAuthors|Specifies Authors property in the .NET Core project file.| |OpenAPI| |packageCopyright|Specifies an AssemblyCopyright for the .NET Framework global assembly attributes stored in the AssemblyInfo file.| |No Copyright| @@ -32,7 +32,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |returnICollection|Return ICollection<T> instead of the concrete type.| |false| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |src| -|swashbuckleVersion|Swashbuckle version: 3.0.0, 4.0.0, 5.0.0| |3.0.0| +|swashbuckleVersion|Swashbuckle version: 3.0.0, 4.0.0, 5.0.0|
**3.0.0**
Swashbuckle 3.0.0
**4.0.0**
Swashbuckle 4.0.0
**5.0.0**
Swashbuckle 5.0.0
|3.0.0| |useCollection|Deserialize array types to Collection<T> instead of List<T>.| |false| |useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false| |useDefaultRouting|Use default routing for the ASP.NET Core version.| |true| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index 7786ba8b092d..f7c24196331e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -199,14 +199,14 @@ public AspNetCoreServerCodegen() { aspnetCoreVersion.addEnum("5.0", "ASP.NET Core 5.0"); aspnetCoreVersion.setDefault("3.1"); aspnetCoreVersion.setOptValue(aspnetCoreVersion.getDefault()); - addOption(aspnetCoreVersion.getOpt(), aspnetCoreVersion.getDescription(), aspnetCoreVersion.getOptValue()); + cliOptions.add(aspnetCoreVersion); swashbuckleVersion.addEnum("3.0.0", "Swashbuckle 3.0.0"); swashbuckleVersion.addEnum("4.0.0", "Swashbuckle 4.0.0"); swashbuckleVersion.addEnum("5.0.0", "Swashbuckle 5.0.0"); swashbuckleVersion.setDefault("3.0.0"); swashbuckleVersion.setOptValue(swashbuckleVersion.getDefault()); - addOption(swashbuckleVersion.getOpt(), swashbuckleVersion.getDescription(), swashbuckleVersion.getOptValue()); + cliOptions.add(swashbuckleVersion); // CLI Switches addSwitch(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, @@ -261,19 +261,19 @@ public AspNetCoreServerCodegen() { classModifier.addEnum("abstract", "Make class abstract"); classModifier.setDefault(""); classModifier.setOptValue(classModifier.getDefault()); - addOption(classModifier.getOpt(), classModifier.getDescription(), classModifier.getOptValue()); + cliOptions.add(classModifier); operationModifier.addEnum("virtual", "Keep method virtual"); operationModifier.addEnum("abstract", "Make method abstract"); operationModifier.setDefault("virtual"); operationModifier.setOptValue(operationModifier.getDefault()); - addOption(operationModifier.getOpt(), operationModifier.getDescription(), operationModifier.getOptValue()); + cliOptions.add(operationModifier); buildTarget.addEnum("program", "Generate code for a standalone server"); buildTarget.addEnum("library", "Generate code for a server abstract class library"); buildTarget.setDefault("program"); buildTarget.setOptValue(buildTarget.getDefault()); - addOption(buildTarget.getOpt(), buildTarget.getDescription(), buildTarget.getOptValue()); + cliOptions.add(buildTarget); addSwitch(GENERATE_BODY, "Generates method body.", @@ -292,7 +292,7 @@ public AspNetCoreServerCodegen() { modelClassModifier.addEnum("partial", "Make model class partial"); modelClassModifier.setDefault("partial"); modelClassModifier.setOptValue(modelClassModifier.getDefault()); - addOption(modelClassModifier.getOpt(), modelClassModifier.getDescription(), modelClassModifier.getOptValue()); + cliOptions.add(modelClassModifier); } @Override From 343d7eb712159d6dc00a62f8158167398a835f13 Mon Sep 17 00:00:00 2001 From: Samuel Kahn <48932506+Kahncode@users.noreply.github.com> Date: Thu, 6 May 2021 05:26:07 +0200 Subject: [PATCH 084/186] [cpp-ue4] Improved retry system to use Unreal's FHttpRetrySystem (#9382) * Revert "[cpp-ue4] Added the possibility to retry requests easily with AsyncRetry method on the response and SetAutoRetryCount on the request" * [cpp-ue4] Improved retry system to use Unreal's FHttpRetrySystem * [cpp-ue4] Updated style guide link * update samples Co-authored-by: William Cheng --- CONTRIBUTING.md | 1 + .../resources/cpp-ue4/api-header.mustache | 16 +- .../resources/cpp-ue4/api-source.mustache | 53 +++-- .../cpp-ue4/model-base-header.mustache | 40 +++- .../cpp-ue4/model-base-source.mustache | 30 +-- .../cpp-ue4/Private/OpenAPIBaseModel.cpp | 30 +-- .../cpp-ue4/Private/OpenAPIPetApi.cpp | 186 +++++++----------- .../cpp-ue4/Private/OpenAPIStoreApi.cpp | 110 +++++------ .../cpp-ue4/Private/OpenAPIUserApi.cpp | 186 +++++++----------- .../cpp-ue4/Public/OpenAPIBaseModel.h | 40 +++- .../petstore/cpp-ue4/Public/OpenAPIPetApi.h | 30 ++- .../petstore/cpp-ue4/Public/OpenAPIStoreApi.h | 22 ++- .../petstore/cpp-ue4/Public/OpenAPIUserApi.h | 30 ++- 13 files changed, 394 insertions(+), 380 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 30258ec9fd6c..0fe833163afa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,6 +48,7 @@ Code change should conform to the programming style guide of the respective lang - C#: https://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx - C++: https://google.github.io/styleguide/cppguide.html - C++ (Tizen): https://wiki.tizen.org/Native_Platform_Coding_Idiom_and_Style_Guide#C.2B.2B_Coding_Style +- C++ (Unreal Engine 4): https://docs.unrealengine.com/en-US/ProductionPipelines/DevelopmentSetup/CodingStandard/index.html - Clojure: https://github.com/bbatsov/clojure-style-guide - Crystal: https://crystal-lang.org/reference/conventions/coding_style.html - Dart: https://www.dartlang.org/guides/language/effective-dart/style diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/api-header.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/api-header.mustache index c6ee2f08eb44..17b42e942ea7 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/api-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/api-header.mustache @@ -15,9 +15,19 @@ public: {{classname}}(); ~{{classname}}(); + /* Sets the URL Endpoint. + * Note: several fallback endpoints can be configured in request retry policies, see Request::SetShouldRetry */ void SetURL(const FString& Url); + + /* Adds global header params to all requests */ void AddHeaderParam(const FString& Key, const FString& Value); void ClearHeaderParams(); + + /* Sets the retry manager to the user-defined retry manager. User must manage the lifetime of the retry manager. + * If no retry manager is specified and a request needs retries, a default retry manager will be used. + * See also: Request::SetShouldRetry */ + void SetHttpRetryManager(FHttpRetrySystem::FManager& RetryManager); + FHttpRetrySystem::FManager& GetHttpRetryManager(); {{#operations}}{{#operation}}class {{operationIdCamelCase}}Request; class {{operationIdCamelCase}}Response; @@ -27,15 +37,17 @@ public: {{#operations}}{{#operation}}{{#description}}/* {{{description}}} */ {{/description}}bool {{operationIdCamelCase}}(const {{operationIdCamelCase}}Request& Request, const F{{operationIdCamelCase}}Delegate& Delegate = F{{operationIdCamelCase}}Delegate()) const; {{/operation}}{{/operations}} - private: - {{#operations}}{{#operation}}void On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate, int AutoRetryCount) const; + {{#operations}}{{#operation}}void On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate) const; {{/operation}}{{/operations}} + FHttpRequestRef CreateHttpRequest(const Request& Request) const; bool IsValid() const; void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const; FString Url; TMap AdditionalHeaderParams; + mutable FHttpRetrySystem::FManager* RetryManager = nullptr; + mutable TUniquePtr DefaultRetryManager; }; {{#cppNamespaceDeclarations}} diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/api-source.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/api-source.mustache index 8a9b38545444..9bd9f3b87bde 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/api-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/api-source.mustache @@ -45,6 +45,40 @@ bool {{classname}}::IsValid() const return true; } +void {{classname}}::SetHttpRetryManager(FHttpRetrySystem::FManager& InRetryManager) +{ + if(RetryManager != &GetHttpRetryManager()) + { + DefaultRetryManager.Reset(); + RetryManager = &InRetryManager; + } +} + +FHttpRetrySystem::FManager& {{classname}}::GetHttpRetryManager() +{ + return *RetryManager; +} + +FHttpRequestRef {{classname}}::CreateHttpRequest(const Request& Request) const +{ + if (!Request.GetRetryParams().IsSet()) + { + return FHttpModule::Get().CreateRequest(); + } + else + { + if (!RetryManager) + { + // Create default retry manager if none was specified + DefaultRetryManager = MakeUnique(6, 60); + RetryManager = DefaultRetryManager.Get(); + } + + const HttpRetryParams& Params = Request.GetRetryParams().GetValue(); + return RetryManager->CreateRequest(Params.RetryLimitCountOverride, Params.RetryTimeoutRelativeSecondsOverride, Params.RetryResponseCodes, Params.RetryVerbs, Params.RetryDomains); + } +} + void {{classname}}::HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const { InOutResponse.SetHttpResponse(HttpResponse); @@ -96,7 +130,7 @@ bool {{classname}}::{{operationIdCamelCase}}(const {{operationIdCamelCase}}Reque if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -106,26 +140,15 @@ bool {{classname}}::{{operationIdCamelCase}}(const {{operationIdCamelCase}}Reque Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &{{classname}}::On{{operationIdCamelCase}}Response, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &{{classname}}::On{{operationIdCamelCase}}Response, Delegate); return HttpRequest->ProcessRequest(); } -void {{classname}}::On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate, int AutoRetryCount) const +void {{classname}}::On{{operationIdCamelCase}}Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, F{{operationIdCamelCase}}Delegate Delegate) const { {{operationIdCamelCase}}Response Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &{{classname}}::On{{operationIdCamelCase}}Response, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } {{/operation}} diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-header.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-header.mustache index 31b0bdabd260..2f5b6255f54a 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-header.mustache @@ -5,6 +5,8 @@ #include "Interfaces/IHttpResponse.h" #include "Serialization/JsonWriter.h" #include "Dom/JsonObject.h" +#include "HttpRetrySystem.h" +#include "Containers/Ticker.h" {{#cppNamespaceDeclarations}} namespace {{this}} @@ -12,6 +14,31 @@ namespace {{this}} {{/cppNamespaceDeclarations}} typedef TSharedRef> JsonWriter; +using namespace FHttpRetrySystem; + +struct {{dllapi}} HttpRetryManager : public FManager, public FTickerObjectBase +{ + using FManager::FManager; + + bool Tick(float DeltaTime) final; +}; + +struct {{dllapi}} HttpRetryParams +{ + HttpRetryParams( + const FRetryLimitCountSetting& InRetryLimitCountOverride = FRetryLimitCountSetting(), + const FRetryTimeoutRelativeSecondsSetting& InRetryTimeoutRelativeSecondsOverride = FRetryTimeoutRelativeSecondsSetting(), + const FRetryResponseCodes& InRetryResponseCodes = FRetryResponseCodes(), + const FRetryVerbs& InRetryVerbs = FRetryVerbs(), + const FRetryDomainsPtr& InRetryDomains = FRetryDomainsPtr() + ); + + FRetryLimitCountSetting RetryLimitCountOverride; + FRetryTimeoutRelativeSecondsSetting RetryTimeoutRelativeSecondsOverride; + FRetryResponseCodes RetryResponseCodes; + FRetryVerbs RetryVerbs; + FRetryDomainsPtr RetryDomains; +}; class {{dllapi}} Model { @@ -28,11 +55,12 @@ public: virtual void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const = 0; virtual FString ComputePath() const = 0; - void SetAutoRetryCount(int InCount) { AutoRetryCount = InCount; } - int GetAutoRetryCount() const { return AutoRetryCount; } + /* Enables retry and optionally sets a retry policy for this request */ + void SetShouldRetry(const HttpRetryParams& Params = HttpRetryParams()) { RetryParams = Params; } + const TOptional& GetRetryParams() const { return RetryParams; } private: - int AutoRetryCount = 0; + TOptional RetryParams; }; class {{dllapi}} Response @@ -44,8 +72,6 @@ public: void SetSuccessful(bool InSuccessful) { Successful = InSuccessful; } bool IsSuccessful() const { return Successful; } - void AsyncRetry() const; - virtual void SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode); EHttpResponseCodes::Type GetHttpResponseCode() const { return ResponseCode; } @@ -55,15 +81,11 @@ public: void SetHttpResponse(const FHttpResponsePtr& InHttpResponse) { HttpResponse = InHttpResponse; } const FHttpResponsePtr& GetHttpResponse() const { return HttpResponse; } - void SetHttpRequest(const FHttpRequestPtr& InHttpRequest) { HttpRequest = InHttpRequest; } - const FHttpRequestPtr& GetHttpRequest() const { return HttpRequest; } - private: bool Successful; EHttpResponseCodes::Type ResponseCode; FString ResponseString; FHttpResponsePtr HttpResponse; - FHttpRequestPtr HttpRequest; }; {{#cppNamespaceDeclarations}} diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-source.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-source.mustache index a5ab70a432f7..57dc4fb4151c 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/model-base-source.mustache @@ -1,13 +1,30 @@ {{>licenseInfo}} #include "{{modelNamePrefix}}BaseModel.h" -#include "Async/Async.h" - {{#cppNamespaceDeclarations}} namespace {{this}} { {{/cppNamespaceDeclarations}} +bool HttpRetryManager::Tick(float DeltaTime) +{ + FManager::Update(); + return true; +} + +HttpRetryParams::HttpRetryParams(const FRetryLimitCountSetting& InRetryLimitCountOverride /*= FRetryLimitCountSetting()*/, + const FRetryTimeoutRelativeSecondsSetting& InRetryTimeoutRelativeSecondsOverride /*= FRetryTimeoutRelativeSecondsSetting()*/, + const FRetryResponseCodes& InRetryResponseCodes /*= FRetryResponseCodes()*/, + const FRetryVerbs& InRetryVerbs /*= FRetryVerbs()*/, + const FRetryDomainsPtr& InRetryDomains /*= FRetryDomainsPtr() */) + : RetryLimitCountOverride(InRetryLimitCountOverride) + , RetryTimeoutRelativeSecondsOverride(InRetryTimeoutRelativeSecondsOverride) + , RetryResponseCodes(InRetryResponseCodes) + , RetryVerbs(InRetryVerbs) + , RetryDomains(InRetryDomains) +{ +} + void Response::SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode) { ResponseCode = InHttpResponseCode; @@ -18,15 +35,6 @@ void Response::SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode) } } -void Response::AsyncRetry() const -{ - // Unfortunately, it is currently usafe to call ProcessRequest() directly here. - // This is because the HttpManager will remove all references to this HttpRequest in FHttpManager::Tick including the new request we just added, instead of removing just one. - // This will lead to the request's destruction and eventually a crash. - // The only solution is therefore to ensure we are taking an extra reference to the request, and that the request is added after the queue is flushed. - Async(EAsyncExecution::TaskGraph, [AddRef = FHttpRequestPtr(GetHttpRequest())](){ AddRef->ProcessRequest(); }); -} - {{#cppNamespaceDeclarations}} } {{/cppNamespaceDeclarations}} \ No newline at end of file diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIBaseModel.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIBaseModel.cpp index b277e2570285..f8552ac0b7d9 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIBaseModel.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIBaseModel.cpp @@ -12,11 +12,28 @@ #include "OpenAPIBaseModel.h" -#include "Async/Async.h" - namespace OpenAPI { +bool HttpRetryManager::Tick(float DeltaTime) +{ + FManager::Update(); + return true; +} + +HttpRetryParams::HttpRetryParams(const FRetryLimitCountSetting& InRetryLimitCountOverride /*= FRetryLimitCountSetting()*/, + const FRetryTimeoutRelativeSecondsSetting& InRetryTimeoutRelativeSecondsOverride /*= FRetryTimeoutRelativeSecondsSetting()*/, + const FRetryResponseCodes& InRetryResponseCodes /*= FRetryResponseCodes()*/, + const FRetryVerbs& InRetryVerbs /*= FRetryVerbs()*/, + const FRetryDomainsPtr& InRetryDomains /*= FRetryDomainsPtr() */) + : RetryLimitCountOverride(InRetryLimitCountOverride) + , RetryTimeoutRelativeSecondsOverride(InRetryTimeoutRelativeSecondsOverride) + , RetryResponseCodes(InRetryResponseCodes) + , RetryVerbs(InRetryVerbs) + , RetryDomains(InRetryDomains) +{ +} + void Response::SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode) { ResponseCode = InHttpResponseCode; @@ -27,13 +44,4 @@ void Response::SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode) } } -void Response::AsyncRetry() const -{ - // Unfortunately, it is currently usafe to call ProcessRequest() directly here. - // This is because the HttpManager will remove all references to this HttpRequest in FHttpManager::Tick including the new request we just added, instead of removing just one. - // This will lead to the request's destruction and eventually a crash. - // The only solution is therefore to ensure we are taking an extra reference to the request, and that the request is added after the queue is flushed. - Async(EAsyncExecution::TaskGraph, [AddRef = FHttpRequestPtr(GetHttpRequest())](){ AddRef->ProcessRequest(); }); -} - } diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApi.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApi.cpp index 68a0d933aca7..72d2c58ea6e1 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApi.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIPetApi.cpp @@ -54,6 +54,40 @@ bool OpenAPIPetApi::IsValid() const return true; } +void OpenAPIPetApi::SetHttpRetryManager(FHttpRetrySystem::FManager& InRetryManager) +{ + if(RetryManager != &GetHttpRetryManager()) + { + DefaultRetryManager.Reset(); + RetryManager = &InRetryManager; + } +} + +FHttpRetrySystem::FManager& OpenAPIPetApi::GetHttpRetryManager() +{ + return *RetryManager; +} + +FHttpRequestRef OpenAPIPetApi::CreateHttpRequest(const Request& Request) const +{ + if (!Request.GetRetryParams().IsSet()) + { + return FHttpModule::Get().CreateRequest(); + } + else + { + if (!RetryManager) + { + // Create default retry manager if none was specified + DefaultRetryManager = MakeUnique(6, 60); + RetryManager = DefaultRetryManager.Get(); + } + + const HttpRetryParams& Params = Request.GetRetryParams().GetValue(); + return RetryManager->CreateRequest(Params.RetryLimitCountOverride, Params.RetryTimeoutRelativeSecondsOverride, Params.RetryResponseCodes, Params.RetryVerbs, Params.RetryDomains); + } +} + void OpenAPIPetApi::HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const { InOutResponse.SetHttpResponse(HttpResponse); @@ -103,7 +137,7 @@ bool OpenAPIPetApi::AddPet(const AddPetRequest& Request, const FAddPetDelegate& if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -113,26 +147,15 @@ bool OpenAPIPetApi::AddPet(const AddPetRequest& Request, const FAddPetDelegate& Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnAddPetResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnAddPetResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate, int AutoRetryCount) const +void OpenAPIPetApi::OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate) const { AddPetResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnAddPetResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIPetApi::DeletePet(const DeletePetRequest& Request, const FDeletePetDelegate& Delegate /*= FDeletePetDelegate()*/) const @@ -140,7 +163,7 @@ bool OpenAPIPetApi::DeletePet(const DeletePetRequest& Request, const FDeletePetD if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -150,26 +173,15 @@ bool OpenAPIPetApi::DeletePet(const DeletePetRequest& Request, const FDeletePetD Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnDeletePetResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnDeletePetResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate, int AutoRetryCount) const +void OpenAPIPetApi::OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate) const { DeletePetResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnDeletePetResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIPetApi::FindPetsByStatus(const FindPetsByStatusRequest& Request, const FFindPetsByStatusDelegate& Delegate /*= FFindPetsByStatusDelegate()*/) const @@ -177,7 +189,7 @@ bool OpenAPIPetApi::FindPetsByStatus(const FindPetsByStatusRequest& Request, con if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -187,26 +199,15 @@ bool OpenAPIPetApi::FindPetsByStatus(const FindPetsByStatusRequest& Request, con Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByStatusResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByStatusResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate, int AutoRetryCount) const +void OpenAPIPetApi::OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate) const { FindPetsByStatusResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByStatusResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIPetApi::FindPetsByTags(const FindPetsByTagsRequest& Request, const FFindPetsByTagsDelegate& Delegate /*= FFindPetsByTagsDelegate()*/) const @@ -214,7 +215,7 @@ bool OpenAPIPetApi::FindPetsByTags(const FindPetsByTagsRequest& Request, const F if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -224,26 +225,15 @@ bool OpenAPIPetApi::FindPetsByTags(const FindPetsByTagsRequest& Request, const F Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByTagsResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByTagsResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate, int AutoRetryCount) const +void OpenAPIPetApi::OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate) const { FindPetsByTagsResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnFindPetsByTagsResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIPetApi::GetPetById(const GetPetByIdRequest& Request, const FGetPetByIdDelegate& Delegate /*= FGetPetByIdDelegate()*/) const @@ -251,7 +241,7 @@ bool OpenAPIPetApi::GetPetById(const GetPetByIdRequest& Request, const FGetPetBy if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -261,26 +251,15 @@ bool OpenAPIPetApi::GetPetById(const GetPetByIdRequest& Request, const FGetPetBy Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnGetPetByIdResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnGetPetByIdResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate, int AutoRetryCount) const +void OpenAPIPetApi::OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate) const { GetPetByIdResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnGetPetByIdResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIPetApi::UpdatePet(const UpdatePetRequest& Request, const FUpdatePetDelegate& Delegate /*= FUpdatePetDelegate()*/) const @@ -288,7 +267,7 @@ bool OpenAPIPetApi::UpdatePet(const UpdatePetRequest& Request, const FUpdatePetD if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -298,26 +277,15 @@ bool OpenAPIPetApi::UpdatePet(const UpdatePetRequest& Request, const FUpdatePetD Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate, int AutoRetryCount) const +void OpenAPIPetApi::OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate) const { UpdatePetResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIPetApi::UpdatePetWithForm(const UpdatePetWithFormRequest& Request, const FUpdatePetWithFormDelegate& Delegate /*= FUpdatePetWithFormDelegate()*/) const @@ -325,7 +293,7 @@ bool OpenAPIPetApi::UpdatePetWithForm(const UpdatePetWithFormRequest& Request, c if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -335,26 +303,15 @@ bool OpenAPIPetApi::UpdatePetWithForm(const UpdatePetWithFormRequest& Request, c Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetWithFormResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetWithFormResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate, int AutoRetryCount) const +void OpenAPIPetApi::OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate) const { UpdatePetWithFormResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUpdatePetWithFormResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIPetApi::UploadFile(const UploadFileRequest& Request, const FUploadFileDelegate& Delegate /*= FUploadFileDelegate()*/) const @@ -362,7 +319,7 @@ bool OpenAPIPetApi::UploadFile(const UploadFileRequest& Request, const FUploadFi if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -372,26 +329,15 @@ bool OpenAPIPetApi::UploadFile(const UploadFileRequest& Request, const FUploadFi Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUploadFileResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUploadFileResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIPetApi::OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate, int AutoRetryCount) const +void OpenAPIPetApi::OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate) const { UploadFileResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIPetApi::OnUploadFileResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } } diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApi.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApi.cpp index 32000a959073..ed25814006e0 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApi.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIStoreApi.cpp @@ -54,6 +54,40 @@ bool OpenAPIStoreApi::IsValid() const return true; } +void OpenAPIStoreApi::SetHttpRetryManager(FHttpRetrySystem::FManager& InRetryManager) +{ + if(RetryManager != &GetHttpRetryManager()) + { + DefaultRetryManager.Reset(); + RetryManager = &InRetryManager; + } +} + +FHttpRetrySystem::FManager& OpenAPIStoreApi::GetHttpRetryManager() +{ + return *RetryManager; +} + +FHttpRequestRef OpenAPIStoreApi::CreateHttpRequest(const Request& Request) const +{ + if (!Request.GetRetryParams().IsSet()) + { + return FHttpModule::Get().CreateRequest(); + } + else + { + if (!RetryManager) + { + // Create default retry manager if none was specified + DefaultRetryManager = MakeUnique(6, 60); + RetryManager = DefaultRetryManager.Get(); + } + + const HttpRetryParams& Params = Request.GetRetryParams().GetValue(); + return RetryManager->CreateRequest(Params.RetryLimitCountOverride, Params.RetryTimeoutRelativeSecondsOverride, Params.RetryResponseCodes, Params.RetryVerbs, Params.RetryDomains); + } +} + void OpenAPIStoreApi::HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const { InOutResponse.SetHttpResponse(HttpResponse); @@ -103,7 +137,7 @@ bool OpenAPIStoreApi::DeleteOrder(const DeleteOrderRequest& Request, const FDele if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -113,26 +147,15 @@ bool OpenAPIStoreApi::DeleteOrder(const DeleteOrderRequest& Request, const FDele Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnDeleteOrderResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnDeleteOrderResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIStoreApi::OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate, int AutoRetryCount) const +void OpenAPIStoreApi::OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate) const { DeleteOrderResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnDeleteOrderResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIStoreApi::GetInventory(const GetInventoryRequest& Request, const FGetInventoryDelegate& Delegate /*= FGetInventoryDelegate()*/) const @@ -140,7 +163,7 @@ bool OpenAPIStoreApi::GetInventory(const GetInventoryRequest& Request, const FGe if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -150,26 +173,15 @@ bool OpenAPIStoreApi::GetInventory(const GetInventoryRequest& Request, const FGe Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetInventoryResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetInventoryResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIStoreApi::OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate, int AutoRetryCount) const +void OpenAPIStoreApi::OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate) const { GetInventoryResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetInventoryResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIStoreApi::GetOrderById(const GetOrderByIdRequest& Request, const FGetOrderByIdDelegate& Delegate /*= FGetOrderByIdDelegate()*/) const @@ -177,7 +189,7 @@ bool OpenAPIStoreApi::GetOrderById(const GetOrderByIdRequest& Request, const FGe if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -187,26 +199,15 @@ bool OpenAPIStoreApi::GetOrderById(const GetOrderByIdRequest& Request, const FGe Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetOrderByIdResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetOrderByIdResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIStoreApi::OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate, int AutoRetryCount) const +void OpenAPIStoreApi::OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate) const { GetOrderByIdResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnGetOrderByIdResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIStoreApi::PlaceOrder(const PlaceOrderRequest& Request, const FPlaceOrderDelegate& Delegate /*= FPlaceOrderDelegate()*/) const @@ -214,7 +215,7 @@ bool OpenAPIStoreApi::PlaceOrder(const PlaceOrderRequest& Request, const FPlaceO if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -224,26 +225,15 @@ bool OpenAPIStoreApi::PlaceOrder(const PlaceOrderRequest& Request, const FPlaceO Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnPlaceOrderResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnPlaceOrderResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIStoreApi::OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate, int AutoRetryCount) const +void OpenAPIStoreApi::OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate) const { PlaceOrderResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIStoreApi::OnPlaceOrderResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } } diff --git a/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApi.cpp b/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApi.cpp index 9fdd937b3b9e..8f38a6358f46 100644 --- a/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApi.cpp +++ b/samples/client/petstore/cpp-ue4/Private/OpenAPIUserApi.cpp @@ -54,6 +54,40 @@ bool OpenAPIUserApi::IsValid() const return true; } +void OpenAPIUserApi::SetHttpRetryManager(FHttpRetrySystem::FManager& InRetryManager) +{ + if(RetryManager != &GetHttpRetryManager()) + { + DefaultRetryManager.Reset(); + RetryManager = &InRetryManager; + } +} + +FHttpRetrySystem::FManager& OpenAPIUserApi::GetHttpRetryManager() +{ + return *RetryManager; +} + +FHttpRequestRef OpenAPIUserApi::CreateHttpRequest(const Request& Request) const +{ + if (!Request.GetRetryParams().IsSet()) + { + return FHttpModule::Get().CreateRequest(); + } + else + { + if (!RetryManager) + { + // Create default retry manager if none was specified + DefaultRetryManager = MakeUnique(6, 60); + RetryManager = DefaultRetryManager.Get(); + } + + const HttpRetryParams& Params = Request.GetRetryParams().GetValue(); + return RetryManager->CreateRequest(Params.RetryLimitCountOverride, Params.RetryTimeoutRelativeSecondsOverride, Params.RetryResponseCodes, Params.RetryVerbs, Params.RetryDomains); + } +} + void OpenAPIUserApi::HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const { InOutResponse.SetHttpResponse(HttpResponse); @@ -103,7 +137,7 @@ bool OpenAPIUserApi::CreateUser(const CreateUserRequest& Request, const FCreateU if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -113,26 +147,15 @@ bool OpenAPIUserApi::CreateUser(const CreateUserRequest& Request, const FCreateU Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUserResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUserResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate, int AutoRetryCount) const +void OpenAPIUserApi::OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate) const { CreateUserResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUserResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIUserApi::CreateUsersWithArrayInput(const CreateUsersWithArrayInputRequest& Request, const FCreateUsersWithArrayInputDelegate& Delegate /*= FCreateUsersWithArrayInputDelegate()*/) const @@ -140,7 +163,7 @@ bool OpenAPIUserApi::CreateUsersWithArrayInput(const CreateUsersWithArrayInputRe if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -150,26 +173,15 @@ bool OpenAPIUserApi::CreateUsersWithArrayInput(const CreateUsersWithArrayInputRe Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithArrayInputResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithArrayInputResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate, int AutoRetryCount) const +void OpenAPIUserApi::OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate) const { CreateUsersWithArrayInputResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithArrayInputResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIUserApi::CreateUsersWithListInput(const CreateUsersWithListInputRequest& Request, const FCreateUsersWithListInputDelegate& Delegate /*= FCreateUsersWithListInputDelegate()*/) const @@ -177,7 +189,7 @@ bool OpenAPIUserApi::CreateUsersWithListInput(const CreateUsersWithListInputRequ if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -187,26 +199,15 @@ bool OpenAPIUserApi::CreateUsersWithListInput(const CreateUsersWithListInputRequ Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithListInputResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithListInputResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate, int AutoRetryCount) const +void OpenAPIUserApi::OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate) const { CreateUsersWithListInputResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnCreateUsersWithListInputResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIUserApi::DeleteUser(const DeleteUserRequest& Request, const FDeleteUserDelegate& Delegate /*= FDeleteUserDelegate()*/) const @@ -214,7 +215,7 @@ bool OpenAPIUserApi::DeleteUser(const DeleteUserRequest& Request, const FDeleteU if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -224,26 +225,15 @@ bool OpenAPIUserApi::DeleteUser(const DeleteUserRequest& Request, const FDeleteU Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnDeleteUserResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnDeleteUserResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate, int AutoRetryCount) const +void OpenAPIUserApi::OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate) const { DeleteUserResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnDeleteUserResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIUserApi::GetUserByName(const GetUserByNameRequest& Request, const FGetUserByNameDelegate& Delegate /*= FGetUserByNameDelegate()*/) const @@ -251,7 +241,7 @@ bool OpenAPIUserApi::GetUserByName(const GetUserByNameRequest& Request, const FG if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -261,26 +251,15 @@ bool OpenAPIUserApi::GetUserByName(const GetUserByNameRequest& Request, const FG Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnGetUserByNameResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnGetUserByNameResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate, int AutoRetryCount) const +void OpenAPIUserApi::OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate) const { GetUserByNameResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnGetUserByNameResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIUserApi::LoginUser(const LoginUserRequest& Request, const FLoginUserDelegate& Delegate /*= FLoginUserDelegate()*/) const @@ -288,7 +267,7 @@ bool OpenAPIUserApi::LoginUser(const LoginUserRequest& Request, const FLoginUser if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -298,26 +277,15 @@ bool OpenAPIUserApi::LoginUser(const LoginUserRequest& Request, const FLoginUser Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLoginUserResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLoginUserResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate, int AutoRetryCount) const +void OpenAPIUserApi::OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate) const { LoginUserResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLoginUserResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIUserApi::LogoutUser(const LogoutUserRequest& Request, const FLogoutUserDelegate& Delegate /*= FLogoutUserDelegate()*/) const @@ -325,7 +293,7 @@ bool OpenAPIUserApi::LogoutUser(const LogoutUserRequest& Request, const FLogoutU if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -335,26 +303,15 @@ bool OpenAPIUserApi::LogoutUser(const LogoutUserRequest& Request, const FLogoutU Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLogoutUserResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLogoutUserResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate, int AutoRetryCount) const +void OpenAPIUserApi::OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate) const { LogoutUserResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnLogoutUserResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } bool OpenAPIUserApi::UpdateUser(const UpdateUserRequest& Request, const FUpdateUserDelegate& Delegate /*= FUpdateUserDelegate()*/) const @@ -362,7 +319,7 @@ bool OpenAPIUserApi::UpdateUser(const UpdateUserRequest& Request, const FUpdateU if (!IsValid()) return false; - FHttpRequestRef HttpRequest = FHttpModule::Get().CreateRequest(); + FHttpRequestRef HttpRequest = CreateHttpRequest(Request); HttpRequest->SetURL(*(Url + Request.ComputePath())); for(const auto& It : AdditionalHeaderParams) @@ -372,26 +329,15 @@ bool OpenAPIUserApi::UpdateUser(const UpdateUserRequest& Request, const FUpdateU Request.SetupHttpRequest(HttpRequest); - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnUpdateUserResponse, Delegate, Request.GetAutoRetryCount()); + HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnUpdateUserResponse, Delegate); return HttpRequest->ProcessRequest(); } -void OpenAPIUserApi::OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate, int AutoRetryCount) const +void OpenAPIUserApi::OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate) const { UpdateUserResponse Response; - Response.SetHttpRequest(HttpRequest); - HandleResponse(HttpResponse, bSucceeded, Response); - - if(!Response.IsSuccessful() && AutoRetryCount > 0) - { - HttpRequest->OnProcessRequestComplete().BindRaw(this, &OpenAPIUserApi::OnUpdateUserResponse, Delegate, AutoRetryCount - 1); - Response.AsyncRetry(); - } - else - { - Delegate.ExecuteIfBound(Response); - } + Delegate.ExecuteIfBound(Response); } } diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIBaseModel.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIBaseModel.h index d73441e1326c..538589752458 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIBaseModel.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIBaseModel.h @@ -16,11 +16,38 @@ #include "Interfaces/IHttpResponse.h" #include "Serialization/JsonWriter.h" #include "Dom/JsonObject.h" +#include "HttpRetrySystem.h" +#include "Containers/Ticker.h" namespace OpenAPI { typedef TSharedRef> JsonWriter; +using namespace FHttpRetrySystem; + +struct OPENAPI_API HttpRetryManager : public FManager, public FTickerObjectBase +{ + using FManager::FManager; + + bool Tick(float DeltaTime) final; +}; + +struct OPENAPI_API HttpRetryParams +{ + HttpRetryParams( + const FRetryLimitCountSetting& InRetryLimitCountOverride = FRetryLimitCountSetting(), + const FRetryTimeoutRelativeSecondsSetting& InRetryTimeoutRelativeSecondsOverride = FRetryTimeoutRelativeSecondsSetting(), + const FRetryResponseCodes& InRetryResponseCodes = FRetryResponseCodes(), + const FRetryVerbs& InRetryVerbs = FRetryVerbs(), + const FRetryDomainsPtr& InRetryDomains = FRetryDomainsPtr() + ); + + FRetryLimitCountSetting RetryLimitCountOverride; + FRetryTimeoutRelativeSecondsSetting RetryTimeoutRelativeSecondsOverride; + FRetryResponseCodes RetryResponseCodes; + FRetryVerbs RetryVerbs; + FRetryDomainsPtr RetryDomains; +}; class OPENAPI_API Model { @@ -37,11 +64,12 @@ class OPENAPI_API Request virtual void SetupHttpRequest(const FHttpRequestRef& HttpRequest) const = 0; virtual FString ComputePath() const = 0; - void SetAutoRetryCount(int InCount) { AutoRetryCount = InCount; } - int GetAutoRetryCount() const { return AutoRetryCount; } + /* Enables retry and optionally sets a retry policy for this request */ + void SetShouldRetry(const HttpRetryParams& Params = HttpRetryParams()) { RetryParams = Params; } + const TOptional& GetRetryParams() const { return RetryParams; } private: - int AutoRetryCount = 0; + TOptional RetryParams; }; class OPENAPI_API Response @@ -53,8 +81,6 @@ class OPENAPI_API Response void SetSuccessful(bool InSuccessful) { Successful = InSuccessful; } bool IsSuccessful() const { return Successful; } - void AsyncRetry() const; - virtual void SetHttpResponseCode(EHttpResponseCodes::Type InHttpResponseCode); EHttpResponseCodes::Type GetHttpResponseCode() const { return ResponseCode; } @@ -64,15 +90,11 @@ class OPENAPI_API Response void SetHttpResponse(const FHttpResponsePtr& InHttpResponse) { HttpResponse = InHttpResponse; } const FHttpResponsePtr& GetHttpResponse() const { return HttpResponse; } - void SetHttpRequest(const FHttpRequestPtr& InHttpRequest) { HttpRequest = InHttpRequest; } - const FHttpRequestPtr& GetHttpRequest() const { return HttpRequest; } - private: bool Successful; EHttpResponseCodes::Type ResponseCode; FString ResponseString; FHttpResponsePtr HttpResponse; - FHttpRequestPtr HttpRequest; }; } diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApi.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApi.h index bde6403c4913..db422a0eccc6 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApi.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIPetApi.h @@ -24,9 +24,19 @@ class OPENAPI_API OpenAPIPetApi OpenAPIPetApi(); ~OpenAPIPetApi(); + /* Sets the URL Endpoint. + * Note: several fallback endpoints can be configured in request retry policies, see Request::SetShouldRetry */ void SetURL(const FString& Url); + + /* Adds global header params to all requests */ void AddHeaderParam(const FString& Key, const FString& Value); void ClearHeaderParams(); + + /* Sets the retry manager to the user-defined retry manager. User must manage the lifetime of the retry manager. + * If no retry manager is specified and a request needs retries, a default retry manager will be used. + * See also: Request::SetShouldRetry */ + void SetHttpRetryManager(FHttpRetrySystem::FManager& RetryManager); + FHttpRetrySystem::FManager& GetHttpRetryManager(); class AddPetRequest; class AddPetResponse; @@ -63,22 +73,24 @@ class OPENAPI_API OpenAPIPetApi bool UpdatePetWithForm(const UpdatePetWithFormRequest& Request, const FUpdatePetWithFormDelegate& Delegate = FUpdatePetWithFormDelegate()) const; bool UploadFile(const UploadFileRequest& Request, const FUploadFileDelegate& Delegate = FUploadFileDelegate()) const; - private: - void OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate, int AutoRetryCount) const; - void OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate, int AutoRetryCount) const; - void OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate, int AutoRetryCount) const; - void OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate, int AutoRetryCount) const; - void OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate, int AutoRetryCount) const; - void OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate, int AutoRetryCount) const; - void OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate, int AutoRetryCount) const; - void OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate, int AutoRetryCount) const; + void OnAddPetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FAddPetDelegate Delegate) const; + void OnDeletePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeletePetDelegate Delegate) const; + void OnFindPetsByStatusResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByStatusDelegate Delegate) const; + void OnFindPetsByTagsResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FFindPetsByTagsDelegate Delegate) const; + void OnGetPetByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetPetByIdDelegate Delegate) const; + void OnUpdatePetResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetDelegate Delegate) const; + void OnUpdatePetWithFormResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdatePetWithFormDelegate Delegate) const; + void OnUploadFileResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUploadFileDelegate Delegate) const; + FHttpRequestRef CreateHttpRequest(const Request& Request) const; bool IsValid() const; void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const; FString Url; TMap AdditionalHeaderParams; + mutable FHttpRetrySystem::FManager* RetryManager = nullptr; + mutable TUniquePtr DefaultRetryManager; }; } diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApi.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApi.h index 5f5377327328..934a1b277c74 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApi.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIStoreApi.h @@ -24,9 +24,19 @@ class OPENAPI_API OpenAPIStoreApi OpenAPIStoreApi(); ~OpenAPIStoreApi(); + /* Sets the URL Endpoint. + * Note: several fallback endpoints can be configured in request retry policies, see Request::SetShouldRetry */ void SetURL(const FString& Url); + + /* Adds global header params to all requests */ void AddHeaderParam(const FString& Key, const FString& Value); void ClearHeaderParams(); + + /* Sets the retry manager to the user-defined retry manager. User must manage the lifetime of the retry manager. + * If no retry manager is specified and a request needs retries, a default retry manager will be used. + * See also: Request::SetShouldRetry */ + void SetHttpRetryManager(FHttpRetrySystem::FManager& RetryManager); + FHttpRetrySystem::FManager& GetHttpRetryManager(); class DeleteOrderRequest; class DeleteOrderResponse; @@ -47,18 +57,20 @@ class OPENAPI_API OpenAPIStoreApi bool GetOrderById(const GetOrderByIdRequest& Request, const FGetOrderByIdDelegate& Delegate = FGetOrderByIdDelegate()) const; bool PlaceOrder(const PlaceOrderRequest& Request, const FPlaceOrderDelegate& Delegate = FPlaceOrderDelegate()) const; - private: - void OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate, int AutoRetryCount) const; - void OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate, int AutoRetryCount) const; - void OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate, int AutoRetryCount) const; - void OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate, int AutoRetryCount) const; + void OnDeleteOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteOrderDelegate Delegate) const; + void OnGetInventoryResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetInventoryDelegate Delegate) const; + void OnGetOrderByIdResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetOrderByIdDelegate Delegate) const; + void OnPlaceOrderResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FPlaceOrderDelegate Delegate) const; + FHttpRequestRef CreateHttpRequest(const Request& Request) const; bool IsValid() const; void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const; FString Url; TMap AdditionalHeaderParams; + mutable FHttpRetrySystem::FManager* RetryManager = nullptr; + mutable TUniquePtr DefaultRetryManager; }; } diff --git a/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApi.h b/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApi.h index e60ce6754039..809c4950125b 100644 --- a/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApi.h +++ b/samples/client/petstore/cpp-ue4/Public/OpenAPIUserApi.h @@ -24,9 +24,19 @@ class OPENAPI_API OpenAPIUserApi OpenAPIUserApi(); ~OpenAPIUserApi(); + /* Sets the URL Endpoint. + * Note: several fallback endpoints can be configured in request retry policies, see Request::SetShouldRetry */ void SetURL(const FString& Url); + + /* Adds global header params to all requests */ void AddHeaderParam(const FString& Key, const FString& Value); void ClearHeaderParams(); + + /* Sets the retry manager to the user-defined retry manager. User must manage the lifetime of the retry manager. + * If no retry manager is specified and a request needs retries, a default retry manager will be used. + * See also: Request::SetShouldRetry */ + void SetHttpRetryManager(FHttpRetrySystem::FManager& RetryManager); + FHttpRetrySystem::FManager& GetHttpRetryManager(); class CreateUserRequest; class CreateUserResponse; @@ -63,22 +73,24 @@ class OPENAPI_API OpenAPIUserApi bool LogoutUser(const LogoutUserRequest& Request, const FLogoutUserDelegate& Delegate = FLogoutUserDelegate()) const; bool UpdateUser(const UpdateUserRequest& Request, const FUpdateUserDelegate& Delegate = FUpdateUserDelegate()) const; - private: - void OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate, int AutoRetryCount) const; - void OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate, int AutoRetryCount) const; - void OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate, int AutoRetryCount) const; - void OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate, int AutoRetryCount) const; - void OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate, int AutoRetryCount) const; - void OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate, int AutoRetryCount) const; - void OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate, int AutoRetryCount) const; - void OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate, int AutoRetryCount) const; + void OnCreateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUserDelegate Delegate) const; + void OnCreateUsersWithArrayInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithArrayInputDelegate Delegate) const; + void OnCreateUsersWithListInputResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FCreateUsersWithListInputDelegate Delegate) const; + void OnDeleteUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FDeleteUserDelegate Delegate) const; + void OnGetUserByNameResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FGetUserByNameDelegate Delegate) const; + void OnLoginUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLoginUserDelegate Delegate) const; + void OnLogoutUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FLogoutUserDelegate Delegate) const; + void OnUpdateUserResponse(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded, FUpdateUserDelegate Delegate) const; + FHttpRequestRef CreateHttpRequest(const Request& Request) const; bool IsValid() const; void HandleResponse(FHttpResponsePtr HttpResponse, bool bSucceeded, Response& InOutResponse) const; FString Url; TMap AdditionalHeaderParams; + mutable FHttpRetrySystem::FManager* RetryManager = nullptr; + mutable TUniquePtr DefaultRetryManager; }; } From 7703c923f9f93c39a977243a9f3ce36677c0c5ff Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 6 May 2021 12:14:45 +0800 Subject: [PATCH 085/186] update doc --- docs/contributing.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/contributing.md b/docs/contributing.md index a791b0d6f1ba..fe325ae17e16 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -52,6 +52,7 @@ Code change should conform to the programming style guide of the respective lang - C#: https://msdn.microsoft.com/en-us/library/vstudio/ff926074.aspx - C++: https://google.github.io/styleguide/cppguide.html - C++ (Tizen): https://wiki.tizen.org/Native_Platform_Coding_Idiom_and_Style_Guide#C.2B.2B_Coding_Style +- C++ (Unreal Engine 4): https://docs.unrealengine.com/en-US/ProductionPipelines/DevelopmentSetup/CodingStandard/index.html - Clojure: https://github.com/bbatsov/clojure-style-guide - Crystal: https://crystal-lang.org/reference/conventions/coding_style.html - Dart: https://www.dartlang.org/guides/language/effective-dart/style From f4f4d5de0e5dec0e8d23e9faca197180e1f3fb3d Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Thu, 6 May 2021 17:26:22 +0100 Subject: [PATCH 086/186] [kotlin][client] fix warning for non optional header parameter (#9415) --- .../resources/kotlin-client/libraries/jvm-okhttp/api.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/api.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/api.mustache index 8adf1980e420..7745b52249ab 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/api.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/api.mustache @@ -97,7 +97,7 @@ import {{packageName}}.infrastructure.toMultiValue {{/hasQueryParams}} val localVariableHeaders: MutableMap = mutableMapOf({{#hasFormParams}}"Content-Type" to {{^consumes}}"multipart/form-data"{{/consumes}}{{#consumes.0}}"{{{mediaType}}}"{{/consumes.0}}{{/hasFormParams}}) {{#headerParams}} - {{{paramName}}}?.apply { localVariableHeaders["{{baseName}}"] = {{#isContainer}}this.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this.toString(){{/isContainer}} } + {{{paramName}}}{{^required}}?{{/required}}.apply { localVariableHeaders["{{baseName}}"] = {{#isContainer}}this.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this.toString(){{/isContainer}} } {{/headerParams}} val localVariableConfig = RequestConfig( From 2f2e250ab2d75129fc9f4e21b4225d7fb1acca85 Mon Sep 17 00:00:00 2001 From: Luca Mazzanti Date: Fri, 7 May 2021 01:23:53 +0200 Subject: [PATCH 087/186] [csharp-netcore][httpclient] Issues managing error statuses (#9389) * [csharp-netcore] correct rawContent read * [csharp-netcore] avoid deserialize result when in error * [csharp-netcore] avoid aggregate exceptions * Updated samples * Updated samples * Refactored PetApiTest * Updated samples * Fixed test issues * reverted previous commit --- .../libraries/httpclient/ApiClient.mustache | 25 +- .../Org.OpenAPITools.Test/Api/PetApiTests.cs | 40 +- .../Api/PetApiTestsV2.cs | 579 ++++++++++++++++++ .../Org.OpenAPITools.Test.csproj | 11 +- .../src/Org.OpenAPITools/Client/ApiClient.cs | 25 +- 5 files changed, 652 insertions(+), 28 deletions(-) create mode 100644 samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTestsV2.cs diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache index 640e0335c119..5477cb0cc73d 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache @@ -98,13 +98,13 @@ namespace {{packageName}}.Client if (type == typeof(byte[])) // return byte array { - return response.Content.ReadAsByteArrayAsync().Result; + return response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult(); } // TODO: ? if (type.IsAssignableFrom(typeof(Stream))) if (type == typeof(Stream)) { - var bytes = response.Content.ReadAsByteArrayAsync().Result; + var bytes = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult(); if (headers != null) { var filePath = String.IsNullOrEmpty(_configuration.TempFolderPath) @@ -128,18 +128,18 @@ namespace {{packageName}}.Client if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object { - return DateTime.Parse(response.Content.ReadAsStringAsync().Result, null, System.Globalization.DateTimeStyles.RoundtripKind); + return DateTime.Parse(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), null, System.Globalization.DateTimeStyles.RoundtripKind); } if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type { - return Convert.ChangeType(response.Content.ReadAsStringAsync().Result, type); + return Convert.ChangeType(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type); } // at this point, it must be a model (json) try { - return JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result, type, _serializerSettings); + return JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type, _serializerSettings); } catch (Exception e) { @@ -401,10 +401,10 @@ namespace {{packageName}}.Client partial void InterceptRequest(HttpRequestMessage req); partial void InterceptResponse(HttpRequestMessage req, HttpResponseMessage response); - private ApiResponse ToApiResponse(HttpResponseMessage response, object responseData, Uri uri) + private async Task> ToApiResponse(HttpResponseMessage response, object responseData, Uri uri) { T result = (T) responseData; - string rawContent = response.Content.ToString(); + string rawContent = await response.Content.ReadAsStringAsync(); var transformed = new ApiResponse(response.StatusCode, new Multimap({{#caseInsensitiveResponseHeaders}}StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}), result, rawContent) { @@ -446,7 +446,7 @@ namespace {{packageName}}.Client private ApiResponse Exec(HttpRequestMessage req, IReadableConfiguration configuration) { - return ExecAsync(req, configuration).Result; + return ExecAsync(req, configuration).GetAwaiter().GetResult(); } private async Task> ExecAsync(HttpRequestMessage req, @@ -511,6 +511,11 @@ namespace {{packageName}}.Client } {{/supportsRetry}} + if (!response.IsSuccessStatusCode) + { + return await ToApiResponse(response, default(T), req.RequestUri); + } + object responseData = deserializer.Deserialize(response); // if the response type is oneOf/anyOf, call FromJSON to deserialize the data @@ -525,9 +530,7 @@ namespace {{packageName}}.Client InterceptResponse(req, response); - var result = ToApiResponse(response, responseData, req.RequestUri); - - return result; + return await ToApiResponse(response, responseData, req.RequestUri); } {{#supportsAsync}} diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs index 04ef8503f955..1af712abb4d0 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs @@ -36,6 +36,7 @@ public class PetApiTests : IDisposable private PetApi instance; private long petId = 11088; + private long notExsistentPetId = 99999; /// /// Create a Pet object @@ -204,6 +205,25 @@ public void TestGetPetByIdAsync() Assert.Equal("sample category name2", response.Category.Name); } + /// + /// Test GetPetById on an not existent Id + /// + [Fact] + public void TestGetPetById_TestException() + { + PetApi petApi = new PetApi(); + + var exception = Assert.Throws(() => + { + petApi.GetPetById(notExsistentPetId); + }); + + Assert.IsType(exception); + Assert.Equal(404, exception.ErrorCode); + Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.ErrorContent); + Assert.Equal("Error calling GetPetById: {\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.Message); + } + /* a simple test for binary response. no longer in use. [Fact] public void TestGetByIdBinaryResponse() @@ -247,7 +267,25 @@ public void TestGetPetByIdWithHttpInfoAsync() Assert.Equal(56, response.Category.Id); Assert.Equal("sample category name2", response.Category.Name); } - + + [Fact] + public void TestGetPetByIdWithHttpInfoAsync_Test404Response() + { + PetApi petApi = new PetApi(); + petApi.ExceptionFactory = null; + var response = petApi.GetPetByIdWithHttpInfoAsync(notExsistentPetId).Result; + Pet result = response.Data; + + Assert.IsType>(response); + Assert.Equal(404, (int)response.StatusCode); + Assert.True(response.Headers.ContainsKey("Content-Type")); + Assert.Equal("application/json", response.Headers["Content-Type"][0]); + + Assert.Null(result); + Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", response.RawContent); + Assert.Equal("Not Found", response.ErrorText); + } + /// /// Test UpdatePet /// diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTestsV2.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTestsV2.cs new file mode 100644 index 000000000000..e00f3d614671 --- /dev/null +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Api/PetApiTestsV2.cs @@ -0,0 +1,579 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * OpenAPI spec version: 1.0.0 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.Http; +using System.Reflection; +using System.Threading.Tasks; +using Xunit; + +namespace Org.OpenAPITools.Test.Api +{ + /// + /// Class for testing PetApi + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the API endpoint. + /// + public class PetApiTestsV2 : IDisposable + { + // CONFIGURE TESTING PARAMETERS HERE + // see the Integration Test Wiki for details: https://github.com/OpenAPITools/openapi-generator/wiki/Integration-Tests + private const string BasePath = "http://petstore.swagger.io/v2"; + private const long PetId = 100000; + private const long NotExistentId = 100001; + + private readonly HttpClient _httpClient = new HttpClient(); + private readonly PetApi _petApi; + + public PetApiTestsV2() + { + // prepare the client + _petApi = new PetApi(_httpClient, new Configuration + { + BasePath = BasePath, + Timeout = 10000, + UserAgent = "TEST_USER_AGENT" + }); + + // add a sample pet for the expected PetId + _petApi.AddPet(BuildSamplePet()); + + // ensure there is not a pet for that ID + try + { + _petApi.DeletePet(NotExistentId); + } + catch (ApiException ex) when (ex.ErrorCode == 404) { } + } + + #region Get + + /// + /// Test GetPetById with an existent Id + /// + [Fact] + public void GetPetById_GivenExistentId_ReturnsPet() + { + Pet expected = BuildSamplePet(); + + Pet response = _petApi.GetPetById(PetId); + + Assert.IsType(response); + Assert.Equal(expected.Name, response.Name); + Assert.Equal(expected.Status, response.Status); + Assert.IsType>(response.Tags); + Assert.Equal(expected.Tags[0].Id, response.Tags[0].Id); + Assert.Equal(expected.Tags[0].Name, response.Tags[0].Name); + Assert.IsType>(response.PhotoUrls); + Assert.Equal(expected.PhotoUrls[0], response.PhotoUrls[0]); + Assert.IsType(response.Category); + Assert.Equal(expected.Category.Id, response.Category.Id); + Assert.Equal(expected.Category.Name, response.Category.Name); + } + + /// + /// Test GetPetById with a not existent Id + /// + [Fact] + public void GetPetById_GivenNotExistentId_ThrowsApiException() + { + var exception = Assert.Throws(() => + { + _petApi.GetPetById(NotExistentId); + }); + + Assert.IsType(exception); + Assert.Equal(404, exception.ErrorCode); + Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.ErrorContent); + Assert.Equal("Error calling GetPetById: {\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.Message); + } + + /// + /// Test GetPetByIdWithHttpInfo with an existent Id + /// + [Fact] + public void GetPetByIdWithHttpInfo_GivenExistentId_Returns200Response() + { + Pet expected = BuildSamplePet(); + + ApiResponse response = _petApi.GetPetByIdWithHttpInfo(PetId); + Pet result = response.Data; + + Assert.IsType>(response); + Assert.Equal(200, (int)response.StatusCode); + Assert.True(response.Headers.ContainsKey("Content-Type")); + Assert.Equal("application/json", response.Headers["Content-Type"][0]); + + Assert.Equal(expected.Name, result.Name); + Assert.Equal(expected.Status, result.Status); + Assert.IsType>(result.Tags); + Assert.Equal(expected.Tags[0].Id, result.Tags[0].Id); + Assert.Equal(expected.Tags[0].Name, result.Tags[0].Name); + Assert.IsType>(result.PhotoUrls); + Assert.Equal(expected.PhotoUrls[0], result.PhotoUrls[0]); + Assert.IsType(result.Category); + Assert.Equal(expected.Category.Id, result.Category.Id); + Assert.Equal(expected.Category.Name, result.Category.Name); + } + + /// + /// Test GetPetByIdWithHttpInfo with a not existent Id and the ExceptionFactory disabled + /// + [Fact] + public void GetPetByIdWithHttpInfo_GivenNotExistentId_ThrowsApiException() + { + var exception = Assert.Throws(() => + { + _petApi.GetPetByIdWithHttpInfo(NotExistentId); + }); + + Assert.IsType(exception); + Assert.Equal(404, exception.ErrorCode); + Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.ErrorContent); + Assert.Equal("Error calling GetPetById: {\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.Message); + } + + /// + /// Test GetPetByIdWithHttpInfo with a not existent Id and the ExceptionFactory disabled + /// + [Fact] + public void GetPetByIdWithHttpInfo_WithoutExceptionFactory_GivenNotExistentId_Returns404Response() + { + _petApi.ExceptionFactory = null; + ApiResponse response = _petApi.GetPetByIdWithHttpInfo(NotExistentId); + Pet result = response.Data; + + Assert.IsType>(response); + Assert.Equal(404, (int)response.StatusCode); + Assert.True(response.Headers.ContainsKey("Content-Type")); + Assert.Equal("application/json", response.Headers["Content-Type"][0]); + + Assert.Null(result); + Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", response.RawContent); + Assert.Equal("Not Found", response.ErrorText); + } + + #endregion + + #region Get Async + + /// + /// Test GetPetByIdAsync with an existent Id. + /// + [Fact] + public async Task GetPetByIdAsync_GivenExistentId_ReturnsPet() + { + Pet expected = BuildSamplePet(); + + Pet response = await _petApi.GetPetByIdAsync(PetId); + + Assert.IsType(response); + Assert.Equal(expected.Name, response.Name); + Assert.Equal(expected.Status, response.Status); + Assert.IsType>(response.Tags); + Assert.Equal(expected.Tags[0].Id, response.Tags[0].Id); + Assert.Equal(expected.Tags[0].Name, response.Tags[0].Name); + Assert.IsType>(response.PhotoUrls); + Assert.Equal(expected.PhotoUrls[0], response.PhotoUrls[0]); + Assert.IsType(response.Category); + Assert.Equal(expected.Category.Id, response.Category.Id); + Assert.Equal(expected.Category.Name, response.Category.Name); + } + + /// + /// Test GetPetByIdAsync with a not existent Id. + /// + [Fact] + public async Task GetPetByIdAsync_GivenNotExistentId_ThrowsApiException() + { + var exception = await Assert.ThrowsAsync(() => _petApi.GetPetByIdAsync(NotExistentId)); + + Assert.IsType(exception); + Assert.Equal(404, exception.ErrorCode); + Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.ErrorContent); + Assert.Equal("Error calling GetPetById: {\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.Message); + } + + /// + /// Test GetPetByIdWithHttpInfoAsync with an existent Id. + /// + [Fact] + public async Task GetPetByIdWithHttpInfoAsync_GivenExistentId_Returns200Response() + { + Pet expected = BuildSamplePet(); + + ApiResponse response = await _petApi.GetPetByIdWithHttpInfoAsync(PetId); + Pet result = response.Data; + + Assert.IsType>(response); + Assert.Equal(200, (int)response.StatusCode); + Assert.True(response.Headers.ContainsKey("Content-Type")); + Assert.Equal("application/json", response.Headers["Content-Type"][0]); + + Assert.Equal(expected.Name, result.Name); + Assert.Equal(expected.Status, result.Status); + Assert.IsType>(result.Tags); + Assert.Equal(expected.Tags[0].Id, result.Tags[0].Id); + Assert.Equal(expected.Tags[0].Name, result.Tags[0].Name); + Assert.IsType>(result.PhotoUrls); + Assert.Equal(expected.PhotoUrls[0], result.PhotoUrls[0]); + Assert.IsType(result.Category); + Assert.Equal(expected.Category.Id, result.Category.Id); + Assert.Equal(expected.Category.Name, result.Category.Name); + } + + /// + /// Test GetPetByIdWithHttpInfoAsync with a not existent Id and the ExceptionFactory disabled. + /// + [Fact] + public async Task GetPetByIdWithHttpInfoAsync_GivenNotExistentId_ThrowsApiException() + { + var exception = await Assert.ThrowsAsync(() => _petApi.GetPetByIdWithHttpInfoAsync(NotExistentId)); + + Assert.IsType(exception); + Assert.Equal(404, exception.ErrorCode); + Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.ErrorContent); + Assert.Equal("Error calling GetPetById: {\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", exception.Message); + } + + /// + /// Test GetPetByIdWithHttpInfoAsync with a not existent Id and the ExceptionFactory disabled. + /// + [Fact] + public async Task GetPetByIdWithHttpInfoAsync_WithoutExceptionFactory_GivenNotExistentId_Returns404Response() + { + _petApi.ExceptionFactory = null; + ApiResponse response = await _petApi.GetPetByIdWithHttpInfoAsync(NotExistentId); + Pet result = response.Data; + + Assert.IsType>(response); + Assert.Equal(404, (int)response.StatusCode); + Assert.True(response.Headers.ContainsKey("Content-Type")); + Assert.Equal("application/json", response.Headers["Content-Type"][0]); + + Assert.Null(result); + Assert.Equal("{\"code\":1,\"type\":\"error\",\"message\":\"Pet not found\"}", response.RawContent); + Assert.Equal("Not Found", response.ErrorText); + } + + #endregion + + #region Find + + /// + /// Test FindPetsByStatus filtering available pets. + /// + [Fact(Skip = "too much elements to fetch, the server cut the json content")] + public void FindPetsByStatus_ReturnsListOfPetsFiltered() + { + List pets = _petApi.FindPetsByStatus(new List(new[] { "available" })); + + foreach (Pet pet in pets) + { + Assert.IsType(pet); + Assert.Equal(Pet.StatusEnum.Available, pet.Status); + } + } + + #endregion + + #region Add + + /// + /// Test AddPet with an existent Id. The current server beavior is to update the Pet. + /// + [Fact] + public void AddPet_GivenExistentId_UpdateThePet() + { + Pet pet = BuildSamplePet(); + + _petApi.AddPet(pet); + } + + #endregion + + #region AddAsync + + /// + /// Test AddPetAsync with an existent Id. The current server beavior is to update the Pet. + /// + [Fact] + public async Task AddPetAsync_GivenExistentId_UpdateThePet() + { + Pet pet = BuildSamplePet(); + + await _petApi.AddPetAsync(pet); + } + + #endregion + + #region Update + + /// + /// Test UpdatePet with an existent Id. + /// + [Fact] + public void UpdatePet_GivenExistentId_UpdateThePet() + { + Pet pet = BuildSamplePet(); + + _petApi.UpdatePet(pet); + } + + /// + /// Test UpdatePet with a not existent Id. The current server beavior is to create the Pet. + /// + [Fact] + public void UpdatePet_GivenNotExistentId_UpdateThePet() + { + Pet pet = BuildSamplePet(i => i.Id = NotExistentId); + + _petApi.UpdatePet(pet); + } + + /// + /// Test UpdatePetWithForm with an existent Id. + /// + [Fact] + public void UpdatePetWithForm_GivenExistentId_UpdatesTheFields() + { + Pet expected = BuildSamplePet(pet => + { + pet.Name = "name updated"; + pet.Status = Pet.StatusEnum.Pending; + }); + + _petApi.UpdatePetWithForm(PetId, "name updated", "pending"); + + Pet response = _petApi.GetPetById(PetId); + + Assert.IsType(response); + Assert.Equal(expected.Name, response.Name); + Assert.Equal(expected.Status, response.Status); + Assert.IsType>(response.Tags); + Assert.Equal(expected.Tags[0].Id, response.Tags[0].Id); + Assert.Equal(expected.Tags[0].Name, response.Tags[0].Name); + Assert.IsType>(response.PhotoUrls); + Assert.Equal(expected.PhotoUrls[0], response.PhotoUrls[0]); + Assert.IsType(response.Category); + Assert.Equal(expected.Category.Id, response.Category.Id); + Assert.Equal(expected.Category.Name, response.Category.Name); + + _petApi.UpdatePetWithForm(PetId, "name updated twice"); + + response = _petApi.GetPetById(PetId); + + Assert.Equal("name updated twice", response.Name); + } + + /// + /// Test UploadFile with an existent Id. + /// + [Fact(Skip = "generates 500 code at the time of test")] + public void UploadFile_UploadFileUsingFormParameters_UpdatesTheFields() + { + var assembly = Assembly.GetExecutingAssembly(); + using Stream imageStream = assembly.GetManifestResourceStream("Org.OpenAPITools.Test.linux-logo.png"); + _petApi.UploadFile(PetId, "metadata sample", imageStream); + } + + /// + /// Test UploadFile with an existent Id. + /// + [Fact(Skip = "generates 500 code at the time of test")] + public void UploadFile_UploadFileAlone_UpdatesTheField() + { + var assembly = Assembly.GetExecutingAssembly(); + using Stream imageStream = assembly.GetManifestResourceStream("Org.OpenAPITools.Test.linux-logo.png"); + _petApi.UploadFile(petId: PetId, file: imageStream); + } + + #endregion + + #region UpdateAsync + + /// + /// Test UpdatePetAsync with an existent Id. + /// + [Fact] + public async Task UpdatePetAsync_GivenExistentId_UpdateThePet() + { + Pet pet = BuildSamplePet(); + + await _petApi.UpdatePetAsync(pet); + } + + /// + /// Test UpdatePetAsync with a not existent Id. The current server beavior is to create the Pet. + /// + [Fact] + public async Task UpdatePetAsync_GivenNotExistentId_UpdateThePet() + { + Pet pet = BuildSamplePet(i => i.Id = NotExistentId); + + await _petApi.UpdatePetAsync(pet); + } + + /// + /// Test UpdatePetWithFormAsync with an existent Id. + /// + [Fact] + public async Task UpdatePetWithFormAsync_GivenExistentId_UpdatesTheFields() + { + Pet expected = BuildSamplePet(pet => + { + pet.Name = "name updated"; + pet.Status = Pet.StatusEnum.Pending; + }); + + await _petApi.UpdatePetWithFormAsync(PetId, "name updated", "pending"); + + Pet response = await _petApi.GetPetByIdAsync(PetId); + + Assert.IsType(response); + Assert.Equal(expected.Name, response.Name); + Assert.Equal(expected.Status, response.Status); + Assert.IsType>(response.Tags); + Assert.Equal(expected.Tags[0].Id, response.Tags[0].Id); + Assert.Equal(expected.Tags[0].Name, response.Tags[0].Name); + Assert.IsType>(response.PhotoUrls); + Assert.Equal(expected.PhotoUrls[0], response.PhotoUrls[0]); + Assert.IsType(response.Category); + Assert.Equal(expected.Category.Id, response.Category.Id); + Assert.Equal(expected.Category.Name, response.Category.Name); + + await _petApi.UpdatePetWithFormAsync(PetId, "name updated twice"); + + response = await _petApi.GetPetByIdAsync(PetId); + + Assert.Equal("name updated twice", response.Name); + } + + /// + /// Test UploadFileAsync with an existent Id. + /// + [Fact(Skip = "generates 500 code at the time of test")] + public async Task UploadFileAsync_UploadFileUsingFormParameters_UpdatesTheFields() + { + var assembly = Assembly.GetExecutingAssembly(); + await using Stream imageStream = assembly.GetManifestResourceStream("Org.OpenAPITools.Test.linux-logo.png"); + await _petApi.UploadFileAsync(PetId, "metadata sample", imageStream); + } + + /// + /// Test UploadFileAsync with an existent Id. + /// + [Fact(Skip = "generates 500 code at the time of test")] + public async Task UploadFileAsync_UploadFileAlone_UpdatesTheField() + { + var assembly = Assembly.GetExecutingAssembly(); + await using Stream imageStream = assembly.GetManifestResourceStream("Org.OpenAPITools.Test.linux-logo.png"); + await _petApi.UploadFileAsync(petId: PetId, file: imageStream); + } + + #endregion + + #region Delete + + /// + /// Test DeletePet with an existent Id. + /// + [Fact] + public void DeletePet_GivenExistentId_DeleteThePet() + { + _petApi.DeletePet(PetId); + + var exception = Assert.Throws(() => _petApi.GetPetById(PetId)); + + Assert.IsType(exception); + Assert.Equal(404, exception.ErrorCode); + } + + /// + /// Test DeletePet with a not existent Id. The current server beavior is to return 404. + /// + [Fact] + public void DeletePet_GivenNotExistentId_ThrowsApiException() + { + var exception = Assert.Throws(() => _petApi.DeletePet(NotExistentId)); + + Assert.IsType(exception); + Assert.Equal(404, exception.ErrorCode); + } + + #endregion + + #region DeleteAsync + + /// + /// Test DeletePet with an existent Id. + /// + [Fact] + public async Task DeletePetAsync_GivenExistentId_DeleteThePet() + { + await _petApi.DeletePetAsync(PetId); + + var exception = Assert.Throws(() => _petApi.GetPetById(PetId)); + + Assert.IsType(exception); + Assert.Equal(404, exception.ErrorCode); + } + + /// + /// Test DeletePet with a not existent Id. The current server beavior is to return 404. + /// + [Fact] + public async Task DeletePetAsync_GivenNotExistentId_ThrowsApiException() + { + var exception = await Assert.ThrowsAsync(() => _petApi.DeletePetAsync(NotExistentId)); + + Assert.IsType(exception); + Assert.Equal(404, exception.ErrorCode); + } + + #endregion + + private static Pet BuildSamplePet(Action callback = null) + { + var pet = new Pet( + name: "csharp test", + photoUrls: new List { "http://petstore.com/csharp_test" }) + { + Id = PetId, + Status = Pet.StatusEnum.Available, + Category = new Category { Id = 10, Name = "sample category" }, + Tags = new List { new Tag { Id = 100, Name = "sample tag" } } + }; + + callback?.Invoke(pet); + + return pet; + } + + public void Dispose() + { + // remove the pet after testing + try + { + _petApi.DeletePet(PetId); + } + catch (ApiException ex) when (ex.ErrorCode == 404) { } + + _petApi.Dispose(); + _httpClient.Dispose(); + } + } +} diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj index dcc1208d75cf..20f33144c2a7 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj @@ -8,7 +8,10 @@ - + + + + @@ -18,9 +21,7 @@ - - - - + + diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs index 9bdab1cf4c87..526a43111178 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs @@ -98,13 +98,13 @@ internal object Deserialize(HttpResponseMessage response, Type type) if (type == typeof(byte[])) // return byte array { - return response.Content.ReadAsByteArrayAsync().Result; + return response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult(); } // TODO: ? if (type.IsAssignableFrom(typeof(Stream))) if (type == typeof(Stream)) { - var bytes = response.Content.ReadAsByteArrayAsync().Result; + var bytes = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult(); if (headers != null) { var filePath = String.IsNullOrEmpty(_configuration.TempFolderPath) @@ -128,18 +128,18 @@ internal object Deserialize(HttpResponseMessage response, Type type) if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object { - return DateTime.Parse(response.Content.ReadAsStringAsync().Result, null, System.Globalization.DateTimeStyles.RoundtripKind); + return DateTime.Parse(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), null, System.Globalization.DateTimeStyles.RoundtripKind); } if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type { - return Convert.ChangeType(response.Content.ReadAsStringAsync().Result, type); + return Convert.ChangeType(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type); } // at this point, it must be a model (json) try { - return JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result, type, _serializerSettings); + return JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type, _serializerSettings); } catch (Exception e) { @@ -399,10 +399,10 @@ HttpContent PrepareMultipartFormDataContent(RequestOptions options) partial void InterceptRequest(HttpRequestMessage req); partial void InterceptResponse(HttpRequestMessage req, HttpResponseMessage response); - private ApiResponse ToApiResponse(HttpResponseMessage response, object responseData, Uri uri) + private async Task> ToApiResponse(HttpResponseMessage response, object responseData, Uri uri) { T result = (T) responseData; - string rawContent = response.Content.ToString(); + string rawContent = await response.Content.ReadAsStringAsync(); var transformed = new ApiResponse(response.StatusCode, new Multimap(), result, rawContent) { @@ -444,7 +444,7 @@ private ApiResponse ToApiResponse(HttpResponseMessage response, object res private ApiResponse Exec(HttpRequestMessage req, IReadableConfiguration configuration) { - return ExecAsync(req, configuration).Result; + return ExecAsync(req, configuration).GetAwaiter().GetResult(); } private async Task> ExecAsync(HttpRequestMessage req, @@ -505,6 +505,11 @@ private ApiResponse Exec(HttpRequestMessage req, IReadableConfiguration co response = await _httpClient.SendAsync(req, cancellationToken).ConfigureAwait(false); } + if (!response.IsSuccessStatusCode) + { + return await ToApiResponse(response, default(T), req.RequestUri); + } + object responseData = deserializer.Deserialize(response); // if the response type is oneOf/anyOf, call FromJSON to deserialize the data @@ -519,9 +524,7 @@ private ApiResponse Exec(HttpRequestMessage req, IReadableConfiguration co InterceptResponse(req, response); - var result = ToApiResponse(response, responseData, req.RequestUri); - - return result; + return await ToApiResponse(response, responseData, req.RequestUri); } #region IAsynchronousClient From 560bf7e080518f1c5e9af41acdbf3fa402d75512 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 7 May 2021 09:57:19 +0800 Subject: [PATCH 088/186] v5.1.1 release (#9421) --- modules/openapi-generator-cli/pom.xml | 2 +- modules/openapi-generator-core/pom.xml | 2 +- modules/openapi-generator-gradle-plugin/gradle.properties | 2 +- modules/openapi-generator-gradle-plugin/pom.xml | 2 +- modules/openapi-generator-maven-plugin/examples/java-client.xml | 2 +- .../examples/multi-module/java-client/pom.xml | 2 +- .../examples/non-java-invalid-spec.xml | 2 +- modules/openapi-generator-maven-plugin/examples/non-java.xml | 2 +- modules/openapi-generator-maven-plugin/pom.xml | 2 +- modules/openapi-generator-online/pom.xml | 2 +- modules/openapi-generator/pom.xml | 2 +- pom.xml | 2 +- samples/client/petstore/R/.openapi-generator/VERSION | 2 +- samples/client/petstore/apex/.openapi-generator/VERSION | 2 +- samples/client/petstore/bash/.openapi-generator/VERSION | 2 +- samples/client/petstore/c/.openapi-generator/VERSION | 2 +- samples/client/petstore/cpp-qt5/.openapi-generator/VERSION | 2 +- .../petstore/cpp-restsdk/client/.openapi-generator/VERSION | 2 +- samples/client/petstore/cpp-restsdk/client/ApiClient.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/ApiClient.h | 2 +- samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h | 2 +- samples/client/petstore/cpp-restsdk/client/ApiException.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/ApiException.h | 2 +- samples/client/petstore/cpp-restsdk/client/HttpContent.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/HttpContent.h | 2 +- samples/client/petstore/cpp-restsdk/client/IHttpBody.h | 2 +- samples/client/petstore/cpp-restsdk/client/JsonBody.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/JsonBody.h | 2 +- samples/client/petstore/cpp-restsdk/client/ModelBase.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/ModelBase.h | 2 +- .../client/petstore/cpp-restsdk/client/MultipartFormData.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/MultipartFormData.h | 2 +- samples/client/petstore/cpp-restsdk/client/Object.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/Object.h | 2 +- samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/api/PetApi.h | 2 +- samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/api/StoreApi.h | 2 +- samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/api/UserApi.h | 2 +- .../client/petstore/cpp-restsdk/client/model/ApiResponse.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h | 2 +- samples/client/petstore/cpp-restsdk/client/model/Category.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/Category.h | 2 +- samples/client/petstore/cpp-restsdk/client/model/Order.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/Order.h | 2 +- samples/client/petstore/cpp-restsdk/client/model/Pet.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/Pet.h | 2 +- samples/client/petstore/cpp-restsdk/client/model/Tag.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/Tag.h | 2 +- samples/client/petstore/cpp-restsdk/client/model/User.cpp | 2 +- samples/client/petstore/cpp-restsdk/client/model/User.h | 2 +- samples/client/petstore/crystal/.openapi-generator/VERSION | 2 +- samples/client/petstore/crystal/.travis.yml | 2 +- samples/client/petstore/crystal/spec/spec_helper.cr | 2 +- samples/client/petstore/crystal/src/petstore.cr | 2 +- samples/client/petstore/crystal/src/petstore/api/pet_api.cr | 2 +- samples/client/petstore/crystal/src/petstore/api/store_api.cr | 2 +- samples/client/petstore/crystal/src/petstore/api/user_api.cr | 2 +- samples/client/petstore/crystal/src/petstore/api_client.cr | 2 +- samples/client/petstore/crystal/src/petstore/api_error.cr | 2 +- samples/client/petstore/crystal/src/petstore/configuration.cr | 2 +- .../client/petstore/crystal/src/petstore/models/api_response.cr | 2 +- samples/client/petstore/crystal/src/petstore/models/category.cr | 2 +- samples/client/petstore/crystal/src/petstore/models/order.cr | 2 +- samples/client/petstore/crystal/src/petstore/models/pet.cr | 2 +- samples/client/petstore/crystal/src/petstore/models/tag.cr | 2 +- samples/client/petstore/crystal/src/petstore/models/user.cr | 2 +- .../OpenAPIClient-httpclient/.openapi-generator/VERSION | 2 +- .../OpenAPIClient-net47/.openapi-generator/VERSION | 2 +- .../OpenAPIClient-net5.0/.openapi-generator/VERSION | 2 +- .../csharp-netcore/OpenAPIClient/.openapi-generator/VERSION | 2 +- .../csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION | 2 +- .../OpenAPIClientCoreAndNet47/.openapi-generator/VERSION | 2 +- .../petstore/csharp/OpenAPIClient/.openapi-generator/VERSION | 2 +- samples/client/petstore/elixir/.openapi-generator/VERSION | 2 +- .../client/petstore/go/go-petstore/.openapi-generator/VERSION | 2 +- samples/client/petstore/groovy/.openapi-generator/VERSION | 2 +- .../petstore/haskell-http-client/.openapi-generator/VERSION | 2 +- .../petstore/java/feign-no-nullable/.openapi-generator/VERSION | 2 +- samples/client/petstore/java/feign/.openapi-generator/VERSION | 2 +- .../petstore/java/google-api-client/.openapi-generator/VERSION | 2 +- samples/client/petstore/java/jersey1/.openapi-generator/VERSION | 2 +- .../java/jersey2-java8-localdatetime/.openapi-generator/VERSION | 2 +- .../petstore/java/jersey2-java8/.openapi-generator/VERSION | 2 +- .../java/microprofile-rest-client/.openapi-generator/VERSION | 2 +- .../petstore/java/native-async/.openapi-generator/VERSION | 2 +- samples/client/petstore/java/native/.openapi-generator/VERSION | 2 +- .../okhttp-gson-dynamicOperations/.openapi-generator/VERSION | 2 +- .../java/okhttp-gson-parcelableModel/.openapi-generator/VERSION | 2 +- .../client/petstore/java/okhttp-gson/.openapi-generator/VERSION | 2 +- .../java/rest-assured-jackson/.openapi-generator/VERSION | 2 +- .../petstore/java/rest-assured/.openapi-generator/VERSION | 2 +- .../client/petstore/java/resteasy/.openapi-generator/VERSION | 2 +- .../java/resttemplate-withXml/.openapi-generator/VERSION | 2 +- .../petstore/java/resttemplate/.openapi-generator/VERSION | 2 +- .../petstore/java/retrofit2-play26/.openapi-generator/VERSION | 2 +- .../client/petstore/java/retrofit2/.openapi-generator/VERSION | 2 +- .../petstore/java/retrofit2rx2/.openapi-generator/VERSION | 2 +- .../petstore/java/retrofit2rx3/.openapi-generator/VERSION | 2 +- .../petstore/java/vertx-no-nullable/.openapi-generator/VERSION | 2 +- samples/client/petstore/java/vertx/.openapi-generator/VERSION | 2 +- .../client/petstore/java/webclient/.openapi-generator/VERSION | 2 +- .../client/petstore/javascript-es6/.openapi-generator/VERSION | 2 +- .../petstore/javascript-promise-es6/.openapi-generator/VERSION | 2 +- samples/client/petstore/kotlin-gson/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-jackson/.openapi-generator/VERSION | 2 +- .../kotlin-json-request-string/.openapi-generator/VERSION | 2 +- .../kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-moshi-codegen/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-multiplatform/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-nonpublic/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-nullable/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-okhttp3/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-retrofit2/.openapi-generator/VERSION | 2 +- .../client/petstore/kotlin-string/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-threetenbp/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-uppercase-enum/.openapi-generator/VERSION | 2 +- samples/client/petstore/kotlin/.openapi-generator/VERSION | 2 +- samples/client/petstore/lua/.openapi-generator/VERSION | 2 +- samples/client/petstore/nim/.openapi-generator/VERSION | 2 +- .../client/petstore/objc/core-data/.openapi-generator/VERSION | 2 +- samples/client/petstore/objc/default/.openapi-generator/VERSION | 2 +- samples/client/petstore/perl/.openapi-generator/VERSION | 2 +- .../petstore/php/OpenAPIClient-php/.openapi-generator/VERSION | 2 +- .../petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php | 2 +- .../php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/ApiException.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Configuration.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/HeaderSelector.php | 2 +- .../OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php | 2 +- .../OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php | 2 +- .../php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php | 2 +- samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/Category.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/Client.php | 2 +- samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/File.php | 2 +- .../php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php | 2 +- samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php | 2 +- .../php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php | 2 +- .../php/OpenAPIClient-php/lib/Model/HealthCheckResult.php | 2 +- .../php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php | 2 +- .../lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php | 2 +- .../php/OpenAPIClient-php/lib/Model/Model200Response.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ModelList.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/Name.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/Order.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php | 2 +- .../php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php | 2 +- .../php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php | 2 +- .../lib/Model/OuterEnumIntegerDefaultValue.php | 2 +- .../OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php | 2 +- samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php | 2 +- .../php/OpenAPIClient-php/lib/Model/SpecialModelName.php | 2 +- samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php | 2 +- .../client/petstore/php/OpenAPIClient-php/lib/Model/User.php | 2 +- .../petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php | 2 +- samples/client/petstore/powershell/.openapi-generator/VERSION | 2 +- .../client/petstore/python-asyncio/.openapi-generator/VERSION | 2 +- .../client/petstore/python-legacy/.openapi-generator/VERSION | 2 +- .../client/petstore/python-tornado/.openapi-generator/VERSION | 2 +- samples/client/petstore/python/.openapi-generator/VERSION | 2 +- samples/client/petstore/ruby-faraday/.openapi-generator/VERSION | 2 +- samples/client/petstore/ruby-faraday/lib/petstore.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/api/default_api.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb | 2 +- .../ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/api/store_api.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/api/user_api.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/configuration.rb | 2 +- .../lib/petstore/models/additional_properties_class.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/animal.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/api_response.rb | 2 +- .../lib/petstore/models/array_of_array_of_number_only.rb | 2 +- .../ruby-faraday/lib/petstore/models/array_of_number_only.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/array_test.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/capitalization.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/category.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/class_model.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/client.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/enum_class.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/enum_test.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/file.rb | 2 +- .../ruby-faraday/lib/petstore/models/file_schema_test_class.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/format_test.rb | 2 +- .../ruby-faraday/lib/petstore/models/has_only_read_only.rb | 2 +- .../ruby-faraday/lib/petstore/models/health_check_result.rb | 2 +- .../ruby-faraday/lib/petstore/models/inline_response_default.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/list.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/map_test.rb | 2 +- .../models/mixed_properties_and_additional_properties_class.rb | 2 +- .../ruby-faraday/lib/petstore/models/model200_response.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/model_return.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/name.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/nullable_class.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/number_only.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/order.rb | 2 +- .../ruby-faraday/lib/petstore/models/outer_composite.rb | 2 +- .../petstore/ruby-faraday/lib/petstore/models/outer_enum.rb | 2 +- .../lib/petstore/models/outer_enum_default_value.rb | 2 +- .../ruby-faraday/lib/petstore/models/outer_enum_integer.rb | 2 +- .../lib/petstore/models/outer_enum_integer_default_value.rb | 2 +- .../lib/petstore/models/outer_object_with_enum_property.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb | 2 +- .../ruby-faraday/lib/petstore/models/read_only_first.rb | 2 +- .../ruby-faraday/lib/petstore/models/special_model_name.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb | 2 +- .../client/petstore/ruby-faraday/lib/petstore/models/user.rb | 2 +- samples/client/petstore/ruby-faraday/lib/petstore/version.rb | 2 +- samples/client/petstore/ruby-faraday/petstore.gemspec | 2 +- samples/client/petstore/ruby-faraday/spec/api_client_spec.rb | 2 +- samples/client/petstore/ruby-faraday/spec/configuration_spec.rb | 2 +- samples/client/petstore/ruby-faraday/spec/spec_helper.rb | 2 +- samples/client/petstore/ruby/.openapi-generator/VERSION | 2 +- samples/client/petstore/ruby/lib/petstore.rb | 2 +- .../client/petstore/ruby/lib/petstore/api/another_fake_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api/default_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api/fake_api.rb | 2 +- .../ruby/lib/petstore/api/fake_classname_tags123_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api/pet_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api/store_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api/user_api.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api_client.rb | 2 +- samples/client/petstore/ruby/lib/petstore/api_error.rb | 2 +- samples/client/petstore/ruby/lib/petstore/configuration.rb | 2 +- .../ruby/lib/petstore/models/additional_properties_class.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/animal.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/api_response.rb | 2 +- .../ruby/lib/petstore/models/array_of_array_of_number_only.rb | 2 +- .../petstore/ruby/lib/petstore/models/array_of_number_only.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/array_test.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/capitalization.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/cat.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/category.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/class_model.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/client.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/dog.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/enum_class.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/enum_test.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/file.rb | 2 +- .../petstore/ruby/lib/petstore/models/file_schema_test_class.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/foo.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/format_test.rb | 2 +- .../petstore/ruby/lib/petstore/models/has_only_read_only.rb | 2 +- .../petstore/ruby/lib/petstore/models/health_check_result.rb | 2 +- .../ruby/lib/petstore/models/inline_response_default.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/list.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/map_test.rb | 2 +- .../models/mixed_properties_and_additional_properties_class.rb | 2 +- .../petstore/ruby/lib/petstore/models/model200_response.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/model_return.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/name.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/nullable_class.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/number_only.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/order.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/outer_composite.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb | 2 +- .../ruby/lib/petstore/models/outer_enum_default_value.rb | 2 +- .../petstore/ruby/lib/petstore/models/outer_enum_integer.rb | 2 +- .../lib/petstore/models/outer_enum_integer_default_value.rb | 2 +- .../ruby/lib/petstore/models/outer_object_with_enum_property.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/pet.rb | 2 +- .../client/petstore/ruby/lib/petstore/models/read_only_first.rb | 2 +- .../petstore/ruby/lib/petstore/models/special_model_name.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/tag.rb | 2 +- samples/client/petstore/ruby/lib/petstore/models/user.rb | 2 +- samples/client/petstore/ruby/lib/petstore/version.rb | 2 +- samples/client/petstore/ruby/petstore.gemspec | 2 +- samples/client/petstore/ruby/spec/api_client_spec.rb | 2 +- samples/client/petstore/ruby/spec/configuration_spec.rb | 2 +- samples/client/petstore/ruby/spec/spec_helper.rb | 2 +- .../petstore/rust/hyper/petstore/.openapi-generator/VERSION | 2 +- .../rust/reqwest/petstore-async/.openapi-generator/VERSION | 2 +- .../petstore/rust/reqwest/petstore/.openapi-generator/VERSION | 2 +- samples/client/petstore/scala-akka/.openapi-generator/VERSION | 2 +- samples/client/petstore/scala-sttp/.openapi-generator/VERSION | 2 +- .../petstore/spring-cloud-async/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../spring-cloud-no-nullable/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../spring-cloud-spring-pageable/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- samples/client/petstore/spring-cloud/.openapi-generator/VERSION | 2 +- .../spring-cloud/src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- samples/client/petstore/spring-stubs/.openapi-generator/VERSION | 2 +- .../spring-stubs/src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/swift5/alamofireLibrary/.openapi-generator/VERSION | 2 +- .../petstore/swift5/combineLibrary/.openapi-generator/VERSION | 2 +- .../client/petstore/swift5/default/.openapi-generator/VERSION | 2 +- .../petstore/swift5/deprecated/.openapi-generator/VERSION | 2 +- .../petstore/swift5/nonPublicApi/.openapi-generator/VERSION | 2 +- .../petstore/swift5/objcCompatible/.openapi-generator/VERSION | 2 +- .../swift5/promisekitLibrary/.openapi-generator/VERSION | 2 +- .../swift5/readonlyProperties/.openapi-generator/VERSION | 2 +- .../petstore/swift5/resultLibrary/.openapi-generator/VERSION | 2 +- .../petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION | 2 +- .../swift5/urlsessionLibrary/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/single-request-parameter/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../builds/with-prefixed-module-name/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../builds/with-npm/.openapi-generator/VERSION | 2 +- .../typescript-aurelia/default/.openapi-generator/VERSION | 2 +- .../builds/composed-schemas/.openapi-generator/VERSION | 2 +- .../typescript-axios/builds/default/.openapi-generator/VERSION | 2 +- .../builds/es6-target/.openapi-generator/VERSION | 2 +- .../builds/with-complex-headers/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../builds/with-interfaces/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../builds/with-npm-version/.openapi-generator/VERSION | 2 +- .../with-single-request-parameters/.openapi-generator/VERSION | 2 +- .../builds/default-v3.0/.openapi-generator/VERSION | 2 +- .../typescript-fetch/builds/default/.openapi-generator/VERSION | 2 +- .../typescript-fetch/builds/enum/.openapi-generator/VERSION | 2 +- .../builds/es6-target/.openapi-generator/VERSION | 2 +- .../builds/multiple-parameters/.openapi-generator/VERSION | 2 +- .../prefix-parameter-interfaces/.openapi-generator/VERSION | 2 +- .../builds/typescript-three-plus/.openapi-generator/VERSION | 2 +- .../builds/with-interfaces/.openapi-generator/VERSION | 2 +- .../builds/with-npm-version/.openapi-generator/VERSION | 2 +- .../builds/without-runtime-checks/.openapi-generator/VERSION | 2 +- .../petstore/typescript-inversify/.openapi-generator/VERSION | 2 +- .../typescript-jquery/default/.openapi-generator/VERSION | 2 +- .../petstore/typescript-jquery/npm/.openapi-generator/VERSION | 2 +- .../builds/default/.openapi-generator/VERSION | 2 +- .../petstore/typescript-node/default/.openapi-generator/VERSION | 2 +- .../petstore/typescript-node/npm/.openapi-generator/VERSION | 2 +- .../builds/with-npm-version/.openapi-generator/VERSION | 2 +- .../typescript-rxjs/builds/default/.openapi-generator/VERSION | 2 +- .../builds/es6-target/.openapi-generator/VERSION | 2 +- .../builds/with-npm-version/.openapi-generator/VERSION | 2 +- .../builds/with-progress-subscriber/.openapi-generator/VERSION | 2 +- .../config/petstore/protobuf-schema/.openapi-generator/VERSION | 2 +- samples/meta-codegen/lib/pom.xml | 2 +- samples/meta-codegen/usage/.openapi-generator/VERSION | 2 +- samples/openapi3/client/elm/.openapi-generator/VERSION | 2 +- .../x-auth-id-alias/go-experimental/.openapi-generator/VERSION | 2 +- .../java/jersey2-java8/.openapi-generator/VERSION | 2 +- .../x-auth-id-alias/python/.openapi-generator/VERSION | 2 +- .../x-auth-id-alias/ruby-client/.openapi-generator/VERSION | 2 +- .../x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb | 2 +- .../ruby-client/lib/x_auth_id_alias/api/usage_api.rb | 2 +- .../ruby-client/lib/x_auth_id_alias/api_client.rb | 2 +- .../ruby-client/lib/x_auth_id_alias/api_error.rb | 2 +- .../ruby-client/lib/x_auth_id_alias/configuration.rb | 2 +- .../x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb | 2 +- .../x-auth-id-alias/ruby-client/spec/api_client_spec.rb | 2 +- .../x-auth-id-alias/ruby-client/spec/configuration_spec.rb | 2 +- .../extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb | 2 +- .../x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec | 2 +- .../features/dynamic-servers/python/.openapi-generator/VERSION | 2 +- .../features/dynamic-servers/ruby/.openapi-generator/VERSION | 2 +- .../features/dynamic-servers/ruby/dynamic_servers.gemspec | 2 +- .../client/features/dynamic-servers/ruby/lib/dynamic_servers.rb | 2 +- .../dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb | 2 +- .../dynamic-servers/ruby/lib/dynamic_servers/api_client.rb | 2 +- .../dynamic-servers/ruby/lib/dynamic_servers/api_error.rb | 2 +- .../dynamic-servers/ruby/lib/dynamic_servers/configuration.rb | 2 +- .../dynamic-servers/ruby/lib/dynamic_servers/version.rb | 2 +- .../features/dynamic-servers/ruby/spec/api_client_spec.rb | 2 +- .../features/dynamic-servers/ruby/spec/configuration_spec.rb | 2 +- .../client/features/dynamic-servers/ruby/spec/spec_helper.rb | 2 +- .../ruby-client/.openapi-generator/VERSION | 2 +- .../generate-alias-as-model/ruby-client/lib/petstore.rb | 2 +- .../ruby-client/lib/petstore/api/usage_api.rb | 2 +- .../ruby-client/lib/petstore/api_client.rb | 2 +- .../ruby-client/lib/petstore/api_error.rb | 2 +- .../ruby-client/lib/petstore/configuration.rb | 2 +- .../ruby-client/lib/petstore/models/array_alias.rb | 2 +- .../ruby-client/lib/petstore/models/map_alias.rb | 2 +- .../generate-alias-as-model/ruby-client/lib/petstore/version.rb | 2 +- .../generate-alias-as-model/ruby-client/petstore.gemspec | 2 +- .../generate-alias-as-model/ruby-client/spec/api_client_spec.rb | 2 +- .../ruby-client/spec/configuration_spec.rb | 2 +- .../generate-alias-as-model/ruby-client/spec/spec_helper.rb | 2 +- .../petstore_client_lib_fake/.openapi-generator/VERSION | 2 +- .../dart-dio/petstore_client_lib/.openapi-generator/VERSION | 2 +- .../petstore_client_lib_fake/.openapi-generator/VERSION | 2 +- .../dart2/petstore_client_lib/.openapi-generator/VERSION | 2 +- .../dart2/petstore_client_lib_fake/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../client/petstore/go/go-petstore/.openapi-generator/VERSION | 2 +- .../jersey2-java8-special-characters/.openapi-generator/VERSION | 2 +- .../petstore/java/jersey2-java8/.openapi-generator/VERSION | 2 +- .../client/petstore/java/native/.openapi-generator/VERSION | 2 +- .../client/petstore/python-legacy/.openapi-generator/VERSION | 2 +- .../openapi3/client/petstore/python/.openapi-generator/VERSION | 2 +- .../typescript/builds/default/.openapi-generator/VERSION | 2 +- .../petstore/typescript/builds/deno/.openapi-generator/VERSION | 2 +- .../typescript/builds/inversify/.openapi-generator/VERSION | 2 +- .../typescript/builds/jquery/.openapi-generator/VERSION | 2 +- .../typescript/builds/object_params/.openapi-generator/VERSION | 2 +- samples/schema/petstore/ktorm/.openapi-generator/VERSION | 2 +- samples/schema/petstore/mysql/.openapi-generator/VERSION | 2 +- .../server/petstore/aspnetcore-3.0/.openapi-generator/VERSION | 2 +- .../server/petstore/aspnetcore-3.1/.openapi-generator/VERSION | 2 +- .../server/petstore/aspnetcore-5.0/.openapi-generator/VERSION | 2 +- samples/server/petstore/aspnetcore/.openapi-generator/VERSION | 2 +- samples/server/petstore/cpp-pistache/.openapi-generator/VERSION | 2 +- .../cpp-qt5-qhttpengine-server/.openapi-generator/VERSION | 2 +- .../server/petstore/go-api-server/.openapi-generator/VERSION | 2 +- .../server/petstore/go-echo-server/.openapi-generator/VERSION | 2 +- .../petstore/go-gin-api-server/.openapi-generator/VERSION | 2 +- samples/server/petstore/java-msf4j/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../java-play-framework-async/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../java-play-framework-no-interface/.openapi-generator/VERSION | 2 +- .../java-play-framework-no-nullable/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../petstore/java-play-framework/.openapi-generator/VERSION | 2 +- .../server/petstore/java-undertow/.openapi-generator/VERSION | 2 +- .../server/petstore/java-vertx-web/.openapi-generator/VERSION | 2 +- .../jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION | 2 +- .../jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION | 2 +- .../server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION | 2 +- .../jaxrs-cxf-non-spring-app/.openapi-generator/VERSION | 2 +- samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION | 2 +- .../server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION | 2 +- samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION | 2 +- .../jaxrs-resteasy/default-value/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs-resteasy/default/.openapi-generator/VERSION | 2 +- .../jaxrs-resteasy/eap-java8/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs-spec-interface/.openapi-generator/VERSION | 2 +- samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION | 2 +- .../server/petstore/jaxrs/jersey1/.openapi-generator/VERSION | 2 +- .../petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION | 2 +- .../server/petstore/jaxrs/jersey2/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-server/ktor/.openapi-generator/VERSION | 2 +- samples/server/petstore/kotlin-server/ktor/README.md | 2 +- .../kotlin-springboot-delegate/.openapi-generator/VERSION | 2 +- .../src/main/kotlin/org/openapitools/api/PetApi.kt | 2 +- .../src/main/kotlin/org/openapitools/api/StoreApi.kt | 2 +- .../src/main/kotlin/org/openapitools/api/UserApi.kt | 2 +- .../kotlin-springboot-reactive/.openapi-generator/VERSION | 2 +- .../petstore/kotlin-springboot/.openapi-generator/VERSION | 2 +- samples/server/petstore/php-laravel/.openapi-generator/VERSION | 2 +- samples/server/petstore/php-lumen/.openapi-generator/VERSION | 2 +- .../server/petstore/php-mezzio-ph/.openapi-generator/VERSION | 2 +- samples/server/petstore/php-slim4/.openapi-generator/VERSION | 2 +- .../php-symfony/SymfonyBundle-php/.openapi-generator/VERSION | 2 +- .../python-aiohttp-srclayout/.openapi-generator/VERSION | 2 +- .../server/petstore/python-aiohttp/.openapi-generator/VERSION | 2 +- .../petstore/python-blueplanet/.openapi-generator/VERSION | 2 +- samples/server/petstore/python-flask/.openapi-generator/VERSION | 2 +- .../rust-server/output/multipart-v3/.openapi-generator/VERSION | 2 +- .../rust-server/output/no-example-v3/.openapi-generator/VERSION | 2 +- .../rust-server/output/openapi-v3/.openapi-generator/VERSION | 2 +- .../rust-server/output/ops-v3/.openapi-generator/VERSION | 2 +- .../.openapi-generator/VERSION | 2 +- .../output/ping-bearer-auth/.openapi-generator/VERSION | 2 +- .../output/rust-server-test/.openapi-generator/VERSION | 2 +- .../spring-mvc-default-value/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/TestHeadersApi.java | 2 +- .../src/main/java/org/openapitools/api/TestQueryParamsApi.java | 2 +- .../petstore/spring-mvc-j8-async/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../spring-mvc-j8-localdatetime/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/spring-mvc-no-nullable/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../spring-mvc-spring-pageable/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- samples/server/petstore/spring-mvc/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../spring-mvc/src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../spring-mvc/src/main/java/org/openapitools/api/PetApi.java | 2 +- .../spring-mvc/src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../spring-mvc/src/main/java/org/openapitools/api/UserApi.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../springboot-beanvalidation/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/springboot-delegate-j8/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/springboot-delegate/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../springboot-implicitHeaders/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/springboot-reactive/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../springboot-spring-pageable/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/springboot-useoptional/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/api/UserApi.java | 2 +- .../petstore/springboot-virtualan/.openapi-generator/VERSION | 2 +- .../java/org/openapitools/virtualan/api/AnotherFakeApi.java | 2 +- .../src/main/java/org/openapitools/virtualan/api/FakeApi.java | 2 +- .../org/openapitools/virtualan/api/FakeClassnameTestApi.java | 2 +- .../src/main/java/org/openapitools/virtualan/api/PetApi.java | 2 +- .../src/main/java/org/openapitools/virtualan/api/StoreApi.java | 2 +- .../src/main/java/org/openapitools/virtualan/api/UserApi.java | 2 +- samples/server/petstore/springboot/.openapi-generator/VERSION | 2 +- .../src/main/java/org/openapitools/api/AnotherFakeApi.java | 2 +- .../springboot/src/main/java/org/openapitools/api/FakeApi.java | 2 +- .../main/java/org/openapitools/api/FakeClassnameTestApi.java | 2 +- .../springboot/src/main/java/org/openapitools/api/PetApi.java | 2 +- .../springboot/src/main/java/org/openapitools/api/StoreApi.java | 2 +- .../springboot/src/main/java/org/openapitools/api/UserApi.java | 2 +- 653 files changed, 653 insertions(+), 653 deletions(-) diff --git a/modules/openapi-generator-cli/pom.xml b/modules/openapi-generator-cli/pom.xml index 3d97efb83457..58be25191edb 100644 --- a/modules/openapi-generator-cli/pom.xml +++ b/modules/openapi-generator-cli/pom.xml @@ -4,7 +4,7 @@ org.openapitools openapi-generator-project - 5.1.1-SNAPSHOT + 5.1.1 ../.. diff --git a/modules/openapi-generator-core/pom.xml b/modules/openapi-generator-core/pom.xml index 7995a10523e5..d64cb848dd0c 100644 --- a/modules/openapi-generator-core/pom.xml +++ b/modules/openapi-generator-core/pom.xml @@ -6,7 +6,7 @@ openapi-generator-project org.openapitools - 5.1.1-SNAPSHOT + 5.1.1 ../.. diff --git a/modules/openapi-generator-gradle-plugin/gradle.properties b/modules/openapi-generator-gradle-plugin/gradle.properties index c82f792a787a..8f1066a02dc9 100644 --- a/modules/openapi-generator-gradle-plugin/gradle.properties +++ b/modules/openapi-generator-gradle-plugin/gradle.properties @@ -1,5 +1,5 @@ # RELEASE_VERSION -openApiGeneratorVersion=5.1.1-SNAPSHOT +openApiGeneratorVersion=5.1.1 # /RELEASE_VERSION # BEGIN placeholders diff --git a/modules/openapi-generator-gradle-plugin/pom.xml b/modules/openapi-generator-gradle-plugin/pom.xml index bcf9abfe79e1..b017790425e2 100644 --- a/modules/openapi-generator-gradle-plugin/pom.xml +++ b/modules/openapi-generator-gradle-plugin/pom.xml @@ -4,7 +4,7 @@ org.openapitools openapi-generator-project - 5.1.1-SNAPSHOT + 5.1.1 ../.. diff --git a/modules/openapi-generator-maven-plugin/examples/java-client.xml b/modules/openapi-generator-maven-plugin/examples/java-client.xml index bd5f9cbc6c96..4dbd2ad7aef8 100644 --- a/modules/openapi-generator-maven-plugin/examples/java-client.xml +++ b/modules/openapi-generator-maven-plugin/examples/java-client.xml @@ -13,7 +13,7 @@ org.openapitools openapi-generator-maven-plugin - 5.1.1-SNAPSHOT + 5.1.1 diff --git a/modules/openapi-generator-maven-plugin/examples/multi-module/java-client/pom.xml b/modules/openapi-generator-maven-plugin/examples/multi-module/java-client/pom.xml index 04e2e1dd6127..ded5be470f25 100644 --- a/modules/openapi-generator-maven-plugin/examples/multi-module/java-client/pom.xml +++ b/modules/openapi-generator-maven-plugin/examples/multi-module/java-client/pom.xml @@ -19,7 +19,7 @@ org.openapitools openapi-generator-maven-plugin - 5.1.1-SNAPSHOT + 5.1.1 diff --git a/modules/openapi-generator-maven-plugin/examples/non-java-invalid-spec.xml b/modules/openapi-generator-maven-plugin/examples/non-java-invalid-spec.xml index 2fdca946a92f..06b66510d3d4 100644 --- a/modules/openapi-generator-maven-plugin/examples/non-java-invalid-spec.xml +++ b/modules/openapi-generator-maven-plugin/examples/non-java-invalid-spec.xml @@ -13,7 +13,7 @@ org.openapitools openapi-generator-maven-plugin - 5.1.1-SNAPSHOT + 5.1.1 diff --git a/modules/openapi-generator-maven-plugin/examples/non-java.xml b/modules/openapi-generator-maven-plugin/examples/non-java.xml index 808f52ddc066..dd73d6d13de2 100644 --- a/modules/openapi-generator-maven-plugin/examples/non-java.xml +++ b/modules/openapi-generator-maven-plugin/examples/non-java.xml @@ -13,7 +13,7 @@ org.openapitools openapi-generator-maven-plugin - 5.1.1-SNAPSHOT + 5.1.1 diff --git a/modules/openapi-generator-maven-plugin/pom.xml b/modules/openapi-generator-maven-plugin/pom.xml index 4de0f38b2b5a..8853a970f328 100644 --- a/modules/openapi-generator-maven-plugin/pom.xml +++ b/modules/openapi-generator-maven-plugin/pom.xml @@ -5,7 +5,7 @@ org.openapitools openapi-generator-project - 5.1.1-SNAPSHOT + 5.1.1 ../.. diff --git a/modules/openapi-generator-online/pom.xml b/modules/openapi-generator-online/pom.xml index 16e5b8b6f3fa..cb080960aafe 100644 --- a/modules/openapi-generator-online/pom.xml +++ b/modules/openapi-generator-online/pom.xml @@ -4,7 +4,7 @@ org.openapitools openapi-generator-project - 5.1.1-SNAPSHOT + 5.1.1 ../.. diff --git a/modules/openapi-generator/pom.xml b/modules/openapi-generator/pom.xml index 8c5211e0637a..c66b722ecbbe 100644 --- a/modules/openapi-generator/pom.xml +++ b/modules/openapi-generator/pom.xml @@ -4,7 +4,7 @@ org.openapitools openapi-generator-project - 5.1.1-SNAPSHOT + 5.1.1 ../.. diff --git a/pom.xml b/pom.xml index 24c6442c9663..9e32caa32aa4 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ pom openapi-generator-project - 5.1.1-SNAPSHOT + 5.1.1 https://github.com/openapitools/openapi-generator diff --git a/samples/client/petstore/R/.openapi-generator/VERSION b/samples/client/petstore/R/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/R/.openapi-generator/VERSION +++ b/samples/client/petstore/R/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/apex/.openapi-generator/VERSION b/samples/client/petstore/apex/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/apex/.openapi-generator/VERSION +++ b/samples/client/petstore/apex/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/bash/.openapi-generator/VERSION b/samples/client/petstore/bash/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/bash/.openapi-generator/VERSION +++ b/samples/client/petstore/bash/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/c/.openapi-generator/VERSION b/samples/client/petstore/c/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/c/.openapi-generator/VERSION +++ b/samples/client/petstore/c/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION b/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION +++ b/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION b/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION +++ b/samples/client/petstore/cpp-restsdk/client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp b/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp index ed3804a63930..aee3c61f9dc0 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp +++ b/samples/client/petstore/cpp-restsdk/client/ApiClient.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ApiClient.h b/samples/client/petstore/cpp-restsdk/client/ApiClient.h index 3fe71f4fec92..3fb863be6c31 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiClient.h +++ b/samples/client/petstore/cpp-restsdk/client/ApiClient.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp index 728a0ccdc584..a60b978a01da 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp +++ b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h index 6251627ba436..4bbbc82d19d8 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h +++ b/samples/client/petstore/cpp-restsdk/client/ApiConfiguration.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ApiException.cpp b/samples/client/petstore/cpp-restsdk/client/ApiException.cpp index cb21e1298177..587302df0f4a 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiException.cpp +++ b/samples/client/petstore/cpp-restsdk/client/ApiException.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ApiException.h b/samples/client/petstore/cpp-restsdk/client/ApiException.h index ec28c60f25b0..a07cb2886eeb 100644 --- a/samples/client/petstore/cpp-restsdk/client/ApiException.h +++ b/samples/client/petstore/cpp-restsdk/client/ApiException.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp b/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp index 8a5d29f45bb2..31b2074889b7 100644 --- a/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp +++ b/samples/client/petstore/cpp-restsdk/client/HttpContent.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/HttpContent.h b/samples/client/petstore/cpp-restsdk/client/HttpContent.h index 05cac432a0df..9f63c2171606 100644 --- a/samples/client/petstore/cpp-restsdk/client/HttpContent.h +++ b/samples/client/petstore/cpp-restsdk/client/HttpContent.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/IHttpBody.h b/samples/client/petstore/cpp-restsdk/client/IHttpBody.h index b54af3c2097f..68403ab6e56d 100644 --- a/samples/client/petstore/cpp-restsdk/client/IHttpBody.h +++ b/samples/client/petstore/cpp-restsdk/client/IHttpBody.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp b/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp index 91626b210597..75bb6c83cb67 100644 --- a/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp +++ b/samples/client/petstore/cpp-restsdk/client/JsonBody.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/JsonBody.h b/samples/client/petstore/cpp-restsdk/client/JsonBody.h index 90b3eb906dbc..7c521220a29c 100644 --- a/samples/client/petstore/cpp-restsdk/client/JsonBody.h +++ b/samples/client/petstore/cpp-restsdk/client/JsonBody.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp b/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp index fcc6a2cd6d8a..5a1837296038 100644 --- a/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp +++ b/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/ModelBase.h b/samples/client/petstore/cpp-restsdk/client/ModelBase.h index 228969e55c0f..1efa72dea2c8 100644 --- a/samples/client/petstore/cpp-restsdk/client/ModelBase.h +++ b/samples/client/petstore/cpp-restsdk/client/ModelBase.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp index b979bc4af517..5ba899102e99 100644 --- a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp +++ b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h index 8d1dc908666a..0ec4344fac8e 100644 --- a/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h +++ b/samples/client/petstore/cpp-restsdk/client/MultipartFormData.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/Object.cpp b/samples/client/petstore/cpp-restsdk/client/Object.cpp index 5e5e3fb1ddf4..e168728a5504 100644 --- a/samples/client/petstore/cpp-restsdk/client/Object.cpp +++ b/samples/client/petstore/cpp-restsdk/client/Object.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/Object.h b/samples/client/petstore/cpp-restsdk/client/Object.h index 38eb4031c4df..4f24052e5be3 100644 --- a/samples/client/petstore/cpp-restsdk/client/Object.h +++ b/samples/client/petstore/cpp-restsdk/client/Object.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp b/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp index 83a11eec83d2..a5e2fc91fc9d 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp +++ b/samples/client/petstore/cpp-restsdk/client/api/PetApi.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/PetApi.h b/samples/client/petstore/cpp-restsdk/client/api/PetApi.h index fc1dbb645afe..0cb38bd28c38 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/PetApi.h +++ b/samples/client/petstore/cpp-restsdk/client/api/PetApi.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp index b16721b01fd6..3d1dbc21292a 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp +++ b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h index 2e14f86c1c57..37dc0e7914ea 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h +++ b/samples/client/petstore/cpp-restsdk/client/api/StoreApi.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp b/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp index 1f882a6404bf..b562a62781f6 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp +++ b/samples/client/petstore/cpp-restsdk/client/api/UserApi.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/api/UserApi.h b/samples/client/petstore/cpp-restsdk/client/api/UserApi.h index ac86e5a99111..43b9b21a1926 100644 --- a/samples/client/petstore/cpp-restsdk/client/api/UserApi.h +++ b/samples/client/petstore/cpp-restsdk/client/api/UserApi.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp index 5d7b3e3c70c0..a00af3e69060 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h index 08e5ae881d1f..feef2b4e3aa2 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h +++ b/samples/client/petstore/cpp-restsdk/client/model/ApiResponse.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Category.cpp b/samples/client/petstore/cpp-restsdk/client/model/Category.cpp index 07cc8c4795e9..4c8474c8288e 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Category.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/Category.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Category.h b/samples/client/petstore/cpp-restsdk/client/model/Category.h index 5dffad3f8181..f48a03d19522 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Category.h +++ b/samples/client/petstore/cpp-restsdk/client/model/Category.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Order.cpp b/samples/client/petstore/cpp-restsdk/client/model/Order.cpp index 07bc660c60e3..9dd76252a7db 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Order.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/Order.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Order.h b/samples/client/petstore/cpp-restsdk/client/model/Order.h index 952662b984f2..5b31e77553a7 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Order.h +++ b/samples/client/petstore/cpp-restsdk/client/model/Order.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp b/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp index 63eeecb446de..798d5286d400 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/Pet.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Pet.h b/samples/client/petstore/cpp-restsdk/client/model/Pet.h index 37027d2960ae..cd9843e18ae4 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Pet.h +++ b/samples/client/petstore/cpp-restsdk/client/model/Pet.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp b/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp index 1bcc796db30b..175703246bd1 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/Tag.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/Tag.h b/samples/client/petstore/cpp-restsdk/client/model/Tag.h index 96efc9b42bbc..c10ffe79433f 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/Tag.h +++ b/samples/client/petstore/cpp-restsdk/client/model/Tag.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/User.cpp b/samples/client/petstore/cpp-restsdk/client/model/User.cpp index 7a742815920a..2b4e5194602f 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/User.cpp +++ b/samples/client/petstore/cpp-restsdk/client/model/User.cpp @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/cpp-restsdk/client/model/User.h b/samples/client/petstore/cpp-restsdk/client/model/User.h index 92ab01e42ac4..9b2e0d7b983d 100644 --- a/samples/client/petstore/cpp-restsdk/client/model/User.h +++ b/samples/client/petstore/cpp-restsdk/client/model/User.h @@ -4,7 +4,7 @@ * * The version of the OpenAPI document: 1.0.0 * - * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1-SNAPSHOT. + * NOTE: This class is auto generated by OpenAPI-Generator 5.1.1. * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/crystal/.openapi-generator/VERSION b/samples/client/petstore/crystal/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/crystal/.openapi-generator/VERSION +++ b/samples/client/petstore/crystal/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/crystal/.travis.yml b/samples/client/petstore/crystal/.travis.yml index a8fa5ad86ea1..03fe6908f221 100644 --- a/samples/client/petstore/crystal/.travis.yml +++ b/samples/client/petstore/crystal/.travis.yml @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # language: crystal diff --git a/samples/client/petstore/crystal/spec/spec_helper.cr b/samples/client/petstore/crystal/spec/spec_helper.cr index 5a27efa1a2fa..8e6463d1dc6c 100644 --- a/samples/client/petstore/crystal/spec/spec_helper.cr +++ b/samples/client/petstore/crystal/spec/spec_helper.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # # load modules diff --git a/samples/client/petstore/crystal/src/petstore.cr b/samples/client/petstore/crystal/src/petstore.cr index 13d16661a6bd..2714eeb12a21 100644 --- a/samples/client/petstore/crystal/src/petstore.cr +++ b/samples/client/petstore/crystal/src/petstore.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # # Dependencies diff --git a/samples/client/petstore/crystal/src/petstore/api/pet_api.cr b/samples/client/petstore/crystal/src/petstore/api/pet_api.cr index efcf4a26ff09..e09038a5ba91 100644 --- a/samples/client/petstore/crystal/src/petstore/api/pet_api.cr +++ b/samples/client/petstore/crystal/src/petstore/api/pet_api.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "uri" diff --git a/samples/client/petstore/crystal/src/petstore/api/store_api.cr b/samples/client/petstore/crystal/src/petstore/api/store_api.cr index 226a3a779517..4be9e250868e 100644 --- a/samples/client/petstore/crystal/src/petstore/api/store_api.cr +++ b/samples/client/petstore/crystal/src/petstore/api/store_api.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "uri" diff --git a/samples/client/petstore/crystal/src/petstore/api/user_api.cr b/samples/client/petstore/crystal/src/petstore/api/user_api.cr index 6601e7d57ea7..5ba42511c13d 100644 --- a/samples/client/petstore/crystal/src/petstore/api/user_api.cr +++ b/samples/client/petstore/crystal/src/petstore/api/user_api.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "uri" diff --git a/samples/client/petstore/crystal/src/petstore/api_client.cr b/samples/client/petstore/crystal/src/petstore/api_client.cr index 579bc3f3b968..7e241a63aa36 100644 --- a/samples/client/petstore/crystal/src/petstore/api_client.cr +++ b/samples/client/petstore/crystal/src/petstore/api_client.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "json" diff --git a/samples/client/petstore/crystal/src/petstore/api_error.cr b/samples/client/petstore/crystal/src/petstore/api_error.cr index 9e7c178a48ff..b21ef0e666da 100644 --- a/samples/client/petstore/crystal/src/petstore/api_error.cr +++ b/samples/client/petstore/crystal/src/petstore/api_error.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # module Petstore diff --git a/samples/client/petstore/crystal/src/petstore/configuration.cr b/samples/client/petstore/crystal/src/petstore/configuration.cr index 0b97ee465e34..1d58733f2a40 100644 --- a/samples/client/petstore/crystal/src/petstore/configuration.cr +++ b/samples/client/petstore/crystal/src/petstore/configuration.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "log" diff --git a/samples/client/petstore/crystal/src/petstore/models/api_response.cr b/samples/client/petstore/crystal/src/petstore/models/api_response.cr index 57d64a5c8fb8..e78afdcab44b 100644 --- a/samples/client/petstore/crystal/src/petstore/models/api_response.cr +++ b/samples/client/petstore/crystal/src/petstore/models/api_response.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "time" diff --git a/samples/client/petstore/crystal/src/petstore/models/category.cr b/samples/client/petstore/crystal/src/petstore/models/category.cr index 5d05264ea490..8028347a310b 100644 --- a/samples/client/petstore/crystal/src/petstore/models/category.cr +++ b/samples/client/petstore/crystal/src/petstore/models/category.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "time" diff --git a/samples/client/petstore/crystal/src/petstore/models/order.cr b/samples/client/petstore/crystal/src/petstore/models/order.cr index 4941aa0126cc..49683b627394 100644 --- a/samples/client/petstore/crystal/src/petstore/models/order.cr +++ b/samples/client/petstore/crystal/src/petstore/models/order.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "time" diff --git a/samples/client/petstore/crystal/src/petstore/models/pet.cr b/samples/client/petstore/crystal/src/petstore/models/pet.cr index 7d63ff38d555..8052f0738259 100644 --- a/samples/client/petstore/crystal/src/petstore/models/pet.cr +++ b/samples/client/petstore/crystal/src/petstore/models/pet.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "time" diff --git a/samples/client/petstore/crystal/src/petstore/models/tag.cr b/samples/client/petstore/crystal/src/petstore/models/tag.cr index 85051f4ad6b7..e65ea328c3f1 100644 --- a/samples/client/petstore/crystal/src/petstore/models/tag.cr +++ b/samples/client/petstore/crystal/src/petstore/models/tag.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "time" diff --git a/samples/client/petstore/crystal/src/petstore/models/user.cr b/samples/client/petstore/crystal/src/petstore/models/user.cr index d3bce3feb3be..0a63ffb9f012 100644 --- a/samples/client/petstore/crystal/src/petstore/models/user.cr +++ b/samples/client/petstore/crystal/src/petstore/models/user.cr @@ -5,7 +5,7 @@ #The version of the OpenAPI document: 1.0.0 # #Generated by: https://openapi-generator.tech -#OpenAPI Generator version: 5.1.1-SNAPSHOT +#OpenAPI Generator version: 5.1.1 # require "time" diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-net47/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-net5.0/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClientCore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClientCoreAndNet47/.openapi-generator/VERSION b/samples/client/petstore/csharp-netcore/OpenAPIClientCoreAndNet47/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClientCoreAndNet47/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp-netcore/OpenAPIClientCoreAndNet47/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION b/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION +++ b/samples/client/petstore/csharp/OpenAPIClient/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/elixir/.openapi-generator/VERSION b/samples/client/petstore/elixir/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/elixir/.openapi-generator/VERSION +++ b/samples/client/petstore/elixir/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION b/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/go/go-petstore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/groovy/.openapi-generator/VERSION b/samples/client/petstore/groovy/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/groovy/.openapi-generator/VERSION +++ b/samples/client/petstore/groovy/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION b/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION +++ b/samples/client/petstore/haskell-http-client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION b/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION +++ b/samples/client/petstore/java/feign-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/feign/.openapi-generator/VERSION b/samples/client/petstore/java/feign/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/feign/.openapi-generator/VERSION +++ b/samples/client/petstore/java/feign/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION b/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION +++ b/samples/client/petstore/java/google-api-client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/jersey1/.openapi-generator/VERSION b/samples/client/petstore/java/jersey1/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/jersey1/.openapi-generator/VERSION +++ b/samples/client/petstore/java/jersey1/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION b/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION +++ b/samples/client/petstore/java/jersey2-java8-localdatetime/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION b/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION +++ b/samples/client/petstore/java/jersey2-java8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION b/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION +++ b/samples/client/petstore/java/microprofile-rest-client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/native-async/.openapi-generator/VERSION b/samples/client/petstore/java/native-async/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/native-async/.openapi-generator/VERSION +++ b/samples/client/petstore/java/native-async/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/native/.openapi-generator/VERSION b/samples/client/petstore/java/native/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/native/.openapi-generator/VERSION +++ b/samples/client/petstore/java/native/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION b/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION +++ b/samples/client/petstore/java/okhttp-gson-dynamicOperations/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION b/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION +++ b/samples/client/petstore/java/okhttp-gson-parcelableModel/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION b/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION +++ b/samples/client/petstore/java/okhttp-gson/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION b/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION +++ b/samples/client/petstore/java/rest-assured-jackson/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION b/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION +++ b/samples/client/petstore/java/rest-assured/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/resteasy/.openapi-generator/VERSION b/samples/client/petstore/java/resteasy/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/resteasy/.openapi-generator/VERSION +++ b/samples/client/petstore/java/resteasy/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION b/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION +++ b/samples/client/petstore/java/resttemplate-withXml/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION b/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION +++ b/samples/client/petstore/java/resttemplate/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION +++ b/samples/client/petstore/java/retrofit2-play26/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION +++ b/samples/client/petstore/java/retrofit2/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION +++ b/samples/client/petstore/java/retrofit2rx2/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION b/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION +++ b/samples/client/petstore/java/retrofit2rx3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION b/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION +++ b/samples/client/petstore/java/vertx-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/vertx/.openapi-generator/VERSION b/samples/client/petstore/java/vertx/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/vertx/.openapi-generator/VERSION +++ b/samples/client/petstore/java/vertx/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/java/webclient/.openapi-generator/VERSION b/samples/client/petstore/java/webclient/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/java/webclient/.openapi-generator/VERSION +++ b/samples/client/petstore/java/webclient/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/javascript-es6/.openapi-generator/VERSION b/samples/client/petstore/javascript-es6/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/javascript-es6/.openapi-generator/VERSION +++ b/samples/client/petstore/javascript-es6/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION b/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION +++ b/samples/client/petstore/javascript-promise-es6/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION b/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-gson/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION b/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-jackson/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION b/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-multiplatform/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION b/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION b/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION b/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-retrofit2/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-string/.openapi-generator/VERSION b/samples/client/petstore/kotlin-string/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-string/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-string/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/kotlin/.openapi-generator/VERSION b/samples/client/petstore/kotlin/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/kotlin/.openapi-generator/VERSION +++ b/samples/client/petstore/kotlin/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/lua/.openapi-generator/VERSION b/samples/client/petstore/lua/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/lua/.openapi-generator/VERSION +++ b/samples/client/petstore/lua/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/nim/.openapi-generator/VERSION b/samples/client/petstore/nim/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/nim/.openapi-generator/VERSION +++ b/samples/client/petstore/nim/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/objc/core-data/.openapi-generator/VERSION b/samples/client/petstore/objc/core-data/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/objc/core-data/.openapi-generator/VERSION +++ b/samples/client/petstore/objc/core-data/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/objc/default/.openapi-generator/VERSION b/samples/client/petstore/objc/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/objc/default/.openapi-generator/VERSION +++ b/samples/client/petstore/objc/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/perl/.openapi-generator/VERSION b/samples/client/petstore/perl/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/perl/.openapi-generator/VERSION +++ b/samples/client/petstore/perl/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION +++ b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php index 56d6d46064d8..2264e521b0f3 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/AnotherFakeApi.php @@ -16,7 +16,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php index 6bd203664b52..e97921554ead 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/DefaultApi.php @@ -16,7 +16,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php index bbb07a5052e0..c9508eb5f7ee 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php @@ -16,7 +16,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php index 54e0401ada01..3980c2989662 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeClassnameTags123Api.php @@ -16,7 +16,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php index d6283a8c7527..0978717a70fe 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/PetApi.php @@ -16,7 +16,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php index 7d1042ec3b1f..bbe64b82b592 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/StoreApi.php @@ -16,7 +16,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php index 6e3fa9a1bbb6..93a504be879c 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/UserApi.php @@ -16,7 +16,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php b/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php index 5ebab62f9451..1ea0d8316d54 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/ApiException.php @@ -16,7 +16,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php index 72c04f73a918..2e5212335a99 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Configuration.php @@ -16,7 +16,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php b/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php index ebb51d83207e..bec281930030 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/HeaderSelector.php @@ -16,7 +16,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php index 91e73c485f7d..dd92145054b8 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/AdditionalPropertiesClass.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php index 38b133bb9b90..1b19bd4761c0 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Animal.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php index a63bc06dacf5..6a2266fd1d75 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ApiResponse.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php index ef99db2a5bd9..5689f1f085da 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfArrayOfNumberOnly.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php index fb0d29ea91a3..2fd9bf4f16c2 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayOfNumberOnly.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php index 95d9c568e95c..a1d5f03cbfdc 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ArrayTest.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php index 93a983226478..fc75181fc93c 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Capitalization.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php index eec5473d0a03..95407a7b882b 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Cat.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php index c0a50ac3d205..f57dda054aa7 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/CatAllOf.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php index 4f9f0cf8513a..6f8ce10190d2 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Category.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php index 18f1d351cecd..9f4c356f2569 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ClassModel.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php index 72fd6b41f8a2..5acbc0e27492 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Client.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php index 1cd94b6fcf22..f5a46e218873 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Dog.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php index 85189f46fbc6..055ed63c376e 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/DogAllOf.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php index 5eef1d571956..c9000c137ed4 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumArrays.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php index 4e958e7e816b..339ab035ab6d 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumClass.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php index 33d29157892f..bd4c36298b43 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/EnumTest.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php index 8309279cf219..241523e9eff0 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/File.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php index 7c453b90cb24..aec24769b0b0 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FileSchemaTestClass.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php index 4812d1bb550f..2c14b2f68ca3 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Foo.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php index 42cab9a02f22..ed372802828d 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/FormatTest.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php index 4ac2aa823530..c245f6f70576 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HasOnlyReadOnly.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php index f4c0f3b53a27..5f8d627321b6 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/HealthCheckResult.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php index f4b9d7662e0d..42bd9ea30304 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/InlineResponseDefault.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php index 90be9383d313..ddeece82a4f9 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MapTest.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php index d1b24805fff8..9f0719e50d8a 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/MixedPropertiesAndAdditionalPropertiesClass.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php index 7d2cc3bea120..c16987e53cc6 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Model200Response.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php index 1a8d27e2f423..24e217822628 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelInterface.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php index e0d226b8e9c9..858b33409b68 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelList.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php index 8a5df6f83231..401c62f2e4fc 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ModelReturn.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php index cea03c776f6f..2dd99e46619b 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Name.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php index 95cfccff0f3b..805089634fb4 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NullableClass.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php index 3ae8a58df99d..ae7b7d006f24 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/NumberOnly.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php index bf77a0ea4fca..0eada2b8c792 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Order.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php index 89949af919cc..e3654acd835b 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterComposite.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php index 77daf309a47d..5e3906d69102 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnum.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php index cca89e7f08cc..5635c586621f 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumDefaultValue.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php index d9a996d15a61..bc1634360f35 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumInteger.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php index 235bf204e711..1f2683a000bb 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterEnumIntegerDefaultValue.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php index c053f0acb686..bb4cc1f2e435 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/OuterObjectWithEnumProperty.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php index 989dfa568e39..7ca522f83d9f 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Pet.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php index e5805c532dd0..a8343418d834 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/ReadOnlyFirst.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php index ab01d45aeeb9..79aae3dbf531 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/SpecialModelName.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php index f074c5cb4fee..1e0eb56e78fe 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/Tag.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php index bb8c18c2be95..8fb76516e437 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Model/User.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php b/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php index 37cb5423ba95..ec4fb294155a 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/ObjectSerializer.php @@ -17,7 +17,7 @@ * * The version of the OpenAPI document: 1.0.0 * Generated by: https://openapi-generator.tech - * OpenAPI Generator version: 5.1.1-SNAPSHOT + * OpenAPI Generator version: 5.1.1 */ /** diff --git a/samples/client/petstore/powershell/.openapi-generator/VERSION b/samples/client/petstore/powershell/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/powershell/.openapi-generator/VERSION +++ b/samples/client/petstore/powershell/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/python-asyncio/.openapi-generator/VERSION b/samples/client/petstore/python-asyncio/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/python-asyncio/.openapi-generator/VERSION +++ b/samples/client/petstore/python-asyncio/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/python-legacy/.openapi-generator/VERSION b/samples/client/petstore/python-legacy/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/python-legacy/.openapi-generator/VERSION +++ b/samples/client/petstore/python-legacy/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/python-tornado/.openapi-generator/VERSION b/samples/client/petstore/python-tornado/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/python-tornado/.openapi-generator/VERSION +++ b/samples/client/petstore/python-tornado/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/python/.openapi-generator/VERSION b/samples/client/petstore/python/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/python/.openapi-generator/VERSION +++ b/samples/client/petstore/python/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION b/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION +++ b/samples/client/petstore/ruby-faraday/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/ruby-faraday/lib/petstore.rb b/samples/client/petstore/ruby-faraday/lib/petstore.rb index f9a198e1b3ae..750c4b903ccb 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb index 31f396bc6fff..ce4ac8abfb03 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/another_fake_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb index 8ddf6417a454..0cac8c1d547c 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/default_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb index cade25d18cea..703f5be95bca 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb index 2e79f8990631..bfd8f5f7d7af 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_classname_tags123_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb index 5603a1a75a13..aa43ca8995af 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/pet_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb index 3660dee4ed96..c0485eb645f1 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/store_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb index dfa6e8b57d35..8ea4b4b0e976 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/user_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb index 2fb744160be6..598c32af2cda 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api_client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb index 4d782c07943e..1d38fc1aca00 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api_error.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb b/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb index 7baf9de86426..1de0fcf41e4b 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/configuration.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb index 523e041be8f3..8b98afa53b42 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/additional_properties_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb index eba827e1c697..1a7dc7d3ed24 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/animal.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb index 203ffa7b52be..1bc05a75bbd0 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/api_response.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb index 00aeb8af61b2..755de673b071 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_array_of_number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb index ef39e5f498f5..be18224cb871 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_of_number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb index a6ffbc5a783b..15f800372089 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/array_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb index c27768d78d07..f36ec2ebde41 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/capitalization.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb index 56219265c257..1f5c40a46a76 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb index c9277722620b..a0c998e55b4c 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/cat_all_of.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb index 622bc6faac92..fa15320508a8 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/category.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb index 8fd250a74181..f97739dde24a 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/class_model.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb index 124b4b82ed90..de38da9d8354 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb index 82ba33c1257a..ed52da3e9bda 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb index 3fadc430f4c8..5e12984f1233 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/dog_all_of.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb index 29b4ca8c98d8..6ffd8325e87d 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_arrays.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb index 4ecaa5b59314..0e611fe2698a 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb index 28a3d7e15fca..daf17b6cde4c 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/enum_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb index 6c94412ae1b2..c5b378b1153a 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/file.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb index b0766bb8b405..5d9ddb6ad317 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/file_schema_test_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb index f7912997098a..a1d50615e29b 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/foo.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb index dadf1b830250..ee5e962dab5d 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/format_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb index efd7d13f25f2..de132288ac76 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/has_only_read_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb index a6ef81651a14..07dac1b3702a 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/health_check_result.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb index 7e16c669206f..d2db203c92e2 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/inline_response_default.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb index 7c7f31a3fbdb..09cddbfab59a 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/list.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb index 74b5bfe8f086..251717f5ac72 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/map_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb index 142e6863ab89..44cb070f1724 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/mixed_properties_and_additional_properties_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb index ec5c0050ba37..bbaf3e60bfd5 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/model200_response.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb index 9614b6d779d8..9da6725291cc 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/model_return.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb index 56e27726a180..50dd9118530d 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/name.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb index 2e73715f8815..10c24d4031ef 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/nullable_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb index ed136aee1a5d..200e60e7e77d 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb index fed40c355d49..a1bff1b538a5 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/order.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb index 06989683169e..b1ce3365bbc8 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_composite.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb index 871c119cf872..039001bac65d 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb index 0da84d9c8908..67ac727cfc3e 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_default_value.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb index 7d81f819acf4..6a8eb37afcae 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb index 7b42c137e3f0..3b92319f0a9a 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_enum_integer_default_value.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb index 142aea914503..03c36edddf96 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/outer_object_with_enum_property.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb index 6d28da4b86d0..446b3a2b77c8 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/pet.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb index 522c0f0fbeb1..15d4a7eb39a6 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/read_only_first.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb index 5101343d5f2e..7c19a2802e33 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/special_model_name.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb index 0f8faa295b43..a6231b218d5e 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/tag.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb b/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb index 7364a794f503..1753e0fdc622 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/models/user.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/version.rb b/samples/client/petstore/ruby-faraday/lib/petstore/version.rb index 5b0cca787bc5..e3af89cab0ae 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/version.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/version.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/petstore.gemspec b/samples/client/petstore/ruby-faraday/petstore.gemspec index d649b5e641ab..c20498913670 100644 --- a/samples/client/petstore/ruby-faraday/petstore.gemspec +++ b/samples/client/petstore/ruby-faraday/petstore.gemspec @@ -8,7 +8,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb b/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb index 9d0bb4ced1da..6636d136dc24 100644 --- a/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb +++ b/samples/client/petstore/ruby-faraday/spec/api_client_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb b/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb index 1770139baa3e..e74a5700c111 100644 --- a/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb +++ b/samples/client/petstore/ruby-faraday/spec/configuration_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby-faraday/spec/spec_helper.rb b/samples/client/petstore/ruby-faraday/spec/spec_helper.rb index 50cce9b05c77..10b289fbb9c1 100644 --- a/samples/client/petstore/ruby-faraday/spec/spec_helper.rb +++ b/samples/client/petstore/ruby-faraday/spec/spec_helper.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/.openapi-generator/VERSION b/samples/client/petstore/ruby/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/ruby/.openapi-generator/VERSION +++ b/samples/client/petstore/ruby/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/ruby/lib/petstore.rb b/samples/client/petstore/ruby/lib/petstore.rb index f9a198e1b3ae..750c4b903ccb 100644 --- a/samples/client/petstore/ruby/lib/petstore.rb +++ b/samples/client/petstore/ruby/lib/petstore.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb b/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb index 31f396bc6fff..ce4ac8abfb03 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/another_fake_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/default_api.rb b/samples/client/petstore/ruby/lib/petstore/api/default_api.rb index 8ddf6417a454..0cac8c1d547c 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/default_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/default_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb b/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb index cade25d18cea..703f5be95bca 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb b/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb index 2e79f8990631..bfd8f5f7d7af 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/fake_classname_tags123_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb index 46fccf778e92..5d3469816c6b 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/pet_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb index aaab20af2a47..410fc39481a6 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/store_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/store_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb index b42a3b3a7677..b8ed9d8a55cc 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/user_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/user_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/api_client.rb b/samples/client/petstore/ruby/lib/petstore/api_client.rb index d5cf46fd74ca..df219df025a6 100644 --- a/samples/client/petstore/ruby/lib/petstore/api_client.rb +++ b/samples/client/petstore/ruby/lib/petstore/api_client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/api_error.rb b/samples/client/petstore/ruby/lib/petstore/api_error.rb index 4d782c07943e..1d38fc1aca00 100644 --- a/samples/client/petstore/ruby/lib/petstore/api_error.rb +++ b/samples/client/petstore/ruby/lib/petstore/api_error.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/configuration.rb b/samples/client/petstore/ruby/lib/petstore/configuration.rb index 1bb52c50be18..ba6011b27cc7 100644 --- a/samples/client/petstore/ruby/lib/petstore/configuration.rb +++ b/samples/client/petstore/ruby/lib/petstore/configuration.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb b/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb index 523e041be8f3..8b98afa53b42 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/additional_properties_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/animal.rb b/samples/client/petstore/ruby/lib/petstore/models/animal.rb index eba827e1c697..1a7dc7d3ed24 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/animal.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/animal.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/api_response.rb b/samples/client/petstore/ruby/lib/petstore/models/api_response.rb index 203ffa7b52be..1bc05a75bbd0 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/api_response.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/api_response.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb b/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb index 00aeb8af61b2..755de673b071 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/array_of_array_of_number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb b/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb index ef39e5f498f5..be18224cb871 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/array_of_number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/array_test.rb b/samples/client/petstore/ruby/lib/petstore/models/array_test.rb index a6ffbc5a783b..15f800372089 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/array_test.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/array_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb b/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb index c27768d78d07..f36ec2ebde41 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/capitalization.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/cat.rb b/samples/client/petstore/ruby/lib/petstore/models/cat.rb index 56219265c257..1f5c40a46a76 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/cat.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/cat.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb b/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb index c9277722620b..a0c998e55b4c 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/cat_all_of.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/category.rb b/samples/client/petstore/ruby/lib/petstore/models/category.rb index 622bc6faac92..fa15320508a8 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/category.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/category.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/class_model.rb b/samples/client/petstore/ruby/lib/petstore/models/class_model.rb index 8fd250a74181..f97739dde24a 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/class_model.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/class_model.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/client.rb b/samples/client/petstore/ruby/lib/petstore/models/client.rb index 124b4b82ed90..de38da9d8354 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/client.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/dog.rb b/samples/client/petstore/ruby/lib/petstore/models/dog.rb index 82ba33c1257a..ed52da3e9bda 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/dog.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/dog.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb b/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb index 3fadc430f4c8..5e12984f1233 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/dog_all_of.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb b/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb index 29b4ca8c98d8..6ffd8325e87d 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/enum_arrays.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb b/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb index 4ecaa5b59314..0e611fe2698a 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/enum_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb b/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb index 28a3d7e15fca..daf17b6cde4c 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/enum_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/file.rb b/samples/client/petstore/ruby/lib/petstore/models/file.rb index 6c94412ae1b2..c5b378b1153a 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/file.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/file.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb b/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb index b0766bb8b405..5d9ddb6ad317 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/file_schema_test_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/foo.rb b/samples/client/petstore/ruby/lib/petstore/models/foo.rb index f7912997098a..a1d50615e29b 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/foo.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/foo.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/format_test.rb b/samples/client/petstore/ruby/lib/petstore/models/format_test.rb index dadf1b830250..ee5e962dab5d 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/format_test.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/format_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb b/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb index efd7d13f25f2..de132288ac76 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/has_only_read_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb b/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb index a6ef81651a14..07dac1b3702a 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/health_check_result.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb b/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb index 7e16c669206f..d2db203c92e2 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/inline_response_default.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/list.rb b/samples/client/petstore/ruby/lib/petstore/models/list.rb index 7c7f31a3fbdb..09cddbfab59a 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/list.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/list.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/map_test.rb b/samples/client/petstore/ruby/lib/petstore/models/map_test.rb index 74b5bfe8f086..251717f5ac72 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/map_test.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/map_test.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb b/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb index 142e6863ab89..44cb070f1724 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/mixed_properties_and_additional_properties_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb b/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb index ec5c0050ba37..bbaf3e60bfd5 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/model200_response.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/model_return.rb b/samples/client/petstore/ruby/lib/petstore/models/model_return.rb index 9614b6d779d8..9da6725291cc 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/model_return.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/model_return.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/name.rb b/samples/client/petstore/ruby/lib/petstore/models/name.rb index 56e27726a180..50dd9118530d 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/name.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/name.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb b/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb index 2e73715f8815..10c24d4031ef 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/nullable_class.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/number_only.rb b/samples/client/petstore/ruby/lib/petstore/models/number_only.rb index ed136aee1a5d..200e60e7e77d 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/number_only.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/number_only.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/order.rb b/samples/client/petstore/ruby/lib/petstore/models/order.rb index fed40c355d49..a1bff1b538a5 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/order.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/order.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb index 06989683169e..b1ce3365bbc8 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_composite.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb index 871c119cf872..039001bac65d 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb index 0da84d9c8908..67ac727cfc3e 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_default_value.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb index 7d81f819acf4..6a8eb37afcae 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb index 7b42c137e3f0..3b92319f0a9a 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_enum_integer_default_value.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb b/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb index 142aea914503..03c36edddf96 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/outer_object_with_enum_property.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/pet.rb b/samples/client/petstore/ruby/lib/petstore/models/pet.rb index 6d28da4b86d0..446b3a2b77c8 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/pet.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/pet.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb b/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb index 522c0f0fbeb1..15d4a7eb39a6 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/read_only_first.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb b/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb index 5101343d5f2e..7c19a2802e33 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/special_model_name.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/tag.rb b/samples/client/petstore/ruby/lib/petstore/models/tag.rb index 0f8faa295b43..a6231b218d5e 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/tag.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/tag.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/models/user.rb b/samples/client/petstore/ruby/lib/petstore/models/user.rb index 7364a794f503..1753e0fdc622 100644 --- a/samples/client/petstore/ruby/lib/petstore/models/user.rb +++ b/samples/client/petstore/ruby/lib/petstore/models/user.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/lib/petstore/version.rb b/samples/client/petstore/ruby/lib/petstore/version.rb index 5b0cca787bc5..e3af89cab0ae 100644 --- a/samples/client/petstore/ruby/lib/petstore/version.rb +++ b/samples/client/petstore/ruby/lib/petstore/version.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/petstore.gemspec b/samples/client/petstore/ruby/petstore.gemspec index a3b6e8e06944..ba5010c9ad30 100644 --- a/samples/client/petstore/ruby/petstore.gemspec +++ b/samples/client/petstore/ruby/petstore.gemspec @@ -8,7 +8,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/spec/api_client_spec.rb b/samples/client/petstore/ruby/spec/api_client_spec.rb index 45a5468ae6e5..84ddda3cd2fa 100644 --- a/samples/client/petstore/ruby/spec/api_client_spec.rb +++ b/samples/client/petstore/ruby/spec/api_client_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/spec/configuration_spec.rb b/samples/client/petstore/ruby/spec/configuration_spec.rb index 1770139baa3e..e74a5700c111 100644 --- a/samples/client/petstore/ruby/spec/configuration_spec.rb +++ b/samples/client/petstore/ruby/spec/configuration_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/ruby/spec/spec_helper.rb b/samples/client/petstore/ruby/spec/spec_helper.rb index 50cce9b05c77..10b289fbb9c1 100644 --- a/samples/client/petstore/ruby/spec/spec_helper.rb +++ b/samples/client/petstore/ruby/spec/spec_helper.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION b/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/rust/hyper/petstore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION b/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION +++ b/samples/client/petstore/rust/reqwest/petstore-async/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION b/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION +++ b/samples/client/petstore/rust/reqwest/petstore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/scala-akka/.openapi-generator/VERSION b/samples/client/petstore/scala-akka/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/scala-akka/.openapi-generator/VERSION +++ b/samples/client/petstore/scala-akka/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/scala-sttp/.openapi-generator/VERSION b/samples/client/petstore/scala-sttp/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/scala-sttp/.openapi-generator/VERSION +++ b/samples/client/petstore/scala-sttp/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION +++ b/samples/client/petstore/spring-cloud-async/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java index 99022f109cb1..f7833547f177 100644 --- a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java index e45f9f5326ad..68f629dced82 100644 --- a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java index 868fe7fb79ec..2c98b5f9e6e7 100644 --- a/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/client/petstore/spring-cloud-async/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-no-nullable/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud-no-nullable/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/spring-cloud-no-nullable/.openapi-generator/VERSION +++ b/samples/client/petstore/spring-cloud-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/PetApi.java index 8d98ace26836..d1844b1b80eb 100644 --- a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/StoreApi.java index 3fa561593964..3d5a391e7566 100644 --- a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/UserApi.java index 9028712a4e70..2c49c9711a01 100644 --- a/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/client/petstore/spring-cloud-no-nullable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION +++ b/samples/client/petstore/spring-cloud-spring-pageable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java index d5038a0b69c9..25b9d6c7bbfe 100644 --- a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java index d36fad83e9d8..cc73031ff470 100644 --- a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java index 71663c22f23d..82598e85da9e 100644 --- a/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/client/petstore/spring-cloud-spring-pageable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud/.openapi-generator/VERSION b/samples/client/petstore/spring-cloud/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/spring-cloud/.openapi-generator/VERSION +++ b/samples/client/petstore/spring-cloud/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java index 8d98ace26836..d1844b1b80eb 100644 --- a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java index 3fa561593964..3d5a391e7566 100644 --- a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java index 9028712a4e70..2c49c9711a01 100644 --- a/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/client/petstore/spring-cloud/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-stubs/.openapi-generator/VERSION b/samples/client/petstore/spring-stubs/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/spring-stubs/.openapi-generator/VERSION +++ b/samples/client/petstore/spring-stubs/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java index 851efbab912f..e1326d3c1565 100644 --- a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java index 25101f4d05da..be1f97295c4b 100644 --- a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java index d46665a11815..c17e07317f18 100644 --- a/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/client/petstore/spring-stubs/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/alamofireLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/combineLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/swift5/default/.openapi-generator/VERSION b/samples/client/petstore/swift5/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/default/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION b/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/deprecated/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION b/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/nonPublicApi/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION b/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/objcCompatible/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/promisekitLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION b/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/readonlyProperties/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/resultLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/rxswiftLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION b/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION +++ b/samples/client/petstore/swift5/urlsessionLibrary/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v10-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v11-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v6-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v6-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v7-not-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v7-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/single-request-parameter/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v8-provided-in-root/builds/with-prefixed-module-name/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v9-provided-in-any/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-angular-v9-provided-in-root/builds/with-npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-aurelia/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/composed-schemas/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/es6-target/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-complex-headers/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-interfaces/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-npm-version/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/enum/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/es6-target/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/multiple-parameters/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/prefix-parameter-interfaces/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/typescript-three-plus/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/with-interfaces/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/with-npm-version/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION b/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-fetch/builds/without-runtime-checks/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION b/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-inversify/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-jquery/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-jquery/npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-nestjs-v6-provided-in-root/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-node/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION b/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-node/npm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-redux-query/builds/with-npm-version/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION +++ b/samples/client/petstore/typescript-rxjs/builds/with-progress-subscriber/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION b/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION +++ b/samples/config/petstore/protobuf-schema/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/meta-codegen/lib/pom.xml b/samples/meta-codegen/lib/pom.xml index 7a28653feaa4..0d580d8d1e43 100644 --- a/samples/meta-codegen/lib/pom.xml +++ b/samples/meta-codegen/lib/pom.xml @@ -121,7 +121,7 @@ UTF-8 - 5.1.1-SNAPSHOT + 5.1.1 1.0.0 4.8.1 diff --git a/samples/meta-codegen/usage/.openapi-generator/VERSION b/samples/meta-codegen/usage/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/meta-codegen/usage/.openapi-generator/VERSION +++ b/samples/meta-codegen/usage/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/elm/.openapi-generator/VERSION b/samples/openapi3/client/elm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/elm/.openapi-generator/VERSION +++ b/samples/openapi3/client/elm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION +++ b/samples/openapi3/client/extensions/x-auth-id-alias/go-experimental/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION +++ b/samples/openapi3/client/extensions/x-auth-id-alias/java/jersey2-java8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION +++ b/samples/openapi3/client/extensions/x-auth-id-alias/python/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb index 57f6fbbec4a3..5d62d9e01b7d 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb index dea64fcd53a6..f8ae35b13c22 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api/usage_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb index bafd7c3ddc9e..99e9438cb201 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb index 75a7eb7cff54..7369c821c638 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/api_error.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb index 1a79bce664cf..fd1155851326 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/configuration.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb index a58259effb73..bec887f3ba3b 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/lib/x_auth_id_alias/version.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb index de6667830496..7939be4d57a9 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/api_client_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb index 59fbe08f126a..54976687720d 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/configuration_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb index c800de0f9b78..b0ecb1bc2afe 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/spec/spec_helper.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec index bbd905db7d61..ad8a2136d248 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec +++ b/samples/openapi3/client/extensions/x-auth-id-alias/ruby-client/x_auth_id_alias.gemspec @@ -8,7 +8,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION b/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION +++ b/samples/openapi3/client/features/dynamic-servers/python/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION b/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION +++ b/samples/openapi3/client/features/dynamic-servers/ruby/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec b/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec index 5bf3aefb73ae..4e4be0666e62 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec +++ b/samples/openapi3/client/features/dynamic-servers/ruby/dynamic_servers.gemspec @@ -8,7 +8,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb index de9bed53f27d..5e12502a252a 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb index eebb239b3382..a0f398418253 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api/usage_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb index dbc8f908f4bf..3c7ba7513404 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb index 46e6a2ca0add..19c2c33c8d1d 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/api_error.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb index 47c7180a2a6e..610ae1ee391f 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/configuration.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb index bc9def4db998..491408695279 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/lib/dynamic_servers/version.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb b/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb index e3270122c377..f58f4fe7abdd 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/spec/api_client_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb b/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb index 6cfbb27797ee..5b4814898067 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/spec/configuration_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb b/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb index ea1690def96d..8d86c5fcb464 100644 --- a/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb +++ b/samples/openapi3/client/features/dynamic-servers/ruby/spec/spec_helper.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb index 0aacaaae2d69..094621b8f13f 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb index b978d1beaeed..5e7cc93fe244 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api/usage_api.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb index 42da7d802008..77737db9da51 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_client.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb index a9fdba6803b3..b03431e318d6 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/api_error.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb index e8a443c18d77..b060d134d004 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/configuration.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb index 90fba2508b88..40705ae7172e 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/array_alias.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb index 99f8455ae776..45a136dfc17f 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/models/map_alias.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb index fbaf1271f073..6108550a509e 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/lib/petstore/version.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec index 151037c85a54..9f5fc1189588 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/petstore.gemspec @@ -8,7 +8,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb index 489a718996ae..de0ecf55bbb0 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/api_client_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb index 18846fa3c626..31ffae2b67d1 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/configuration_spec.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb index 5dace1f934dc..4b6f23b312a6 100644 --- a/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb +++ b/samples/openapi3/client/features/generate-alias-as-model/ruby-client/spec/spec_helper.rb @@ -6,7 +6,7 @@ The version of the OpenAPI document: 1.0.0 Generated by: https://openapi-generator.tech -OpenAPI Generator version: 5.1.1-SNAPSHOT +OpenAPI Generator version: 5.1.1 =end diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/.openapi-generator/VERSION b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION b/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/go/go-petstore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION b/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/java/jersey2-java8-special-characters/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION b/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/java/jersey2-java8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/java/native/.openapi-generator/VERSION b/samples/openapi3/client/petstore/java/native/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/java/native/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/java/native/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION b/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100755 --- a/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/python-legacy/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/python/.openapi-generator/VERSION b/samples/openapi3/client/petstore/python/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/python/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/python/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/typescript/builds/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/typescript/builds/deno/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION b/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/schema/petstore/ktorm/.openapi-generator/VERSION b/samples/schema/petstore/ktorm/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/schema/petstore/ktorm/.openapi-generator/VERSION +++ b/samples/schema/petstore/ktorm/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/schema/petstore/mysql/.openapi-generator/VERSION b/samples/schema/petstore/mysql/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/schema/petstore/mysql/.openapi-generator/VERSION +++ b/samples/schema/petstore/mysql/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-3.0/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-3.1/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore-5.0/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION b/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION +++ b/samples/server/petstore/cpp-pistache/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/VERSION b/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/VERSION +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/go-api-server/.openapi-generator/VERSION b/samples/server/petstore/go-api-server/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/go-api-server/.openapi-generator/VERSION +++ b/samples/server/petstore/go-api-server/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/go-echo-server/.openapi-generator/VERSION b/samples/server/petstore/go-echo-server/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/go-echo-server/.openapi-generator/VERSION +++ b/samples/server/petstore/go-echo-server/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION b/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION +++ b/samples/server/petstore/go-gin-api-server/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-msf4j/.openapi-generator/VERSION b/samples/server/petstore/java-msf4j/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-msf4j/.openapi-generator/VERSION +++ b/samples/server/petstore/java-msf4j/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-api-package-override/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-async/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-controller-only/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-fake-endpoints/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-bean-validation/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-exception-handling/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-interface/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-swagger-ui/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework-no-wrap-calls/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-play-framework/.openapi-generator/VERSION b/samples/server/petstore/java-play-framework/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-play-framework/.openapi-generator/VERSION +++ b/samples/server/petstore/java-play-framework/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-undertow/.openapi-generator/VERSION b/samples/server/petstore/java-undertow/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-undertow/.openapi-generator/VERSION +++ b/samples/server/petstore/java-undertow/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION b/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION +++ b/samples/server/petstore/java-vertx-web/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-cxf-annotated-base-path/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-cxf-cdi-default-value/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-cxf-cdi/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-cxf-non-spring-app/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-cxf/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-datelib-j8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-jersey/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/default-value/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/default/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/eap-java8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/eap-joda/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/eap/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-resteasy/joda/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-spec-interface/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION b/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs-spec/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs/jersey1-useTags/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs/jersey1/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs/jersey2-useTags/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION b/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION +++ b/samples/server/petstore/jaxrs/jersey2/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION b/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION +++ b/samples/server/petstore/kotlin-server/ktor/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server/ktor/README.md b/samples/server/petstore/kotlin-server/ktor/README.md index 7cb90e7f8536..d9a363a1ccce 100644 --- a/samples/server/petstore/kotlin-server/ktor/README.md +++ b/samples/server/petstore/kotlin-server/ktor/README.md @@ -2,7 +2,7 @@ This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. -Generated by OpenAPI Generator 5.1.1-SNAPSHOT. +Generated by OpenAPI Generator 5.1.1. ## Requires diff --git a/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION +++ b/samples/server/petstore/kotlin-springboot-delegate/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt index 62837ade76f9..10a19f58d058 100644 --- a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt +++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/PetApi.kt @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt index 15cc95c4d7b9..88b02becf938 100644 --- a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt +++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/StoreApi.kt @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt index 7c42d4ae283e..9fa0622ad70e 100644 --- a/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt +++ b/samples/server/petstore/kotlin-springboot-delegate/src/main/kotlin/org/openapitools/api/UserApi.kt @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION +++ b/samples/server/petstore/kotlin-springboot-reactive/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION b/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION +++ b/samples/server/petstore/kotlin-springboot/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/php-laravel/.openapi-generator/VERSION b/samples/server/petstore/php-laravel/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/php-laravel/.openapi-generator/VERSION +++ b/samples/server/petstore/php-laravel/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/php-lumen/.openapi-generator/VERSION b/samples/server/petstore/php-lumen/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/php-lumen/.openapi-generator/VERSION +++ b/samples/server/petstore/php-lumen/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION b/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION +++ b/samples/server/petstore/php-mezzio-ph/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/php-slim4/.openapi-generator/VERSION b/samples/server/petstore/php-slim4/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/php-slim4/.openapi-generator/VERSION +++ b/samples/server/petstore/php-slim4/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION b/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION b/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION +++ b/samples/server/petstore/python-aiohttp-srclayout/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION b/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION +++ b/samples/server/petstore/python-aiohttp/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION b/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION +++ b/samples/server/petstore/python-blueplanet/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/python-flask/.openapi-generator/VERSION b/samples/server/petstore/python-flask/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/python-flask/.openapi-generator/VERSION +++ b/samples/server/petstore/python-flask/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/multipart-v3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/no-example-v3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/openapi-v3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/ops-v3/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/petstore-with-fake-endpoints-models-for-testing/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/ping-bearer-auth/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION b/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION +++ b/samples/server/petstore/rust-server/output/rust-server-test/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc-default-value/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java index 016fb8657356..7f0928183420 100644 --- a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java +++ b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestHeadersApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java index 14eeb6403601..2f99283ef45e 100644 --- a/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java +++ b/samples/server/petstore/spring-mvc-default-value/src/main/java/org/openapitools/api/TestQueryParamsApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc-j8-async/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java index 67f680d139b0..a2037e5fe868 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java index 3b25c6d7d78d..778d4f1be395 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index d61dfa63e878..b70d43c328e9 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java index 0e5716fc1ad5..22fbc9958bd4 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java index b41f4bddc4bf..319f706fb5d8 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java index 60a6ba8a507f..7db39677ba7e 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..f0b6db968e1a 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java index a641e78829df..f43feafd0652 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ad154f0e01bf 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java index 1f1ff854ce6b..e55f761c2c91 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..3865fc906981 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..0e60b7c28635 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..f0b6db968e1a 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java index 535060645a5e..f33e950abe66 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ad154f0e01bf 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java index 1f1ff854ce6b..e55f761c2c91 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..3865fc906981 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..0e60b7c28635 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc-spring-pageable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..f0b6db968e1a 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java index 0033e1e5940a..907b44a2e71d 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ad154f0e01bf 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java index 3616754568d3..52062d995ab3 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..3865fc906981 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..0e60b7c28635 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/.openapi-generator/VERSION b/samples/server/petstore/spring-mvc/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/spring-mvc/.openapi-generator/VERSION +++ b/samples/server/petstore/spring-mvc/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..f0b6db968e1a 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java index 535060645a5e..f33e950abe66 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ad154f0e01bf 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java index 1f1ff854ce6b..e55f761c2c91 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..3865fc906981 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..0e60b7c28635 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION b/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java index 388462a95376..f370b93b4116 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java index 5a70cda84f72..ead3bab5434f 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 5967985c2540..b4daf946f402 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java index 334bdc9a82e6..4c6d443781b8 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java index 57b8bddb8816..7f5bf19008a0 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java index e8f4fc3d844c..47852ded8c9e 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION b/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-beanvalidation/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..f0b6db968e1a 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java index 535060645a5e..f33e950abe66 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ad154f0e01bf 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java index 1f1ff854ce6b..e55f761c2c91 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..3865fc906981 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..0e60b7c28635 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION b/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-delegate-j8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java index 958a16e9bb92..5100938329c6 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java index ce0cdec40152..985c9ae6cb62 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 1cd4f8903465..e1654342989c 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java index b78cdfa71495..5d51a962824e 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java index 57d70d7cd091..757bd818f60d 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java index 96528d91dee0..66a0b7b59a4c 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION b/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-delegate/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java index 958a16e9bb92..5100938329c6 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java index ce0cdec40152..985c9ae6cb62 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 1cd4f8903465..e1654342989c 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java index b78cdfa71495..5d51a962824e 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java index 57d70d7cd091..757bd818f60d 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java index 96528d91dee0..66a0b7b59a4c 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION b/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-implicitHeaders/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java index 84692f831dc0..def9e07d22c9 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java index e30d8084ace4..9652c38fc956 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index bb04ba91937f..b248d6cbde02 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java index d4e93dfa88e0..4bb4d65097c9 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java index 51ca3cba19e2..0a715ba8561a 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java index e36f0b478666..f2268686b16c 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION b/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-reactive/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java index 43517a22bf80..03f98087f0ee 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java index 22df9d55c342..d0f55aa5f147 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index f6bd5bc94220..06ee4efe9684 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java index 27aa83d6f198..14dfbbba24f5 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java index 5e4c7dd51931..4ca60e5766e5 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java index d58ba4dd213b..75ce75a9bd10 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java index 388462a95376..f370b93b4116 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java index 7bab611bc094..83b272058047 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 5967985c2540..b4daf946f402 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java index b6676ee8e79f..2f029cb7317d 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java index 57b8bddb8816..7f5bf19008a0 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java index e8f4fc3d844c..47852ded8c9e 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java index 958a16e9bb92..5100938329c6 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java index 0256dd794c24..f536fb7fb770 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 1cd4f8903465..e1654342989c 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java index c493551f7049..8d28ab3eb4bc 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java index 57d70d7cd091..757bd818f60d 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java index 96528d91dee0..66a0b7b59a4c 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java index 388462a95376..f370b93b4116 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java index 7bab611bc094..83b272058047 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index 5967985c2540..b4daf946f402 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java index b6676ee8e79f..2f029cb7317d 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java index 57b8bddb8816..7f5bf19008a0 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java index e8f4fc3d844c..47852ded8c9e 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION b/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-spring-pageable/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..f0b6db968e1a 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java index 0033e1e5940a..907b44a2e71d 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ad154f0e01bf 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java index 3616754568d3..52062d995ab3 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..3865fc906981 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..0e60b7c28635 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION b/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-useoptional/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..f0b6db968e1a 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java index f3315076f434..54945f569836 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ad154f0e01bf 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java index f4ad20eef3c8..d9126589b9dc 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..3865fc906981 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..0e60b7c28635 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION b/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot-virtualan/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java index 31ff3bf73e1a..398d52436578 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java index 7eccddfa1fad..9d9be5d43161 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java index b7343dafc32a..217abb586cbc 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java index 6a36a1742d50..4e28d22110c4 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java index 7d2ffbc696e5..3ed5eaebc280 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java index 80d269c1b0c0..12aebcbe2f8e 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/.openapi-generator/VERSION b/samples/server/petstore/springboot/.openapi-generator/VERSION index d509cc92aa80..3bff059174b8 100644 --- a/samples/server/petstore/springboot/.openapi-generator/VERSION +++ b/samples/server/petstore/springboot/.openapi-generator/VERSION @@ -1 +1 @@ -5.1.1-SNAPSHOT \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java index 56e1534835b9..f0b6db968e1a 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/AnotherFakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java index 535060645a5e..f33e950abe66 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java index c17bd7071ef4..ad154f0e01bf 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/FakeClassnameTestApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java index 1f1ff854ce6b..e55f761c2c91 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/PetApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java index ee1d1a1a1274..3865fc906981 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/StoreApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java index d8256d4cb8dc..0e60b7c28635 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/api/UserApi.java @@ -1,5 +1,5 @@ /** - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1-SNAPSHOT). + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (5.1.1). * https://openapi-generator.tech * Do not edit the class manually. */ From e9a62ab910f1c9a923318c3f9ef5bb9c9560d321 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 7 May 2021 10:19:19 +0800 Subject: [PATCH 089/186] update readme --- README.md | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index c994f615fa62..724c9da27711 100644 --- a/README.md +++ b/README.md @@ -9,27 +9,17 @@
-[Master](https://github.com/OpenAPITools/openapi-generator/tree/master) (`5.1.1`): +[Master](https://github.com/OpenAPITools/openapi-generator/tree/master) (`5.2.0`): [![Build Status](https://img.shields.io/travis/OpenAPITools/openapi-generator/master.svg?label=Integration%20Test)](https://travis-ci.org/OpenAPITools/openapi-generator) [![Integration Test2](https://circleci.com/gh/OpenAPITools/openapi-generator.svg?style=shield)](https://circleci.com/gh/OpenAPITools/openapi-generator) -[![Run Status](https://api.shippable.com/projects/5af6bf74e790f4070084a115/badge?branch=master)](https://app.shippable.com/github/OpenAPITools/openapi-generator) [![Windows Test](https://ci.appveyor.com/api/projects/status/github/openapitools/openapi-generator?branch=master&svg=true&passingText=Windows%20Test%20-%20OK&failingText=Windows%20Test%20-%20Fails)](https://ci.appveyor.com/project/WilliamCheng/openapi-generator-wh2wu) [![JDK11 Build](https://cloud.drone.io/api/badges/OpenAPITools/openapi-generator/status.svg?ref=refs/heads/master)](https://cloud.drone.io/OpenAPITools/openapi-generator) [![Bitrise](https://img.shields.io/bitrise/4a2b10a819d12b67/master?label=bitrise%3A%20Swift+4,5&token=859FMDR8QHwabCzwvZK6vQ)](https://app.bitrise.io/app/4a2b10a819d12b67) [![GitHub Workflow Status (branch)](https://img.shields.io/github/workflow/status/openapitools/openapi-generator/Check%20Supported%20Java%20Versions/master?label=Check%20Supported%20Java%20Versions&logo=github&logoColor=green)](https://github.com/OpenAPITools/openapi-generator/actions?query=workflow%3A%22Check+Supported+Java+Versions%22) -[5.2.x](https://github.com/OpenAPITools/openapi-generator/tree/5.2.x) (`5.2.x`): -[![Build Status](https://img.shields.io/travis/OpenAPITools/openapi-generator/5.2.x.svg?label=Integration%20Test)](https://travis-ci.org/OpenAPITools/openapi-generator) -[![Integration Test2](https://circleci.com/gh/OpenAPITools/openapi-generator/tree/5.2.x.svg?style=shield)](https://circleci.com/gh/OpenAPITools/openapi-generator) -[![Run Status](https://api.shippable.com/projects/5af6bf74e790f4070084a115/badge?branch=5.2.x)](https://app.shippable.com/github/OpenAPITools/openapi-generator) -[![Windows Test](https://ci.appveyor.com/api/projects/status/github/openapitools/openapi-generator?branch=5.2.x&svg=true&passingText=Windows%20Test%20-%20OK&failingText=Windows%20Test%20-%20Fails)](https://ci.appveyor.com/project/WilliamCheng/openapi-generator-wh2wu) -[![JDK11 Build](https://cloud.drone.io/api/badges/OpenAPITools/openapi-generator/status.svg?ref=refs/heads/5.2.x)](https://cloud.drone.io/OpenAPITools/openapi-generator) -[![Bitrise](https://img.shields.io/bitrise/4a2b10a819d12b67/5.2.x?label=bitrise%3A%20Swift+4,5&token=859FMDR8QHwabCzwvZK6vQ)](https://app.bitrise.io/app/4a2b10a819d12b67) - [6.0.x](https://github.com/OpenAPITools/openapi-generator/tree/6.0.x) (`6.0.x`): [![Build Status](https://img.shields.io/travis/OpenAPITools/openapi-generator/6.0.x.svg?label=Integration%20Test)](https://travis-ci.org/OpenAPITools/openapi-generator) [![Integration Test2](https://circleci.com/gh/OpenAPITools/openapi-generator/tree/6.0.x.svg?style=shield)](https://circleci.com/gh/OpenAPITools/openapi-generator) -[![Run Status](https://api.shippable.com/projects/5af6bf74e790f4070084a115/badge?branch=6.0.x)](https://app.shippable.com/github/OpenAPITools/openapi-generator) [![Windows Test](https://ci.appveyor.com/api/projects/status/github/openapitools/openapi-generator?branch=6.0.x&svg=true&passingText=Windows%20Test%20-%20OK&failingText=Windows%20Test%20-%20Fails)](https://ci.appveyor.com/project/WilliamCheng/openapi-generator-wh2wu) [![JDK11 Build](https://cloud.drone.io/api/badges/OpenAPITools/openapi-generator/status.svg?ref=refs/heads/6.0.x)](https://cloud.drone.io/OpenAPITools/openapi-generator) [![Bitrise](https://img.shields.io/bitrise/4a2b10a819d12b67/6.0.x?label=bitrise%3A%20Swift+4,5&token=859FMDR8QHwabCzwvZK6vQ)](https://app.bitrise.io/app/4a2b10a819d12b67) @@ -120,9 +110,8 @@ The OpenAPI Specification has undergone 3 revisions since initial creation in 20 | OpenAPI Generator Version | Release Date | Notes | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------- | | 6.0.0 (upcoming major release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/6.0.0-SNAPSHOT/) | Nov/Dec 2021 | Minor release with breaking changes (no fallback) | -| 5.2.0 (upcoming minor release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/5.2.0-SNAPSHOT/) | May/Jun 2021 | Minor release with breaking changes (with fallback) | -| 5.1.1 (upcoming patch release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/5.1.1-SNAPSHOT/) | Apr/May 2021 | Patch release (enhancements, bug fixes, etc) | -| [5.1.0](https://github.com/OpenAPITools/openapi-generator/releases/tag/v5.1.0) (latest stable release) | 20.03.2021 | Minor release with breaking changes (with fallback) | +| 5.2.0 (upcoming minor release) [SNAPSHOT](https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-cli/5.2.0-SNAPSHOT/) | Jun/Jul 2021 | Minor release with breaking changes (with fallback) | +| [5.1.1](https://github.com/OpenAPITools/openapi-generator/releases/tag/v5.1.1) (latest stable release) | 07.05.2021 | Patch release (enhancements, bug fixes, etc) | | [4.3.1](https://github.com/OpenAPITools/openapi-generator/releases/tag/v4.3.1) | 06.05.2020 | Patch release (enhancements, bug fixes, etc) | OpenAPI Spec compatibility: 1.0, 1.1, 1.2, 2.0, 3.0 @@ -179,16 +168,16 @@ See the different versions of the [openapi-generator-cli](https://mvnrepository. If you're looking for the latest stable version, you can grab it directly from Maven.org (Java 8 runtime at a minimum): -JAR location: `https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.1.0/openapi-generator-cli-5.1.0.jar` +JAR location: `https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.1.1/openapi-generator-cli-5.1.1.jar` For **Mac/Linux** users: ```sh -wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.1.0/openapi-generator-cli-5.1.0.jar -O openapi-generator-cli.jar +wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.1.1/openapi-generator-cli-5.1.1.jar -O openapi-generator-cli.jar ``` For **Windows** users, you will need to install [wget](http://gnuwin32.sourceforge.net/packages/wget.htm) or you can use Invoke-WebRequest in PowerShell (3.0+), e.g. ``` -Invoke-WebRequest -OutFile openapi-generator-cli.jar https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.1.0/openapi-generator-cli-5.1.0.jar +Invoke-WebRequest -OutFile openapi-generator-cli.jar https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.1.1/openapi-generator-cli-5.1.1.jar ``` After downloading the JAR, run `java -jar openapi-generator-cli.jar help` to show the usage. @@ -413,7 +402,7 @@ openapi-generator-cli version To use a specific version of "openapi-generator-cli" ```sh -openapi-generator-cli version-manager set 5.1.0 +openapi-generator-cli version-manager set 5.1.1 ``` Or install it as dev-dependency: @@ -437,7 +426,7 @@ java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar generat (if you're on Windows, replace the last command with `java -jar modules\openapi-generator-cli\target\openapi-generator-cli.jar generate -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml -g php -o c:\temp\php_api_client`) -You can also download the JAR (latest release) directly from [maven.org](https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.1.0/openapi-generator-cli-5.1.0.jar) +You can also download the JAR (latest release) directly from [maven.org](https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/5.1.1/openapi-generator-cli-5.1.1.jar) To get a list of **general** options available, please run `java -jar modules/openapi-generator-cli/target/openapi-generator-cli.jar help generate` From cff2286d67431872477c35ec2f2bcb0c9a0b3362 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 7 May 2021 10:29:38 +0800 Subject: [PATCH 090/186] fix distribution --- .github/workflows/check-supported-versions.yaml | 1 + .github/workflows/sonar.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/check-supported-versions.yaml b/.github/workflows/check-supported-versions.yaml index 430b0ea815ce..56992b9811e0 100644 --- a/.github/workflows/check-supported-versions.yaml +++ b/.github/workflows/check-supported-versions.yaml @@ -26,6 +26,7 @@ jobs: - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@v2 with: + distribution: 'adopt' java-version: ${{ matrix.java }} - uses: actions/cache@v2.1.5 diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index 98f191f2c9c0..d991e052a7d6 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -16,6 +16,7 @@ jobs: - name: Set up JDK 11 uses: actions/setup-java@v2 with: + distribution: 'adopt' java-version: 11 - name: Compile with Maven run: mvn -B -q clean install jacoco:report From 85c43e731b338553517db695bc58756d563e5608 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 10 May 2021 15:15:07 +0800 Subject: [PATCH 091/186] fix incorrect date in the readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 724c9da27711..97e01df1c970 100644 --- a/README.md +++ b/README.md @@ -811,8 +811,8 @@ Here are some companies/projects (alphabetical order) using OpenAPI Generator in - 2021-03-28 - [Trying out NestJS part 4: Generate Typescript clients from OpenAPI documents](https://dev.to/arnaudcortisse/trying-out-nestjs-part-4-generate-typescript-clients-from-openapi-documents-28mk) by [Arnaud Cortisse](https://dev.to/arnaudcortisse) - 2021-03-31 - [Open API Server Implementation Using OpenAPI Generator](https://www.baeldung.com/java-openapi-generator-server) at [Baeldung](https://www.baeldung.com/) - 2021-03-31 - [使用OpenAPI Generator實現Open API Server](https://www.1ju.org/article/java-openapi-generator-server) at [億聚網](https://www.1ju.org/) -- 2022-04-19 - [Introducing Twilio’s OpenAPI Specification Beta](https://www.twilio.com/blog/introducing-twilio-open-api-specification-beta) by [GARETH PAUL JONES](https://www.twilio.com/blog/author/gpj) at [Twilio Blog](https://www.twilio.com/blog) -- 2022-04-22 - [Leveraging OpenApi strengths in a Micro-Service environment](https://medium.com/unibuddy-technology-blog/leveraging-openapi-strengths-in-a-micro-service-environment-3d7f9e7c26ff) by Nicolas Jellab at [Unibuddy Technology Blog](https://medium.com/unibuddy-technology-blog) +- 2021-04-19 - [Introducing Twilio’s OpenAPI Specification Beta](https://www.twilio.com/blog/introducing-twilio-open-api-specification-beta) by [GARETH PAUL JONES](https://www.twilio.com/blog/author/gpj) at [Twilio Blog](https://www.twilio.com/blog) +- 2021-04-22 - [Leveraging OpenApi strengths in a Micro-Service environment](https://medium.com/unibuddy-technology-blog/leveraging-openapi-strengths-in-a-micro-service-environment-3d7f9e7c26ff) by Nicolas Jellab at [Unibuddy Technology Blog](https://medium.com/unibuddy-technology-blog) ## [6 - About Us](#table-of-contents) From 1961c661f3d95f15ec2e9a461128d05d0c87021a Mon Sep 17 00:00:00 2001 From: Adi1231234 Date: Mon, 10 May 2021 11:07:03 +0300 Subject: [PATCH 092/186] upgrade dart generator dependencies (#9392) * upgrade intl package * upgrade http package and change url to uri * update petstore sample * update pubspec files * upgrade http dependency * upgrade dev dependencies * update json_serializable and test * delete nullable - deprecated on json_serializable 4.1.1 * fixed NNBD issue * change test version --- .../main/resources/dart2/api_client.mustache | 18 +++++++++--------- .../main/resources/dart2/build.yaml.mustache | 1 - .../src/main/resources/dart2/pubspec.mustache | 10 +++++----- .../petstore_client_lib/lib/api_client.dart | 18 +++++++++--------- .../dart2/petstore_client_lib/pubspec.yaml | 8 ++++---- .../lib/api_client.dart | 18 +++++++++--------- .../petstore_client_lib_fake/pubspec.yaml | 8 ++++---- .../build.yaml | 1 - .../lib/api_client.dart | 18 +++++++++--------- .../pubspec.yaml | 10 +++++----- 10 files changed, 54 insertions(+), 56 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/dart2/api_client.mustache b/modules/openapi-generator/src/main/resources/dart2/api_client.mustache index 167b6951e018..f3af060d514d 100644 --- a/modules/openapi-generator/src/main/resources/dart2/api_client.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/api_client.mustache @@ -84,7 +84,7 @@ class ApiClient { ? '?${urlEncodedQueryParams.join('&')}' : ''; - final url = '$basePath$path$queryString'; + final Uri uri = Uri.parse('$basePath$path$queryString'); if (nullableContentType != null) { headerParams['Content-Type'] = nullableContentType; @@ -96,7 +96,7 @@ class ApiClient { body is MultipartFile && (nullableContentType == null || !nullableContentType.toLowerCase().startsWith('multipart/form-data')) ) { - final request = StreamedRequest(method, Uri.parse(url)); + final request = StreamedRequest(method, uri); request.headers.addAll(headerParams); request.contentLength = body.length; body.finalize().listen( @@ -110,7 +110,7 @@ class ApiClient { } if (body is MultipartRequest) { - final request = MultipartRequest(method, Uri.parse(url)); + final request = MultipartRequest(method, uri); request.fields.addAll(body.fields); request.files.addAll(body.files); request.headers.addAll(body.headers); @@ -125,12 +125,12 @@ class ApiClient { final nullableHeaderParams = headerParams.isEmpty ? null : headerParams; switch(method) { - case 'POST': return await _client.post(url, headers: nullableHeaderParams, body: msgBody,); - case 'PUT': return await _client.put(url, headers: nullableHeaderParams, body: msgBody,); - case 'DELETE': return await _client.delete(url, headers: nullableHeaderParams,); - case 'PATCH': return await _client.patch(url, headers: nullableHeaderParams, body: msgBody,); - case 'HEAD': return await _client.head(url, headers: nullableHeaderParams,); - case 'GET': return await _client.get(url, headers: nullableHeaderParams,); + case 'POST': return await _client.post(uri, headers: nullableHeaderParams, body: msgBody,); + case 'PUT': return await _client.put(uri, headers: nullableHeaderParams, body: msgBody,); + case 'DELETE': return await _client.delete(uri, headers: nullableHeaderParams,); + case 'PATCH': return await _client.patch(uri, headers: nullableHeaderParams, body: msgBody,); + case 'HEAD': return await _client.head(uri, headers: nullableHeaderParams,); + case 'GET': return await _client.get(uri, headers: nullableHeaderParams,); } } on SocketException catch (e, trace) { throw ApiException.withInner(HttpStatus.badRequest, 'Socket operation failed: $method $path', e, trace,); diff --git a/modules/openapi-generator/src/main/resources/dart2/build.yaml.mustache b/modules/openapi-generator/src/main/resources/dart2/build.yaml.mustache index b5399b955dbc..89a4dd6e1c2e 100644 --- a/modules/openapi-generator/src/main/resources/dart2/build.yaml.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/build.yaml.mustache @@ -16,4 +16,3 @@ targets: field_rename: none ignore_unannotated: false include_if_null: false - nullable: true diff --git a/modules/openapi-generator/src/main/resources/dart2/pubspec.mustache b/modules/openapi-generator/src/main/resources/dart2/pubspec.mustache index 9de3cbd23149..93c848aa5c12 100644 --- a/modules/openapi-generator/src/main/resources/dart2/pubspec.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/pubspec.mustache @@ -9,15 +9,15 @@ authors: - '{{{pubAuthor}}} <{{{pubAuthorEmail}}}>' homepage: '{{{pubHomepage}}}' environment: - sdk: '>=2.0.0 <3.0.0' + sdk: '>=2.12.0 <3.0.0' dependencies: - http: '>=0.12.0 <0.13.0' - intl: '^0.16.1' + http: '>=0.13.0 <0.14.0' + intl: '^0.17.0' meta: '^1.1.8' {{#json_serializable}} json_annotation: '^3.1.1'{{/json_serializable}} dev_dependencies: - test: '>=1.3.0 <1.16.0' + test: '>=1.16.0 <1.18.0' {{#json_serializable}} - build_runner: '^1.0.0' + build_runner: '^1.10.9' json_serializable: '^3.5.1'{{/json_serializable}} diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_client.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_client.dart index c847d27f60b1..35b984b86a13 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_client.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_client.dart @@ -77,7 +77,7 @@ class ApiClient { ? '?${urlEncodedQueryParams.join('&')}' : ''; - final url = '$basePath$path$queryString'; + final Uri uri = Uri.parse('$basePath$path$queryString'); if (nullableContentType != null) { headerParams['Content-Type'] = nullableContentType; @@ -89,7 +89,7 @@ class ApiClient { body is MultipartFile && (nullableContentType == null || !nullableContentType.toLowerCase().startsWith('multipart/form-data')) ) { - final request = StreamedRequest(method, Uri.parse(url)); + final request = StreamedRequest(method, uri); request.headers.addAll(headerParams); request.contentLength = body.length; body.finalize().listen( @@ -103,7 +103,7 @@ class ApiClient { } if (body is MultipartRequest) { - final request = MultipartRequest(method, Uri.parse(url)); + final request = MultipartRequest(method, uri); request.fields.addAll(body.fields); request.files.addAll(body.files); request.headers.addAll(body.headers); @@ -118,12 +118,12 @@ class ApiClient { final nullableHeaderParams = headerParams.isEmpty ? null : headerParams; switch(method) { - case 'POST': return await _client.post(url, headers: nullableHeaderParams, body: msgBody,); - case 'PUT': return await _client.put(url, headers: nullableHeaderParams, body: msgBody,); - case 'DELETE': return await _client.delete(url, headers: nullableHeaderParams,); - case 'PATCH': return await _client.patch(url, headers: nullableHeaderParams, body: msgBody,); - case 'HEAD': return await _client.head(url, headers: nullableHeaderParams,); - case 'GET': return await _client.get(url, headers: nullableHeaderParams,); + case 'POST': return await _client.post(uri, headers: nullableHeaderParams, body: msgBody,); + case 'PUT': return await _client.put(uri, headers: nullableHeaderParams, body: msgBody,); + case 'DELETE': return await _client.delete(uri, headers: nullableHeaderParams,); + case 'PATCH': return await _client.patch(uri, headers: nullableHeaderParams, body: msgBody,); + case 'HEAD': return await _client.head(uri, headers: nullableHeaderParams,); + case 'GET': return await _client.get(uri, headers: nullableHeaderParams,); } } on SocketException catch (e, trace) { throw ApiException.withInner(HttpStatus.badRequest, 'Socket operation failed: $method $path', e, trace,); diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/pubspec.yaml b/samples/openapi3/client/petstore/dart2/petstore_client_lib/pubspec.yaml index 06e772631725..4d55880cd856 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/pubspec.yaml @@ -9,12 +9,12 @@ authors: - 'Author ' homepage: 'homepage' environment: - sdk: '>=2.0.0 <3.0.0' + sdk: '>=2.12.0 <3.0.0' dependencies: - http: '>=0.12.0 <0.13.0' - intl: '^0.16.1' + http: '>=0.13.0 <0.14.0' + intl: '^0.17.0' meta: '^1.1.8' dev_dependencies: - test: '>=1.3.0 <1.16.0' + test: '>=1.16.0 <1.18.0' diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_client.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_client.dart index 83cad2d3ded6..0aa83cf01972 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_client.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_client.dart @@ -80,7 +80,7 @@ class ApiClient { ? '?${urlEncodedQueryParams.join('&')}' : ''; - final url = '$basePath$path$queryString'; + final Uri uri = Uri.parse('$basePath$path$queryString'); if (nullableContentType != null) { headerParams['Content-Type'] = nullableContentType; @@ -92,7 +92,7 @@ class ApiClient { body is MultipartFile && (nullableContentType == null || !nullableContentType.toLowerCase().startsWith('multipart/form-data')) ) { - final request = StreamedRequest(method, Uri.parse(url)); + final request = StreamedRequest(method, uri); request.headers.addAll(headerParams); request.contentLength = body.length; body.finalize().listen( @@ -106,7 +106,7 @@ class ApiClient { } if (body is MultipartRequest) { - final request = MultipartRequest(method, Uri.parse(url)); + final request = MultipartRequest(method, uri); request.fields.addAll(body.fields); request.files.addAll(body.files); request.headers.addAll(body.headers); @@ -121,12 +121,12 @@ class ApiClient { final nullableHeaderParams = headerParams.isEmpty ? null : headerParams; switch(method) { - case 'POST': return await _client.post(url, headers: nullableHeaderParams, body: msgBody,); - case 'PUT': return await _client.put(url, headers: nullableHeaderParams, body: msgBody,); - case 'DELETE': return await _client.delete(url, headers: nullableHeaderParams,); - case 'PATCH': return await _client.patch(url, headers: nullableHeaderParams, body: msgBody,); - case 'HEAD': return await _client.head(url, headers: nullableHeaderParams,); - case 'GET': return await _client.get(url, headers: nullableHeaderParams,); + case 'POST': return await _client.post(uri, headers: nullableHeaderParams, body: msgBody,); + case 'PUT': return await _client.put(uri, headers: nullableHeaderParams, body: msgBody,); + case 'DELETE': return await _client.delete(uri, headers: nullableHeaderParams,); + case 'PATCH': return await _client.patch(uri, headers: nullableHeaderParams, body: msgBody,); + case 'HEAD': return await _client.head(uri, headers: nullableHeaderParams,); + case 'GET': return await _client.get(uri, headers: nullableHeaderParams,); } } on SocketException catch (e, trace) { throw ApiException.withInner(HttpStatus.badRequest, 'Socket operation failed: $method $path', e, trace,); diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/pubspec.yaml b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/pubspec.yaml index 06e772631725..4d55880cd856 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/pubspec.yaml @@ -9,12 +9,12 @@ authors: - 'Author ' homepage: 'homepage' environment: - sdk: '>=2.0.0 <3.0.0' + sdk: '>=2.12.0 <3.0.0' dependencies: - http: '>=0.12.0 <0.13.0' - intl: '^0.16.1' + http: '>=0.13.0 <0.14.0' + intl: '^0.17.0' meta: '^1.1.8' dev_dependencies: - test: '>=1.3.0 <1.16.0' + test: '>=1.16.0 <1.18.0' diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/build.yaml b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/build.yaml index b5399b955dbc..89a4dd6e1c2e 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/build.yaml +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/build.yaml @@ -16,4 +16,3 @@ targets: field_rename: none ignore_unannotated: false include_if_null: false - nullable: true diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_client.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_client.dart index f54d8cad38d4..65c9ec57844d 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_client.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_client.dart @@ -80,7 +80,7 @@ class ApiClient { ? '?${urlEncodedQueryParams.join('&')}' : ''; - final url = '$basePath$path$queryString'; + final Uri uri = Uri.parse('$basePath$path$queryString'); if (nullableContentType != null) { headerParams['Content-Type'] = nullableContentType; @@ -92,7 +92,7 @@ class ApiClient { body is MultipartFile && (nullableContentType == null || !nullableContentType.toLowerCase().startsWith('multipart/form-data')) ) { - final request = StreamedRequest(method, Uri.parse(url)); + final request = StreamedRequest(method, uri); request.headers.addAll(headerParams); request.contentLength = body.length; body.finalize().listen( @@ -106,7 +106,7 @@ class ApiClient { } if (body is MultipartRequest) { - final request = MultipartRequest(method, Uri.parse(url)); + final request = MultipartRequest(method, uri); request.fields.addAll(body.fields); request.files.addAll(body.files); request.headers.addAll(body.headers); @@ -121,12 +121,12 @@ class ApiClient { final nullableHeaderParams = headerParams.isEmpty ? null : headerParams; switch(method) { - case 'POST': return await _client.post(url, headers: nullableHeaderParams, body: msgBody,); - case 'PUT': return await _client.put(url, headers: nullableHeaderParams, body: msgBody,); - case 'DELETE': return await _client.delete(url, headers: nullableHeaderParams,); - case 'PATCH': return await _client.patch(url, headers: nullableHeaderParams, body: msgBody,); - case 'HEAD': return await _client.head(url, headers: nullableHeaderParams,); - case 'GET': return await _client.get(url, headers: nullableHeaderParams,); + case 'POST': return await _client.post(uri, headers: nullableHeaderParams, body: msgBody,); + case 'PUT': return await _client.put(uri, headers: nullableHeaderParams, body: msgBody,); + case 'DELETE': return await _client.delete(uri, headers: nullableHeaderParams,); + case 'PATCH': return await _client.patch(uri, headers: nullableHeaderParams, body: msgBody,); + case 'HEAD': return await _client.head(uri, headers: nullableHeaderParams,); + case 'GET': return await _client.get(uri, headers: nullableHeaderParams,); } } on SocketException catch (e, trace) { throw ApiException.withInner(HttpStatus.badRequest, 'Socket operation failed: $method $path', e, trace,); diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/pubspec.yaml b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/pubspec.yaml index a54b8ac20063..73931cb6b83a 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/pubspec.yaml @@ -9,13 +9,13 @@ authors: - 'Author ' homepage: 'homepage' environment: - sdk: '>=2.0.0 <3.0.0' + sdk: '>=2.12.0 <3.0.0' dependencies: - http: '>=0.12.0 <0.13.0' - intl: '^0.16.1' + http: '>=0.13.0 <0.14.0' + intl: '^0.17.0' meta: '^1.1.8' json_annotation: '^3.1.1' dev_dependencies: - test: '>=1.3.0 <1.16.0' - build_runner: '^1.0.0' + test: '>=1.16.0 <1.18.0' + build_runner: '^1.10.9' json_serializable: '^3.5.1' From a98cb97f9191dc6019365253a1b44b112ca1c54f Mon Sep 17 00:00:00 2001 From: Kyle Kelly Date: Mon, 10 May 2021 01:10:24 -0700 Subject: [PATCH 093/186] [Javascript-Flowtyped] Handle joining uniqueItems in api template (#9417) * Add handling for casting uniqueItems from Set to Arrays so they can be properly joined * Fix mixed-indent lines --- .../Javascript-Flowtyped/api.mustache | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Javascript-Flowtyped/api.mustache b/modules/openapi-generator/src/main/resources/Javascript-Flowtyped/api.mustache index 35bff5b9687e..1afc22037510 100644 --- a/modules/openapi-generator/src/main/resources/Javascript-Flowtyped/api.mustache +++ b/modules/openapi-generator/src/main/resources/Javascript-Flowtyped/api.mustache @@ -104,16 +104,16 @@ export const {{classname}}FetchParamCreator = function (configuration?: Configur {{#isKeyInHeader}} if (configuration && configuration.apiKey) { const localVarApiKeyValue = typeof configuration.apiKey === 'function' - ? configuration.apiKey("{{keyParamName}}") - : configuration.apiKey; + ? configuration.apiKey("{{keyParamName}}") + : configuration.apiKey; localVarHeaderParameter["{{keyParamName}}"] = localVarApiKeyValue; } {{/isKeyInHeader}} {{#isKeyInQuery}} if (configuration && configuration.apiKey) { const localVarApiKeyValue = typeof configuration.apiKey === 'function' - ? configuration.apiKey("{{keyParamName}}") - : configuration.apiKey; + ? configuration.apiKey("{{keyParamName}}") + : configuration.apiKey; localVarQueryParameter["{{keyParamName}}"] = localVarApiKeyValue; } {{/isKeyInQuery}} @@ -127,9 +127,9 @@ export const {{classname}}FetchParamCreator = function (configuration?: Configur {{#isOAuth}} // oauth required if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? configuration.accessToken("{{name}}", [{{#scopes}}"{{{scope}}}"{{^-last}}, {{/-last}}{{/scopes}}]) - : configuration.accessToken; + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? configuration.accessToken("{{name}}", [{{#scopes}}"{{{scope}}}"{{^-last}}, {{/-last}}{{/scopes}}]) + : configuration.accessToken; localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue; } {{/isOAuth}} @@ -142,7 +142,7 @@ export const {{classname}}FetchParamCreator = function (configuration?: Configur localVarQueryParameter['{{baseName}}'] = {{paramName}}; {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - localVarQueryParameter['{{baseName}}'] = {{paramName}}.join(COLLECTION_FORMATS["{{collectionFormat}}"]); + localVarQueryParameter['{{baseName}}'] = {{#uniqueItems}}Array.from({{/uniqueItems}}{{paramName}}{{#uniqueItems}}){{/uniqueItems}}.join(COLLECTION_FORMATS["{{collectionFormat}}"]); {{/isCollectionFormatMulti}} } {{/isArray}} @@ -166,7 +166,7 @@ export const {{classname}}FetchParamCreator = function (configuration?: Configur {{#headerParams}} {{#isArray}} if ({{paramName}}) { - localVarHeaderParameter['{{baseName}}'] = {{paramName}}.join(COLLECTION_FORMATS["{{collectionFormat}}"]); + localVarHeaderParameter['{{baseName}}'] = {{#uniqueItems}}Array.from({{/uniqueItems}}{{paramName}}{{#uniqueItems}}){{/uniqueItems}}.join(COLLECTION_FORMATS["{{collectionFormat}}"]); } {{/isArray}} {{^isArray}} @@ -185,7 +185,7 @@ export const {{classname}}FetchParamCreator = function (configuration?: Configur }) {{/isCollectionFormatMulti}} {{^isCollectionFormatMulti}} - localVarFormParams.set('{{baseName}}', {{paramName}}.join(COLLECTION_FORMATS["{{collectionFormat}}"])); + localVarFormParams.set('{{baseName}}', {{#uniqueItems}}Array.from({{/uniqueItems}}{{paramName}}{{#uniqueItems}}){{/uniqueItems}}.join(COLLECTION_FORMATS["{{collectionFormat}}"])); {{/isCollectionFormatMulti}} } {{/isArray}} From ae2423e64aca75c7945226bee305f769056df9c4 Mon Sep 17 00:00:00 2001 From: Mark Nevill Date: Mon, 10 May 2021 09:11:13 +0100 Subject: [PATCH 094/186] [Bash] Fix matching of header parameters (#9370) --- .../openapi-generator/src/main/resources/bash/client.mustache | 2 +- samples/client/petstore/bash/petstore-cli | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/bash/client.mustache b/modules/openapi-generator/src/main/resources/bash/client.mustache index ff63a39c6004..3f5dcc0e2918 100644 --- a/modules/openapi-generator/src/main/resources/bash/client.mustache +++ b/modules/openapi-generator/src/main/resources/bash/client.mustache @@ -979,7 +979,7 @@ case $key in body_parameters[${body_key}]=${body_value} fi ;; - +\([^=]\):*) + +([^=]):*) # Parse header arguments and convert them into curl # only after the operation argument if [[ "$operation" ]]; then diff --git a/samples/client/petstore/bash/petstore-cli b/samples/client/petstore/bash/petstore-cli index 26e7a817e235..80386fb0ebe0 100755 --- a/samples/client/petstore/bash/petstore-cli +++ b/samples/client/petstore/bash/petstore-cli @@ -3820,7 +3820,7 @@ case $key in body_parameters[${body_key}]=${body_value} fi ;; - +\([^=]\):*) + +([^=]):*) # Parse header arguments and convert them into curl # only after the operation argument if [[ "$operation" ]]; then From 1751aa72723cced22833c4484e16be1d43a34456 Mon Sep 17 00:00:00 2001 From: Yusuke Hosonuma Date: Mon, 10 May 2021 17:17:49 +0900 Subject: [PATCH 095/186] [crystal][client] some fix and minor improvement (#9416) * [crystal][client] remove redundant include JSON::Serializable * [crystal][client] fix syntax error * [crystal][client] fix shard name * [crystal][client] add 'require "json"' * [crystal][client] update sample projects --- .../resources/crystal/configuration.mustache | 60 +++++++++---------- .../src/main/resources/crystal/model.mustache | 1 + .../crystal/partial_model_generic.mustache | 6 +- .../src/main/resources/crystal/shard.mustache | 2 +- samples/client/petstore/crystal/shard.yml | 2 +- .../crystal/src/petstore/configuration.cr | 26 ++++---- .../src/petstore/models/api_response.cr | 8 +-- .../crystal/src/petstore/models/category.cr | 7 ++- .../crystal/src/petstore/models/order.cr | 11 ++-- .../crystal/src/petstore/models/pet.cr | 11 ++-- .../crystal/src/petstore/models/tag.cr | 7 ++- .../crystal/src/petstore/models/user.cr | 13 ++-- 12 files changed, 74 insertions(+), 80 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/crystal/configuration.mustache b/modules/openapi-generator/src/main/resources/crystal/configuration.mustache index 7111ba75e75c..cc2e15e93fac 100644 --- a/modules/openapi-generator/src/main/resources/crystal/configuration.mustache +++ b/modules/openapi-generator/src/main/resources/crystal/configuration.mustache @@ -197,44 +197,44 @@ module {{moduleName}} # Returns Auth Settings hash for api client. def auth_settings - Hash{ {{#authMethods}}{{#isApiKey}}"{{name}}" => { - type: "api_key", - in: {{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{#isKeyInQuery}}"query"{{/isKeyInQuery}}, - key: "{{keyParamName}}", - value: api_key_with_prefix("{{keyParamName}}") - }, + Hash{ +{{#authMethods}} +{{#isApiKey}} + "{{name}}" => { + type: "api_key", + in: {{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{#isKeyInQuery}}"query"{{/isKeyInQuery}}, + key: "{{keyParamName}}", + value: api_key_with_prefix("{{keyParamName}}") + }, {{/isApiKey}} {{#isBasic}} {{#isBasicBasic}} - "{{name}}" => - { - type: "basic", - in: "header", - key: "Authorization", - value: basic_auth_token - }, + "{{name}}" => { + type: "basic", + in: "header", + key: "Authorization", + value: basic_auth_token + }, {{/isBasicBasic}} {{#isBasicBearer}} - "{{name}}" => - { - type: "bearer", - in: "header", - {{#bearerFormat}} - format: "{{{.}}}", - {{/bearerFormat}} - key: "Authorization", - value: "Bearer #{access_token}" - }, + "{{name}}" => { + type: "bearer", + in: "header", + {{#bearerFormat}} + format: "{{{.}}}", + {{/bearerFormat}} + key: "Authorization", + value: "Bearer #{access_token}" + }, {{/isBasicBearer}} {{/isBasic}} {{#isOAuth}} - "{{name}}" => - { - type: "oauth2", - in: "header", - key: "Authorization", - value: "Bearer #{access_token}" - }, + "{{name}}" => { + type: "oauth2", + in: "header", + key: "Authorization", + value: "Bearer #{access_token}" + }, {{/isOAuth}} {{/authMethods}} } diff --git a/modules/openapi-generator/src/main/resources/crystal/model.mustache b/modules/openapi-generator/src/main/resources/crystal/model.mustache index a19cc5f3f6a6..021857ee40e8 100644 --- a/modules/openapi-generator/src/main/resources/crystal/model.mustache +++ b/modules/openapi-generator/src/main/resources/crystal/model.mustache @@ -1,5 +1,6 @@ # {{#lambdaPrefixWithHash}}{{> api_info}}{{/lambdaPrefixWithHash}} +require "json" require "time" module {{moduleName}} diff --git a/modules/openapi-generator/src/main/resources/crystal/partial_model_generic.mustache b/modules/openapi-generator/src/main/resources/crystal/partial_model_generic.mustache index c36181c48dc4..eaf47753fbad 100644 --- a/modules/openapi-generator/src/main/resources/crystal/partial_model_generic.mustache +++ b/modules/openapi-generator/src/main/resources/crystal/partial_model_generic.mustache @@ -1,8 +1,10 @@ {{#description}} # {{{description}}} {{/description}} - class {{classname}}{{#parent}} < {{{.}}}{{/parent}} include JSON::Serializable - include JSON::Serializable {{#vars}} + class {{classname}}{{#parent}} < {{{.}}}{{/parent}} + include JSON::Serializable + + {{#vars}} {{#description}} # {{{description}}} {{/description}} diff --git a/modules/openapi-generator/src/main/resources/crystal/shard.mustache b/modules/openapi-generator/src/main/resources/crystal/shard.mustache index 89376ca4593b..11b012865385 100644 --- a/modules/openapi-generator/src/main/resources/crystal/shard.mustache +++ b/modules/openapi-generator/src/main/resources/crystal/shard.mustache @@ -1,4 +1,4 @@ -name: {{{moduleName}}} +name: {{{shardName}}} version: {{{shardVersion}}} authors: - {{{shardAuthors}}} diff --git a/samples/client/petstore/crystal/shard.yml b/samples/client/petstore/crystal/shard.yml index 06fc3300e053..a4c86a06e2a2 100644 --- a/samples/client/petstore/crystal/shard.yml +++ b/samples/client/petstore/crystal/shard.yml @@ -1,4 +1,4 @@ -name: Petstore +name: petstore version: 1.0.0 authors: - diff --git a/samples/client/petstore/crystal/src/petstore/configuration.cr b/samples/client/petstore/crystal/src/petstore/configuration.cr index 780228391592..e02acd2e5071 100644 --- a/samples/client/petstore/crystal/src/petstore/configuration.cr +++ b/samples/client/petstore/crystal/src/petstore/configuration.cr @@ -205,19 +205,19 @@ module Petstore # Returns Auth Settings hash for api client. def auth_settings - Hash{ "api_key" => { - type: "api_key", - in: "header", - key: "api_key", - value: api_key_with_prefix("api_key") - }, - "petstore_auth" => - { - type: "oauth2", - in: "header", - key: "Authorization", - value: "Bearer #{access_token}" - }, + Hash{ + "api_key" => { + type: "api_key", + in: "header", + key: "api_key", + value: api_key_with_prefix("api_key") + }, + "petstore_auth" => { + type: "oauth2", + in: "header", + key: "Authorization", + value: "Bearer #{access_token}" + }, } end diff --git a/samples/client/petstore/crystal/src/petstore/models/api_response.cr b/samples/client/petstore/crystal/src/petstore/models/api_response.cr index b0603e98c032..7d15b7200f85 100644 --- a/samples/client/petstore/crystal/src/petstore/models/api_response.cr +++ b/samples/client/petstore/crystal/src/petstore/models/api_response.cr @@ -8,20 +8,20 @@ #OpenAPI Generator version: 5.2.0-SNAPSHOT # +require "json" require "time" module Petstore # Describes the result of uploading an image resource - class ApiResponse include JSON::Serializable - include JSON::Serializable + class ApiResponse + include JSON::Serializable + @[JSON::Field(key: code, type: Int32)] property code : Int32 - @[JSON::Field(key: type, type: String)] property _type : String - @[JSON::Field(key: message, type: String)] property message : String diff --git a/samples/client/petstore/crystal/src/petstore/models/category.cr b/samples/client/petstore/crystal/src/petstore/models/category.cr index d96bac1cf1c6..7d573eb7a82e 100644 --- a/samples/client/petstore/crystal/src/petstore/models/category.cr +++ b/samples/client/petstore/crystal/src/petstore/models/category.cr @@ -8,16 +8,17 @@ #OpenAPI Generator version: 5.2.0-SNAPSHOT # +require "json" require "time" module Petstore # A category for a pet - class Category include JSON::Serializable - include JSON::Serializable + class Category + include JSON::Serializable + @[JSON::Field(key: id, type: Int64)] property id : Int64 - @[JSON::Field(key: name, type: String)] property name : String diff --git a/samples/client/petstore/crystal/src/petstore/models/order.cr b/samples/client/petstore/crystal/src/petstore/models/order.cr index ee5a4356492a..05de437e07c4 100644 --- a/samples/client/petstore/crystal/src/petstore/models/order.cr +++ b/samples/client/petstore/crystal/src/petstore/models/order.cr @@ -8,33 +8,30 @@ #OpenAPI Generator version: 5.2.0-SNAPSHOT # +require "json" require "time" module Petstore # An order for a pets from the pet store - class Order include JSON::Serializable - include JSON::Serializable + class Order + include JSON::Serializable + @[JSON::Field(key: id, type: Int64)] property id : Int64 - @[JSON::Field(key: petId, type: Int64)] property pet_id : Int64 - @[JSON::Field(key: quantity, type: Int32)] property quantity : Int32 - @[JSON::Field(key: shipDate, type: Time)] property ship_date : Time - # Order Status @[JSON::Field(key: status, type: String)] property status : String - @[JSON::Field(key: complete, type: Bool)] property complete : Bool diff --git a/samples/client/petstore/crystal/src/petstore/models/pet.cr b/samples/client/petstore/crystal/src/petstore/models/pet.cr index 91e5552b02e9..2d2c236e48bd 100644 --- a/samples/client/petstore/crystal/src/petstore/models/pet.cr +++ b/samples/client/petstore/crystal/src/petstore/models/pet.cr @@ -8,32 +8,29 @@ #OpenAPI Generator version: 5.2.0-SNAPSHOT # +require "json" require "time" module Petstore # A pet for sale in the pet store - class Pet include JSON::Serializable - include JSON::Serializable + class Pet + include JSON::Serializable + @[JSON::Field(key: id, type: Int64)] property id : Int64 - @[JSON::Field(key: category, type: Category)] property category : Category - @[JSON::Field(key: name, type: String)] property name : String - @[JSON::Field(key: photoUrls, type: Array(String))] property photo_urls : Array(String) - @[JSON::Field(key: tags, type: Array(Tag))] property tags : Array(Tag) - # pet status in the store @[JSON::Field(key: status, type: String)] property status : String diff --git a/samples/client/petstore/crystal/src/petstore/models/tag.cr b/samples/client/petstore/crystal/src/petstore/models/tag.cr index 4121f2e67a78..6e6f16a21d38 100644 --- a/samples/client/petstore/crystal/src/petstore/models/tag.cr +++ b/samples/client/petstore/crystal/src/petstore/models/tag.cr @@ -8,16 +8,17 @@ #OpenAPI Generator version: 5.2.0-SNAPSHOT # +require "json" require "time" module Petstore # A tag for a pet - class Tag include JSON::Serializable - include JSON::Serializable + class Tag + include JSON::Serializable + @[JSON::Field(key: id, type: Int64)] property id : Int64 - @[JSON::Field(key: name, type: String)] property name : String diff --git a/samples/client/petstore/crystal/src/petstore/models/user.cr b/samples/client/petstore/crystal/src/petstore/models/user.cr index 4f0d617e98dd..3732dc4d2e42 100644 --- a/samples/client/petstore/crystal/src/petstore/models/user.cr +++ b/samples/client/petstore/crystal/src/petstore/models/user.cr @@ -8,40 +8,35 @@ #OpenAPI Generator version: 5.2.0-SNAPSHOT # +require "json" require "time" module Petstore # A User who is purchasing from the pet store - class User include JSON::Serializable - include JSON::Serializable + class User + include JSON::Serializable + @[JSON::Field(key: id, type: Int64)] property id : Int64 - @[JSON::Field(key: username, type: String)] property username : String - @[JSON::Field(key: firstName, type: String)] property first_name : String - @[JSON::Field(key: lastName, type: String)] property last_name : String - @[JSON::Field(key: email, type: String)] property email : String - @[JSON::Field(key: password, type: String)] property password : String - @[JSON::Field(key: phone, type: String)] property phone : String - # User Status @[JSON::Field(key: userStatus, type: Int32)] property user_status : Int32 From 4bb5c8ae0f53f280d7e7fd3d9b5a6aedddb6f405 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 10 May 2021 18:26:23 +0800 Subject: [PATCH 096/186] better code format, update samples (#9438) --- .../Javascript-Flowtyped/api.mustache | 26 ++++----- .../.openapi-generator/VERSION | 2 +- .../petstore/javascript-flowtyped/src/api.js | 54 ++++++++++--------- 3 files changed, 42 insertions(+), 40 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Javascript-Flowtyped/api.mustache b/modules/openapi-generator/src/main/resources/Javascript-Flowtyped/api.mustache index 1afc22037510..ccfed6298ec5 100644 --- a/modules/openapi-generator/src/main/resources/Javascript-Flowtyped/api.mustache +++ b/modules/openapi-generator/src/main/resources/Javascript-Flowtyped/api.mustache @@ -36,7 +36,6 @@ export type FetchArgs = { options: {}; } - /** * * @export @@ -79,12 +78,12 @@ export const {{classname}}FetchParamCreator = function (configuration?: Configur {{/summary}} * @throws {RequiredError} */ - {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options: RequestOptions): FetchArgs { + {{operationId}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options: RequestOptions): FetchArgs { {{#allParams}} {{#required}} // verify required parameter '{{paramName}}' is not null or undefined if ({{paramName}} === null || {{paramName}} === undefined) { - throw new RequiredError('{{paramName}}','Required parameter {{paramName}} was null or undefined when calling {{nickname}}.'); + throw new RequiredError('{{paramName}}','Required parameter {{paramName}} was null or undefined when calling {{operationId}}.'); } {{/required}} {{/allParams}} @@ -104,16 +103,16 @@ export const {{classname}}FetchParamCreator = function (configuration?: Configur {{#isKeyInHeader}} if (configuration && configuration.apiKey) { const localVarApiKeyValue = typeof configuration.apiKey === 'function' - ? configuration.apiKey("{{keyParamName}}") - : configuration.apiKey; + ? configuration.apiKey("{{keyParamName}}") + : configuration.apiKey; localVarHeaderParameter["{{keyParamName}}"] = localVarApiKeyValue; } {{/isKeyInHeader}} {{#isKeyInQuery}} if (configuration && configuration.apiKey) { const localVarApiKeyValue = typeof configuration.apiKey === 'function' - ? configuration.apiKey("{{keyParamName}}") - : configuration.apiKey; + ? configuration.apiKey("{{keyParamName}}") + : configuration.apiKey; localVarQueryParameter["{{keyParamName}}"] = localVarApiKeyValue; } {{/isKeyInQuery}} @@ -127,9 +126,9 @@ export const {{classname}}FetchParamCreator = function (configuration?: Configur {{#isOAuth}} // oauth required if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? configuration.accessToken("{{name}}", [{{#scopes}}"{{{scope}}}"{{^-last}}, {{/-last}}{{/scopes}}]) - : configuration.accessToken; + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? configuration.accessToken("{{name}}", [{{#scopes}}"{{{scope}}}"{{^-last}}, {{/-last}}{{/scopes}}]) + : configuration.accessToken; localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue; } {{/isOAuth}} @@ -227,7 +226,7 @@ export const {{classname}}FetchParamCreator = function (configuration?: Configur }; export type {{classname}}Type = { {{#operation}} - {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: RequestOptions): Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Response{{/returnType}}>, + {{operationId}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: RequestOptions): Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Response{{/returnType}}>, {{/operation}} } @@ -247,8 +246,8 @@ export const {{classname}} = function(configuration?: Configuration, fetch: Fetc {{/summary}} * @throws {RequiredError} */ - {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: RequestOptions = {}): Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Response{{/returnType}}> { - const localVarFetchArgs = {{classname}}FetchParamCreator(configuration).{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}options); + {{operationId}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: RequestOptions = {}): Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Response{{/returnType}}> { + const localVarFetchArgs = {{classname}}FetchParamCreator(configuration).{{operationId}}({{#allParams}}{{paramName}}, {{/allParams}}options); return fetch(basePath + localVarFetchArgs.url, localVarFetchArgs.options).then((response) => { if (response.status >= 200 && response.status < 300) { return response{{#returnType}}.json(){{/returnType}}; @@ -260,6 +259,7 @@ export const {{classname}} = function(configuration?: Configuration, fetch: Fetc {{/operation}} } }; + {{/operations}}{{/apis}}{{/apiInfo}} export type ApiTypes = { {{#apiInfo}}{{#apis}}{{#operations}} {{classname}}: {{classname}}Type, diff --git a/samples/client/petstore/javascript-flowtyped/.openapi-generator/VERSION b/samples/client/petstore/javascript-flowtyped/.openapi-generator/VERSION index d99e7162d01f..6555596f9311 100644 --- a/samples/client/petstore/javascript-flowtyped/.openapi-generator/VERSION +++ b/samples/client/petstore/javascript-flowtyped/.openapi-generator/VERSION @@ -1 +1 @@ -5.0.0-SNAPSHOT \ No newline at end of file +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/javascript-flowtyped/src/api.js b/samples/client/petstore/javascript-flowtyped/src/api.js index 7e681e862c77..bcf2a932d3bc 100644 --- a/samples/client/petstore/javascript-flowtyped/src/api.js +++ b/samples/client/petstore/javascript-flowtyped/src/api.js @@ -46,7 +46,6 @@ export type FetchArgs = { options: {}; } - /** * * @export @@ -310,9 +309,9 @@ export const PetApiFetchParamCreator = function (configuration?: Configuration) // authentication petstore_auth required // oauth required if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) - : configuration.accessToken; + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) + : configuration.accessToken; localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue; } @@ -350,9 +349,9 @@ export const PetApiFetchParamCreator = function (configuration?: Configuration) // authentication petstore_auth required // oauth required if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) - : configuration.accessToken; + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) + : configuration.accessToken; localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue; } @@ -389,9 +388,9 @@ export const PetApiFetchParamCreator = function (configuration?: Configuration) // authentication petstore_auth required // oauth required if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) - : configuration.accessToken; + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) + : configuration.accessToken; localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue; } @@ -428,9 +427,9 @@ export const PetApiFetchParamCreator = function (configuration?: Configuration) // authentication petstore_auth required // oauth required if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) - : configuration.accessToken; + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) + : configuration.accessToken; localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue; } @@ -468,8 +467,8 @@ export const PetApiFetchParamCreator = function (configuration?: Configuration) // authentication api_key required if (configuration && configuration.apiKey) { const localVarApiKeyValue = typeof configuration.apiKey === 'function' - ? configuration.apiKey("api_key") - : configuration.apiKey; + ? configuration.apiKey("api_key") + : configuration.apiKey; localVarHeaderParameter["api_key"] = localVarApiKeyValue; } @@ -502,9 +501,9 @@ export const PetApiFetchParamCreator = function (configuration?: Configuration) // authentication petstore_auth required // oauth required if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) - : configuration.accessToken; + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) + : configuration.accessToken; localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue; } @@ -543,9 +542,9 @@ export const PetApiFetchParamCreator = function (configuration?: Configuration) // authentication petstore_auth required // oauth required if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) - : configuration.accessToken; + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) + : configuration.accessToken; localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue; } @@ -589,9 +588,9 @@ export const PetApiFetchParamCreator = function (configuration?: Configuration) // authentication petstore_auth required // oauth required if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) - : configuration.accessToken; + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]) + : configuration.accessToken; localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue; } @@ -765,6 +764,7 @@ export const PetApi = function(configuration?: Configuration, fetch: FetchAPI = } }; + /** * StoreApi - fetch parameter creator * @export @@ -813,8 +813,8 @@ export const StoreApiFetchParamCreator = function (configuration?: Configuration // authentication api_key required if (configuration && configuration.apiKey) { const localVarApiKeyValue = typeof configuration.apiKey === 'function' - ? configuration.apiKey("api_key") - : configuration.apiKey; + ? configuration.apiKey("api_key") + : configuration.apiKey; localVarHeaderParameter["api_key"] = localVarApiKeyValue; } @@ -968,6 +968,7 @@ export const StoreApi = function(configuration?: Configuration, fetch: FetchAPI } }; + /** * UserApi - fetch parameter creator * @export @@ -1364,6 +1365,7 @@ export const UserApi = function(configuration?: Configuration, fetch: FetchAPI = } }; + export type ApiTypes = { PetApi: PetApiType, From 808c0b03bde94579837e8df523a0a568bba751c4 Mon Sep 17 00:00:00 2001 From: Guillaume TOURBIER Date: Mon, 10 May 2021 13:02:36 +0200 Subject: [PATCH 097/186] feat: add access to webclient and webclientBuilder (#9329) * feat: add access to webclient and webclientBuilder fix: #8602 * docs: add params for webclient & builder --- .../libraries/webclient/ApiClient.mustache | 97 +++++++++++++++---- .../org/openapitools/client/ApiClient.java | 91 +++++++++++++---- 2 files changed, 150 insertions(+), 38 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/ApiClient.mustache index 0fe89ccb026c..6491013f5a84 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/webclient/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/webclient/ApiClient.mustache @@ -59,6 +59,9 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TimeZone; + +import javax.annotation.Nullable; + {{#jsr310}} {{#threetenbp}} import org.threeten.bp.OffsetDateTime; @@ -98,45 +101,58 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} { private final WebClient webClient; private final DateFormat dateFormat; + private final ObjectMapper objectMapper; private Map authentications; public ApiClient() { this.dateFormat = createDefaultDateFormat(); - ObjectMapper mapper = new ObjectMapper(); - mapper.setDateFormat(dateFormat); - mapper.registerModule(new JavaTimeModule()); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - {{#openApiNullable}} - JsonNullableModule jnm = new JsonNullableModule(); - mapper.registerModule(jnm); - {{/openApiNullable}} - - this.webClient = buildWebClient(mapper); + this.objectMapper = createDefaultObjectMapper(this.dateFormat); + this.webClient = buildWebClient(this.objectMapper); this.init(); } + public ApiClient(WebClient webClient) { + this(Optional.ofNullable(webClient).orElseGet(() -> buildWebClient()), createDefaultDateFormat()); + } + public ApiClient(ObjectMapper mapper, DateFormat format) { this(buildWebClient(mapper.copy()), format); } public ApiClient(WebClient webClient, ObjectMapper mapper, DateFormat format) { - this(Optional.ofNullable(webClient).orElseGet(() ->buildWebClient(mapper.copy())), format); + this(Optional.ofNullable(webClient).orElseGet(() -> buildWebClient(mapper.copy())), format); } private ApiClient(WebClient webClient, DateFormat format) { this.webClient = webClient; this.dateFormat = format; + this.objectMapper = createDefaultObjectMapper(format); this.init(); } - public DateFormat createDefaultDateFormat() { + public static DateFormat createDefaultDateFormat() { DateFormat dateFormat = new RFC3339DateFormat(); dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); return dateFormat; } + public static ObjectMapper createDefaultObjectMapper(@Nullable DateFormat dateFormat) { + if (null == dateFormat) { + dateFormat = createDefaultDateFormat(); + } + ObjectMapper mapper = new ObjectMapper(); + mapper.setDateFormat(dateFormat); + mapper.registerModule(new JavaTimeModule()); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + {{#openApiNullable}} + JsonNullableModule jnm = new JsonNullableModule(); + mapper.registerModule(jnm); + {{/openApiNullable}} + return mapper; + } + protected void init() { // Setup authentications (key: authentication name, value: authentication). authentications = new HashMap();{{#authMethods}}{{#isBasic}}{{#isBasicBasic}} @@ -149,20 +165,45 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} { } /** - * Build the WebClient used to make HTTP requests. + * Build the WebClientBuilder used to make WebClient. + * @param mapper ObjectMapper used for serialize/deserialize * @return WebClient */ - public static WebClient buildWebClient(ObjectMapper mapper) { + public static WebClient.Builder buildWebClientBuilder(ObjectMapper mapper) { ExchangeStrategies strategies = ExchangeStrategies .builder() .codecs(clientDefaultCodecsConfigurer -> { clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(mapper, MediaType.APPLICATION_JSON)); clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(mapper, MediaType.APPLICATION_JSON)); }).build(); - WebClient.Builder webClient = WebClient.builder().exchangeStrategies(strategies); - return webClient.build(); + WebClient.Builder webClientBuilder = WebClient.builder().exchangeStrategies(strategies); + return webClientBuilder; + } + + /** + * Build the WebClientBuilder used to make WebClient. + * @return WebClient + */ + public static WebClient.Builder buildWebClientBuilder() { + return buildWebClientBuilder(createDefaultObjectMapper(null)); + } + + /** + * Build the WebClient used to make HTTP requests. + * @param mapper ObjectMapper used for serialize/deserialize + * @return WebClient + */ + public static WebClient buildWebClient(ObjectMapper mapper) { + return buildWebClientBuilder(mapper).build(); } + /** + * Build the WebClient used to make HTTP requests. + * @return WebClient + */ + public static WebClient buildWebClient() { + return buildWebClientBuilder(createDefaultObjectMapper(null)).build(); + } /** * Get the current base path @@ -352,6 +393,22 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} { return dateFormat.format(date); } + /** + * Get the ObjectMapper used to make HTTP requests. + * @return ObjectMapper objectMapper + */ + public ObjectMapper getObjectMapper() { + return objectMapper; + } + + /** + * Get the WebClient used to make HTTP requests. + * @return WebClient webClient + */ + public WebClient getWebClient() { + return webClient; + } + /** * Format the given parameter object into string. * @param param the object to convert @@ -655,10 +712,10 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} { } // collectionFormat is assumed to be "csv" by default - if(collectionFormat == null) { - collectionFormat = CollectionFormat.CSV; - } + if(collectionFormat == null) { + collectionFormat = CollectionFormat.CSV; + } - return collectionFormat.collectionToString(values); + return collectionFormat.collectionToString(values); } } diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java index c8b45d5a9038..98c64fbb17b0 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java @@ -57,6 +57,9 @@ import java.util.Map; import java.util.Map.Entry; import java.util.TimeZone; + +import javax.annotation.Nullable; + import java.time.OffsetDateTime; import org.openapitools.client.auth.Authentication; @@ -87,43 +90,56 @@ private String collectionToString(Collection collection) { private final WebClient webClient; private final DateFormat dateFormat; + private final ObjectMapper objectMapper; private Map authentications; public ApiClient() { this.dateFormat = createDefaultDateFormat(); - ObjectMapper mapper = new ObjectMapper(); - mapper.setDateFormat(dateFormat); - mapper.registerModule(new JavaTimeModule()); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNullableModule jnm = new JsonNullableModule(); - mapper.registerModule(jnm); - - this.webClient = buildWebClient(mapper); + this.objectMapper = createDefaultObjectMapper(this.dateFormat); + this.webClient = buildWebClient(this.objectMapper); this.init(); } + public ApiClient(WebClient webClient) { + this(Optional.ofNullable(webClient).orElseGet(() -> buildWebClient()), createDefaultDateFormat()); + } + public ApiClient(ObjectMapper mapper, DateFormat format) { this(buildWebClient(mapper.copy()), format); } public ApiClient(WebClient webClient, ObjectMapper mapper, DateFormat format) { - this(Optional.ofNullable(webClient).orElseGet(() ->buildWebClient(mapper.copy())), format); + this(Optional.ofNullable(webClient).orElseGet(() -> buildWebClient(mapper.copy())), format); } private ApiClient(WebClient webClient, DateFormat format) { this.webClient = webClient; this.dateFormat = format; + this.objectMapper = createDefaultObjectMapper(format); this.init(); } - public DateFormat createDefaultDateFormat() { + public static DateFormat createDefaultDateFormat() { DateFormat dateFormat = new RFC3339DateFormat(); dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); return dateFormat; } + public static ObjectMapper createDefaultObjectMapper(@Nullable DateFormat dateFormat) { + if (null == dateFormat) { + dateFormat = createDefaultDateFormat(); + } + ObjectMapper mapper = new ObjectMapper(); + mapper.setDateFormat(dateFormat); + mapper.registerModule(new JavaTimeModule()); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + JsonNullableModule jnm = new JsonNullableModule(); + mapper.registerModule(jnm); + return mapper; + } + protected void init() { // Setup authentications (key: authentication name, value: authentication). authentications = new HashMap(); @@ -136,20 +152,43 @@ protected void init() { } /** - * Build the WebClient used to make HTTP requests. + * Build the WebClientBuilder used to make WebClient. * @return WebClient */ - public static WebClient buildWebClient(ObjectMapper mapper) { + public static WebClient.Builder buildWebClientBuilder(ObjectMapper mapper) { ExchangeStrategies strategies = ExchangeStrategies .builder() .codecs(clientDefaultCodecsConfigurer -> { clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(mapper, MediaType.APPLICATION_JSON)); clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(mapper, MediaType.APPLICATION_JSON)); }).build(); - WebClient.Builder webClient = WebClient.builder().exchangeStrategies(strategies); - return webClient.build(); + WebClient.Builder webClientBuilder = WebClient.builder().exchangeStrategies(strategies); + return webClientBuilder; } + /** + * Build the WebClientBuilder used to make WebClient. + * @return WebClient + */ + public static WebClient.Builder buildWebClientBuilder() { + return buildWebClientBuilder(createDefaultObjectMapper(null)); + } + + /** + * Build the WebClient used to make HTTP requests. + * @return WebClient + */ + public static WebClient buildWebClient(ObjectMapper mapper) { + return buildWebClientBuilder(mapper).build(); + } + + /** + * Build the WebClient used to make HTTP requests. + * @return WebClient + */ + public static WebClient buildWebClient() { + return buildWebClientBuilder(createDefaultObjectMapper(null)).build(); + } /** * Get the current base path @@ -337,6 +376,22 @@ public String formatDate(Date date) { return dateFormat.format(date); } + /** + * Get the ObjectMapper used to make HTTP requests. + * @return ObjectMapper objectMapper + */ + public ObjectMapper getObjectMapper() { + return objectMapper; + } + + /** + * Get the WebClient used to make HTTP requests. + * @return WebClient webClient + */ + public WebClient getWebClient() { + return webClient; + } + /** * Format the given parameter object into string. * @param param the object to convert @@ -640,10 +695,10 @@ public String collectionPathParameterToString(CollectionFormat collectionFormat, } // collectionFormat is assumed to be "csv" by default - if(collectionFormat == null) { - collectionFormat = CollectionFormat.CSV; - } + if(collectionFormat == null) { + collectionFormat = CollectionFormat.CSV; + } - return collectionFormat.collectionToString(values); + return collectionFormat.collectionToString(values); } } From 85ff15ac8ac6e0a3a41a54394173141a38940fbd Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 10 May 2021 19:05:02 +0800 Subject: [PATCH 098/186] update samples --- .../src/main/java/org/openapitools/client/ApiClient.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java index 98c64fbb17b0..b8a53e2f9470 100644 --- a/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/webclient/src/main/java/org/openapitools/client/ApiClient.java @@ -153,6 +153,7 @@ protected void init() { /** * Build the WebClientBuilder used to make WebClient. + * @param mapper ObjectMapper used for serialize/deserialize * @return WebClient */ public static WebClient.Builder buildWebClientBuilder(ObjectMapper mapper) { @@ -176,6 +177,7 @@ public static WebClient.Builder buildWebClientBuilder() { /** * Build the WebClient used to make HTTP requests. + * @param mapper ObjectMapper used for serialize/deserialize * @return WebClient */ public static WebClient buildWebClient(ObjectMapper mapper) { @@ -376,7 +378,7 @@ public String formatDate(Date date) { return dateFormat.format(date); } - /** + /** * Get the ObjectMapper used to make HTTP requests. * @return ObjectMapper objectMapper */ From a63912ee1eb64fed7fb492af1d8f44565cf3b813 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 10 May 2021 20:23:38 +0800 Subject: [PATCH 099/186] add --allow-different-user (#9439) --- CI/.drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CI/.drone.yml b/CI/.drone.yml index a4c8c9b0e95e..d8dd0dff8275 100644 --- a/CI/.drone.yml +++ b/CI/.drone.yml @@ -52,7 +52,7 @@ steps: - name: haskell-client-test image: haskell:8.6.5 commands: - - (cd samples/client/petstore/haskell-http-client/ && stack --install-ghc --no-haddock-deps haddock --fast && stack test --fast) + - (cd samples/client/petstore/haskell-http-client/ && stack --allow-different-user --install-ghc --no-haddock-deps haddock --fast && stack --allow-different-user test --fast) # test erlang client and server - name: erlang image: erlang:alpine From 3173e0b1d361aa6bb781057a47788d1799d3dbc2 Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Mon, 10 May 2021 13:42:13 +0100 Subject: [PATCH 100/186] [kotlin][client] improve docs (#9393) --- docs/generators/kotlin.md | 1 + .../openapitools/codegen/languages/KotlinClientCodegen.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/docs/generators/kotlin.md b/docs/generators/kotlin.md index ef76c9af691b..f4b0aceeb60a 100644 --- a/docs/generators/kotlin.md +++ b/docs/generators/kotlin.md @@ -16,6 +16,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |groupId|Generated artifact package's organization (i.e. maven groupId).| |org.openapitools| |library|Library template (sub-template) to use|
**jvm-okhttp4**
[DEFAULT] Platform: Java Virtual Machine. HTTP client: OkHttp 4.2.0 (Android 5.0+ and Java 8+). JSON processing: Moshi 1.8.0.
**jvm-okhttp3**
Platform: Java Virtual Machine. HTTP client: OkHttp 3.12.4 (Android 2.3+ and Java 7+). JSON processing: Moshi 1.8.0.
**jvm-retrofit2**
Platform: Java Virtual Machine. HTTP client: Retrofit 2.6.2.
**multiplatform**
Platform: Kotlin multiplatform. HTTP client: Ktor 1.2.4. JSON processing: Kotlinx Serialization: 0.12.0.
|jvm-okhttp4| |modelMutable|Create mutable models| |false| +|moshiCodeGen|Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info.| |false| |packageName|Generated artifact package name.| |org.openapitools.client| |parcelizeModels|toggle "@Parcelize" for generated models| |null| |requestDateConverter|JVM-Option. Defines in how to handle date-time objects that are used for a request (as query or parameter)|
**toJson**
[DEFAULT] Date formater option using a json converter.
**toString**
Use the 'toString'-method of the date-time object to retrieve the related string representation.
|toJson| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index 72646d58cd7a..3ff2429d99d9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -61,6 +61,8 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen { public static final String REQUEST_DATE_CONVERTER = "requestDateConverter"; public static final String COLLECTION_TYPE = "collectionType"; + public static final String MOSHI_CODE_GEN = "moshiCodeGen"; + protected static final String VENDOR_EXTENSION_BASE_NAME_LITERAL = "x-base-name-literal"; protected String dateLibrary = DateLibrary.JAVA8.value; @@ -204,6 +206,8 @@ public KotlinClientCodegen() { cliOptions.add(CliOption.newBoolean(USE_RX_JAVA2, "Whether to use the RxJava2 adapter with the retrofit2 library.")); cliOptions.add(CliOption.newBoolean(USE_RX_JAVA3, "Whether to use the RxJava3 adapter with the retrofit2 library.")); cliOptions.add(CliOption.newBoolean(USE_COROUTINES, "Whether to use the Coroutines adapter with the retrofit2 library.")); + + cliOptions.add(CliOption.newBoolean(MOSHI_CODE_GEN, "Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info.")); } public CodegenType getTag() { From 686b2110e6e635d4bd24d00e143f4cbb1f2308b7 Mon Sep 17 00:00:00 2001 From: Kuzma <57258237+ksvirkou-hubspot@users.noreply.github.com> Date: Mon, 10 May 2021 20:52:58 +0300 Subject: [PATCH 101/186] [BUG] [typescript] Duplicate parameter's names (rename options to _options and config to _config) (#9428) * rename options to _options and config to _config * add samples --- .../resources/typescript/api/api.mustache | 8 +- .../typescript/types/ObservableAPI.mustache | 4 +- .../typescript/types/PromiseAPI.mustache | 4 +- .../typescript/builds/default/apis/PetApi.ts | 64 +++++++-------- .../builds/default/apis/StoreApi.ts | 26 +++--- .../typescript/builds/default/apis/UserApi.ts | 60 +++++++------- .../builds/default/types/ObservableAPI.ts | 80 +++++++++---------- .../builds/default/types/PromiseAPI.ts | 80 +++++++++---------- .../typescript/builds/deno/apis/PetApi.ts | 64 +++++++-------- .../typescript/builds/deno/apis/StoreApi.ts | 26 +++--- .../typescript/builds/deno/apis/UserApi.ts | 60 +++++++------- .../builds/deno/types/ObservableAPI.ts | 80 +++++++++---------- .../builds/deno/types/PromiseAPI.ts | 80 +++++++++---------- .../builds/inversify/apis/PetApi.ts | 64 +++++++-------- .../builds/inversify/apis/StoreApi.ts | 26 +++--- .../builds/inversify/apis/UserApi.ts | 60 +++++++------- .../builds/inversify/types/ObservableAPI.ts | 80 +++++++++---------- .../builds/inversify/types/PromiseAPI.ts | 80 +++++++++---------- .../typescript/builds/jquery/apis/PetApi.ts | 64 +++++++-------- .../typescript/builds/jquery/apis/StoreApi.ts | 26 +++--- .../typescript/builds/jquery/apis/UserApi.ts | 60 +++++++------- .../builds/jquery/types/ObservableAPI.ts | 80 +++++++++---------- .../builds/jquery/types/PromiseAPI.ts | 80 +++++++++---------- .../builds/object_params/apis/PetApi.ts | 64 +++++++-------- .../builds/object_params/apis/StoreApi.ts | 26 +++--- .../builds/object_params/apis/UserApi.ts | 60 +++++++------- .../object_params/types/ObservableAPI.ts | 80 +++++++++---------- .../builds/object_params/types/PromiseAPI.ts | 80 +++++++++---------- 28 files changed, 783 insertions(+), 783 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript/api/api.mustache b/modules/openapi-generator/src/main/resources/typescript/api/api.mustache index 95cb62e631fb..1d36944043b2 100644 --- a/modules/openapi-generator/src/main/resources/typescript/api/api.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/api/api.mustache @@ -39,8 +39,8 @@ export class {{classname}}RequestFactory extends BaseAPIRequestFactory { * @param {{paramName}} {{description}} {{/allParams}} */ - public async {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: Configuration): Promise { - let config = options || this.configuration; + public async {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}_options?: Configuration): Promise { + let _config = _options || this.configuration; {{#allParams}} {{#required}} @@ -57,7 +57,7 @@ export class {{classname}}RequestFactory extends BaseAPIRequestFactory { .replace('{' + '{{baseName}}' + '}', encodeURIComponent(String({{paramName}}))){{/pathParams}}; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.{{httpMethod}}); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.{{httpMethod}}); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -132,7 +132,7 @@ export class {{classname}}RequestFactory extends BaseAPIRequestFactory { {{/hasAuthMethods}} // Apply auth methods {{#authMethods}} - authMethod = config.authMethods["{{name}}"] + authMethod = _config.authMethods["{{name}}"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/modules/openapi-generator/src/main/resources/typescript/types/ObservableAPI.mustache b/modules/openapi-generator/src/main/resources/typescript/types/ObservableAPI.mustache index b001eba36b45..da871ce94dde 100644 --- a/modules/openapi-generator/src/main/resources/typescript/types/ObservableAPI.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/types/ObservableAPI.mustache @@ -62,8 +62,8 @@ export class Observable{{classname}} { * @param {{paramName}} {{description}} {{/allParams}} */ - public {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: Configuration): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> { - const requestContextPromise = this.requestFactory.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}options); + public {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}_options?: Configuration): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> { + const requestContextPromise = this.requestFactory.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); diff --git a/modules/openapi-generator/src/main/resources/typescript/types/PromiseAPI.mustache b/modules/openapi-generator/src/main/resources/typescript/types/PromiseAPI.mustache index 4014dec1e068..9d74dd2a746e 100644 --- a/modules/openapi-generator/src/main/resources/typescript/types/PromiseAPI.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/types/PromiseAPI.mustache @@ -52,8 +52,8 @@ export class Promise{{classname}} { * @param {{paramName}} {{description}} {{/allParams}} */ - public {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: Configuration): Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> { - const result = this.api.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}options); + public {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}_options?: Configuration): Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> { + const result = this.api.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}_options); return result.toPromise(); } diff --git a/samples/openapi3/client/petstore/typescript/builds/default/apis/PetApi.ts b/samples/openapi3/client/petstore/typescript/builds/default/apis/PetApi.ts index 12d711bd5b76..547125db4597 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/apis/PetApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/apis/PetApi.ts @@ -19,8 +19,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public async addPet(pet: Pet, options?: Configuration): Promise { - let config = options || this.configuration; + public async addPet(pet: Pet, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'pet' is not null or undefined if (pet === null || pet === undefined) { @@ -32,7 +32,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -57,7 +57,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -70,8 +70,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param petId Pet id to delete * @param apiKey */ - public async deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deletePet(petId: number, apiKey?: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -85,7 +85,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -100,7 +100,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -113,8 +113,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public async findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise { - let config = options || this.configuration; + public async findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'status' is not null or undefined if (status === null || status === undefined) { @@ -126,7 +126,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet/findByStatus'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -143,7 +143,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -156,8 +156,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Finds Pets by tags * @param tags Tags to filter by */ - public async findPetsByTags(tags: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async findPetsByTags(tags: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'tags' is not null or undefined if (tags === null || tags === undefined) { @@ -169,7 +169,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet/findByTags'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -186,7 +186,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -199,8 +199,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Find pet by ID * @param petId ID of pet to return */ - public async getPetById(petId: number, options?: Configuration): Promise { - let config = options || this.configuration; + public async getPetById(petId: number, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -213,7 +213,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -227,7 +227,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -239,8 +239,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public async updatePet(pet: Pet, options?: Configuration): Promise { - let config = options || this.configuration; + public async updatePet(pet: Pet, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'pet' is not null or undefined if (pet === null || pet === undefined) { @@ -252,7 +252,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -277,7 +277,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -291,8 +291,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param name Updated name of the pet * @param status Updated status of the pet */ - public async updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -307,7 +307,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -331,7 +331,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -345,8 +345,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public async uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { - let config = options || this.configuration; + public async uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -361,7 +361,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -385,7 +385,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/samples/openapi3/client/petstore/typescript/builds/default/apis/StoreApi.ts b/samples/openapi3/client/petstore/typescript/builds/default/apis/StoreApi.ts index 12be01326978..7780dd52f48c 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/apis/StoreApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/apis/StoreApi.ts @@ -19,8 +19,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public async deleteOrder(orderId: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deleteOrder(orderId: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'orderId' is not null or undefined if (orderId === null || orderId === undefined) { @@ -33,7 +33,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'orderId' + '}', encodeURIComponent(String(orderId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -54,14 +54,14 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public async getInventory(options?: Configuration): Promise { - let config = options || this.configuration; + public async getInventory(_options?: Configuration): Promise { + let _config = _options || this.configuration; // Path Params const localVarPath = '/store/inventory'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -75,7 +75,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -88,8 +88,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public async getOrderById(orderId: number, options?: Configuration): Promise { - let config = options || this.configuration; + public async getOrderById(orderId: number, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'orderId' is not null or undefined if (orderId === null || orderId === undefined) { @@ -102,7 +102,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'orderId' + '}', encodeURIComponent(String(orderId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -123,8 +123,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Place an order for a pet * @param order order placed for purchasing the pet */ - public async placeOrder(order: Order, options?: Configuration): Promise { - let config = options || this.configuration; + public async placeOrder(order: Order, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'order' is not null or undefined if (order === null || order === undefined) { @@ -136,7 +136,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/store/order'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params diff --git a/samples/openapi3/client/petstore/typescript/builds/default/apis/UserApi.ts b/samples/openapi3/client/petstore/typescript/builds/default/apis/UserApi.ts index 0717cb753040..e12b26fd31d9 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/apis/UserApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/apis/UserApi.ts @@ -19,8 +19,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Create user * @param user Created user object */ - public async createUser(user: User, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUser(user: User, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -32,7 +32,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -55,7 +55,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -67,8 +67,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Creates list of users with given input array * @param user List of user object */ - public async createUsersWithArrayInput(user: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUsersWithArrayInput(user: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -80,7 +80,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/createWithArray'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -103,7 +103,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -115,8 +115,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Creates list of users with given input array * @param user List of user object */ - public async createUsersWithListInput(user: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUsersWithListInput(user: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -128,7 +128,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/createWithList'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -151,7 +151,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -164,8 +164,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Delete user * @param username The name that needs to be deleted */ - public async deleteUser(username: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deleteUser(username: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -178,7 +178,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -192,7 +192,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -204,8 +204,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public async getUserByName(username: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async getUserByName(username: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -218,7 +218,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -240,8 +240,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * @param username The user name for login * @param password The password for login in clear text */ - public async loginUser(username: string, password: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async loginUser(username: string, password: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -259,7 +259,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/login'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -285,14 +285,14 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { /** * Logs out current logged in user session */ - public async logoutUser(options?: Configuration): Promise { - let config = options || this.configuration; + public async logoutUser(_options?: Configuration): Promise { + let _config = _options || this.configuration; // Path Params const localVarPath = '/user/logout'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -306,7 +306,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -320,8 +320,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * @param username name that need to be deleted * @param user Updated user object */ - public async updateUser(username: string, user: User, options?: Configuration): Promise { - let config = options || this.configuration; + public async updateUser(username: string, user: User, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -340,7 +340,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -363,7 +363,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/samples/openapi3/client/petstore/typescript/builds/default/types/ObservableAPI.ts b/samples/openapi3/client/petstore/typescript/builds/default/types/ObservableAPI.ts index 459fbc8e226e..488915f871ba 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/types/ObservableAPI.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/types/ObservableAPI.ts @@ -30,8 +30,8 @@ export class ObservablePetApi { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public addPet(pet: Pet, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.addPet(pet, options); + public addPet(pet: Pet, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.addPet(pet, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -54,8 +54,8 @@ export class ObservablePetApi { * @param petId Pet id to delete * @param apiKey */ - public deletePet(petId: number, apiKey?: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deletePet(petId, apiKey, options); + public deletePet(petId: number, apiKey?: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deletePet(petId, apiKey, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -78,8 +78,8 @@ export class ObservablePetApi { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Observable> { - const requestContextPromise = this.requestFactory.findPetsByStatus(status, options); + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Observable> { + const requestContextPromise = this.requestFactory.findPetsByStatus(status, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -102,8 +102,8 @@ export class ObservablePetApi { * Finds Pets by tags * @param tags Tags to filter by */ - public findPetsByTags(tags: Array, options?: Configuration): Observable> { - const requestContextPromise = this.requestFactory.findPetsByTags(tags, options); + public findPetsByTags(tags: Array, _options?: Configuration): Observable> { + const requestContextPromise = this.requestFactory.findPetsByTags(tags, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -126,8 +126,8 @@ export class ObservablePetApi { * Find pet by ID * @param petId ID of pet to return */ - public getPetById(petId: number, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getPetById(petId, options); + public getPetById(petId: number, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getPetById(petId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -149,8 +149,8 @@ export class ObservablePetApi { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public updatePet(pet: Pet, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updatePet(pet, options); + public updatePet(pet: Pet, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updatePet(pet, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -174,8 +174,8 @@ export class ObservablePetApi { * @param name Updated name of the pet * @param status Updated status of the pet */ - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updatePetWithForm(petId, name, status, options); + public updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updatePetWithForm(petId, name, status, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -199,8 +199,8 @@ export class ObservablePetApi { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.uploadFile(petId, additionalMetadata, file, options); + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.uploadFile(petId, additionalMetadata, file, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -241,8 +241,8 @@ export class ObservableStoreApi { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public deleteOrder(orderId: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deleteOrder(orderId, options); + public deleteOrder(orderId: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deleteOrder(orderId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -264,8 +264,8 @@ export class ObservableStoreApi { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public getInventory(options?: Configuration): Observable<{ [key: string]: number; }> { - const requestContextPromise = this.requestFactory.getInventory(options); + public getInventory(_options?: Configuration): Observable<{ [key: string]: number; }> { + const requestContextPromise = this.requestFactory.getInventory(_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -288,8 +288,8 @@ export class ObservableStoreApi { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public getOrderById(orderId: number, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getOrderById(orderId, options); + public getOrderById(orderId: number, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getOrderById(orderId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -311,8 +311,8 @@ export class ObservableStoreApi { * Place an order for a pet * @param order order placed for purchasing the pet */ - public placeOrder(order: Order, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.placeOrder(order, options); + public placeOrder(order: Order, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.placeOrder(order, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -353,8 +353,8 @@ export class ObservableUserApi { * Create user * @param user Created user object */ - public createUser(user: User, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUser(user, options); + public createUser(user: User, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUser(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -376,8 +376,8 @@ export class ObservableUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithArrayInput(user: Array, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUsersWithArrayInput(user, options); + public createUsersWithArrayInput(user: Array, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUsersWithArrayInput(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -399,8 +399,8 @@ export class ObservableUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithListInput(user: Array, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUsersWithListInput(user, options); + public createUsersWithListInput(user: Array, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUsersWithListInput(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -423,8 +423,8 @@ export class ObservableUserApi { * Delete user * @param username The name that needs to be deleted */ - public deleteUser(username: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deleteUser(username, options); + public deleteUser(username: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deleteUser(username, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -446,8 +446,8 @@ export class ObservableUserApi { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public getUserByName(username: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getUserByName(username, options); + public getUserByName(username: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getUserByName(username, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -470,8 +470,8 @@ export class ObservableUserApi { * @param username The user name for login * @param password The password for login in clear text */ - public loginUser(username: string, password: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.loginUser(username, password, options); + public loginUser(username: string, password: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.loginUser(username, password, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -492,8 +492,8 @@ export class ObservableUserApi { /** * Logs out current logged in user session */ - public logoutUser(options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.logoutUser(options); + public logoutUser(_options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.logoutUser(_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -517,8 +517,8 @@ export class ObservableUserApi { * @param username name that need to be deleted * @param user Updated user object */ - public updateUser(username: string, user: User, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updateUser(username, user, options); + public updateUser(username: string, user: User, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updateUser(username, user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); diff --git a/samples/openapi3/client/petstore/typescript/builds/default/types/PromiseAPI.ts b/samples/openapi3/client/petstore/typescript/builds/default/types/PromiseAPI.ts index 2129b103e7e7..ac44ba7a13b2 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/types/PromiseAPI.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/types/PromiseAPI.ts @@ -26,8 +26,8 @@ export class PromisePetApi { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public addPet(pet: Pet, options?: Configuration): Promise { - const result = this.api.addPet(pet, options); + public addPet(pet: Pet, _options?: Configuration): Promise { + const result = this.api.addPet(pet, _options); return result.toPromise(); } @@ -36,8 +36,8 @@ export class PromisePetApi { * @param petId Pet id to delete * @param apiKey */ - public deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { - const result = this.api.deletePet(petId, apiKey, options); + public deletePet(petId: number, apiKey?: string, _options?: Configuration): Promise { + const result = this.api.deletePet(petId, apiKey, _options); return result.toPromise(); } @@ -46,8 +46,8 @@ export class PromisePetApi { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise> { - const result = this.api.findPetsByStatus(status, options); + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Promise> { + const result = this.api.findPetsByStatus(status, _options); return result.toPromise(); } @@ -56,8 +56,8 @@ export class PromisePetApi { * Finds Pets by tags * @param tags Tags to filter by */ - public findPetsByTags(tags: Array, options?: Configuration): Promise> { - const result = this.api.findPetsByTags(tags, options); + public findPetsByTags(tags: Array, _options?: Configuration): Promise> { + const result = this.api.findPetsByTags(tags, _options); return result.toPromise(); } @@ -66,8 +66,8 @@ export class PromisePetApi { * Find pet by ID * @param petId ID of pet to return */ - public getPetById(petId: number, options?: Configuration): Promise { - const result = this.api.getPetById(petId, options); + public getPetById(petId: number, _options?: Configuration): Promise { + const result = this.api.getPetById(petId, _options); return result.toPromise(); } @@ -75,8 +75,8 @@ export class PromisePetApi { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public updatePet(pet: Pet, options?: Configuration): Promise { - const result = this.api.updatePet(pet, options); + public updatePet(pet: Pet, _options?: Configuration): Promise { + const result = this.api.updatePet(pet, _options); return result.toPromise(); } @@ -86,8 +86,8 @@ export class PromisePetApi { * @param name Updated name of the pet * @param status Updated status of the pet */ - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { - const result = this.api.updatePetWithForm(petId, name, status, options); + public updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Promise { + const result = this.api.updatePetWithForm(petId, name, status, _options); return result.toPromise(); } @@ -97,8 +97,8 @@ export class PromisePetApi { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { - const result = this.api.uploadFile(petId, additionalMetadata, file, options); + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Promise { + const result = this.api.uploadFile(petId, additionalMetadata, file, _options); return result.toPromise(); } @@ -126,8 +126,8 @@ export class PromiseStoreApi { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public deleteOrder(orderId: string, options?: Configuration): Promise { - const result = this.api.deleteOrder(orderId, options); + public deleteOrder(orderId: string, _options?: Configuration): Promise { + const result = this.api.deleteOrder(orderId, _options); return result.toPromise(); } @@ -135,8 +135,8 @@ export class PromiseStoreApi { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public getInventory(options?: Configuration): Promise<{ [key: string]: number; }> { - const result = this.api.getInventory(options); + public getInventory(_options?: Configuration): Promise<{ [key: string]: number; }> { + const result = this.api.getInventory(_options); return result.toPromise(); } @@ -145,8 +145,8 @@ export class PromiseStoreApi { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public getOrderById(orderId: number, options?: Configuration): Promise { - const result = this.api.getOrderById(orderId, options); + public getOrderById(orderId: number, _options?: Configuration): Promise { + const result = this.api.getOrderById(orderId, _options); return result.toPromise(); } @@ -154,8 +154,8 @@ export class PromiseStoreApi { * Place an order for a pet * @param order order placed for purchasing the pet */ - public placeOrder(order: Order, options?: Configuration): Promise { - const result = this.api.placeOrder(order, options); + public placeOrder(order: Order, _options?: Configuration): Promise { + const result = this.api.placeOrder(order, _options); return result.toPromise(); } @@ -183,8 +183,8 @@ export class PromiseUserApi { * Create user * @param user Created user object */ - public createUser(user: User, options?: Configuration): Promise { - const result = this.api.createUser(user, options); + public createUser(user: User, _options?: Configuration): Promise { + const result = this.api.createUser(user, _options); return result.toPromise(); } @@ -192,8 +192,8 @@ export class PromiseUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithArrayInput(user: Array, options?: Configuration): Promise { - const result = this.api.createUsersWithArrayInput(user, options); + public createUsersWithArrayInput(user: Array, _options?: Configuration): Promise { + const result = this.api.createUsersWithArrayInput(user, _options); return result.toPromise(); } @@ -201,8 +201,8 @@ export class PromiseUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithListInput(user: Array, options?: Configuration): Promise { - const result = this.api.createUsersWithListInput(user, options); + public createUsersWithListInput(user: Array, _options?: Configuration): Promise { + const result = this.api.createUsersWithListInput(user, _options); return result.toPromise(); } @@ -211,8 +211,8 @@ export class PromiseUserApi { * Delete user * @param username The name that needs to be deleted */ - public deleteUser(username: string, options?: Configuration): Promise { - const result = this.api.deleteUser(username, options); + public deleteUser(username: string, _options?: Configuration): Promise { + const result = this.api.deleteUser(username, _options); return result.toPromise(); } @@ -220,8 +220,8 @@ export class PromiseUserApi { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public getUserByName(username: string, options?: Configuration): Promise { - const result = this.api.getUserByName(username, options); + public getUserByName(username: string, _options?: Configuration): Promise { + const result = this.api.getUserByName(username, _options); return result.toPromise(); } @@ -230,16 +230,16 @@ export class PromiseUserApi { * @param username The user name for login * @param password The password for login in clear text */ - public loginUser(username: string, password: string, options?: Configuration): Promise { - const result = this.api.loginUser(username, password, options); + public loginUser(username: string, password: string, _options?: Configuration): Promise { + const result = this.api.loginUser(username, password, _options); return result.toPromise(); } /** * Logs out current logged in user session */ - public logoutUser(options?: Configuration): Promise { - const result = this.api.logoutUser(options); + public logoutUser(_options?: Configuration): Promise { + const result = this.api.logoutUser(_options); return result.toPromise(); } @@ -249,8 +249,8 @@ export class PromiseUserApi { * @param username name that need to be deleted * @param user Updated user object */ - public updateUser(username: string, user: User, options?: Configuration): Promise { - const result = this.api.updateUser(username, user, options); + public updateUser(username: string, user: User, _options?: Configuration): Promise { + const result = this.api.updateUser(username, user, _options); return result.toPromise(); } diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/apis/PetApi.ts b/samples/openapi3/client/petstore/typescript/builds/deno/apis/PetApi.ts index 552716b7cb33..cb9a2dfd3e6d 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/apis/PetApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/apis/PetApi.ts @@ -18,8 +18,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public async addPet(pet: Pet, options?: Configuration): Promise { - let config = options || this.configuration; + public async addPet(pet: Pet, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'pet' is not null or undefined if (pet === null || pet === undefined) { @@ -31,7 +31,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -56,7 +56,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -69,8 +69,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param petId Pet id to delete * @param apiKey */ - public async deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deletePet(petId: number, apiKey?: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -84,7 +84,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -99,7 +99,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -112,8 +112,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public async findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise { - let config = options || this.configuration; + public async findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'status' is not null or undefined if (status === null || status === undefined) { @@ -125,7 +125,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet/findByStatus'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -142,7 +142,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -155,8 +155,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Finds Pets by tags * @param tags Tags to filter by */ - public async findPetsByTags(tags: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async findPetsByTags(tags: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'tags' is not null or undefined if (tags === null || tags === undefined) { @@ -168,7 +168,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet/findByTags'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -185,7 +185,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -198,8 +198,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Find pet by ID * @param petId ID of pet to return */ - public async getPetById(petId: number, options?: Configuration): Promise { - let config = options || this.configuration; + public async getPetById(petId: number, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -212,7 +212,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -226,7 +226,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -238,8 +238,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public async updatePet(pet: Pet, options?: Configuration): Promise { - let config = options || this.configuration; + public async updatePet(pet: Pet, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'pet' is not null or undefined if (pet === null || pet === undefined) { @@ -251,7 +251,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -276,7 +276,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -290,8 +290,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param name Updated name of the pet * @param status Updated status of the pet */ - public async updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -306,7 +306,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -330,7 +330,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -344,8 +344,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public async uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { - let config = options || this.configuration; + public async uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -360,7 +360,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -384,7 +384,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/apis/StoreApi.ts b/samples/openapi3/client/petstore/typescript/builds/deno/apis/StoreApi.ts index f677c988a107..2cedbd705a65 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/apis/StoreApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/apis/StoreApi.ts @@ -18,8 +18,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public async deleteOrder(orderId: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deleteOrder(orderId: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'orderId' is not null or undefined if (orderId === null || orderId === undefined) { @@ -32,7 +32,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'orderId' + '}', encodeURIComponent(String(orderId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -53,14 +53,14 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public async getInventory(options?: Configuration): Promise { - let config = options || this.configuration; + public async getInventory(_options?: Configuration): Promise { + let _config = _options || this.configuration; // Path Params const localVarPath = '/store/inventory'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -74,7 +74,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -87,8 +87,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public async getOrderById(orderId: number, options?: Configuration): Promise { - let config = options || this.configuration; + public async getOrderById(orderId: number, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'orderId' is not null or undefined if (orderId === null || orderId === undefined) { @@ -101,7 +101,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'orderId' + '}', encodeURIComponent(String(orderId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -122,8 +122,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Place an order for a pet * @param order order placed for purchasing the pet */ - public async placeOrder(order: Order, options?: Configuration): Promise { - let config = options || this.configuration; + public async placeOrder(order: Order, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'order' is not null or undefined if (order === null || order === undefined) { @@ -135,7 +135,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/store/order'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/apis/UserApi.ts b/samples/openapi3/client/petstore/typescript/builds/deno/apis/UserApi.ts index 3757165b71ae..7972e1605834 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/apis/UserApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/apis/UserApi.ts @@ -18,8 +18,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Create user * @param user Created user object */ - public async createUser(user: User, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUser(user: User, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -31,7 +31,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -54,7 +54,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -66,8 +66,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Creates list of users with given input array * @param user List of user object */ - public async createUsersWithArrayInput(user: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUsersWithArrayInput(user: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -79,7 +79,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/createWithArray'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -102,7 +102,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -114,8 +114,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Creates list of users with given input array * @param user List of user object */ - public async createUsersWithListInput(user: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUsersWithListInput(user: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -127,7 +127,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/createWithList'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -150,7 +150,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -163,8 +163,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Delete user * @param username The name that needs to be deleted */ - public async deleteUser(username: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deleteUser(username: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -177,7 +177,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -191,7 +191,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -203,8 +203,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public async getUserByName(username: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async getUserByName(username: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -217,7 +217,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -239,8 +239,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * @param username The user name for login * @param password The password for login in clear text */ - public async loginUser(username: string, password: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async loginUser(username: string, password: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -258,7 +258,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/login'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -284,14 +284,14 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { /** * Logs out current logged in user session */ - public async logoutUser(options?: Configuration): Promise { - let config = options || this.configuration; + public async logoutUser(_options?: Configuration): Promise { + let _config = _options || this.configuration; // Path Params const localVarPath = '/user/logout'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -305,7 +305,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -319,8 +319,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * @param username name that need to be deleted * @param user Updated user object */ - public async updateUser(username: string, user: User, options?: Configuration): Promise { - let config = options || this.configuration; + public async updateUser(username: string, user: User, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -339,7 +339,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -362,7 +362,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/types/ObservableAPI.ts b/samples/openapi3/client/petstore/typescript/builds/deno/types/ObservableAPI.ts index 318c8a3e1bfa..cde73c04cc08 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/types/ObservableAPI.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/types/ObservableAPI.ts @@ -30,8 +30,8 @@ export class ObservablePetApi { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public addPet(pet: Pet, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.addPet(pet, options); + public addPet(pet: Pet, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.addPet(pet, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -54,8 +54,8 @@ export class ObservablePetApi { * @param petId Pet id to delete * @param apiKey */ - public deletePet(petId: number, apiKey?: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deletePet(petId, apiKey, options); + public deletePet(petId: number, apiKey?: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deletePet(petId, apiKey, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -78,8 +78,8 @@ export class ObservablePetApi { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Observable> { - const requestContextPromise = this.requestFactory.findPetsByStatus(status, options); + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Observable> { + const requestContextPromise = this.requestFactory.findPetsByStatus(status, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -102,8 +102,8 @@ export class ObservablePetApi { * Finds Pets by tags * @param tags Tags to filter by */ - public findPetsByTags(tags: Array, options?: Configuration): Observable> { - const requestContextPromise = this.requestFactory.findPetsByTags(tags, options); + public findPetsByTags(tags: Array, _options?: Configuration): Observable> { + const requestContextPromise = this.requestFactory.findPetsByTags(tags, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -126,8 +126,8 @@ export class ObservablePetApi { * Find pet by ID * @param petId ID of pet to return */ - public getPetById(petId: number, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getPetById(petId, options); + public getPetById(petId: number, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getPetById(petId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -149,8 +149,8 @@ export class ObservablePetApi { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public updatePet(pet: Pet, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updatePet(pet, options); + public updatePet(pet: Pet, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updatePet(pet, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -174,8 +174,8 @@ export class ObservablePetApi { * @param name Updated name of the pet * @param status Updated status of the pet */ - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updatePetWithForm(petId, name, status, options); + public updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updatePetWithForm(petId, name, status, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -199,8 +199,8 @@ export class ObservablePetApi { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.uploadFile(petId, additionalMetadata, file, options); + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.uploadFile(petId, additionalMetadata, file, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -241,8 +241,8 @@ export class ObservableStoreApi { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public deleteOrder(orderId: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deleteOrder(orderId, options); + public deleteOrder(orderId: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deleteOrder(orderId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -264,8 +264,8 @@ export class ObservableStoreApi { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public getInventory(options?: Configuration): Observable<{ [key: string]: number; }> { - const requestContextPromise = this.requestFactory.getInventory(options); + public getInventory(_options?: Configuration): Observable<{ [key: string]: number; }> { + const requestContextPromise = this.requestFactory.getInventory(_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -288,8 +288,8 @@ export class ObservableStoreApi { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public getOrderById(orderId: number, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getOrderById(orderId, options); + public getOrderById(orderId: number, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getOrderById(orderId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -311,8 +311,8 @@ export class ObservableStoreApi { * Place an order for a pet * @param order order placed for purchasing the pet */ - public placeOrder(order: Order, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.placeOrder(order, options); + public placeOrder(order: Order, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.placeOrder(order, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -353,8 +353,8 @@ export class ObservableUserApi { * Create user * @param user Created user object */ - public createUser(user: User, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUser(user, options); + public createUser(user: User, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUser(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -376,8 +376,8 @@ export class ObservableUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithArrayInput(user: Array, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUsersWithArrayInput(user, options); + public createUsersWithArrayInput(user: Array, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUsersWithArrayInput(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -399,8 +399,8 @@ export class ObservableUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithListInput(user: Array, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUsersWithListInput(user, options); + public createUsersWithListInput(user: Array, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUsersWithListInput(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -423,8 +423,8 @@ export class ObservableUserApi { * Delete user * @param username The name that needs to be deleted */ - public deleteUser(username: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deleteUser(username, options); + public deleteUser(username: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deleteUser(username, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -446,8 +446,8 @@ export class ObservableUserApi { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public getUserByName(username: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getUserByName(username, options); + public getUserByName(username: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getUserByName(username, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -470,8 +470,8 @@ export class ObservableUserApi { * @param username The user name for login * @param password The password for login in clear text */ - public loginUser(username: string, password: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.loginUser(username, password, options); + public loginUser(username: string, password: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.loginUser(username, password, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -492,8 +492,8 @@ export class ObservableUserApi { /** * Logs out current logged in user session */ - public logoutUser(options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.logoutUser(options); + public logoutUser(_options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.logoutUser(_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -517,8 +517,8 @@ export class ObservableUserApi { * @param username name that need to be deleted * @param user Updated user object */ - public updateUser(username: string, user: User, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updateUser(username, user, options); + public updateUser(username: string, user: User, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updateUser(username, user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/types/PromiseAPI.ts b/samples/openapi3/client/petstore/typescript/builds/deno/types/PromiseAPI.ts index 5e2f7df97356..76db56cbc8bd 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/types/PromiseAPI.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/types/PromiseAPI.ts @@ -26,8 +26,8 @@ export class PromisePetApi { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public addPet(pet: Pet, options?: Configuration): Promise { - const result = this.api.addPet(pet, options); + public addPet(pet: Pet, _options?: Configuration): Promise { + const result = this.api.addPet(pet, _options); return result.toPromise(); } @@ -36,8 +36,8 @@ export class PromisePetApi { * @param petId Pet id to delete * @param apiKey */ - public deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { - const result = this.api.deletePet(petId, apiKey, options); + public deletePet(petId: number, apiKey?: string, _options?: Configuration): Promise { + const result = this.api.deletePet(petId, apiKey, _options); return result.toPromise(); } @@ -46,8 +46,8 @@ export class PromisePetApi { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise> { - const result = this.api.findPetsByStatus(status, options); + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Promise> { + const result = this.api.findPetsByStatus(status, _options); return result.toPromise(); } @@ -56,8 +56,8 @@ export class PromisePetApi { * Finds Pets by tags * @param tags Tags to filter by */ - public findPetsByTags(tags: Array, options?: Configuration): Promise> { - const result = this.api.findPetsByTags(tags, options); + public findPetsByTags(tags: Array, _options?: Configuration): Promise> { + const result = this.api.findPetsByTags(tags, _options); return result.toPromise(); } @@ -66,8 +66,8 @@ export class PromisePetApi { * Find pet by ID * @param petId ID of pet to return */ - public getPetById(petId: number, options?: Configuration): Promise { - const result = this.api.getPetById(petId, options); + public getPetById(petId: number, _options?: Configuration): Promise { + const result = this.api.getPetById(petId, _options); return result.toPromise(); } @@ -75,8 +75,8 @@ export class PromisePetApi { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public updatePet(pet: Pet, options?: Configuration): Promise { - const result = this.api.updatePet(pet, options); + public updatePet(pet: Pet, _options?: Configuration): Promise { + const result = this.api.updatePet(pet, _options); return result.toPromise(); } @@ -86,8 +86,8 @@ export class PromisePetApi { * @param name Updated name of the pet * @param status Updated status of the pet */ - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { - const result = this.api.updatePetWithForm(petId, name, status, options); + public updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Promise { + const result = this.api.updatePetWithForm(petId, name, status, _options); return result.toPromise(); } @@ -97,8 +97,8 @@ export class PromisePetApi { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { - const result = this.api.uploadFile(petId, additionalMetadata, file, options); + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Promise { + const result = this.api.uploadFile(petId, additionalMetadata, file, _options); return result.toPromise(); } @@ -126,8 +126,8 @@ export class PromiseStoreApi { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public deleteOrder(orderId: string, options?: Configuration): Promise { - const result = this.api.deleteOrder(orderId, options); + public deleteOrder(orderId: string, _options?: Configuration): Promise { + const result = this.api.deleteOrder(orderId, _options); return result.toPromise(); } @@ -135,8 +135,8 @@ export class PromiseStoreApi { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public getInventory(options?: Configuration): Promise<{ [key: string]: number; }> { - const result = this.api.getInventory(options); + public getInventory(_options?: Configuration): Promise<{ [key: string]: number; }> { + const result = this.api.getInventory(_options); return result.toPromise(); } @@ -145,8 +145,8 @@ export class PromiseStoreApi { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public getOrderById(orderId: number, options?: Configuration): Promise { - const result = this.api.getOrderById(orderId, options); + public getOrderById(orderId: number, _options?: Configuration): Promise { + const result = this.api.getOrderById(orderId, _options); return result.toPromise(); } @@ -154,8 +154,8 @@ export class PromiseStoreApi { * Place an order for a pet * @param order order placed for purchasing the pet */ - public placeOrder(order: Order, options?: Configuration): Promise { - const result = this.api.placeOrder(order, options); + public placeOrder(order: Order, _options?: Configuration): Promise { + const result = this.api.placeOrder(order, _options); return result.toPromise(); } @@ -183,8 +183,8 @@ export class PromiseUserApi { * Create user * @param user Created user object */ - public createUser(user: User, options?: Configuration): Promise { - const result = this.api.createUser(user, options); + public createUser(user: User, _options?: Configuration): Promise { + const result = this.api.createUser(user, _options); return result.toPromise(); } @@ -192,8 +192,8 @@ export class PromiseUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithArrayInput(user: Array, options?: Configuration): Promise { - const result = this.api.createUsersWithArrayInput(user, options); + public createUsersWithArrayInput(user: Array, _options?: Configuration): Promise { + const result = this.api.createUsersWithArrayInput(user, _options); return result.toPromise(); } @@ -201,8 +201,8 @@ export class PromiseUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithListInput(user: Array, options?: Configuration): Promise { - const result = this.api.createUsersWithListInput(user, options); + public createUsersWithListInput(user: Array, _options?: Configuration): Promise { + const result = this.api.createUsersWithListInput(user, _options); return result.toPromise(); } @@ -211,8 +211,8 @@ export class PromiseUserApi { * Delete user * @param username The name that needs to be deleted */ - public deleteUser(username: string, options?: Configuration): Promise { - const result = this.api.deleteUser(username, options); + public deleteUser(username: string, _options?: Configuration): Promise { + const result = this.api.deleteUser(username, _options); return result.toPromise(); } @@ -220,8 +220,8 @@ export class PromiseUserApi { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public getUserByName(username: string, options?: Configuration): Promise { - const result = this.api.getUserByName(username, options); + public getUserByName(username: string, _options?: Configuration): Promise { + const result = this.api.getUserByName(username, _options); return result.toPromise(); } @@ -230,16 +230,16 @@ export class PromiseUserApi { * @param username The user name for login * @param password The password for login in clear text */ - public loginUser(username: string, password: string, options?: Configuration): Promise { - const result = this.api.loginUser(username, password, options); + public loginUser(username: string, password: string, _options?: Configuration): Promise { + const result = this.api.loginUser(username, password, _options); return result.toPromise(); } /** * Logs out current logged in user session */ - public logoutUser(options?: Configuration): Promise { - const result = this.api.logoutUser(options); + public logoutUser(_options?: Configuration): Promise { + const result = this.api.logoutUser(_options); return result.toPromise(); } @@ -249,8 +249,8 @@ export class PromiseUserApi { * @param username name that need to be deleted * @param user Updated user object */ - public updateUser(username: string, user: User, options?: Configuration): Promise { - const result = this.api.updateUser(username, user, options); + public updateUser(username: string, user: User, _options?: Configuration): Promise { + const result = this.api.updateUser(username, user, _options); return result.toPromise(); } diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/PetApi.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/PetApi.ts index 2225d19dbb9d..a127fccfbc21 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/PetApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/PetApi.ts @@ -21,8 +21,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public async addPet(pet: Pet, options?: Configuration): Promise { - let config = options || this.configuration; + public async addPet(pet: Pet, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'pet' is not null or undefined if (pet === null || pet === undefined) { @@ -34,7 +34,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -59,7 +59,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -72,8 +72,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param petId Pet id to delete * @param apiKey */ - public async deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deletePet(petId: number, apiKey?: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -87,7 +87,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -102,7 +102,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -115,8 +115,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public async findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise { - let config = options || this.configuration; + public async findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'status' is not null or undefined if (status === null || status === undefined) { @@ -128,7 +128,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet/findByStatus'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -145,7 +145,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -158,8 +158,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Finds Pets by tags * @param tags Tags to filter by */ - public async findPetsByTags(tags: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async findPetsByTags(tags: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'tags' is not null or undefined if (tags === null || tags === undefined) { @@ -171,7 +171,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet/findByTags'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -188,7 +188,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -201,8 +201,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Find pet by ID * @param petId ID of pet to return */ - public async getPetById(petId: number, options?: Configuration): Promise { - let config = options || this.configuration; + public async getPetById(petId: number, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -215,7 +215,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -229,7 +229,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -241,8 +241,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public async updatePet(pet: Pet, options?: Configuration): Promise { - let config = options || this.configuration; + public async updatePet(pet: Pet, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'pet' is not null or undefined if (pet === null || pet === undefined) { @@ -254,7 +254,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -279,7 +279,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -293,8 +293,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param name Updated name of the pet * @param status Updated status of the pet */ - public async updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -309,7 +309,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -333,7 +333,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -347,8 +347,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public async uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { - let config = options || this.configuration; + public async uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -363,7 +363,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -387,7 +387,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/StoreApi.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/StoreApi.ts index 836e9ba02618..3607b8dee6ec 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/StoreApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/StoreApi.ts @@ -21,8 +21,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public async deleteOrder(orderId: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deleteOrder(orderId: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'orderId' is not null or undefined if (orderId === null || orderId === undefined) { @@ -35,7 +35,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'orderId' + '}', encodeURIComponent(String(orderId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -56,14 +56,14 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public async getInventory(options?: Configuration): Promise { - let config = options || this.configuration; + public async getInventory(_options?: Configuration): Promise { + let _config = _options || this.configuration; // Path Params const localVarPath = '/store/inventory'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -77,7 +77,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -90,8 +90,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public async getOrderById(orderId: number, options?: Configuration): Promise { - let config = options || this.configuration; + public async getOrderById(orderId: number, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'orderId' is not null or undefined if (orderId === null || orderId === undefined) { @@ -104,7 +104,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'orderId' + '}', encodeURIComponent(String(orderId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -125,8 +125,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Place an order for a pet * @param order order placed for purchasing the pet */ - public async placeOrder(order: Order, options?: Configuration): Promise { - let config = options || this.configuration; + public async placeOrder(order: Order, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'order' is not null or undefined if (order === null || order === undefined) { @@ -138,7 +138,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/store/order'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/UserApi.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/UserApi.ts index 5c68288c3811..cc4580ef34c9 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/apis/UserApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/apis/UserApi.ts @@ -21,8 +21,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Create user * @param user Created user object */ - public async createUser(user: User, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUser(user: User, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -34,7 +34,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -57,7 +57,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -69,8 +69,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Creates list of users with given input array * @param user List of user object */ - public async createUsersWithArrayInput(user: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUsersWithArrayInput(user: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -82,7 +82,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/createWithArray'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -105,7 +105,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -117,8 +117,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Creates list of users with given input array * @param user List of user object */ - public async createUsersWithListInput(user: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUsersWithListInput(user: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -130,7 +130,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/createWithList'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -153,7 +153,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -166,8 +166,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Delete user * @param username The name that needs to be deleted */ - public async deleteUser(username: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deleteUser(username: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -180,7 +180,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -194,7 +194,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -206,8 +206,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public async getUserByName(username: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async getUserByName(username: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -220,7 +220,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -242,8 +242,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * @param username The user name for login * @param password The password for login in clear text */ - public async loginUser(username: string, password: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async loginUser(username: string, password: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -261,7 +261,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/login'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -287,14 +287,14 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { /** * Logs out current logged in user session */ - public async logoutUser(options?: Configuration): Promise { - let config = options || this.configuration; + public async logoutUser(_options?: Configuration): Promise { + let _config = _options || this.configuration; // Path Params const localVarPath = '/user/logout'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -308,7 +308,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -322,8 +322,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * @param username name that need to be deleted * @param user Updated user object */ - public async updateUser(username: string, user: User, options?: Configuration): Promise { - let config = options || this.configuration; + public async updateUser(username: string, user: User, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -342,7 +342,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -365,7 +365,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/types/ObservableAPI.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/types/ObservableAPI.ts index 555e2ce7273f..6ed7a67b5cbb 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/types/ObservableAPI.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/types/ObservableAPI.ts @@ -35,8 +35,8 @@ export class ObservablePetApi { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public addPet(pet: Pet, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.addPet(pet, options); + public addPet(pet: Pet, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.addPet(pet, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -59,8 +59,8 @@ export class ObservablePetApi { * @param petId Pet id to delete * @param apiKey */ - public deletePet(petId: number, apiKey?: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deletePet(petId, apiKey, options); + public deletePet(petId: number, apiKey?: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deletePet(petId, apiKey, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -83,8 +83,8 @@ export class ObservablePetApi { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Observable> { - const requestContextPromise = this.requestFactory.findPetsByStatus(status, options); + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Observable> { + const requestContextPromise = this.requestFactory.findPetsByStatus(status, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -107,8 +107,8 @@ export class ObservablePetApi { * Finds Pets by tags * @param tags Tags to filter by */ - public findPetsByTags(tags: Array, options?: Configuration): Observable> { - const requestContextPromise = this.requestFactory.findPetsByTags(tags, options); + public findPetsByTags(tags: Array, _options?: Configuration): Observable> { + const requestContextPromise = this.requestFactory.findPetsByTags(tags, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -131,8 +131,8 @@ export class ObservablePetApi { * Find pet by ID * @param petId ID of pet to return */ - public getPetById(petId: number, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getPetById(petId, options); + public getPetById(petId: number, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getPetById(petId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -154,8 +154,8 @@ export class ObservablePetApi { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public updatePet(pet: Pet, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updatePet(pet, options); + public updatePet(pet: Pet, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updatePet(pet, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -179,8 +179,8 @@ export class ObservablePetApi { * @param name Updated name of the pet * @param status Updated status of the pet */ - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updatePetWithForm(petId, name, status, options); + public updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updatePetWithForm(petId, name, status, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -204,8 +204,8 @@ export class ObservablePetApi { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.uploadFile(petId, additionalMetadata, file, options); + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.uploadFile(petId, additionalMetadata, file, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -249,8 +249,8 @@ export class ObservableStoreApi { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public deleteOrder(orderId: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deleteOrder(orderId, options); + public deleteOrder(orderId: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deleteOrder(orderId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -272,8 +272,8 @@ export class ObservableStoreApi { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public getInventory(options?: Configuration): Observable<{ [key: string]: number; }> { - const requestContextPromise = this.requestFactory.getInventory(options); + public getInventory(_options?: Configuration): Observable<{ [key: string]: number; }> { + const requestContextPromise = this.requestFactory.getInventory(_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -296,8 +296,8 @@ export class ObservableStoreApi { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public getOrderById(orderId: number, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getOrderById(orderId, options); + public getOrderById(orderId: number, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getOrderById(orderId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -319,8 +319,8 @@ export class ObservableStoreApi { * Place an order for a pet * @param order order placed for purchasing the pet */ - public placeOrder(order: Order, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.placeOrder(order, options); + public placeOrder(order: Order, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.placeOrder(order, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -364,8 +364,8 @@ export class ObservableUserApi { * Create user * @param user Created user object */ - public createUser(user: User, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUser(user, options); + public createUser(user: User, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUser(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -387,8 +387,8 @@ export class ObservableUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithArrayInput(user: Array, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUsersWithArrayInput(user, options); + public createUsersWithArrayInput(user: Array, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUsersWithArrayInput(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -410,8 +410,8 @@ export class ObservableUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithListInput(user: Array, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUsersWithListInput(user, options); + public createUsersWithListInput(user: Array, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUsersWithListInput(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -434,8 +434,8 @@ export class ObservableUserApi { * Delete user * @param username The name that needs to be deleted */ - public deleteUser(username: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deleteUser(username, options); + public deleteUser(username: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deleteUser(username, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -457,8 +457,8 @@ export class ObservableUserApi { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public getUserByName(username: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getUserByName(username, options); + public getUserByName(username: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getUserByName(username, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -481,8 +481,8 @@ export class ObservableUserApi { * @param username The user name for login * @param password The password for login in clear text */ - public loginUser(username: string, password: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.loginUser(username, password, options); + public loginUser(username: string, password: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.loginUser(username, password, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -503,8 +503,8 @@ export class ObservableUserApi { /** * Logs out current logged in user session */ - public logoutUser(options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.logoutUser(options); + public logoutUser(_options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.logoutUser(_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -528,8 +528,8 @@ export class ObservableUserApi { * @param username name that need to be deleted * @param user Updated user object */ - public updateUser(username: string, user: User, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updateUser(username, user, options); + public updateUser(username: string, user: User, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updateUser(username, user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/types/PromiseAPI.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/types/PromiseAPI.ts index f58fad865e13..a6135ddbd244 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/types/PromiseAPI.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/types/PromiseAPI.ts @@ -31,8 +31,8 @@ export class PromisePetApi { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public addPet(pet: Pet, options?: Configuration): Promise { - const result = this.api.addPet(pet, options); + public addPet(pet: Pet, _options?: Configuration): Promise { + const result = this.api.addPet(pet, _options); return result.toPromise(); } @@ -41,8 +41,8 @@ export class PromisePetApi { * @param petId Pet id to delete * @param apiKey */ - public deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { - const result = this.api.deletePet(petId, apiKey, options); + public deletePet(petId: number, apiKey?: string, _options?: Configuration): Promise { + const result = this.api.deletePet(petId, apiKey, _options); return result.toPromise(); } @@ -51,8 +51,8 @@ export class PromisePetApi { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise> { - const result = this.api.findPetsByStatus(status, options); + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Promise> { + const result = this.api.findPetsByStatus(status, _options); return result.toPromise(); } @@ -61,8 +61,8 @@ export class PromisePetApi { * Finds Pets by tags * @param tags Tags to filter by */ - public findPetsByTags(tags: Array, options?: Configuration): Promise> { - const result = this.api.findPetsByTags(tags, options); + public findPetsByTags(tags: Array, _options?: Configuration): Promise> { + const result = this.api.findPetsByTags(tags, _options); return result.toPromise(); } @@ -71,8 +71,8 @@ export class PromisePetApi { * Find pet by ID * @param petId ID of pet to return */ - public getPetById(petId: number, options?: Configuration): Promise { - const result = this.api.getPetById(petId, options); + public getPetById(petId: number, _options?: Configuration): Promise { + const result = this.api.getPetById(petId, _options); return result.toPromise(); } @@ -80,8 +80,8 @@ export class PromisePetApi { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public updatePet(pet: Pet, options?: Configuration): Promise { - const result = this.api.updatePet(pet, options); + public updatePet(pet: Pet, _options?: Configuration): Promise { + const result = this.api.updatePet(pet, _options); return result.toPromise(); } @@ -91,8 +91,8 @@ export class PromisePetApi { * @param name Updated name of the pet * @param status Updated status of the pet */ - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { - const result = this.api.updatePetWithForm(petId, name, status, options); + public updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Promise { + const result = this.api.updatePetWithForm(petId, name, status, _options); return result.toPromise(); } @@ -102,8 +102,8 @@ export class PromisePetApi { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { - const result = this.api.uploadFile(petId, additionalMetadata, file, options); + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Promise { + const result = this.api.uploadFile(petId, additionalMetadata, file, _options); return result.toPromise(); } @@ -134,8 +134,8 @@ export class PromiseStoreApi { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public deleteOrder(orderId: string, options?: Configuration): Promise { - const result = this.api.deleteOrder(orderId, options); + public deleteOrder(orderId: string, _options?: Configuration): Promise { + const result = this.api.deleteOrder(orderId, _options); return result.toPromise(); } @@ -143,8 +143,8 @@ export class PromiseStoreApi { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public getInventory(options?: Configuration): Promise<{ [key: string]: number; }> { - const result = this.api.getInventory(options); + public getInventory(_options?: Configuration): Promise<{ [key: string]: number; }> { + const result = this.api.getInventory(_options); return result.toPromise(); } @@ -153,8 +153,8 @@ export class PromiseStoreApi { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public getOrderById(orderId: number, options?: Configuration): Promise { - const result = this.api.getOrderById(orderId, options); + public getOrderById(orderId: number, _options?: Configuration): Promise { + const result = this.api.getOrderById(orderId, _options); return result.toPromise(); } @@ -162,8 +162,8 @@ export class PromiseStoreApi { * Place an order for a pet * @param order order placed for purchasing the pet */ - public placeOrder(order: Order, options?: Configuration): Promise { - const result = this.api.placeOrder(order, options); + public placeOrder(order: Order, _options?: Configuration): Promise { + const result = this.api.placeOrder(order, _options); return result.toPromise(); } @@ -194,8 +194,8 @@ export class PromiseUserApi { * Create user * @param user Created user object */ - public createUser(user: User, options?: Configuration): Promise { - const result = this.api.createUser(user, options); + public createUser(user: User, _options?: Configuration): Promise { + const result = this.api.createUser(user, _options); return result.toPromise(); } @@ -203,8 +203,8 @@ export class PromiseUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithArrayInput(user: Array, options?: Configuration): Promise { - const result = this.api.createUsersWithArrayInput(user, options); + public createUsersWithArrayInput(user: Array, _options?: Configuration): Promise { + const result = this.api.createUsersWithArrayInput(user, _options); return result.toPromise(); } @@ -212,8 +212,8 @@ export class PromiseUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithListInput(user: Array, options?: Configuration): Promise { - const result = this.api.createUsersWithListInput(user, options); + public createUsersWithListInput(user: Array, _options?: Configuration): Promise { + const result = this.api.createUsersWithListInput(user, _options); return result.toPromise(); } @@ -222,8 +222,8 @@ export class PromiseUserApi { * Delete user * @param username The name that needs to be deleted */ - public deleteUser(username: string, options?: Configuration): Promise { - const result = this.api.deleteUser(username, options); + public deleteUser(username: string, _options?: Configuration): Promise { + const result = this.api.deleteUser(username, _options); return result.toPromise(); } @@ -231,8 +231,8 @@ export class PromiseUserApi { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public getUserByName(username: string, options?: Configuration): Promise { - const result = this.api.getUserByName(username, options); + public getUserByName(username: string, _options?: Configuration): Promise { + const result = this.api.getUserByName(username, _options); return result.toPromise(); } @@ -241,16 +241,16 @@ export class PromiseUserApi { * @param username The user name for login * @param password The password for login in clear text */ - public loginUser(username: string, password: string, options?: Configuration): Promise { - const result = this.api.loginUser(username, password, options); + public loginUser(username: string, password: string, _options?: Configuration): Promise { + const result = this.api.loginUser(username, password, _options); return result.toPromise(); } /** * Logs out current logged in user session */ - public logoutUser(options?: Configuration): Promise { - const result = this.api.logoutUser(options); + public logoutUser(_options?: Configuration): Promise { + const result = this.api.logoutUser(_options); return result.toPromise(); } @@ -260,8 +260,8 @@ export class PromiseUserApi { * @param username name that need to be deleted * @param user Updated user object */ - public updateUser(username: string, user: User, options?: Configuration): Promise { - const result = this.api.updateUser(username, user, options); + public updateUser(username: string, user: User, _options?: Configuration): Promise { + const result = this.api.updateUser(username, user, _options); return result.toPromise(); } diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/PetApi.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/PetApi.ts index 0e0db9ad8eec..8cf33634c312 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/PetApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/PetApi.ts @@ -18,8 +18,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public async addPet(pet: Pet, options?: Configuration): Promise { - let config = options || this.configuration; + public async addPet(pet: Pet, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'pet' is not null or undefined if (pet === null || pet === undefined) { @@ -31,7 +31,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -56,7 +56,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -69,8 +69,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param petId Pet id to delete * @param apiKey */ - public async deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deletePet(petId: number, apiKey?: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -84,7 +84,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -99,7 +99,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -112,8 +112,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public async findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise { - let config = options || this.configuration; + public async findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'status' is not null or undefined if (status === null || status === undefined) { @@ -125,7 +125,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet/findByStatus'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -142,7 +142,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -155,8 +155,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Finds Pets by tags * @param tags Tags to filter by */ - public async findPetsByTags(tags: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async findPetsByTags(tags: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'tags' is not null or undefined if (tags === null || tags === undefined) { @@ -168,7 +168,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet/findByTags'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -185,7 +185,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -198,8 +198,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Find pet by ID * @param petId ID of pet to return */ - public async getPetById(petId: number, options?: Configuration): Promise { - let config = options || this.configuration; + public async getPetById(petId: number, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -212,7 +212,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -226,7 +226,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -238,8 +238,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public async updatePet(pet: Pet, options?: Configuration): Promise { - let config = options || this.configuration; + public async updatePet(pet: Pet, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'pet' is not null or undefined if (pet === null || pet === undefined) { @@ -251,7 +251,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -276,7 +276,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -290,8 +290,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param name Updated name of the pet * @param status Updated status of the pet */ - public async updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -306,7 +306,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -330,7 +330,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -344,8 +344,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public async uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { - let config = options || this.configuration; + public async uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -360,7 +360,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -384,7 +384,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/StoreApi.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/StoreApi.ts index 9ada7b0fee1f..5ca1dd79b3d2 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/StoreApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/StoreApi.ts @@ -18,8 +18,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public async deleteOrder(orderId: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deleteOrder(orderId: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'orderId' is not null or undefined if (orderId === null || orderId === undefined) { @@ -32,7 +32,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'orderId' + '}', encodeURIComponent(String(orderId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -53,14 +53,14 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public async getInventory(options?: Configuration): Promise { - let config = options || this.configuration; + public async getInventory(_options?: Configuration): Promise { + let _config = _options || this.configuration; // Path Params const localVarPath = '/store/inventory'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -74,7 +74,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -87,8 +87,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public async getOrderById(orderId: number, options?: Configuration): Promise { - let config = options || this.configuration; + public async getOrderById(orderId: number, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'orderId' is not null or undefined if (orderId === null || orderId === undefined) { @@ -101,7 +101,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'orderId' + '}', encodeURIComponent(String(orderId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -122,8 +122,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Place an order for a pet * @param order order placed for purchasing the pet */ - public async placeOrder(order: Order, options?: Configuration): Promise { - let config = options || this.configuration; + public async placeOrder(order: Order, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'order' is not null or undefined if (order === null || order === undefined) { @@ -135,7 +135,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/store/order'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/UserApi.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/UserApi.ts index f705cc52a124..79bed0455cae 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/apis/UserApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/apis/UserApi.ts @@ -18,8 +18,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Create user * @param user Created user object */ - public async createUser(user: User, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUser(user: User, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -31,7 +31,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -54,7 +54,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -66,8 +66,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Creates list of users with given input array * @param user List of user object */ - public async createUsersWithArrayInput(user: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUsersWithArrayInput(user: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -79,7 +79,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/createWithArray'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -102,7 +102,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -114,8 +114,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Creates list of users with given input array * @param user List of user object */ - public async createUsersWithListInput(user: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUsersWithListInput(user: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -127,7 +127,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/createWithList'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -150,7 +150,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -163,8 +163,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Delete user * @param username The name that needs to be deleted */ - public async deleteUser(username: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deleteUser(username: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -177,7 +177,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -191,7 +191,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -203,8 +203,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public async getUserByName(username: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async getUserByName(username: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -217,7 +217,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -239,8 +239,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * @param username The user name for login * @param password The password for login in clear text */ - public async loginUser(username: string, password: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async loginUser(username: string, password: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -258,7 +258,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/login'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -284,14 +284,14 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { /** * Logs out current logged in user session */ - public async logoutUser(options?: Configuration): Promise { - let config = options || this.configuration; + public async logoutUser(_options?: Configuration): Promise { + let _config = _options || this.configuration; // Path Params const localVarPath = '/user/logout'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -305,7 +305,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -319,8 +319,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * @param username name that need to be deleted * @param user Updated user object */ - public async updateUser(username: string, user: User, options?: Configuration): Promise { - let config = options || this.configuration; + public async updateUser(username: string, user: User, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -339,7 +339,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -362,7 +362,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/types/ObservableAPI.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/types/ObservableAPI.ts index 459fbc8e226e..488915f871ba 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/types/ObservableAPI.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/types/ObservableAPI.ts @@ -30,8 +30,8 @@ export class ObservablePetApi { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public addPet(pet: Pet, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.addPet(pet, options); + public addPet(pet: Pet, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.addPet(pet, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -54,8 +54,8 @@ export class ObservablePetApi { * @param petId Pet id to delete * @param apiKey */ - public deletePet(petId: number, apiKey?: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deletePet(petId, apiKey, options); + public deletePet(petId: number, apiKey?: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deletePet(petId, apiKey, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -78,8 +78,8 @@ export class ObservablePetApi { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Observable> { - const requestContextPromise = this.requestFactory.findPetsByStatus(status, options); + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Observable> { + const requestContextPromise = this.requestFactory.findPetsByStatus(status, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -102,8 +102,8 @@ export class ObservablePetApi { * Finds Pets by tags * @param tags Tags to filter by */ - public findPetsByTags(tags: Array, options?: Configuration): Observable> { - const requestContextPromise = this.requestFactory.findPetsByTags(tags, options); + public findPetsByTags(tags: Array, _options?: Configuration): Observable> { + const requestContextPromise = this.requestFactory.findPetsByTags(tags, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -126,8 +126,8 @@ export class ObservablePetApi { * Find pet by ID * @param petId ID of pet to return */ - public getPetById(petId: number, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getPetById(petId, options); + public getPetById(petId: number, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getPetById(petId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -149,8 +149,8 @@ export class ObservablePetApi { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public updatePet(pet: Pet, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updatePet(pet, options); + public updatePet(pet: Pet, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updatePet(pet, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -174,8 +174,8 @@ export class ObservablePetApi { * @param name Updated name of the pet * @param status Updated status of the pet */ - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updatePetWithForm(petId, name, status, options); + public updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updatePetWithForm(petId, name, status, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -199,8 +199,8 @@ export class ObservablePetApi { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.uploadFile(petId, additionalMetadata, file, options); + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.uploadFile(petId, additionalMetadata, file, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -241,8 +241,8 @@ export class ObservableStoreApi { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public deleteOrder(orderId: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deleteOrder(orderId, options); + public deleteOrder(orderId: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deleteOrder(orderId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -264,8 +264,8 @@ export class ObservableStoreApi { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public getInventory(options?: Configuration): Observable<{ [key: string]: number; }> { - const requestContextPromise = this.requestFactory.getInventory(options); + public getInventory(_options?: Configuration): Observable<{ [key: string]: number; }> { + const requestContextPromise = this.requestFactory.getInventory(_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -288,8 +288,8 @@ export class ObservableStoreApi { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public getOrderById(orderId: number, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getOrderById(orderId, options); + public getOrderById(orderId: number, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getOrderById(orderId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -311,8 +311,8 @@ export class ObservableStoreApi { * Place an order for a pet * @param order order placed for purchasing the pet */ - public placeOrder(order: Order, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.placeOrder(order, options); + public placeOrder(order: Order, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.placeOrder(order, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -353,8 +353,8 @@ export class ObservableUserApi { * Create user * @param user Created user object */ - public createUser(user: User, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUser(user, options); + public createUser(user: User, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUser(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -376,8 +376,8 @@ export class ObservableUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithArrayInput(user: Array, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUsersWithArrayInput(user, options); + public createUsersWithArrayInput(user: Array, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUsersWithArrayInput(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -399,8 +399,8 @@ export class ObservableUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithListInput(user: Array, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUsersWithListInput(user, options); + public createUsersWithListInput(user: Array, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUsersWithListInput(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -423,8 +423,8 @@ export class ObservableUserApi { * Delete user * @param username The name that needs to be deleted */ - public deleteUser(username: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deleteUser(username, options); + public deleteUser(username: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deleteUser(username, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -446,8 +446,8 @@ export class ObservableUserApi { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public getUserByName(username: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getUserByName(username, options); + public getUserByName(username: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getUserByName(username, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -470,8 +470,8 @@ export class ObservableUserApi { * @param username The user name for login * @param password The password for login in clear text */ - public loginUser(username: string, password: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.loginUser(username, password, options); + public loginUser(username: string, password: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.loginUser(username, password, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -492,8 +492,8 @@ export class ObservableUserApi { /** * Logs out current logged in user session */ - public logoutUser(options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.logoutUser(options); + public logoutUser(_options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.logoutUser(_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -517,8 +517,8 @@ export class ObservableUserApi { * @param username name that need to be deleted * @param user Updated user object */ - public updateUser(username: string, user: User, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updateUser(username, user, options); + public updateUser(username: string, user: User, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updateUser(username, user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/types/PromiseAPI.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/types/PromiseAPI.ts index 2129b103e7e7..ac44ba7a13b2 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/types/PromiseAPI.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/types/PromiseAPI.ts @@ -26,8 +26,8 @@ export class PromisePetApi { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public addPet(pet: Pet, options?: Configuration): Promise { - const result = this.api.addPet(pet, options); + public addPet(pet: Pet, _options?: Configuration): Promise { + const result = this.api.addPet(pet, _options); return result.toPromise(); } @@ -36,8 +36,8 @@ export class PromisePetApi { * @param petId Pet id to delete * @param apiKey */ - public deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { - const result = this.api.deletePet(petId, apiKey, options); + public deletePet(petId: number, apiKey?: string, _options?: Configuration): Promise { + const result = this.api.deletePet(petId, apiKey, _options); return result.toPromise(); } @@ -46,8 +46,8 @@ export class PromisePetApi { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise> { - const result = this.api.findPetsByStatus(status, options); + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Promise> { + const result = this.api.findPetsByStatus(status, _options); return result.toPromise(); } @@ -56,8 +56,8 @@ export class PromisePetApi { * Finds Pets by tags * @param tags Tags to filter by */ - public findPetsByTags(tags: Array, options?: Configuration): Promise> { - const result = this.api.findPetsByTags(tags, options); + public findPetsByTags(tags: Array, _options?: Configuration): Promise> { + const result = this.api.findPetsByTags(tags, _options); return result.toPromise(); } @@ -66,8 +66,8 @@ export class PromisePetApi { * Find pet by ID * @param petId ID of pet to return */ - public getPetById(petId: number, options?: Configuration): Promise { - const result = this.api.getPetById(petId, options); + public getPetById(petId: number, _options?: Configuration): Promise { + const result = this.api.getPetById(petId, _options); return result.toPromise(); } @@ -75,8 +75,8 @@ export class PromisePetApi { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public updatePet(pet: Pet, options?: Configuration): Promise { - const result = this.api.updatePet(pet, options); + public updatePet(pet: Pet, _options?: Configuration): Promise { + const result = this.api.updatePet(pet, _options); return result.toPromise(); } @@ -86,8 +86,8 @@ export class PromisePetApi { * @param name Updated name of the pet * @param status Updated status of the pet */ - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { - const result = this.api.updatePetWithForm(petId, name, status, options); + public updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Promise { + const result = this.api.updatePetWithForm(petId, name, status, _options); return result.toPromise(); } @@ -97,8 +97,8 @@ export class PromisePetApi { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { - const result = this.api.uploadFile(petId, additionalMetadata, file, options); + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Promise { + const result = this.api.uploadFile(petId, additionalMetadata, file, _options); return result.toPromise(); } @@ -126,8 +126,8 @@ export class PromiseStoreApi { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public deleteOrder(orderId: string, options?: Configuration): Promise { - const result = this.api.deleteOrder(orderId, options); + public deleteOrder(orderId: string, _options?: Configuration): Promise { + const result = this.api.deleteOrder(orderId, _options); return result.toPromise(); } @@ -135,8 +135,8 @@ export class PromiseStoreApi { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public getInventory(options?: Configuration): Promise<{ [key: string]: number; }> { - const result = this.api.getInventory(options); + public getInventory(_options?: Configuration): Promise<{ [key: string]: number; }> { + const result = this.api.getInventory(_options); return result.toPromise(); } @@ -145,8 +145,8 @@ export class PromiseStoreApi { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public getOrderById(orderId: number, options?: Configuration): Promise { - const result = this.api.getOrderById(orderId, options); + public getOrderById(orderId: number, _options?: Configuration): Promise { + const result = this.api.getOrderById(orderId, _options); return result.toPromise(); } @@ -154,8 +154,8 @@ export class PromiseStoreApi { * Place an order for a pet * @param order order placed for purchasing the pet */ - public placeOrder(order: Order, options?: Configuration): Promise { - const result = this.api.placeOrder(order, options); + public placeOrder(order: Order, _options?: Configuration): Promise { + const result = this.api.placeOrder(order, _options); return result.toPromise(); } @@ -183,8 +183,8 @@ export class PromiseUserApi { * Create user * @param user Created user object */ - public createUser(user: User, options?: Configuration): Promise { - const result = this.api.createUser(user, options); + public createUser(user: User, _options?: Configuration): Promise { + const result = this.api.createUser(user, _options); return result.toPromise(); } @@ -192,8 +192,8 @@ export class PromiseUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithArrayInput(user: Array, options?: Configuration): Promise { - const result = this.api.createUsersWithArrayInput(user, options); + public createUsersWithArrayInput(user: Array, _options?: Configuration): Promise { + const result = this.api.createUsersWithArrayInput(user, _options); return result.toPromise(); } @@ -201,8 +201,8 @@ export class PromiseUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithListInput(user: Array, options?: Configuration): Promise { - const result = this.api.createUsersWithListInput(user, options); + public createUsersWithListInput(user: Array, _options?: Configuration): Promise { + const result = this.api.createUsersWithListInput(user, _options); return result.toPromise(); } @@ -211,8 +211,8 @@ export class PromiseUserApi { * Delete user * @param username The name that needs to be deleted */ - public deleteUser(username: string, options?: Configuration): Promise { - const result = this.api.deleteUser(username, options); + public deleteUser(username: string, _options?: Configuration): Promise { + const result = this.api.deleteUser(username, _options); return result.toPromise(); } @@ -220,8 +220,8 @@ export class PromiseUserApi { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public getUserByName(username: string, options?: Configuration): Promise { - const result = this.api.getUserByName(username, options); + public getUserByName(username: string, _options?: Configuration): Promise { + const result = this.api.getUserByName(username, _options); return result.toPromise(); } @@ -230,16 +230,16 @@ export class PromiseUserApi { * @param username The user name for login * @param password The password for login in clear text */ - public loginUser(username: string, password: string, options?: Configuration): Promise { - const result = this.api.loginUser(username, password, options); + public loginUser(username: string, password: string, _options?: Configuration): Promise { + const result = this.api.loginUser(username, password, _options); return result.toPromise(); } /** * Logs out current logged in user session */ - public logoutUser(options?: Configuration): Promise { - const result = this.api.logoutUser(options); + public logoutUser(_options?: Configuration): Promise { + const result = this.api.logoutUser(_options); return result.toPromise(); } @@ -249,8 +249,8 @@ export class PromiseUserApi { * @param username name that need to be deleted * @param user Updated user object */ - public updateUser(username: string, user: User, options?: Configuration): Promise { - const result = this.api.updateUser(username, user, options); + public updateUser(username: string, user: User, _options?: Configuration): Promise { + const result = this.api.updateUser(username, user, _options); return result.toPromise(); } diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/PetApi.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/PetApi.ts index 12d711bd5b76..547125db4597 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/PetApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/PetApi.ts @@ -19,8 +19,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public async addPet(pet: Pet, options?: Configuration): Promise { - let config = options || this.configuration; + public async addPet(pet: Pet, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'pet' is not null or undefined if (pet === null || pet === undefined) { @@ -32,7 +32,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -57,7 +57,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -70,8 +70,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param petId Pet id to delete * @param apiKey */ - public async deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deletePet(petId: number, apiKey?: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -85,7 +85,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -100,7 +100,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -113,8 +113,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public async findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise { - let config = options || this.configuration; + public async findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'status' is not null or undefined if (status === null || status === undefined) { @@ -126,7 +126,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet/findByStatus'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -143,7 +143,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -156,8 +156,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Finds Pets by tags * @param tags Tags to filter by */ - public async findPetsByTags(tags: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async findPetsByTags(tags: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'tags' is not null or undefined if (tags === null || tags === undefined) { @@ -169,7 +169,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet/findByTags'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -186,7 +186,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -199,8 +199,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Find pet by ID * @param petId ID of pet to return */ - public async getPetById(petId: number, options?: Configuration): Promise { - let config = options || this.configuration; + public async getPetById(petId: number, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -213,7 +213,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -227,7 +227,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -239,8 +239,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public async updatePet(pet: Pet, options?: Configuration): Promise { - let config = options || this.configuration; + public async updatePet(pet: Pet, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'pet' is not null or undefined if (pet === null || pet === undefined) { @@ -252,7 +252,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/pet'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -277,7 +277,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -291,8 +291,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param name Updated name of the pet * @param status Updated status of the pet */ - public async updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -307,7 +307,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -331,7 +331,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -345,8 +345,8 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public async uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { - let config = options || this.configuration; + public async uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'petId' is not null or undefined if (petId === null || petId === undefined) { @@ -361,7 +361,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'petId' + '}', encodeURIComponent(String(petId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -385,7 +385,7 @@ export class PetApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["petstore_auth"] + authMethod = _config.authMethods["petstore_auth"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/StoreApi.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/StoreApi.ts index 12be01326978..7780dd52f48c 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/StoreApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/StoreApi.ts @@ -19,8 +19,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public async deleteOrder(orderId: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deleteOrder(orderId: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'orderId' is not null or undefined if (orderId === null || orderId === undefined) { @@ -33,7 +33,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'orderId' + '}', encodeURIComponent(String(orderId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -54,14 +54,14 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public async getInventory(options?: Configuration): Promise { - let config = options || this.configuration; + public async getInventory(_options?: Configuration): Promise { + let _config = _options || this.configuration; // Path Params const localVarPath = '/store/inventory'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -75,7 +75,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -88,8 +88,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public async getOrderById(orderId: number, options?: Configuration): Promise { - let config = options || this.configuration; + public async getOrderById(orderId: number, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'orderId' is not null or undefined if (orderId === null || orderId === undefined) { @@ -102,7 +102,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'orderId' + '}', encodeURIComponent(String(orderId))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -123,8 +123,8 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { * Place an order for a pet * @param order order placed for purchasing the pet */ - public async placeOrder(order: Order, options?: Configuration): Promise { - let config = options || this.configuration; + public async placeOrder(order: Order, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'order' is not null or undefined if (order === null || order === undefined) { @@ -136,7 +136,7 @@ export class StoreApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/store/order'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/UserApi.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/UserApi.ts index 0717cb753040..e12b26fd31d9 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/apis/UserApi.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/apis/UserApi.ts @@ -19,8 +19,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Create user * @param user Created user object */ - public async createUser(user: User, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUser(user: User, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -32,7 +32,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -55,7 +55,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -67,8 +67,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Creates list of users with given input array * @param user List of user object */ - public async createUsersWithArrayInput(user: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUsersWithArrayInput(user: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -80,7 +80,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/createWithArray'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -103,7 +103,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -115,8 +115,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Creates list of users with given input array * @param user List of user object */ - public async createUsersWithListInput(user: Array, options?: Configuration): Promise { - let config = options || this.configuration; + public async createUsersWithListInput(user: Array, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'user' is not null or undefined if (user === null || user === undefined) { @@ -128,7 +128,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/createWithList'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.POST); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -151,7 +151,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -164,8 +164,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Delete user * @param username The name that needs to be deleted */ - public async deleteUser(username: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async deleteUser(username: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -178,7 +178,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.DELETE); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -192,7 +192,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -204,8 +204,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public async getUserByName(username: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async getUserByName(username: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -218,7 +218,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -240,8 +240,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * @param username The user name for login * @param password The password for login in clear text */ - public async loginUser(username: string, password: string, options?: Configuration): Promise { - let config = options || this.configuration; + public async loginUser(username: string, password: string, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -259,7 +259,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { const localVarPath = '/user/login'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -285,14 +285,14 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { /** * Logs out current logged in user session */ - public async logoutUser(options?: Configuration): Promise { - let config = options || this.configuration; + public async logoutUser(_options?: Configuration): Promise { + let _config = _options || this.configuration; // Path Params const localVarPath = '/user/logout'; // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.GET); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -306,7 +306,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } @@ -320,8 +320,8 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { * @param username name that need to be deleted * @param user Updated user object */ - public async updateUser(username: string, user: User, options?: Configuration): Promise { - let config = options || this.configuration; + public async updateUser(username: string, user: User, _options?: Configuration): Promise { + let _config = _options || this.configuration; // verify required parameter 'username' is not null or undefined if (username === null || username === undefined) { @@ -340,7 +340,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { .replace('{' + 'username' + '}', encodeURIComponent(String(username))); // Make Request Context - const requestContext = config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); + const requestContext = _config.baseServer.makeRequestContext(localVarPath, HttpMethod.PUT); requestContext.setHeaderParam("Accept", "application/json, */*;q=0.8") // Query Params @@ -363,7 +363,7 @@ export class UserApiRequestFactory extends BaseAPIRequestFactory { let authMethod = null; // Apply auth methods - authMethod = config.authMethods["api_key"] + authMethod = _config.authMethods["api_key"] if (authMethod) { await authMethod.applySecurityAuthentication(requestContext); } diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/types/ObservableAPI.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/types/ObservableAPI.ts index 459fbc8e226e..488915f871ba 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/types/ObservableAPI.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/types/ObservableAPI.ts @@ -30,8 +30,8 @@ export class ObservablePetApi { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public addPet(pet: Pet, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.addPet(pet, options); + public addPet(pet: Pet, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.addPet(pet, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -54,8 +54,8 @@ export class ObservablePetApi { * @param petId Pet id to delete * @param apiKey */ - public deletePet(petId: number, apiKey?: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deletePet(petId, apiKey, options); + public deletePet(petId: number, apiKey?: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deletePet(petId, apiKey, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -78,8 +78,8 @@ export class ObservablePetApi { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Observable> { - const requestContextPromise = this.requestFactory.findPetsByStatus(status, options); + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Observable> { + const requestContextPromise = this.requestFactory.findPetsByStatus(status, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -102,8 +102,8 @@ export class ObservablePetApi { * Finds Pets by tags * @param tags Tags to filter by */ - public findPetsByTags(tags: Array, options?: Configuration): Observable> { - const requestContextPromise = this.requestFactory.findPetsByTags(tags, options); + public findPetsByTags(tags: Array, _options?: Configuration): Observable> { + const requestContextPromise = this.requestFactory.findPetsByTags(tags, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -126,8 +126,8 @@ export class ObservablePetApi { * Find pet by ID * @param petId ID of pet to return */ - public getPetById(petId: number, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getPetById(petId, options); + public getPetById(petId: number, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getPetById(petId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -149,8 +149,8 @@ export class ObservablePetApi { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public updatePet(pet: Pet, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updatePet(pet, options); + public updatePet(pet: Pet, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updatePet(pet, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -174,8 +174,8 @@ export class ObservablePetApi { * @param name Updated name of the pet * @param status Updated status of the pet */ - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updatePetWithForm(petId, name, status, options); + public updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updatePetWithForm(petId, name, status, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -199,8 +199,8 @@ export class ObservablePetApi { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.uploadFile(petId, additionalMetadata, file, options); + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.uploadFile(petId, additionalMetadata, file, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -241,8 +241,8 @@ export class ObservableStoreApi { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public deleteOrder(orderId: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deleteOrder(orderId, options); + public deleteOrder(orderId: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deleteOrder(orderId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -264,8 +264,8 @@ export class ObservableStoreApi { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public getInventory(options?: Configuration): Observable<{ [key: string]: number; }> { - const requestContextPromise = this.requestFactory.getInventory(options); + public getInventory(_options?: Configuration): Observable<{ [key: string]: number; }> { + const requestContextPromise = this.requestFactory.getInventory(_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -288,8 +288,8 @@ export class ObservableStoreApi { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public getOrderById(orderId: number, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getOrderById(orderId, options); + public getOrderById(orderId: number, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getOrderById(orderId, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -311,8 +311,8 @@ export class ObservableStoreApi { * Place an order for a pet * @param order order placed for purchasing the pet */ - public placeOrder(order: Order, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.placeOrder(order, options); + public placeOrder(order: Order, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.placeOrder(order, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -353,8 +353,8 @@ export class ObservableUserApi { * Create user * @param user Created user object */ - public createUser(user: User, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUser(user, options); + public createUser(user: User, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUser(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -376,8 +376,8 @@ export class ObservableUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithArrayInput(user: Array, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUsersWithArrayInput(user, options); + public createUsersWithArrayInput(user: Array, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUsersWithArrayInput(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -399,8 +399,8 @@ export class ObservableUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithListInput(user: Array, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.createUsersWithListInput(user, options); + public createUsersWithListInput(user: Array, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.createUsersWithListInput(user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -423,8 +423,8 @@ export class ObservableUserApi { * Delete user * @param username The name that needs to be deleted */ - public deleteUser(username: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.deleteUser(username, options); + public deleteUser(username: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.deleteUser(username, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -446,8 +446,8 @@ export class ObservableUserApi { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public getUserByName(username: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.getUserByName(username, options); + public getUserByName(username: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.getUserByName(username, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -470,8 +470,8 @@ export class ObservableUserApi { * @param username The user name for login * @param password The password for login in clear text */ - public loginUser(username: string, password: string, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.loginUser(username, password, options); + public loginUser(username: string, password: string, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.loginUser(username, password, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -492,8 +492,8 @@ export class ObservableUserApi { /** * Logs out current logged in user session */ - public logoutUser(options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.logoutUser(options); + public logoutUser(_options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.logoutUser(_options); // build promise chain let middlewarePreObservable = from(requestContextPromise); @@ -517,8 +517,8 @@ export class ObservableUserApi { * @param username name that need to be deleted * @param user Updated user object */ - public updateUser(username: string, user: User, options?: Configuration): Observable { - const requestContextPromise = this.requestFactory.updateUser(username, user, options); + public updateUser(username: string, user: User, _options?: Configuration): Observable { + const requestContextPromise = this.requestFactory.updateUser(username, user, _options); // build promise chain let middlewarePreObservable = from(requestContextPromise); diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/types/PromiseAPI.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/types/PromiseAPI.ts index 2129b103e7e7..ac44ba7a13b2 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/types/PromiseAPI.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/types/PromiseAPI.ts @@ -26,8 +26,8 @@ export class PromisePetApi { * Add a new pet to the store * @param pet Pet object that needs to be added to the store */ - public addPet(pet: Pet, options?: Configuration): Promise { - const result = this.api.addPet(pet, options); + public addPet(pet: Pet, _options?: Configuration): Promise { + const result = this.api.addPet(pet, _options); return result.toPromise(); } @@ -36,8 +36,8 @@ export class PromisePetApi { * @param petId Pet id to delete * @param apiKey */ - public deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { - const result = this.api.deletePet(petId, apiKey, options); + public deletePet(petId: number, apiKey?: string, _options?: Configuration): Promise { + const result = this.api.deletePet(petId, apiKey, _options); return result.toPromise(); } @@ -46,8 +46,8 @@ export class PromisePetApi { * Finds Pets by status * @param status Status values that need to be considered for filter */ - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise> { - const result = this.api.findPetsByStatus(status, options); + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, _options?: Configuration): Promise> { + const result = this.api.findPetsByStatus(status, _options); return result.toPromise(); } @@ -56,8 +56,8 @@ export class PromisePetApi { * Finds Pets by tags * @param tags Tags to filter by */ - public findPetsByTags(tags: Array, options?: Configuration): Promise> { - const result = this.api.findPetsByTags(tags, options); + public findPetsByTags(tags: Array, _options?: Configuration): Promise> { + const result = this.api.findPetsByTags(tags, _options); return result.toPromise(); } @@ -66,8 +66,8 @@ export class PromisePetApi { * Find pet by ID * @param petId ID of pet to return */ - public getPetById(petId: number, options?: Configuration): Promise { - const result = this.api.getPetById(petId, options); + public getPetById(petId: number, _options?: Configuration): Promise { + const result = this.api.getPetById(petId, _options); return result.toPromise(); } @@ -75,8 +75,8 @@ export class PromisePetApi { * Update an existing pet * @param pet Pet object that needs to be added to the store */ - public updatePet(pet: Pet, options?: Configuration): Promise { - const result = this.api.updatePet(pet, options); + public updatePet(pet: Pet, _options?: Configuration): Promise { + const result = this.api.updatePet(pet, _options); return result.toPromise(); } @@ -86,8 +86,8 @@ export class PromisePetApi { * @param name Updated name of the pet * @param status Updated status of the pet */ - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { - const result = this.api.updatePetWithForm(petId, name, status, options); + public updatePetWithForm(petId: number, name?: string, status?: string, _options?: Configuration): Promise { + const result = this.api.updatePetWithForm(petId, name, status, _options); return result.toPromise(); } @@ -97,8 +97,8 @@ export class PromisePetApi { * @param additionalMetadata Additional data to pass to server * @param file file to upload */ - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { - const result = this.api.uploadFile(petId, additionalMetadata, file, options); + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, _options?: Configuration): Promise { + const result = this.api.uploadFile(petId, additionalMetadata, file, _options); return result.toPromise(); } @@ -126,8 +126,8 @@ export class PromiseStoreApi { * Delete purchase order by ID * @param orderId ID of the order that needs to be deleted */ - public deleteOrder(orderId: string, options?: Configuration): Promise { - const result = this.api.deleteOrder(orderId, options); + public deleteOrder(orderId: string, _options?: Configuration): Promise { + const result = this.api.deleteOrder(orderId, _options); return result.toPromise(); } @@ -135,8 +135,8 @@ export class PromiseStoreApi { * Returns a map of status codes to quantities * Returns pet inventories by status */ - public getInventory(options?: Configuration): Promise<{ [key: string]: number; }> { - const result = this.api.getInventory(options); + public getInventory(_options?: Configuration): Promise<{ [key: string]: number; }> { + const result = this.api.getInventory(_options); return result.toPromise(); } @@ -145,8 +145,8 @@ export class PromiseStoreApi { * Find purchase order by ID * @param orderId ID of pet that needs to be fetched */ - public getOrderById(orderId: number, options?: Configuration): Promise { - const result = this.api.getOrderById(orderId, options); + public getOrderById(orderId: number, _options?: Configuration): Promise { + const result = this.api.getOrderById(orderId, _options); return result.toPromise(); } @@ -154,8 +154,8 @@ export class PromiseStoreApi { * Place an order for a pet * @param order order placed for purchasing the pet */ - public placeOrder(order: Order, options?: Configuration): Promise { - const result = this.api.placeOrder(order, options); + public placeOrder(order: Order, _options?: Configuration): Promise { + const result = this.api.placeOrder(order, _options); return result.toPromise(); } @@ -183,8 +183,8 @@ export class PromiseUserApi { * Create user * @param user Created user object */ - public createUser(user: User, options?: Configuration): Promise { - const result = this.api.createUser(user, options); + public createUser(user: User, _options?: Configuration): Promise { + const result = this.api.createUser(user, _options); return result.toPromise(); } @@ -192,8 +192,8 @@ export class PromiseUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithArrayInput(user: Array, options?: Configuration): Promise { - const result = this.api.createUsersWithArrayInput(user, options); + public createUsersWithArrayInput(user: Array, _options?: Configuration): Promise { + const result = this.api.createUsersWithArrayInput(user, _options); return result.toPromise(); } @@ -201,8 +201,8 @@ export class PromiseUserApi { * Creates list of users with given input array * @param user List of user object */ - public createUsersWithListInput(user: Array, options?: Configuration): Promise { - const result = this.api.createUsersWithListInput(user, options); + public createUsersWithListInput(user: Array, _options?: Configuration): Promise { + const result = this.api.createUsersWithListInput(user, _options); return result.toPromise(); } @@ -211,8 +211,8 @@ export class PromiseUserApi { * Delete user * @param username The name that needs to be deleted */ - public deleteUser(username: string, options?: Configuration): Promise { - const result = this.api.deleteUser(username, options); + public deleteUser(username: string, _options?: Configuration): Promise { + const result = this.api.deleteUser(username, _options); return result.toPromise(); } @@ -220,8 +220,8 @@ export class PromiseUserApi { * Get user by user name * @param username The name that needs to be fetched. Use user1 for testing. */ - public getUserByName(username: string, options?: Configuration): Promise { - const result = this.api.getUserByName(username, options); + public getUserByName(username: string, _options?: Configuration): Promise { + const result = this.api.getUserByName(username, _options); return result.toPromise(); } @@ -230,16 +230,16 @@ export class PromiseUserApi { * @param username The user name for login * @param password The password for login in clear text */ - public loginUser(username: string, password: string, options?: Configuration): Promise { - const result = this.api.loginUser(username, password, options); + public loginUser(username: string, password: string, _options?: Configuration): Promise { + const result = this.api.loginUser(username, password, _options); return result.toPromise(); } /** * Logs out current logged in user session */ - public logoutUser(options?: Configuration): Promise { - const result = this.api.logoutUser(options); + public logoutUser(_options?: Configuration): Promise { + const result = this.api.logoutUser(_options); return result.toPromise(); } @@ -249,8 +249,8 @@ export class PromiseUserApi { * @param username name that need to be deleted * @param user Updated user object */ - public updateUser(username: string, user: User, options?: Configuration): Promise { - const result = this.api.updateUser(username, user, options); + public updateUser(username: string, user: User, _options?: Configuration): Promise { + const result = this.api.updateUser(username, user, _options); return result.toPromise(); } From c966b5fe1f558ff71a7dab98004d33ff3dc4138e Mon Sep 17 00:00:00 2001 From: gbmarc1 Date: Mon, 10 May 2021 21:41:26 -0400 Subject: [PATCH 102/186] [python] readonly constructors (#9409) * readonly * other tests * doc * python samples * model utils --- .../src/main/resources/python/model.mustache | 3 + .../model_templates/invalid_pos_args.mustache | 9 + ...method_from_openapi_data_composed.mustache | 66 ++++ .../method_from_openapi_data_normal.mustache | 17 ++ .../method_from_openapi_data_shared.mustache | 49 +++ .../method_from_openapi_data_simple.mustache | 62 ++++ .../method_init_composed.mustache | 19 +- .../method_init_normal.mustache | 7 +- .../method_init_shared.mustache | 18 +- .../method_init_simple.mustache | 10 +- .../model_templates/model_composed.mustache | 15 + .../model_templates/model_normal.mustache | 15 + .../model_templates/model_simple.mustache | 6 +- .../resources/python/model_utils.mustache | 155 ++++++++-- ...odels-for-testing-with-http-signature.yaml | 23 ++ .../model/additional_properties_any_type.py | 83 +++++ .../model/additional_properties_array.py | 83 +++++ .../model/additional_properties_boolean.py | 83 +++++ .../model/additional_properties_class.py | 93 ++++++ .../model/additional_properties_integer.py | 83 +++++ .../model/additional_properties_number.py | 83 +++++ .../model/additional_properties_object.py | 83 +++++ .../model/additional_properties_string.py | 83 +++++ .../python/petstore_api/model/animal.py | 87 ++++++ .../python/petstore_api/model/animal_farm.py | 99 ++++++ .../python/petstore_api/model/api_response.py | 85 ++++++ .../model/array_of_array_of_number_only.py | 83 +++++ .../model/array_of_number_only.py | 83 +++++ .../python/petstore_api/model/array_test.py | 85 ++++++ .../petstore_api/model/capitalization.py | 88 ++++++ .../petstore/python/petstore_api/model/cat.py | 100 ++++++ .../python/petstore_api/model/cat_all_of.py | 83 +++++ .../python/petstore_api/model/category.py | 88 ++++++ .../python/petstore_api/model/child.py | 100 ++++++ .../python/petstore_api/model/child_all_of.py | 83 +++++ .../python/petstore_api/model/child_cat.py | 99 ++++++ .../petstore_api/model/child_cat_all_of.py | 83 +++++ .../python/petstore_api/model/child_dog.py | 99 ++++++ .../petstore_api/model/child_dog_all_of.py | 83 +++++ .../python/petstore_api/model/child_lizard.py | 99 ++++++ .../petstore_api/model/child_lizard_all_of.py | 83 +++++ .../python/petstore_api/model/class_model.py | 83 +++++ .../python/petstore_api/model/client.py | 83 +++++ .../petstore/python/petstore_api/model/dog.py | 100 ++++++ .../python/petstore_api/model/dog_all_of.py | 83 +++++ .../python/petstore_api/model/enum_arrays.py | 84 ++++++ .../python/petstore_api/model/enum_class.py | 95 ++++++ .../python/petstore_api/model/enum_test.py | 90 ++++++ .../python/petstore_api/model/file.py | 83 +++++ .../model/file_schema_test_class.py | 84 ++++++ .../python/petstore_api/model/format_test.py | 101 +++++++ .../python/petstore_api/model/grandparent.py | 83 +++++ .../petstore_api/model/grandparent_animal.py | 86 ++++++ .../petstore_api/model/has_only_read_only.py | 86 ++++++ .../python/petstore_api/model/list.py | 83 +++++ .../python/petstore_api/model/map_test.py | 86 ++++++ ...perties_and_additional_properties_class.py | 85 ++++++ .../petstore_api/model/model200_response.py | 84 ++++++ .../python/petstore_api/model/model_return.py | 83 +++++ .../python/petstore_api/model/name.py | 91 ++++++ .../python/petstore_api/model/number_only.py | 83 +++++ .../model/number_with_validations.py | 99 ++++++ .../model/object_model_with_ref_props.py | 85 ++++++ .../python/petstore_api/model/order.py | 88 ++++++ .../python/petstore_api/model/parent.py | 99 ++++++ .../petstore_api/model/parent_all_of.py | 83 +++++ .../python/petstore_api/model/parent_pet.py | 98 ++++++ .../petstore/python/petstore_api/model/pet.py | 92 ++++++ .../python/petstore_api/model/player.py | 87 ++++++ .../petstore_api/model/read_only_first.py | 85 ++++++ .../petstore_api/model/special_model_name.py | 83 +++++ .../petstore_api/model/string_boolean_map.py | 82 +++++ .../python/petstore_api/model/string_enum.py | 99 ++++++ .../petstore/python/petstore_api/model/tag.py | 85 ++++++ .../petstore_api/model/type_holder_default.py | 100 ++++++ .../petstore_api/model/type_holder_example.py | 97 ++++++ .../python/petstore_api/model/user.py | 90 ++++++ .../python/petstore_api/model/xml_item.py | 111 +++++++ .../python/petstore_api/model_utils.py | 155 ++++++++-- .../model/additional_properties_any_type.py | 83 +++++ .../model/additional_properties_array.py | 83 +++++ .../model/additional_properties_boolean.py | 83 +++++ .../model/additional_properties_class.py | 93 ++++++ .../model/additional_properties_integer.py | 83 +++++ .../model/additional_properties_number.py | 83 +++++ .../model/additional_properties_object.py | 83 +++++ .../model/additional_properties_string.py | 83 +++++ .../petstore_api/model/animal.py | 87 ++++++ .../petstore_api/model/animal_farm.py | 99 ++++++ .../petstore_api/model/api_response.py | 85 ++++++ .../model/array_of_array_of_number_only.py | 83 +++++ .../model/array_of_number_only.py | 83 +++++ .../petstore_api/model/array_test.py | 85 ++++++ .../petstore_api/model/capitalization.py | 88 ++++++ .../petstore_api/model/cat.py | 100 ++++++ .../petstore_api/model/cat_all_of.py | 83 +++++ .../petstore_api/model/category.py | 88 ++++++ .../petstore_api/model/child.py | 100 ++++++ .../petstore_api/model/child_all_of.py | 83 +++++ .../petstore_api/model/child_cat.py | 99 ++++++ .../petstore_api/model/child_cat_all_of.py | 83 +++++ .../petstore_api/model/child_dog.py | 99 ++++++ .../petstore_api/model/child_dog_all_of.py | 83 +++++ .../petstore_api/model/child_lizard.py | 99 ++++++ .../petstore_api/model/child_lizard_all_of.py | 83 +++++ .../petstore_api/model/class_model.py | 83 +++++ .../petstore_api/model/client.py | 83 +++++ .../petstore_api/model/dog.py | 100 ++++++ .../petstore_api/model/dog_all_of.py | 83 +++++ .../petstore_api/model/enum_arrays.py | 84 ++++++ .../petstore_api/model/enum_class.py | 95 ++++++ .../petstore_api/model/enum_test.py | 90 ++++++ .../petstore_api/model/file.py | 83 +++++ .../model/file_schema_test_class.py | 84 ++++++ .../petstore_api/model/format_test.py | 101 +++++++ .../petstore_api/model/grandparent.py | 83 +++++ .../petstore_api/model/grandparent_animal.py | 86 ++++++ .../petstore_api/model/has_only_read_only.py | 86 ++++++ .../petstore_api/model/list.py | 83 +++++ .../petstore_api/model/map_test.py | 86 ++++++ ...perties_and_additional_properties_class.py | 85 ++++++ .../petstore_api/model/model200_response.py | 84 ++++++ .../petstore_api/model/model_return.py | 83 +++++ .../petstore_api/model/name.py | 91 ++++++ .../petstore_api/model/number_only.py | 83 +++++ .../model/number_with_validations.py | 99 ++++++ .../model/object_model_with_ref_props.py | 85 ++++++ .../petstore_api/model/order.py | 88 ++++++ .../petstore_api/model/parent.py | 99 ++++++ .../petstore_api/model/parent_all_of.py | 83 +++++ .../petstore_api/model/parent_pet.py | 98 ++++++ .../petstore_api/model/pet.py | 92 ++++++ .../petstore_api/model/player.py | 87 ++++++ .../petstore_api/model/read_only_first.py | 85 ++++++ .../petstore_api/model/special_model_name.py | 83 +++++ .../petstore_api/model/string_boolean_map.py | 82 +++++ .../petstore_api/model/string_enum.py | 99 ++++++ .../petstore_api/model/tag.py | 85 ++++++ .../petstore_api/model/type_holder_default.py | 100 ++++++ .../petstore_api/model/type_holder_example.py | 97 ++++++ .../petstore_api/model/user.py | 90 ++++++ .../petstore_api/model/xml_item.py | 111 +++++++ .../petstore_api/model_utils.py | 155 ++++++++-- .../python/x_auth_id_alias/model_utils.py | 155 ++++++++-- .../python/dynamic_servers/model_utils.py | 155 ++++++++-- .../petstore/python/.openapi-generator/FILES | 2 + .../openapi3/client/petstore/python/README.md | 1 + .../client/petstore/python/docs/Mole.md | 17 ++ .../model/additional_properties_class.py | 90 ++++++ ...ditional_properties_with_array_of_enums.py | 82 +++++ .../python/petstore_api/model/address.py | 82 +++++ .../python/petstore_api/model/animal.py | 87 ++++++ .../python/petstore_api/model/animal_farm.py | 99 ++++++ .../python/petstore_api/model/api_response.py | 85 ++++++ .../python/petstore_api/model/apple.py | 87 ++++++ .../python/petstore_api/model/apple_req.py | 87 ++++++ .../model/array_of_array_of_number_only.py | 83 +++++ .../petstore_api/model/array_of_enums.py | 99 ++++++ .../model/array_of_number_only.py | 83 +++++ .../python/petstore_api/model/array_test.py | 85 ++++++ .../python/petstore_api/model/banana.py | 86 ++++++ .../python/petstore_api/model/banana_req.py | 87 ++++++ .../python/petstore_api/model/basque_pig.py | 86 ++++++ .../petstore_api/model/capitalization.py | 88 ++++++ .../petstore/python/petstore_api/model/cat.py | 100 ++++++ .../python/petstore_api/model/cat_all_of.py | 83 +++++ .../python/petstore_api/model/category.py | 88 ++++++ .../python/petstore_api/model/child_cat.py | 99 ++++++ .../petstore_api/model/child_cat_all_of.py | 83 +++++ .../python/petstore_api/model/class_model.py | 83 +++++ .../python/petstore_api/model/client.py | 83 +++++ .../model/complex_quadrilateral.py | 99 ++++++ ...composed_one_of_number_with_validations.py | 99 ++++++ ...osed_schema_with_props_and_no_add_props.py | 100 ++++++ .../python/petstore_api/model/danish_pig.py | 86 ++++++ .../petstore/python/petstore_api/model/dog.py | 100 ++++++ .../python/petstore_api/model/dog_all_of.py | 83 +++++ .../python/petstore_api/model/drawing.py | 86 ++++++ .../python/petstore_api/model/enum_arrays.py | 84 ++++++ .../python/petstore_api/model/enum_class.py | 95 ++++++ .../python/petstore_api/model/enum_test.py | 96 ++++++ .../model/equilateral_triangle.py | 99 ++++++ ...dditional_properties_payload_array_data.py | 83 +++++ .../python/petstore_api/model/file.py | 83 +++++ .../model/file_schema_test_class.py | 84 ++++++ .../petstore/python/petstore_api/model/foo.py | 83 +++++ .../python/petstore_api/model/format_test.py | 104 +++++++ .../python/petstore_api/model/fruit.py | 101 +++++++ .../python/petstore_api/model/fruit_req.py | 101 +++++++ .../python/petstore_api/model/gm_fruit.py | 101 +++++++ .../petstore_api/model/grandparent_animal.py | 86 ++++++ .../petstore_api/model/has_only_read_only.py | 86 ++++++ .../petstore_api/model/health_check_result.py | 83 +++++ ...nline_additional_properties_ref_payload.py | 83 +++++ .../petstore_api/model/inline_object6.py | 83 +++++ .../model/inline_response_default.py | 83 +++++ .../python/petstore_api/model/integer_enum.py | 99 ++++++ .../model/integer_enum_one_value.py | 95 ++++++ .../model/integer_enum_with_default_value.py | 95 ++++++ .../petstore_api/model/isosceles_triangle.py | 99 ++++++ .../python/petstore_api/model/list.py | 83 +++++ .../python/petstore_api/model/mammal.py | 101 +++++++ .../python/petstore_api/model/map_test.py | 86 ++++++ ...perties_and_additional_properties_class.py | 85 ++++++ .../petstore_api/model/model200_response.py | 84 ++++++ .../python/petstore_api/model/model_return.py | 83 +++++ .../python/petstore_api/model/mole.py | 284 ++++++++++++++++++ .../python/petstore_api/model/name.py | 91 ++++++ .../petstore_api/model/nullable_class.py | 95 ++++++ .../petstore_api/model/nullable_shape.py | 100 ++++++ .../python/petstore_api/model/number_only.py | 83 +++++ .../model/number_with_validations.py | 99 ++++++ .../petstore_api/model/object_interface.py | 82 +++++ .../model/object_model_with_ref_props.py | 86 ++++++ .../model/object_with_validations.py | 82 +++++ .../python/petstore_api/model/order.py | 88 ++++++ .../python/petstore_api/model/parent_pet.py | 98 ++++++ .../petstore/python/petstore_api/model/pet.py | 92 ++++++ .../petstore/python/petstore_api/model/pig.py | 98 ++++++ .../petstore_api/model/quadrilateral.py | 99 ++++++ .../model/quadrilateral_interface.py | 86 ++++++ .../petstore_api/model/read_only_first.py | 85 ++++++ .../python/petstore_api/model/readonly.py | 83 +++++ .../petstore_api/model/scalene_triangle.py | 99 ++++++ .../python/petstore_api/model/shape.py | 100 ++++++ .../petstore_api/model/shape_interface.py | 86 ++++++ .../petstore_api/model/shape_or_null.py | 100 ++++++ .../model/simple_quadrilateral.py | 99 ++++++ .../python/petstore_api/model/some_object.py | 97 ++++++ .../model/some_object_with_self_attr.py | 83 +++++ .../petstore_api/model/special_model_name.py | 83 +++++ .../petstore_api/model/string_boolean_map.py | 82 +++++ .../python/petstore_api/model/string_enum.py | 103 +++++++ .../model/string_enum_with_default_value.py | 95 ++++++ .../petstore/python/petstore_api/model/tag.py | 84 ++++++ .../python/petstore_api/model/triangle.py | 99 ++++++ .../petstore_api/model/triangle_interface.py | 86 ++++++ .../python/petstore_api/model/user.py | 94 ++++++ .../python/petstore_api/model/whale.py | 88 ++++++ .../python/petstore_api/model/zebra.py | 87 ++++++ .../python/petstore_api/model_utils.py | 155 ++++++++-- .../python/petstore_api/models/__init__.py | 1 + .../client/petstore/python/test/test_mole.py | 35 +++ .../petstore/python/tests_manual/test_mole.py | 78 +++++ 244 files changed, 20890 insertions(+), 151 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/python/model_templates/invalid_pos_args.mustache create mode 100644 modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_composed.mustache create mode 100644 modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_normal.mustache create mode 100644 modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_shared.mustache create mode 100644 modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_simple.mustache create mode 100644 samples/openapi3/client/petstore/python/docs/Mole.md create mode 100644 samples/openapi3/client/petstore/python/petstore_api/model/mole.py create mode 100644 samples/openapi3/client/petstore/python/test/test_mole.py create mode 100644 samples/openapi3/client/petstore/python/tests_manual/test_mole.py diff --git a/modules/openapi-generator/src/main/resources/python/model.mustache b/modules/openapi-generator/src/main/resources/python/model.mustache index 680b60644c0d..c8e1bfaa0042 100644 --- a/modules/openapi-generator/src/main/resources/python/model.mustache +++ b/modules/openapi-generator/src/main/resources/python/model.mustache @@ -17,6 +17,9 @@ from {{packageName}}.model_utils import ( # noqa: F401 none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from {{packageName}}.exceptions import ApiAttributeError + {{#models}} {{#model}} {{#imports}} diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/invalid_pos_args.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/invalid_pos_args.mustache new file mode 100644 index 000000000000..143d50c8250c --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python/model_templates/invalid_pos_args.mustache @@ -0,0 +1,9 @@ + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_composed.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_composed.mustache new file mode 100644 index 000000000000..81a4af3f822c --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_composed.mustache @@ -0,0 +1,66 @@ + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """{{classname}} - a model defined in OpenAPI + + Keyword Args: +{{#requiredVars}} +{{#defaultValue}} + {{name}} ({{{dataType}}}):{{#description}} {{{description}}}.{{/description}} defaults to {{{defaultValue}}}{{#allowableValues}}, must be one of [{{#enumVars}}{{{value}}}, {{/enumVars}}]{{/allowableValues}} # noqa: E501 +{{/defaultValue}} +{{^defaultValue}} + {{name}} ({{{dataType}}}):{{#description}} {{{description}}}{{/description}} +{{/defaultValue}} +{{/requiredVars}} +{{> model_templates/docstring_init_required_kwargs }} +{{#optionalVars}} + {{name}} ({{{dataType}}}):{{#description}} {{{description}}}.{{/description}} [optional]{{#defaultValue}} if omitted the server will use the default value of {{{defaultValue}}}{{/defaultValue}} # noqa: E501 +{{/optionalVars}} + """ + +{{#requiredVars}} +{{#defaultValue}} + {{name}} = kwargs.get('{{name}}', {{{defaultValue}}}) +{{/defaultValue}} +{{/requiredVars}} + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + +{{> model_templates/invalid_pos_args }} + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_normal.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_normal.mustache new file mode 100644 index 000000000000..3b82ba7fc3a6 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_normal.mustache @@ -0,0 +1,17 @@ +{{> model_templates/method_from_openapi_data_shared }} + +{{#isEnum}} + self.value = value +{{/isEnum}} +{{#requiredVars}} + self.{{name}} = {{name}} +{{/requiredVars}} + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_shared.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_shared.mustache new file mode 100644 index 000000000000..9dd84236b9ff --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_shared.mustache @@ -0,0 +1,49 @@ + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls{{#requiredVars}}{{^defaultValue}}, {{name}}{{/defaultValue}}{{/requiredVars}}, *args, **kwargs): # noqa: E501 + """{{classname}} - a model defined in OpenAPI + +{{#requiredVars}} +{{#-first}} + Args: +{{/-first}} +{{^defaultValue}} + {{name}} ({{{dataType}}}):{{#description}} {{{description}}}{{/description}} +{{/defaultValue}} +{{#-last}} + +{{/-last}} +{{/requiredVars}} + Keyword Args: +{{#requiredVars}} +{{#defaultValue}} + {{name}} ({{{dataType}}}):{{#description}} {{{description}}}.{{/description}} defaults to {{{defaultValue}}}{{#allowableValues}}, must be one of [{{#enumVars}}{{{value}}}, {{/enumVars}}]{{/allowableValues}} # noqa: E501 +{{/defaultValue}} +{{/requiredVars}} +{{> model_templates/docstring_init_required_kwargs }} +{{#optionalVars}} + {{name}} ({{{dataType}}}):{{#description}} {{{description}}}.{{/description}} [optional]{{#defaultValue}} if omitted the server will use the default value of {{{defaultValue}}}{{/defaultValue}} # noqa: E501 +{{/optionalVars}} + """ + +{{#requiredVars}} +{{#defaultValue}} + {{name}} = kwargs.get('{{name}}', {{{defaultValue}}}) +{{/defaultValue}} +{{/requiredVars}} + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + +{{> model_templates/invalid_pos_args }} + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_simple.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_simple.mustache new file mode 100644 index 000000000000..0756046ede25 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python/model_templates/method_from_openapi_data_simple.mustache @@ -0,0 +1,62 @@ + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """{{classname}} - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] ({{{dataType}}}):{{#description}} {{{description}}}.{{/description}}{{#defaultValue}} if omitted defaults to {{{defaultValue}}}{{/defaultValue}}{{#allowableValues}}, must be one of [{{#enumVars}}{{{value}}}, {{/enumVars}}]{{/allowableValues}} # noqa: E501 + + Keyword Args: + value ({{{dataType}}}):{{#description}} {{{description}}}.{{/description}}{{#defaultValue}} if omitted defaults to {{{defaultValue}}}{{/defaultValue}}{{#allowableValues}}, must be one of [{{#enumVars}}{{{value}}}, {{/enumVars}}]{{/allowableValues}} # noqa: E501 +{{> model_templates/docstring_init_required_kwargs }} + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) +{{#defaultValue}} + else: + value = {{{defaultValue}}} +{{/defaultValue}} +{{^defaultValue}} + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) +{{/defaultValue}} + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + +{{> model_templates/invalid_pos_args }} + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/method_init_composed.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/method_init_composed.mustache index ca0505ead969..cc6f4b46bd71 100644 --- a/modules/openapi-generator/src/main/resources/python/model_templates/method_init_composed.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_templates/method_init_composed.mustache @@ -16,12 +16,14 @@ Keyword Args: {{#requiredVars}} +{{^isReadOnly}} {{#defaultValue}} {{name}} ({{{dataType}}}):{{#description}} {{{description}}}.{{/description}} defaults to {{{defaultValue}}}{{#allowableValues}}, must be one of [{{#enumVars}}{{{value}}}, {{/enumVars}}]{{/allowableValues}} # noqa: E501 {{/defaultValue}} {{^defaultValue}} {{name}} ({{{dataType}}}):{{#description}} {{{description}}}{{/description}} {{/defaultValue}} +{{/isReadOnly}} {{/requiredVars}} {{> model_templates/docstring_init_required_kwargs }} {{#optionalVars}} @@ -30,9 +32,11 @@ """ {{#requiredVars}} +{{^isReadOnly}} {{#defaultValue}} {{name}} = kwargs.get('{{name}}', {{{defaultValue}}}) {{/defaultValue}} +{{/isReadOnly}} {{/requiredVars}} _check_type = kwargs.pop('_check_type', True) _spec_property_naming = kwargs.pop('_spec_property_naming', False) @@ -40,15 +44,7 @@ _configuration = kwargs.pop('_configuration', None) _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) - if args: - raise ApiTypeError( - "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( - args, - self.__class__.__name__, - ), - path_to_item=_path_to_item, - valid_classes=(self.__class__,), - ) +{{> model_templates/invalid_pos_args }} self._data_store = {} self._check_type = _check_type @@ -78,4 +74,7 @@ self._additional_properties_model_instances: # discard variable. continue - setattr(self, var_name, var_value) \ No newline at end of file + setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/method_init_normal.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/method_init_normal.mustache index e670b4ffb4c3..bc5e7686f815 100644 --- a/modules/openapi-generator/src/main/resources/python/model_templates/method_init_normal.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_templates/method_init_normal.mustache @@ -13,7 +13,9 @@ self.value = value {{/isEnum}} {{#requiredVars}} +{{^isReadOnly}} self.{{name}} = {{name}} +{{/isReadOnly}} {{/requiredVars}} for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ @@ -22,4 +24,7 @@ self.additional_properties_type is None: # discard variable. continue - setattr(self, var_name, var_value) \ No newline at end of file + setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/method_init_shared.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/method_init_shared.mustache index a766c14bac0f..0eb4de6a13e9 100644 --- a/modules/openapi-generator/src/main/resources/python/model_templates/method_init_shared.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_templates/method_init_shared.mustache @@ -1,8 +1,9 @@ @convert_js_args_to_python_args - def __init__(self{{#requiredVars}}{{^defaultValue}}, {{name}}{{/defaultValue}}{{/requiredVars}}, *args, **kwargs): # noqa: E501 + def __init__(self{{#requiredVars}}{{^isReadOnly}}{{^defaultValue}}, {{name}}{{/defaultValue}}{{/isReadOnly}}{{/requiredVars}}, *args, **kwargs): # noqa: E501 """{{classname}} - a model defined in OpenAPI {{#requiredVars}} +{{^isReadOnly}} {{#-first}} Args: {{/-first}} @@ -12,12 +13,15 @@ {{#-last}} {{/-last}} +{{/isReadOnly}} {{/requiredVars}} Keyword Args: {{#requiredVars}} +{{^isReadOnly}} {{#defaultValue}} {{name}} ({{{dataType}}}):{{#description}} {{{description}}}.{{/description}} defaults to {{{defaultValue}}}{{#allowableValues}}, must be one of [{{#enumVars}}{{{value}}}, {{/enumVars}}]{{/allowableValues}} # noqa: E501 {{/defaultValue}} +{{/isReadOnly}} {{/requiredVars}} {{> model_templates/docstring_init_required_kwargs }} {{#optionalVars}} @@ -26,9 +30,11 @@ """ {{#requiredVars}} +{{^isReadOnly}} {{#defaultValue}} {{name}} = kwargs.get('{{name}}', {{{defaultValue}}}) {{/defaultValue}} +{{/isReadOnly}} {{/requiredVars}} _check_type = kwargs.pop('_check_type', True) _spec_property_naming = kwargs.pop('_spec_property_naming', False) @@ -36,15 +42,7 @@ _configuration = kwargs.pop('_configuration', None) _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) - if args: - raise ApiTypeError( - "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( - args, - self.__class__.__name__, - ), - path_to_item=_path_to_item, - valid_classes=(self.__class__,), - ) +{{> model_templates/invalid_pos_args }} self._data_store = {} self._check_type = _check_type diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/method_init_simple.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/method_init_simple.mustache index 9e06a6a22ed9..c6950a7d3642 100644 --- a/modules/openapi-generator/src/main/resources/python/model_templates/method_init_simple.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_templates/method_init_simple.mustache @@ -46,15 +46,7 @@ _configuration = kwargs.pop('_configuration', None) _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) - if args: - raise ApiTypeError( - "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( - args, - self.__class__.__name__, - ), - path_to_item=_path_to_item, - valid_classes=(self.__class__,), - ) +{{> model_templates/invalid_pos_args }} self._data_store = {} self._check_type = _check_type diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/model_composed.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/model_composed.mustache index 76fe3a8f5074..9a5ab0f66b6b 100644 --- a/modules/openapi-generator/src/main/resources/python/model_templates/model_composed.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_templates/model_composed.mustache @@ -24,6 +24,21 @@ class {{classname}}(ModelComposed): {{/optionalVars}} } + read_only_vars = { +{{#requiredVars}} +{{#isReadOnly}} + '{{name}}', # noqa: E501 +{{/isReadOnly}} +{{/requiredVars}} +{{#optionalVars}} +{{#isReadOnly}} + '{{name}}', # noqa: E501 +{{/isReadOnly}} +{{/optionalVars}} + } + +{{> model_templates/method_from_openapi_data_composed }} + {{> model_templates/method_init_composed }} @cached_property diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/model_normal.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/model_normal.mustache index 9aada8f5a08b..513aa01e66e1 100644 --- a/modules/openapi-generator/src/main/resources/python/model_templates/model_normal.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_templates/model_normal.mustache @@ -24,6 +24,21 @@ class {{classname}}(ModelNormal): {{/optionalVars}} } + read_only_vars = { +{{#requiredVars}} +{{#isReadOnly}} + '{{name}}', # noqa: E501 +{{/isReadOnly}} +{{/requiredVars}} +{{#optionalVars}} +{{#isReadOnly}} + '{{name}}', # noqa: E501 +{{/isReadOnly}} +{{/optionalVars}} + } + _composed_schemas = {} +{{> model_templates/method_from_openapi_data_normal}} + {{> model_templates/method_init_normal}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python/model_templates/model_simple.mustache b/modules/openapi-generator/src/main/resources/python/model_templates/model_simple.mustache index a4055af756be..1a41a9cf7e27 100644 --- a/modules/openapi-generator/src/main/resources/python/model_templates/model_simple.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_templates/model_simple.mustache @@ -13,6 +13,10 @@ class {{classname}}(ModelSimple): attribute_map = {} + read_only_vars = set() + _composed_schemas = None -{{> model_templates/method_init_simple}} \ No newline at end of file +{{> model_templates/method_init_simple}} + +{{> model_templates/method_from_openapi_data_simple}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python/model_utils.mustache b/modules/openapi-generator/src/main/resources/python/model_utils.mustache index 3621a5eec51b..73e6e7d555b0 100644 --- a/modules/openapi-generator/src/main/resources/python/model_utils.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_utils.mustache @@ -21,6 +21,22 @@ none_type = type(None) file_type = io.IOBase +def convert_js_args_to_python_args(fn): + from functools import wraps + @wraps(fn) + def wrapped_init(_self, *args, **kwargs): + """ + An attribute named `self` received from the api will conflicts with the reserved `self` + parameter of a class method. During generation, `self` attributes are mapped + to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. + """ + spec_property_naming = kwargs.get('_spec_property_naming', False) + if spec_property_naming: + kwargs = change_keys_js_to_python(kwargs, _self if isinstance(_self, type) else _self.__class__) + return fn(_self, *args, **kwargs) + return wrapped_init + + class cached_property(object): # this caches the result of the function call for fn with no inputs # use this as a decorator on fuction methods that you want converted @@ -212,6 +228,121 @@ class OpenApiModel(object): return new_inst + @classmethod + @convert_js_args_to_python_args + def _new_from_openapi_data(cls, *args, **kwargs): + # this function uses the discriminator to + # pick a new schema/class to instantiate because a discriminator + # propertyName value was passed in + + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance(cls, model_kwargs, kwargs, model_arg=arg) + return oneof_instance + + + visited_composed_classes = kwargs.get('_visited_composed_classes', ()) + if ( + cls.discriminator is None or + cls in visited_composed_classes + ): + # Use case 1: this openapi schema (cls) does not have a discriminator + # Use case 2: we have already visited this class before and are sure that we + # want to instantiate it this time. We have visited this class deserializing + # a payload with a discriminator. During that process we traveled through + # this class but did not make an instance of it. Now we are making an + # instance of a composed class which contains cls in it, so this time make an instance of cls. + # + # Here's an example of use case 2: If Animal has a discriminator + # petType and we pass in "Dog", and the class Dog + # allOf includes Animal, we move through Animal + # once using the discriminator, and pick Dog. + # Then in the composed schema dog Dog, we will make an instance of the + # Animal class (because Dal has allOf: Animal) but this time we won't travel + # through Animal's discriminator because we passed in + # _visited_composed_classes = (Animal,) + + return cls._from_openapi_data(*args, **kwargs) + + # Get the name and value of the discriminator property. + # The discriminator name is obtained from the discriminator meta-data + # and the discriminator value is obtained from the input data. + discr_propertyname_py = list(cls.discriminator.keys())[0] + discr_propertyname_js = cls.attribute_map[discr_propertyname_py] + if discr_propertyname_js in kwargs: + discr_value = kwargs[discr_propertyname_js] + elif discr_propertyname_py in kwargs: + discr_value = kwargs[discr_propertyname_py] + else: + # The input data does not contain the discriminator property. + path_to_item = kwargs.get('_path_to_item', ()) + raise ApiValueError( + "Cannot deserialize input data due to missing discriminator. " + "The discriminator property '%s' is missing at path: %s" % + (discr_propertyname_js, path_to_item) + ) + + # Implementation note: the last argument to get_discriminator_class + # is a list of visited classes. get_discriminator_class may recursively + # call itself and update the list of visited classes, and the initial + # value must be an empty list. Hence not using 'visited_composed_classes' + new_cls = get_discriminator_class( + cls, discr_propertyname_py, discr_value, []) + if new_cls is None: + path_to_item = kwargs.get('_path_to_item', ()) + disc_prop_value = kwargs.get( + discr_propertyname_js, kwargs.get(discr_propertyname_py)) + raise ApiValueError( + "Cannot deserialize input data due to invalid discriminator " + "value. The OpenAPI document has no mapping for discriminator " + "property '%s'='%s' at path: %s" % + (discr_propertyname_js, disc_prop_value, path_to_item) + ) + + if new_cls in visited_composed_classes: + # if we are making an instance of a composed schema Descendent + # which allOf includes Ancestor, then Ancestor contains + # a discriminator that includes Descendent. + # So if we make an instance of Descendent, we have to make an + # instance of Ancestor to hold the allOf properties. + # This code detects that use case and makes the instance of Ancestor + # For example: + # When making an instance of Dog, _visited_composed_classes = (Dog,) + # then we make an instance of Animal to include in dog._composed_instances + # so when we are here, cls is Animal + # cls.discriminator != None + # cls not in _visited_composed_classes + # new_cls = Dog + # but we know we know that we already have Dog + # because it is in visited_composed_classes + # so make Animal here + return cls._from_openapi_data(*args, **kwargs) + + # Build a list containing all oneOf and anyOf descendants. + oneof_anyof_classes = None + if cls._composed_schemas is not None: + oneof_anyof_classes = ( + cls._composed_schemas.get('oneOf', ()) + + cls._composed_schemas.get('anyOf', ())) + oneof_anyof_child = new_cls in oneof_anyof_classes + kwargs['_visited_composed_classes'] = visited_composed_classes + (cls,) + + if cls._composed_schemas.get('allOf') and oneof_anyof_child: + # Validate that we can make self because when we make the + # new_cls it will not include the allOf validations in self + self_inst = cls._from_openapi_data(*args, **kwargs) + + + new_inst = new_cls._new_from_openapi_data(*args, **kwargs) + return new_inst + + class ModelSimple(OpenApiModel): """the parent class of models whose type != object in their swagger/openapi""" @@ -911,14 +1042,14 @@ def deserialize_model(model_data, model_class, path_to_item, check_type, _spec_property_naming=spec_property_naming) if issubclass(model_class, ModelSimple): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) elif isinstance(model_data, list): - return model_class(*model_data, **kw_args) + return model_class._new_from_openapi_data(*model_data, **kw_args) if isinstance(model_data, dict): kw_args.update(model_data) - return model_class(**kw_args) + return model_class._new_from_openapi_data(**kw_args) elif isinstance(model_data, PRIMITIVE_TYPES): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) def deserialize_file(response_data, configuration, content_disposition=None): @@ -1280,22 +1411,6 @@ def get_valid_classes_phrase(input_classes): return "is one of [{0}]".format(", ".join(all_class_names)) -def convert_js_args_to_python_args(fn): - from functools import wraps - @wraps(fn) - def wrapped_init(_self, *args, **kwargs): - """ - An attribute named `self` received from the api will conflicts with the reserved `self` - parameter of a class method. During generation, `self` attributes are mapped - to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. - """ - spec_property_naming = kwargs.get('_spec_property_naming', False) - if spec_property_naming: - kwargs = change_keys_js_to_python(kwargs, _self.__class__) - return fn(_self, *args, **kwargs) - return wrapped_init - - def get_allof_instances(self, model_args, constant_args): """ Args: diff --git a/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml b/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml index 27b97c89d8cf..683641e5a862 100644 --- a/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml @@ -2422,3 +2422,26 @@ components: items: type: string nullable: true + Mole: + type: object + required: + - blind + - smell + - hearing + properties: + blind: + type: boolean + readOnly: true + smell: + type: string + readOnly: false + touch: + type: boolean + readOnly: true + taste: + type: string + readOnly: false + hearing: + type: boolean + seeingGhosts: + type: boolean \ No newline at end of file diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_any_type.py b/samples/client/petstore/python/petstore_api/model/additional_properties_any_type.py index 7239795cf4af..34ae88833fbe 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_any_type.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_any_type.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesAnyType(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesAnyType - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_array.py b/samples/client/petstore/python/petstore_api/model/additional_properties_array.py index 7d9403758a0d..55f44f411c27 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_array.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_array.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesArray(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesArray - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_boolean.py b/samples/client/petstore/python/petstore_api/model/additional_properties_boolean.py index ca129b766ec5..b9c5c258e3cc 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_boolean.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_boolean.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesBoolean(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesBoolean - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_class.py b/samples/client/petstore/python/petstore_api/model/additional_properties_class.py index 39719e00dcfa..7e4d3d93c5f5 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_class.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesClass(ModelNormal): @@ -110,8 +113,95 @@ def discriminator(): 'anytype_3': 'anytype_3', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + map_string ({str: (str,)}): [optional] # noqa: E501 + map_number ({str: (float,)}): [optional] # noqa: E501 + map_integer ({str: (int,)}): [optional] # noqa: E501 + map_boolean ({str: (bool,)}): [optional] # noqa: E501 + map_array_integer ({str: ([int],)}): [optional] # noqa: E501 + map_array_anytype ({str: ([bool, date, datetime, dict, float, int, list, str, none_type],)}): [optional] # noqa: E501 + map_map_string ({str: ({str: (str,)},)}): [optional] # noqa: E501 + map_map_anytype ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type,)},)}): [optional] # noqa: E501 + anytype_1 (bool, date, datetime, dict, float, int, list, str, none_type): [optional] # noqa: E501 + anytype_2 (bool, date, datetime, dict, float, int, list, str, none_type): no type is set for this. [optional] # noqa: E501 + anytype_3 (bool, date, datetime, dict, float, int, list, str, none_type): because of a bug in swagger-parser, this should have values {str: (str, int, float...)} but instead we get any type. See https://github.com/swagger-api/swagger-parser/issues/1378. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -200,3 +290,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_integer.py b/samples/client/petstore/python/petstore_api/model/additional_properties_integer.py index 87d78bf36005..f6f80f89c7ad 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_integer.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_integer.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesInteger(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesInteger - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_number.py b/samples/client/petstore/python/petstore_api/model/additional_properties_number.py index b10bd036ff3f..6c094699462a 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_number.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_number.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesNumber(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesNumber - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_object.py b/samples/client/petstore/python/petstore_api/model/additional_properties_object.py index 000653f13a73..1fa671aff9b2 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_object.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_object.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesObject(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesObject - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/additional_properties_string.py b/samples/client/petstore/python/petstore_api/model/additional_properties_string.py index 7f1f94aa6b6b..0afa8a9e6376 100644 --- a/samples/client/petstore/python/petstore_api/model/additional_properties_string.py +++ b/samples/client/petstore/python/petstore_api/model/additional_properties_string.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesString(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesString - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/animal.py b/samples/client/petstore/python/petstore_api/model/animal.py index c53b1e1ad289..fda6c283ebdc 100644 --- a/samples/client/petstore/python/petstore_api/model/animal.py +++ b/samples/client/petstore/python/petstore_api/model/animal.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.cat import Cat @@ -106,8 +109,89 @@ def discriminator(): 'color': 'color', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, class_name, *args, **kwargs): # noqa: E501 + """Animal - a model defined in OpenAPI + + Args: + class_name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.class_name = class_name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -190,3 +274,6 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/animal_farm.py b/samples/client/petstore/python/petstore_api/model/animal_farm.py index fb58224ebd4c..59bde51a2907 100644 --- a/samples/client/petstore/python/petstore_api/model/animal_farm.py +++ b/samples/client/petstore/python/petstore_api/model/animal_farm.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -90,6 +93,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -189,3 +194,97 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """AnimalFarm - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] ([Animal]): # noqa: E501 + + Keyword Args: + value ([Animal]): # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/client/petstore/python/petstore_api/model/api_response.py b/samples/client/petstore/python/petstore_api/model/api_response.py index 53adb5aba12f..d1f3b363bef5 100644 --- a/samples/client/petstore/python/petstore_api/model/api_response.py +++ b/samples/client/petstore/python/petstore_api/model/api_response.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ApiResponse(ModelNormal): @@ -94,8 +97,87 @@ def discriminator(): 'message': 'message', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ApiResponse - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + code (int): [optional] # noqa: E501 + type (str): [optional] # noqa: E501 + message (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -176,3 +258,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py b/samples/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py index 8b6a2c42d0ed..16d9bda29f1f 100644 --- a/samples/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py +++ b/samples/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ArrayOfArrayOfNumberOnly(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'array_array_number': 'ArrayArrayNumber', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ArrayOfArrayOfNumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_array_number ([[float]]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/array_of_number_only.py b/samples/client/petstore/python/petstore_api/model/array_of_number_only.py index 7b754dc283e6..0e44ab61aff5 100644 --- a/samples/client/petstore/python/petstore_api/model/array_of_number_only.py +++ b/samples/client/petstore/python/petstore_api/model/array_of_number_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ArrayOfNumberOnly(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'array_number': 'ArrayNumber', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ArrayOfNumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_number ([float]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/array_test.py b/samples/client/petstore/python/petstore_api/model/array_test.py index 9691a1e60374..64c180d11bc5 100644 --- a/samples/client/petstore/python/petstore_api/model/array_test.py +++ b/samples/client/petstore/python/petstore_api/model/array_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.read_only_first import ReadOnlyFirst @@ -100,8 +103,87 @@ def discriminator(): 'array_array_of_model': 'array_array_of_model', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ArrayTest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_of_string ([str]): [optional] # noqa: E501 + array_array_of_integer ([[int]]): [optional] # noqa: E501 + array_array_of_model ([[ReadOnlyFirst]]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -182,3 +264,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/capitalization.py b/samples/client/petstore/python/petstore_api/model/capitalization.py index 6d939535ceef..2f1323481dca 100644 --- a/samples/client/petstore/python/petstore_api/model/capitalization.py +++ b/samples/client/petstore/python/petstore_api/model/capitalization.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Capitalization(ModelNormal): @@ -100,8 +103,90 @@ def discriminator(): 'att_name': 'ATT_NAME', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Capitalization - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + small_camel (str): [optional] # noqa: E501 + capital_camel (str): [optional] # noqa: E501 + small_snake (str): [optional] # noqa: E501 + capital_snake (str): [optional] # noqa: E501 + sca_eth_flow_points (str): [optional] # noqa: E501 + att_name (str): Name of the pet . [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -185,3 +270,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/cat.py b/samples/client/petstore/python/petstore_api/model/cat.py index eeea79359fc9..be46fe5abd8c 100644 --- a/samples/client/petstore/python/petstore_api/model/cat.py +++ b/samples/client/petstore/python/petstore_api/model/cat.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -105,6 +108,100 @@ def discriminator(): 'color': 'color', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Cat - a model defined in OpenAPI + + Keyword Args: + class_name (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + declawed (bool): [optional] # noqa: E501 + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -202,6 +299,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python/petstore_api/model/cat_all_of.py b/samples/client/petstore/python/petstore_api/model/cat_all_of.py index 7efba680b4d8..a5bef948f72b 100644 --- a/samples/client/petstore/python/petstore_api/model/cat_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/cat_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class CatAllOf(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'declawed': 'declawed', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """CatAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + declawed (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/category.py b/samples/client/petstore/python/petstore_api/model/category.py index 4936b4f0e443..b40329c9424d 100644 --- a/samples/client/petstore/python/petstore_api/model/category.py +++ b/samples/client/petstore/python/petstore_api/model/category.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Category(ModelNormal): @@ -92,8 +95,90 @@ def discriminator(): 'id': 'id', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Category - a model defined in OpenAPI + + Args: + + Keyword Args: + name (str): defaults to "default-name" # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + """ + + name = kwargs.get('name', "default-name") + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -177,3 +262,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/child.py b/samples/client/petstore/python/petstore_api/model/child.py index 8fad3bf107bd..556f58a84d20 100644 --- a/samples/client/petstore/python/petstore_api/model/child.py +++ b/samples/client/petstore/python/petstore_api/model/child.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_all_of import ChildAllOf @@ -102,6 +105,100 @@ def discriminator(): 'inter_net': 'interNet', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Child - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + radio_waves (bool): [optional] # noqa: E501 + tele_vision (bool): [optional] # noqa: E501 + inter_net (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -199,6 +296,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python/petstore_api/model/child_all_of.py b/samples/client/petstore/python/petstore_api/model/child_all_of.py index 9db852ec725b..e38d28f52d1b 100644 --- a/samples/client/petstore/python/petstore_api/model/child_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/child_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ChildAllOf(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'inter_net': 'interNet', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + inter_net (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/child_cat.py b/samples/client/petstore/python/petstore_api/model/child_cat.py index d054cb7a97a0..3644df82fc54 100644 --- a/samples/client/petstore/python/petstore_api/model/child_cat.py +++ b/samples/client/petstore/python/petstore_api/model/child_cat.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_cat_all_of import ChildCatAllOf @@ -103,6 +106,99 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildCat - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -199,6 +295,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python/petstore_api/model/child_cat_all_of.py b/samples/client/petstore/python/petstore_api/model/child_cat_all_of.py index 3d732d085fba..48b725d7c3c6 100644 --- a/samples/client/petstore/python/petstore_api/model/child_cat_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/child_cat_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ChildCatAllOf(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildCatAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/child_dog.py b/samples/client/petstore/python/petstore_api/model/child_dog.py index 6244359fea2b..65f1a37e3837 100644 --- a/samples/client/petstore/python/petstore_api/model/child_dog.py +++ b/samples/client/petstore/python/petstore_api/model/child_dog.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_dog_all_of import ChildDogAllOf @@ -103,6 +106,99 @@ def discriminator(): 'bark': 'bark', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildDog - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bark (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -199,6 +295,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python/petstore_api/model/child_dog_all_of.py b/samples/client/petstore/python/petstore_api/model/child_dog_all_of.py index d3a0d89c4da6..40d4f048f87e 100644 --- a/samples/client/petstore/python/petstore_api/model/child_dog_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/child_dog_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ChildDogAllOf(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'bark': 'bark', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildDogAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bark (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/child_lizard.py b/samples/client/petstore/python/petstore_api/model/child_lizard.py index b56925a0c92b..cfb0e5426f74 100644 --- a/samples/client/petstore/python/petstore_api/model/child_lizard.py +++ b/samples/client/petstore/python/petstore_api/model/child_lizard.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_lizard_all_of import ChildLizardAllOf @@ -103,6 +106,99 @@ def discriminator(): 'loves_rocks': 'lovesRocks', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildLizard - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + loves_rocks (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -199,6 +295,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python/petstore_api/model/child_lizard_all_of.py b/samples/client/petstore/python/petstore_api/model/child_lizard_all_of.py index 1c8f29548b57..b0e9771c5800 100644 --- a/samples/client/petstore/python/petstore_api/model/child_lizard_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/child_lizard_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ChildLizardAllOf(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'loves_rocks': 'lovesRocks', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildLizardAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + loves_rocks (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/class_model.py b/samples/client/petstore/python/petstore_api/model/class_model.py index 9e65a9373650..a3f2b58f87f3 100644 --- a/samples/client/petstore/python/petstore_api/model/class_model.py +++ b/samples/client/petstore/python/petstore_api/model/class_model.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ClassModel(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): '_class': '_class', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ClassModel - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _class (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/client.py b/samples/client/petstore/python/petstore_api/model/client.py index 6218de1e19e4..3dca32f7926b 100644 --- a/samples/client/petstore/python/petstore_api/model/client.py +++ b/samples/client/petstore/python/petstore_api/model/client.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Client(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'client': 'client', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Client - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + client (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/dog.py b/samples/client/petstore/python/petstore_api/model/dog.py index 3452f0d040a0..4a20dafa46cc 100644 --- a/samples/client/petstore/python/petstore_api/model/dog.py +++ b/samples/client/petstore/python/petstore_api/model/dog.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -105,6 +108,100 @@ def discriminator(): 'color': 'color', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Dog - a model defined in OpenAPI + + Keyword Args: + class_name (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + breed (str): [optional] # noqa: E501 + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -202,6 +299,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python/petstore_api/model/dog_all_of.py b/samples/client/petstore/python/petstore_api/model/dog_all_of.py index 962903d3a381..dbc36cb2c8f3 100644 --- a/samples/client/petstore/python/petstore_api/model/dog_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/dog_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class DogAllOf(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'breed': 'breed', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """DogAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + breed (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/enum_arrays.py b/samples/client/petstore/python/petstore_api/model/enum_arrays.py index db56838d7e49..da42763d9c32 100644 --- a/samples/client/petstore/python/petstore_api/model/enum_arrays.py +++ b/samples/client/petstore/python/petstore_api/model/enum_arrays.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class EnumArrays(ModelNormal): @@ -100,8 +103,86 @@ def discriminator(): 'array_enum': 'array_enum', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """EnumArrays - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + just_symbol (str): [optional] # noqa: E501 + array_enum ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -181,3 +262,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/enum_class.py b/samples/client/petstore/python/petstore_api/model/enum_class.py index 63be703c38e9..a9e7723b255f 100644 --- a/samples/client/petstore/python/petstore_api/model/enum_class.py +++ b/samples/client/petstore/python/petstore_api/model/enum_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class EnumClass(ModelSimple): @@ -89,6 +92,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -184,3 +189,93 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """EnumClass - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str): if omitted defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] # noqa: E501 + + Keyword Args: + value (str): if omitted defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + value = "-efg" + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/client/petstore/python/petstore_api/model/enum_test.py b/samples/client/petstore/python/petstore_api/model/enum_test.py index ee14c70b46f2..a3f47184d1a0 100644 --- a/samples/client/petstore/python/petstore_api/model/enum_test.py +++ b/samples/client/petstore/python/petstore_api/model/enum_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.string_enum import StringEnum @@ -122,8 +125,92 @@ def discriminator(): 'string_enum': 'stringEnum', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, enum_string_required, *args, **kwargs): # noqa: E501 + """EnumTest - a model defined in OpenAPI + + Args: + enum_string_required (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + enum_string (str): [optional] # noqa: E501 + enum_integer (int): [optional] # noqa: E501 + enum_number (float): [optional] # noqa: E501 + string_enum (StringEnum): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.enum_string_required = enum_string_required + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -209,3 +296,6 @@ def __init__(self, enum_string_required, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/file.py b/samples/client/petstore/python/petstore_api/model/file.py index 137d00263242..849f5727dc9f 100644 --- a/samples/client/petstore/python/petstore_api/model/file.py +++ b/samples/client/petstore/python/petstore_api/model/file.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class File(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'source_uri': 'sourceURI', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """File - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + source_uri (str): Test capitalization. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/file_schema_test_class.py b/samples/client/petstore/python/petstore_api/model/file_schema_test_class.py index 3722125ae485..f7e154e47b7c 100644 --- a/samples/client/petstore/python/petstore_api/model/file_schema_test_class.py +++ b/samples/client/petstore/python/petstore_api/model/file_schema_test_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.file import File @@ -98,8 +101,86 @@ def discriminator(): 'files': 'files', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """FileSchemaTestClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + file (File): [optional] # noqa: E501 + files ([File]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -179,3 +260,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/format_test.py b/samples/client/petstore/python/petstore_api/model/format_test.py index 7b415af7ad2c..1d3ef5f76b40 100644 --- a/samples/client/petstore/python/petstore_api/model/format_test.py +++ b/samples/client/petstore/python/petstore_api/model/format_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class FormatTest(ModelNormal): @@ -149,8 +152,103 @@ def discriminator(): 'uuid': 'uuid', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, number, byte, date, password, *args, **kwargs): # noqa: E501 + """FormatTest - a model defined in OpenAPI + + Args: + number (float): + byte (str): + date (date): + password (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + integer (int): [optional] # noqa: E501 + int32 (int): [optional] # noqa: E501 + int64 (int): [optional] # noqa: E501 + float (float): [optional] # noqa: E501 + double (float): [optional] # noqa: E501 + string (str): [optional] # noqa: E501 + binary (file_type): [optional] # noqa: E501 + date_time (datetime): [optional] # noqa: E501 + uuid (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.number = number + self.byte = byte + self.date = date + self.password = password + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -247,3 +345,6 @@ def __init__(self, number, byte, date, password, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/grandparent.py b/samples/client/petstore/python/petstore_api/model/grandparent.py index 728b1e1d1297..b92e3acdcf39 100644 --- a/samples/client/petstore/python/petstore_api/model/grandparent.py +++ b/samples/client/petstore/python/petstore_api/model/grandparent.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Grandparent(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'radio_waves': 'radioWaves', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Grandparent - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + radio_waves (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/grandparent_animal.py b/samples/client/petstore/python/petstore_api/model/grandparent_animal.py index 089f5a4a07c6..fd77a46211fe 100644 --- a/samples/client/petstore/python/petstore_api/model/grandparent_animal.py +++ b/samples/client/petstore/python/petstore_api/model/grandparent_animal.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_cat import ChildCat @@ -110,8 +113,88 @@ def discriminator(): 'pet_type': 'pet_type', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, pet_type, *args, **kwargs): # noqa: E501 + """GrandparentAnimal - a model defined in OpenAPI + + Args: + pet_type (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.pet_type = pet_type + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -193,3 +276,6 @@ def __init__(self, pet_type, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/has_only_read_only.py b/samples/client/petstore/python/petstore_api/model/has_only_read_only.py index 4ea0bb087217..33d1c15b58d9 100644 --- a/samples/client/petstore/python/petstore_api/model/has_only_read_only.py +++ b/samples/client/petstore/python/petstore_api/model/has_only_read_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class HasOnlyReadOnly(ModelNormal): @@ -92,8 +95,88 @@ def discriminator(): 'foo': 'foo', # noqa: E501 } + read_only_vars = { + 'bar', # noqa: E501 + 'foo', # noqa: E501 + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """HasOnlyReadOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bar (str): [optional] # noqa: E501 + foo (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +256,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/list.py b/samples/client/petstore/python/petstore_api/model/list.py index 11b46f10b565..4b71d9deec05 100644 --- a/samples/client/petstore/python/petstore_api/model/list.py +++ b/samples/client/petstore/python/petstore_api/model/list.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class List(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): '_123_list': '123-list', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """List - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _123_list (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/map_test.py b/samples/client/petstore/python/petstore_api/model/map_test.py index a5418b39e734..39c3b180e88c 100644 --- a/samples/client/petstore/python/petstore_api/model/map_test.py +++ b/samples/client/petstore/python/petstore_api/model/map_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.string_boolean_map import StringBooleanMap @@ -106,8 +109,88 @@ def discriminator(): 'indirect_map': 'indirect_map', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """MapTest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + map_map_of_string ({str: ({str: (str,)},)}): [optional] # noqa: E501 + map_of_enum_string ({str: (str,)}): [optional] # noqa: E501 + direct_map ({str: (bool,)}): [optional] # noqa: E501 + indirect_map (StringBooleanMap): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -189,3 +272,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py b/samples/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py index 67b3f79d9e5f..f46cd0b89726 100644 --- a/samples/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py +++ b/samples/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -100,8 +103,87 @@ def discriminator(): 'map': 'map', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """MixedPropertiesAndAdditionalPropertiesClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + uuid (str): [optional] # noqa: E501 + date_time (datetime): [optional] # noqa: E501 + map ({str: (Animal,)}): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -182,3 +264,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/model200_response.py b/samples/client/petstore/python/petstore_api/model/model200_response.py index 056f4c56ad35..41a8dee5fdf2 100644 --- a/samples/client/petstore/python/petstore_api/model/model200_response.py +++ b/samples/client/petstore/python/petstore_api/model/model200_response.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Model200Response(ModelNormal): @@ -92,8 +95,86 @@ def discriminator(): '_class': 'class', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Model200Response - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (int): [optional] # noqa: E501 + _class (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +254,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/model_return.py b/samples/client/petstore/python/petstore_api/model/model_return.py index 5f34582cdb4a..f3720b05246f 100644 --- a/samples/client/petstore/python/petstore_api/model/model_return.py +++ b/samples/client/petstore/python/petstore_api/model/model_return.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ModelReturn(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): '_return': 'return', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ModelReturn - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _return (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/name.py b/samples/client/petstore/python/petstore_api/model/name.py index 06b387ce9bfe..d46618c88a14 100644 --- a/samples/client/petstore/python/petstore_api/model/name.py +++ b/samples/client/petstore/python/petstore_api/model/name.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Name(ModelNormal): @@ -96,8 +99,93 @@ def discriminator(): '_123_number': '123Number', # noqa: E501 } + read_only_vars = { + 'snake_case', # noqa: E501 + '_123_number', # noqa: E501 + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, *args, **kwargs): # noqa: E501 + """Name - a model defined in OpenAPI + + Args: + name (int): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + snake_case (int): [optional] # noqa: E501 + _property (str): [optional] # noqa: E501 + _123_number (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -182,3 +270,6 @@ def __init__(self, name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/number_only.py b/samples/client/petstore/python/petstore_api/model/number_only.py index cb2c9e2ad526..a96d91650569 100644 --- a/samples/client/petstore/python/petstore_api/model/number_only.py +++ b/samples/client/petstore/python/petstore_api/model/number_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class NumberOnly(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'just_number': 'JustNumber', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """NumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + just_number (float): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/number_with_validations.py b/samples/client/petstore/python/petstore_api/model/number_with_validations.py index fb47d885bfd7..27bc46dbe442 100644 --- a/samples/client/petstore/python/petstore_api/model/number_with_validations.py +++ b/samples/client/petstore/python/petstore_api/model/number_with_validations.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class NumberWithValidations(ModelSimple): @@ -88,6 +91,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -187,3 +192,97 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """NumberWithValidations - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (float): # noqa: E501 + + Keyword Args: + value (float): # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/client/petstore/python/petstore_api/model/object_model_with_ref_props.py b/samples/client/petstore/python/petstore_api/model/object_model_with_ref_props.py index 7256f67a8d6b..2ef48316f430 100644 --- a/samples/client/petstore/python/petstore_api/model/object_model_with_ref_props.py +++ b/samples/client/petstore/python/petstore_api/model/object_model_with_ref_props.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.number_with_validations import NumberWithValidations @@ -100,8 +103,87 @@ def discriminator(): 'my_boolean': 'my_boolean', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ObjectModelWithRefProps - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + my_number (NumberWithValidations): [optional] # noqa: E501 + my_string (str): [optional] # noqa: E501 + my_boolean (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -182,3 +264,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/order.py b/samples/client/petstore/python/petstore_api/model/order.py index 48207e4560eb..eeefff1513f6 100644 --- a/samples/client/petstore/python/petstore_api/model/order.py +++ b/samples/client/petstore/python/petstore_api/model/order.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Order(ModelNormal): @@ -105,8 +108,90 @@ def discriminator(): 'complete': 'complete', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Order - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + pet_id (int): [optional] # noqa: E501 + quantity (int): [optional] # noqa: E501 + ship_date (datetime): [optional] # noqa: E501 + status (str): Order Status. [optional] # noqa: E501 + complete (bool): [optional] if omitted the server will use the default value of False # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -190,3 +275,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/parent.py b/samples/client/petstore/python/petstore_api/model/parent.py index 063d5051747d..e43f678253de 100644 --- a/samples/client/petstore/python/petstore_api/model/parent.py +++ b/samples/client/petstore/python/petstore_api/model/parent.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.grandparent import Grandparent @@ -100,6 +103,99 @@ def discriminator(): 'tele_vision': 'teleVision', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Parent - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + radio_waves (bool): [optional] # noqa: E501 + tele_vision (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -196,6 +292,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python/petstore_api/model/parent_all_of.py b/samples/client/petstore/python/petstore_api/model/parent_all_of.py index 2f7b8a791d29..602e3f610a0a 100644 --- a/samples/client/petstore/python/petstore_api/model/parent_all_of.py +++ b/samples/client/petstore/python/petstore_api/model/parent_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ParentAllOf(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'tele_vision': 'teleVision', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ParentAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + tele_vision (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/parent_pet.py b/samples/client/petstore/python/petstore_api/model/parent_pet.py index b012d1558a79..fd774033ee35 100644 --- a/samples/client/petstore/python/petstore_api/model/parent_pet.py +++ b/samples/client/petstore/python/petstore_api/model/parent_pet.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_cat import ChildCat @@ -109,6 +112,98 @@ def discriminator(): 'pet_type': 'pet_type', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ParentPet - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -204,6 +299,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python/petstore_api/model/pet.py b/samples/client/petstore/python/petstore_api/model/pet.py index b0c8b08607d1..8946f6d4bea3 100644 --- a/samples/client/petstore/python/petstore_api/model/pet.py +++ b/samples/client/petstore/python/petstore_api/model/pet.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.category import Category @@ -113,8 +116,94 @@ def discriminator(): 'status': 'status', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, photo_urls, *args, **kwargs): # noqa: E501 + """Pet - a model defined in OpenAPI + + Args: + name (str): + photo_urls ([str]): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + category (Category): [optional] # noqa: E501 + tags ([Tag]): [optional] # noqa: E501 + status (str): pet status in the store. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + self.photo_urls = photo_urls + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -202,3 +291,6 @@ def __init__(self, name, photo_urls, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/player.py b/samples/client/petstore/python/petstore_api/model/player.py index 2c51f9b57af7..50ab531029b8 100644 --- a/samples/client/petstore/python/petstore_api/model/player.py +++ b/samples/client/petstore/python/petstore_api/model/player.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Player(ModelNormal): @@ -92,8 +95,89 @@ def discriminator(): 'enemy_player': 'enemyPlayer', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, *args, **kwargs): # noqa: E501 + """Player - a model defined in OpenAPI + + Args: + name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + enemy_player (Player): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -176,3 +260,6 @@ def __init__(self, name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/read_only_first.py b/samples/client/petstore/python/petstore_api/model/read_only_first.py index 0302bf96a7e5..38cb5e2634f6 100644 --- a/samples/client/petstore/python/petstore_api/model/read_only_first.py +++ b/samples/client/petstore/python/petstore_api/model/read_only_first.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ReadOnlyFirst(ModelNormal): @@ -92,8 +95,87 @@ def discriminator(): 'baz': 'baz', # noqa: E501 } + read_only_vars = { + 'bar', # noqa: E501 + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ReadOnlyFirst - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bar (str): [optional] # noqa: E501 + baz (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +255,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/special_model_name.py b/samples/client/petstore/python/petstore_api/model/special_model_name.py index cfaedbc78815..cc2e49f6bcb0 100644 --- a/samples/client/petstore/python/petstore_api/model/special_model_name.py +++ b/samples/client/petstore/python/petstore_api/model/special_model_name.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class SpecialModelName(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'special_property_name': '$special[property.name]', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """SpecialModelName - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + special_property_name (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/string_boolean_map.py b/samples/client/petstore/python/petstore_api/model/string_boolean_map.py index 4ac526991839..05f8527fec1e 100644 --- a/samples/client/petstore/python/petstore_api/model/string_boolean_map.py +++ b/samples/client/petstore/python/petstore_api/model/string_boolean_map.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class StringBooleanMap(ModelNormal): @@ -88,8 +91,84 @@ def discriminator(): attribute_map = { } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """StringBooleanMap - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -167,3 +246,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/string_enum.py b/samples/client/petstore/python/petstore_api/model/string_enum.py index 4c92316cb7e0..5bd1e28942e5 100644 --- a/samples/client/petstore/python/petstore_api/model/string_enum.py +++ b/samples/client/petstore/python/petstore_api/model/string_enum.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class StringEnum(ModelSimple): @@ -89,6 +92,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -188,3 +193,97 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """StringEnum - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str):, must be one of ["placed", "approved", "delivered", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["placed", "approved", "delivered", ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/client/petstore/python/petstore_api/model/tag.py b/samples/client/petstore/python/petstore_api/model/tag.py index 01c28233598b..7db3cee0baaf 100644 --- a/samples/client/petstore/python/petstore_api/model/tag.py +++ b/samples/client/petstore/python/petstore_api/model/tag.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Tag(ModelNormal): @@ -94,8 +97,87 @@ def discriminator(): 'full_name': 'fullName', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Tag - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + full_name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -176,3 +258,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/type_holder_default.py b/samples/client/petstore/python/petstore_api/model/type_holder_default.py index 04a96f7e9060..be884db9d136 100644 --- a/samples/client/petstore/python/petstore_api/model/type_holder_default.py +++ b/samples/client/petstore/python/petstore_api/model/type_holder_default.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class TypeHolderDefault(ModelNormal): @@ -102,8 +105,102 @@ def discriminator(): 'datetime_item': 'datetime_item', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, array_item, *args, **kwargs): # noqa: E501 + """TypeHolderDefault - a model defined in OpenAPI + + Args: + array_item ([int]): + + Keyword Args: + string_item (str): defaults to "what" # noqa: E501 + number_item (float): defaults to 1.234 # noqa: E501 + integer_item (int): defaults to -2 # noqa: E501 + bool_item (bool): defaults to True # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + date_item (date): [optional] # noqa: E501 + datetime_item (datetime): [optional] # noqa: E501 + """ + + string_item = kwargs.get('string_item', "what") + number_item = kwargs.get('number_item', 1.234) + integer_item = kwargs.get('integer_item', -2) + bool_item = kwargs.get('bool_item', True) + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.string_item = string_item + self.number_item = number_item + self.integer_item = integer_item + self.bool_item = bool_item + self.array_item = array_item + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -199,3 +296,6 @@ def __init__(self, array_item, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/type_holder_example.py b/samples/client/petstore/python/petstore_api/model/type_holder_example.py index f6e5f44c389b..a0836e32d3f3 100644 --- a/samples/client/petstore/python/petstore_api/model/type_holder_example.py +++ b/samples/client/petstore/python/petstore_api/model/type_holder_example.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class TypeHolderExample(ModelNormal): @@ -107,8 +110,99 @@ def discriminator(): 'array_item': 'array_item', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, bool_item, array_item, *args, **kwargs): # noqa: E501 + """TypeHolderExample - a model defined in OpenAPI + + Args: + bool_item (bool): + array_item ([int]): + + Keyword Args: + string_item (str): defaults to "what", must be one of ["what", ] # noqa: E501 + number_item (float): defaults to 1.234, must be one of [1.234, ] # noqa: E501 + integer_item (int): defaults to -2, must be one of [-2, ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + string_item = kwargs.get('string_item', "what") + number_item = kwargs.get('number_item', 1.234) + integer_item = kwargs.get('integer_item', -2) + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.string_item = string_item + self.number_item = number_item + self.integer_item = integer_item + self.bool_item = bool_item + self.array_item = array_item + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -201,3 +295,6 @@ def __init__(self, bool_item, array_item, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/user.py b/samples/client/petstore/python/petstore_api/model/user.py index 64bd69849330..9c5bc4dfd412 100644 --- a/samples/client/petstore/python/petstore_api/model/user.py +++ b/samples/client/petstore/python/petstore_api/model/user.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class User(ModelNormal): @@ -104,8 +107,92 @@ def discriminator(): 'user_status': 'userStatus', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """User - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + username (str): [optional] # noqa: E501 + first_name (str): [optional] # noqa: E501 + last_name (str): [optional] # noqa: E501 + email (str): [optional] # noqa: E501 + password (str): [optional] # noqa: E501 + phone (str): [optional] # noqa: E501 + user_status (int): User Status. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -191,3 +278,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model/xml_item.py b/samples/client/petstore/python/petstore_api/model/xml_item.py index ba096779721b..060ed03809c6 100644 --- a/samples/client/petstore/python/petstore_api/model/xml_item.py +++ b/samples/client/petstore/python/petstore_api/model/xml_item.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class XmlItem(ModelNormal): @@ -146,8 +149,113 @@ def discriminator(): 'prefix_ns_wrapped_array': 'prefix_ns_wrapped_array', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """XmlItem - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + attribute_string (str): [optional] # noqa: E501 + attribute_number (float): [optional] # noqa: E501 + attribute_integer (int): [optional] # noqa: E501 + attribute_boolean (bool): [optional] # noqa: E501 + wrapped_array ([int]): [optional] # noqa: E501 + name_string (str): [optional] # noqa: E501 + name_number (float): [optional] # noqa: E501 + name_integer (int): [optional] # noqa: E501 + name_boolean (bool): [optional] # noqa: E501 + name_array ([int]): [optional] # noqa: E501 + name_wrapped_array ([int]): [optional] # noqa: E501 + prefix_string (str): [optional] # noqa: E501 + prefix_number (float): [optional] # noqa: E501 + prefix_integer (int): [optional] # noqa: E501 + prefix_boolean (bool): [optional] # noqa: E501 + prefix_array ([int]): [optional] # noqa: E501 + prefix_wrapped_array ([int]): [optional] # noqa: E501 + namespace_string (str): [optional] # noqa: E501 + namespace_number (float): [optional] # noqa: E501 + namespace_integer (int): [optional] # noqa: E501 + namespace_boolean (bool): [optional] # noqa: E501 + namespace_array ([int]): [optional] # noqa: E501 + namespace_wrapped_array ([int]): [optional] # noqa: E501 + prefix_ns_string (str): [optional] # noqa: E501 + prefix_ns_number (float): [optional] # noqa: E501 + prefix_ns_integer (int): [optional] # noqa: E501 + prefix_ns_boolean (bool): [optional] # noqa: E501 + prefix_ns_array ([int]): [optional] # noqa: E501 + prefix_ns_wrapped_array ([int]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -254,3 +362,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python/petstore_api/model_utils.py b/samples/client/petstore/python/petstore_api/model_utils.py index 3a555f0a88c4..3913228d6b89 100644 --- a/samples/client/petstore/python/petstore_api/model_utils.py +++ b/samples/client/petstore/python/petstore_api/model_utils.py @@ -29,6 +29,22 @@ file_type = io.IOBase +def convert_js_args_to_python_args(fn): + from functools import wraps + @wraps(fn) + def wrapped_init(_self, *args, **kwargs): + """ + An attribute named `self` received from the api will conflicts with the reserved `self` + parameter of a class method. During generation, `self` attributes are mapped + to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. + """ + spec_property_naming = kwargs.get('_spec_property_naming', False) + if spec_property_naming: + kwargs = change_keys_js_to_python(kwargs, _self if isinstance(_self, type) else _self.__class__) + return fn(_self, *args, **kwargs) + return wrapped_init + + class cached_property(object): # this caches the result of the function call for fn with no inputs # use this as a decorator on fuction methods that you want converted @@ -284,6 +300,121 @@ def __new__(cls, *args, **kwargs): return new_inst + @classmethod + @convert_js_args_to_python_args + def _new_from_openapi_data(cls, *args, **kwargs): + # this function uses the discriminator to + # pick a new schema/class to instantiate because a discriminator + # propertyName value was passed in + + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance(cls, model_kwargs, kwargs, model_arg=arg) + return oneof_instance + + + visited_composed_classes = kwargs.get('_visited_composed_classes', ()) + if ( + cls.discriminator is None or + cls in visited_composed_classes + ): + # Use case 1: this openapi schema (cls) does not have a discriminator + # Use case 2: we have already visited this class before and are sure that we + # want to instantiate it this time. We have visited this class deserializing + # a payload with a discriminator. During that process we traveled through + # this class but did not make an instance of it. Now we are making an + # instance of a composed class which contains cls in it, so this time make an instance of cls. + # + # Here's an example of use case 2: If Animal has a discriminator + # petType and we pass in "Dog", and the class Dog + # allOf includes Animal, we move through Animal + # once using the discriminator, and pick Dog. + # Then in the composed schema dog Dog, we will make an instance of the + # Animal class (because Dal has allOf: Animal) but this time we won't travel + # through Animal's discriminator because we passed in + # _visited_composed_classes = (Animal,) + + return cls._from_openapi_data(*args, **kwargs) + + # Get the name and value of the discriminator property. + # The discriminator name is obtained from the discriminator meta-data + # and the discriminator value is obtained from the input data. + discr_propertyname_py = list(cls.discriminator.keys())[0] + discr_propertyname_js = cls.attribute_map[discr_propertyname_py] + if discr_propertyname_js in kwargs: + discr_value = kwargs[discr_propertyname_js] + elif discr_propertyname_py in kwargs: + discr_value = kwargs[discr_propertyname_py] + else: + # The input data does not contain the discriminator property. + path_to_item = kwargs.get('_path_to_item', ()) + raise ApiValueError( + "Cannot deserialize input data due to missing discriminator. " + "The discriminator property '%s' is missing at path: %s" % + (discr_propertyname_js, path_to_item) + ) + + # Implementation note: the last argument to get_discriminator_class + # is a list of visited classes. get_discriminator_class may recursively + # call itself and update the list of visited classes, and the initial + # value must be an empty list. Hence not using 'visited_composed_classes' + new_cls = get_discriminator_class( + cls, discr_propertyname_py, discr_value, []) + if new_cls is None: + path_to_item = kwargs.get('_path_to_item', ()) + disc_prop_value = kwargs.get( + discr_propertyname_js, kwargs.get(discr_propertyname_py)) + raise ApiValueError( + "Cannot deserialize input data due to invalid discriminator " + "value. The OpenAPI document has no mapping for discriminator " + "property '%s'='%s' at path: %s" % + (discr_propertyname_js, disc_prop_value, path_to_item) + ) + + if new_cls in visited_composed_classes: + # if we are making an instance of a composed schema Descendent + # which allOf includes Ancestor, then Ancestor contains + # a discriminator that includes Descendent. + # So if we make an instance of Descendent, we have to make an + # instance of Ancestor to hold the allOf properties. + # This code detects that use case and makes the instance of Ancestor + # For example: + # When making an instance of Dog, _visited_composed_classes = (Dog,) + # then we make an instance of Animal to include in dog._composed_instances + # so when we are here, cls is Animal + # cls.discriminator != None + # cls not in _visited_composed_classes + # new_cls = Dog + # but we know we know that we already have Dog + # because it is in visited_composed_classes + # so make Animal here + return cls._from_openapi_data(*args, **kwargs) + + # Build a list containing all oneOf and anyOf descendants. + oneof_anyof_classes = None + if cls._composed_schemas is not None: + oneof_anyof_classes = ( + cls._composed_schemas.get('oneOf', ()) + + cls._composed_schemas.get('anyOf', ())) + oneof_anyof_child = new_cls in oneof_anyof_classes + kwargs['_visited_composed_classes'] = visited_composed_classes + (cls,) + + if cls._composed_schemas.get('allOf') and oneof_anyof_child: + # Validate that we can make self because when we make the + # new_cls it will not include the allOf validations in self + self_inst = cls._from_openapi_data(*args, **kwargs) + + + new_inst = new_cls._new_from_openapi_data(*args, **kwargs) + return new_inst + + class ModelSimple(OpenApiModel): """the parent class of models whose type != object in their swagger/openapi""" @@ -1208,14 +1339,14 @@ def deserialize_model(model_data, model_class, path_to_item, check_type, _spec_property_naming=spec_property_naming) if issubclass(model_class, ModelSimple): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) elif isinstance(model_data, list): - return model_class(*model_data, **kw_args) + return model_class._new_from_openapi_data(*model_data, **kw_args) if isinstance(model_data, dict): kw_args.update(model_data) - return model_class(**kw_args) + return model_class._new_from_openapi_data(**kw_args) elif isinstance(model_data, PRIMITIVE_TYPES): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) def deserialize_file(response_data, configuration, content_disposition=None): @@ -1577,22 +1708,6 @@ def get_valid_classes_phrase(input_classes): return "is one of [{0}]".format(", ".join(all_class_names)) -def convert_js_args_to_python_args(fn): - from functools import wraps - @wraps(fn) - def wrapped_init(_self, *args, **kwargs): - """ - An attribute named `self` received from the api will conflicts with the reserved `self` - parameter of a class method. During generation, `self` attributes are mapped - to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. - """ - spec_property_naming = kwargs.get('_spec_property_naming', False) - if spec_property_naming: - kwargs = change_keys_js_to_python(kwargs, _self.__class__) - return fn(_self, *args, **kwargs) - return wrapped_init - - def get_allof_instances(self, model_args, constant_args): """ Args: diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_any_type.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_any_type.py index 7239795cf4af..34ae88833fbe 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_any_type.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_any_type.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesAnyType(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesAnyType - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_array.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_array.py index 7d9403758a0d..55f44f411c27 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_array.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_array.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesArray(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesArray - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_boolean.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_boolean.py index ca129b766ec5..b9c5c258e3cc 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_boolean.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_boolean.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesBoolean(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesBoolean - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_class.py index 292f467aaa8a..5a38128ad89e 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_class.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesClass(ModelNormal): @@ -104,8 +107,95 @@ def discriminator(): 'anytype_3': 'anytype_3', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + map_string ({str: (str,)}): [optional] # noqa: E501 + map_number ({str: (float,)}): [optional] # noqa: E501 + map_integer ({str: (int,)}): [optional] # noqa: E501 + map_boolean ({str: (bool,)}): [optional] # noqa: E501 + map_array_integer ({str: ([int],)}): [optional] # noqa: E501 + map_array_anytype ({str: ([bool, date, datetime, dict, float, int, list, str, none_type],)}): [optional] # noqa: E501 + map_map_string ({str: ({str: (str,)},)}): [optional] # noqa: E501 + map_map_anytype ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type,)},)}): [optional] # noqa: E501 + anytype_1 (bool, date, datetime, dict, float, int, list, str, none_type): [optional] # noqa: E501 + anytype_2 (bool, date, datetime, dict, float, int, list, str, none_type): no type is set for this. [optional] # noqa: E501 + anytype_3 (bool, date, datetime, dict, float, int, list, str, none_type): because of a bug in swagger-parser, this should have values {str: (str, int, float...)} but instead we get any type. See https://github.com/swagger-api/swagger-parser/issues/1378. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -194,3 +284,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_integer.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_integer.py index 87d78bf36005..f6f80f89c7ad 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_integer.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_integer.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesInteger(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesInteger - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_number.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_number.py index b10bd036ff3f..6c094699462a 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_number.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_number.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesNumber(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesNumber - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_object.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_object.py index 000653f13a73..1fa671aff9b2 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_object.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_object.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesObject(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesObject - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_string.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_string.py index 7f1f94aa6b6b..0afa8a9e6376 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_string.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/additional_properties_string.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesString(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesString - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal.py index a3d48b6ea975..d1a9e4afbb06 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.cat import Cat @@ -99,8 +102,89 @@ def discriminator(): 'color': 'color', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, class_name, *args, **kwargs): # noqa: E501 + """Animal - a model defined in OpenAPI + + Args: + class_name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.class_name = class_name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -183,3 +267,6 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal_farm.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal_farm.py index 838b18a12970..042a8274ee7a 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal_farm.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/animal_farm.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -83,6 +86,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -182,3 +187,97 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """AnimalFarm - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] ([Animal]): # noqa: E501 + + Keyword Args: + value ([Animal]): # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/api_response.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/api_response.py index 01e2175b8004..5abc32eafe2a 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/api_response.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/api_response.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ApiResponse(ModelNormal): @@ -88,8 +91,87 @@ def discriminator(): 'message': 'message', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ApiResponse - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + code (int): [optional] # noqa: E501 + type (str): [optional] # noqa: E501 + message (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +252,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_array_of_number_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_array_of_number_only.py index 008b74dd42a3..905860719151 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_array_of_number_only.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_array_of_number_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ArrayOfArrayOfNumberOnly(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'array_array_number': 'ArrayArrayNumber', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ArrayOfArrayOfNumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_array_number ([[float]]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_number_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_number_only.py index f2e080bc258e..e343a727d6e1 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_number_only.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_of_number_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ArrayOfNumberOnly(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'array_number': 'ArrayNumber', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ArrayOfNumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_number ([float]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_test.py index ac42b07b93c9..13649acbe327 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_test.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/array_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.read_only_first import ReadOnlyFirst @@ -93,8 +96,87 @@ def discriminator(): 'array_array_of_model': 'array_array_of_model', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ArrayTest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_of_string ([str]): [optional] # noqa: E501 + array_array_of_integer ([[int]]): [optional] # noqa: E501 + array_array_of_model ([[ReadOnlyFirst]]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -175,3 +257,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/capitalization.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/capitalization.py index 710c17e51a56..75a354d29595 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/capitalization.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/capitalization.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Capitalization(ModelNormal): @@ -94,8 +97,90 @@ def discriminator(): 'att_name': 'ATT_NAME', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Capitalization - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + small_camel (str): [optional] # noqa: E501 + capital_camel (str): [optional] # noqa: E501 + small_snake (str): [optional] # noqa: E501 + capital_snake (str): [optional] # noqa: E501 + sca_eth_flow_points (str): [optional] # noqa: E501 + att_name (str): Name of the pet . [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -179,3 +264,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat.py index fd8d4bc7179c..c67141833849 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -98,6 +101,100 @@ def discriminator(): 'color': 'color', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Cat - a model defined in OpenAPI + + Keyword Args: + class_name (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + declawed (bool): [optional] # noqa: E501 + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -195,6 +292,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat_all_of.py index 50b046510dfa..5ed2c9cdf280 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat_all_of.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/cat_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class CatAllOf(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'declawed': 'declawed', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """CatAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + declawed (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/category.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/category.py index ed167471d356..cf8a13849754 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/category.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/category.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Category(ModelNormal): @@ -86,8 +89,90 @@ def discriminator(): 'id': 'id', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Category - a model defined in OpenAPI + + Args: + + Keyword Args: + name (str): defaults to "default-name" # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + """ + + name = kwargs.get('name', "default-name") + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -171,3 +256,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child.py index d36723dd6250..02324cb640c1 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_all_of import ChildAllOf @@ -95,6 +98,100 @@ def discriminator(): 'inter_net': 'interNet', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Child - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + radio_waves (bool): [optional] # noqa: E501 + tele_vision (bool): [optional] # noqa: E501 + inter_net (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -192,6 +289,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_all_of.py index 2339e520bd65..e3f8db2e199a 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_all_of.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ChildAllOf(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'inter_net': 'interNet', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + inter_net (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat.py index 70438f3441ff..fe267715ade7 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_cat_all_of import ChildCatAllOf @@ -96,6 +99,99 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildCat - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -192,6 +288,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat_all_of.py index f0f1a1ae6bd4..ceacfbcd7b15 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat_all_of.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_cat_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ChildCatAllOf(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildCatAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog.py index df4956266ae6..c1b0dc5e868a 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_dog_all_of import ChildDogAllOf @@ -96,6 +99,99 @@ def discriminator(): 'bark': 'bark', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildDog - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bark (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -192,6 +288,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog_all_of.py index d460b68b3d3a..41c87c20618b 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog_all_of.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_dog_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ChildDogAllOf(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'bark': 'bark', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildDogAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bark (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard.py index 1f50ba403ed1..ef95bd5b8ca4 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_lizard_all_of import ChildLizardAllOf @@ -96,6 +99,99 @@ def discriminator(): 'loves_rocks': 'lovesRocks', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildLizard - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + loves_rocks (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -192,6 +288,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard_all_of.py index 669b9338d796..f88016d08793 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard_all_of.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/child_lizard_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ChildLizardAllOf(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'loves_rocks': 'lovesRocks', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildLizardAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + loves_rocks (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/class_model.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/class_model.py index 18c16f89f908..0ecc844f84c3 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/class_model.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/class_model.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ClassModel(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): '_class': '_class', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ClassModel - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _class (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/client.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/client.py index da615c547731..2b4ac4b91a82 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/client.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/client.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Client(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'client': 'client', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Client - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + client (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog.py index e29ffa336029..d01bdc6e34d0 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -98,6 +101,100 @@ def discriminator(): 'color': 'color', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Dog - a model defined in OpenAPI + + Keyword Args: + class_name (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + breed (str): [optional] # noqa: E501 + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -195,6 +292,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog_all_of.py index b7b2e7db66d9..cdc633dc66ff 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog_all_of.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/dog_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class DogAllOf(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'breed': 'breed', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """DogAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + breed (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_arrays.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_arrays.py index 43ebac57de38..39fe0ffb838c 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_arrays.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_arrays.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class EnumArrays(ModelNormal): @@ -94,8 +97,86 @@ def discriminator(): 'array_enum': 'array_enum', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """EnumArrays - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + just_symbol (str): [optional] # noqa: E501 + array_enum ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -175,3 +256,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_class.py index 14188ca31d28..b0ed3d8966d9 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_class.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class EnumClass(ModelSimple): @@ -83,6 +86,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -178,3 +183,93 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """EnumClass - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str): if omitted defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] # noqa: E501 + + Keyword Args: + value (str): if omitted defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + value = "-efg" + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_test.py index 79ba0f6a747c..a75f4774ae71 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_test.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/enum_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.string_enum import StringEnum @@ -115,8 +118,92 @@ def discriminator(): 'string_enum': 'stringEnum', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, enum_string_required, *args, **kwargs): # noqa: E501 + """EnumTest - a model defined in OpenAPI + + Args: + enum_string_required (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + enum_string (str): [optional] # noqa: E501 + enum_integer (int): [optional] # noqa: E501 + enum_number (float): [optional] # noqa: E501 + string_enum (StringEnum): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.enum_string_required = enum_string_required + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -202,3 +289,6 @@ def __init__(self, enum_string_required, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file.py index a38cccacc6ab..a2beaf44a016 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class File(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'source_uri': 'sourceURI', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """File - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + source_uri (str): Test capitalization. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file_schema_test_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file_schema_test_class.py index b8c519ed9c7c..e3f7608e95da 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file_schema_test_class.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/file_schema_test_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.file import File @@ -91,8 +94,86 @@ def discriminator(): 'files': 'files', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """FileSchemaTestClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + file (File): [optional] # noqa: E501 + files ([File]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -172,3 +253,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/format_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/format_test.py index 494ce2646da0..1588b1de0531 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/format_test.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/format_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class FormatTest(ModelNormal): @@ -143,8 +146,103 @@ def discriminator(): 'uuid': 'uuid', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, number, byte, date, password, *args, **kwargs): # noqa: E501 + """FormatTest - a model defined in OpenAPI + + Args: + number (float): + byte (str): + date (date): + password (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + integer (int): [optional] # noqa: E501 + int32 (int): [optional] # noqa: E501 + int64 (int): [optional] # noqa: E501 + float (float): [optional] # noqa: E501 + double (float): [optional] # noqa: E501 + string (str): [optional] # noqa: E501 + binary (file_type): [optional] # noqa: E501 + date_time (datetime): [optional] # noqa: E501 + uuid (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.number = number + self.byte = byte + self.date = date + self.password = password + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -241,3 +339,6 @@ def __init__(self, number, byte, date, password, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent.py index a52744cc3e24..c25e0b3f843d 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Grandparent(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'radio_waves': 'radioWaves', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Grandparent - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + radio_waves (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent_animal.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent_animal.py index 48d3f6d9f0b3..e053af7d5387 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent_animal.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/grandparent_animal.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_cat import ChildCat @@ -103,8 +106,88 @@ def discriminator(): 'pet_type': 'pet_type', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, pet_type, *args, **kwargs): # noqa: E501 + """GrandparentAnimal - a model defined in OpenAPI + + Args: + pet_type (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.pet_type = pet_type + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -186,3 +269,6 @@ def __init__(self, pet_type, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/has_only_read_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/has_only_read_only.py index c94781ae2c46..294a16ddc46d 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/has_only_read_only.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/has_only_read_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class HasOnlyReadOnly(ModelNormal): @@ -86,8 +89,88 @@ def discriminator(): 'foo': 'foo', # noqa: E501 } + read_only_vars = { + 'bar', # noqa: E501 + 'foo', # noqa: E501 + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """HasOnlyReadOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bar (str): [optional] # noqa: E501 + foo (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -167,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/list.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/list.py index 09c762d6a794..18863e57bc74 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/list.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/list.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class List(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): '_123_list': '123-list', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """List - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _123_list (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/map_test.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/map_test.py index 169fb9d88ee0..612810807990 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/map_test.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/map_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.string_boolean_map import StringBooleanMap @@ -99,8 +102,88 @@ def discriminator(): 'indirect_map': 'indirect_map', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """MapTest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + map_map_of_string ({str: ({str: (str,)},)}): [optional] # noqa: E501 + map_of_enum_string ({str: (str,)}): [optional] # noqa: E501 + direct_map ({str: (bool,)}): [optional] # noqa: E501 + indirect_map (StringBooleanMap): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -182,3 +265,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/mixed_properties_and_additional_properties_class.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/mixed_properties_and_additional_properties_class.py index 01df80d9d62b..954689631564 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/mixed_properties_and_additional_properties_class.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/mixed_properties_and_additional_properties_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -93,8 +96,87 @@ def discriminator(): 'map': 'map', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """MixedPropertiesAndAdditionalPropertiesClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + uuid (str): [optional] # noqa: E501 + date_time (datetime): [optional] # noqa: E501 + map ({str: (Animal,)}): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -175,3 +257,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model200_response.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model200_response.py index 46b155b65239..d094c7f84c64 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model200_response.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model200_response.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Model200Response(ModelNormal): @@ -86,8 +89,86 @@ def discriminator(): '_class': 'class', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Model200Response - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (int): [optional] # noqa: E501 + _class (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -167,3 +248,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model_return.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model_return.py index 377b3507a8b3..51bcf6f1649f 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model_return.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/model_return.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ModelReturn(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): '_return': 'return', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ModelReturn - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _return (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/name.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/name.py index 1432e185ad6b..4ee3e1ed2bf1 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/name.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/name.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Name(ModelNormal): @@ -90,8 +93,93 @@ def discriminator(): '_123_number': '123Number', # noqa: E501 } + read_only_vars = { + 'snake_case', # noqa: E501 + '_123_number', # noqa: E501 + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, *args, **kwargs): # noqa: E501 + """Name - a model defined in OpenAPI + + Args: + name (int): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + snake_case (int): [optional] # noqa: E501 + _property (str): [optional] # noqa: E501 + _123_number (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -176,3 +264,6 @@ def __init__(self, name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_only.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_only.py index d4892dbede5b..c4163787bc14 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_only.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class NumberOnly(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'just_number': 'JustNumber', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """NumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + just_number (float): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_with_validations.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_with_validations.py index 458a79459751..5d66fec5ec67 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_with_validations.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/number_with_validations.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class NumberWithValidations(ModelSimple): @@ -82,6 +85,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -181,3 +186,97 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """NumberWithValidations - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (float): # noqa: E501 + + Keyword Args: + value (float): # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/object_model_with_ref_props.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/object_model_with_ref_props.py index b1dc4bf82e2c..dfe5d05cf051 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/object_model_with_ref_props.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/object_model_with_ref_props.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.number_with_validations import NumberWithValidations @@ -93,8 +96,87 @@ def discriminator(): 'my_boolean': 'my_boolean', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ObjectModelWithRefProps - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + my_number (NumberWithValidations): [optional] # noqa: E501 + my_string (str): [optional] # noqa: E501 + my_boolean (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -175,3 +257,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/order.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/order.py index b42f066848ab..b69e94ae36be 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/order.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/order.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Order(ModelNormal): @@ -99,8 +102,90 @@ def discriminator(): 'complete': 'complete', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Order - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + pet_id (int): [optional] # noqa: E501 + quantity (int): [optional] # noqa: E501 + ship_date (datetime): [optional] # noqa: E501 + status (str): Order Status. [optional] # noqa: E501 + complete (bool): [optional] if omitted the server will use the default value of False # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -184,3 +269,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent.py index b07448d9e1fe..13a722ff4b3a 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.grandparent import Grandparent @@ -93,6 +96,99 @@ def discriminator(): 'tele_vision': 'teleVision', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Parent - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + radio_waves (bool): [optional] # noqa: E501 + tele_vision (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -189,6 +285,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_all_of.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_all_of.py index 0d109f25a4c2..97916a1dd4e2 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_all_of.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ParentAllOf(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'tele_vision': 'teleVision', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ParentAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + tele_vision (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_pet.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_pet.py index 597e30bb9c4a..a20c0d1b8672 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_pet.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/parent_pet.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_cat import ChildCat @@ -102,6 +105,98 @@ def discriminator(): 'pet_type': 'pet_type', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ParentPet - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -197,6 +292,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/pet.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/pet.py index e9f1e30a3196..a7b888a2aa38 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/pet.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/pet.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.category import Category @@ -106,8 +109,94 @@ def discriminator(): 'status': 'status', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, photo_urls, *args, **kwargs): # noqa: E501 + """Pet - a model defined in OpenAPI + + Args: + name (str): + photo_urls ([str]): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + category (Category): [optional] # noqa: E501 + tags ([Tag]): [optional] # noqa: E501 + status (str): pet status in the store. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + self.photo_urls = photo_urls + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -195,3 +284,6 @@ def __init__(self, name, photo_urls, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/player.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/player.py index 6e4485fb6500..104c4d2900df 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/player.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/player.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Player(ModelNormal): @@ -86,8 +89,89 @@ def discriminator(): 'enemy_player': 'enemyPlayer', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, *args, **kwargs): # noqa: E501 + """Player - a model defined in OpenAPI + + Args: + name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + enemy_player (Player): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +254,6 @@ def __init__(self, name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/read_only_first.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/read_only_first.py index 5c68eab91ea3..ad0bfbaac115 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/read_only_first.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/read_only_first.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ReadOnlyFirst(ModelNormal): @@ -86,8 +89,87 @@ def discriminator(): 'baz': 'baz', # noqa: E501 } + read_only_vars = { + 'bar', # noqa: E501 + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ReadOnlyFirst - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bar (str): [optional] # noqa: E501 + baz (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -167,3 +249,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/special_model_name.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/special_model_name.py index 823e77596636..fa13828d6b9f 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/special_model_name.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/special_model_name.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class SpecialModelName(ModelNormal): @@ -84,8 +87,85 @@ def discriminator(): 'special_property_name': '$special[property.name]', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """SpecialModelName - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + special_property_name (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -164,3 +244,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_boolean_map.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_boolean_map.py index 4ac526991839..05f8527fec1e 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_boolean_map.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_boolean_map.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class StringBooleanMap(ModelNormal): @@ -88,8 +91,84 @@ def discriminator(): attribute_map = { } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """StringBooleanMap - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -167,3 +246,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_enum.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_enum.py index 37dc04332cac..2397dd59fc95 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_enum.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/string_enum.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class StringEnum(ModelSimple): @@ -83,6 +86,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -182,3 +187,97 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """StringEnum - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str):, must be one of ["placed", "approved", "delivered", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["placed", "approved", "delivered", ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/tag.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/tag.py index d3dcb78b7ea0..913976557b40 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/tag.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/tag.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Tag(ModelNormal): @@ -88,8 +91,87 @@ def discriminator(): 'full_name': 'fullName', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Tag - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + full_name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +252,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_default.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_default.py index 324b131f3a2d..b156cbac46e3 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_default.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_default.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class TypeHolderDefault(ModelNormal): @@ -96,8 +99,102 @@ def discriminator(): 'datetime_item': 'datetime_item', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, array_item, *args, **kwargs): # noqa: E501 + """TypeHolderDefault - a model defined in OpenAPI + + Args: + array_item ([int]): + + Keyword Args: + string_item (str): defaults to "what" # noqa: E501 + number_item (float): defaults to 1.234 # noqa: E501 + integer_item (int): defaults to -2 # noqa: E501 + bool_item (bool): defaults to True # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + date_item (date): [optional] # noqa: E501 + datetime_item (datetime): [optional] # noqa: E501 + """ + + string_item = kwargs.get('string_item', "what") + number_item = kwargs.get('number_item', 1.234) + integer_item = kwargs.get('integer_item', -2) + bool_item = kwargs.get('bool_item', True) + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.string_item = string_item + self.number_item = number_item + self.integer_item = integer_item + self.bool_item = bool_item + self.array_item = array_item + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -193,3 +290,6 @@ def __init__(self, array_item, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_example.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_example.py index 30bbba178f4f..c7a3f13b63ce 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_example.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/type_holder_example.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class TypeHolderExample(ModelNormal): @@ -101,8 +104,99 @@ def discriminator(): 'array_item': 'array_item', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, bool_item, array_item, *args, **kwargs): # noqa: E501 + """TypeHolderExample - a model defined in OpenAPI + + Args: + bool_item (bool): + array_item ([int]): + + Keyword Args: + string_item (str): defaults to "what", must be one of ["what", ] # noqa: E501 + number_item (float): defaults to 1.234, must be one of [1.234, ] # noqa: E501 + integer_item (int): defaults to -2, must be one of [-2, ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + string_item = kwargs.get('string_item', "what") + number_item = kwargs.get('number_item', 1.234) + integer_item = kwargs.get('integer_item', -2) + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.string_item = string_item + self.number_item = number_item + self.integer_item = integer_item + self.bool_item = bool_item + self.array_item = array_item + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -195,3 +289,6 @@ def __init__(self, bool_item, array_item, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/user.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/user.py index 9a3cd0814114..a3a4019042be 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/user.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/user.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class User(ModelNormal): @@ -98,8 +101,92 @@ def discriminator(): 'user_status': 'userStatus', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """User - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + username (str): [optional] # noqa: E501 + first_name (str): [optional] # noqa: E501 + last_name (str): [optional] # noqa: E501 + email (str): [optional] # noqa: E501 + password (str): [optional] # noqa: E501 + phone (str): [optional] # noqa: E501 + user_status (int): User Status. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -185,3 +272,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/xml_item.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/xml_item.py index 8401b3f40076..183234163189 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/xml_item.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model/xml_item.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class XmlItem(ModelNormal): @@ -140,8 +143,113 @@ def discriminator(): 'prefix_ns_wrapped_array': 'prefix_ns_wrapped_array', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """XmlItem - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + attribute_string (str): [optional] # noqa: E501 + attribute_number (float): [optional] # noqa: E501 + attribute_integer (int): [optional] # noqa: E501 + attribute_boolean (bool): [optional] # noqa: E501 + wrapped_array ([int]): [optional] # noqa: E501 + name_string (str): [optional] # noqa: E501 + name_number (float): [optional] # noqa: E501 + name_integer (int): [optional] # noqa: E501 + name_boolean (bool): [optional] # noqa: E501 + name_array ([int]): [optional] # noqa: E501 + name_wrapped_array ([int]): [optional] # noqa: E501 + prefix_string (str): [optional] # noqa: E501 + prefix_number (float): [optional] # noqa: E501 + prefix_integer (int): [optional] # noqa: E501 + prefix_boolean (bool): [optional] # noqa: E501 + prefix_array ([int]): [optional] # noqa: E501 + prefix_wrapped_array ([int]): [optional] # noqa: E501 + namespace_string (str): [optional] # noqa: E501 + namespace_number (float): [optional] # noqa: E501 + namespace_integer (int): [optional] # noqa: E501 + namespace_boolean (bool): [optional] # noqa: E501 + namespace_array ([int]): [optional] # noqa: E501 + namespace_wrapped_array ([int]): [optional] # noqa: E501 + prefix_ns_string (str): [optional] # noqa: E501 + prefix_ns_number (float): [optional] # noqa: E501 + prefix_ns_integer (int): [optional] # noqa: E501 + prefix_ns_boolean (bool): [optional] # noqa: E501 + prefix_ns_array ([int]): [optional] # noqa: E501 + prefix_ns_wrapped_array ([int]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -248,3 +356,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py index 3a555f0a88c4..3913228d6b89 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py @@ -29,6 +29,22 @@ file_type = io.IOBase +def convert_js_args_to_python_args(fn): + from functools import wraps + @wraps(fn) + def wrapped_init(_self, *args, **kwargs): + """ + An attribute named `self` received from the api will conflicts with the reserved `self` + parameter of a class method. During generation, `self` attributes are mapped + to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. + """ + spec_property_naming = kwargs.get('_spec_property_naming', False) + if spec_property_naming: + kwargs = change_keys_js_to_python(kwargs, _self if isinstance(_self, type) else _self.__class__) + return fn(_self, *args, **kwargs) + return wrapped_init + + class cached_property(object): # this caches the result of the function call for fn with no inputs # use this as a decorator on fuction methods that you want converted @@ -284,6 +300,121 @@ def __new__(cls, *args, **kwargs): return new_inst + @classmethod + @convert_js_args_to_python_args + def _new_from_openapi_data(cls, *args, **kwargs): + # this function uses the discriminator to + # pick a new schema/class to instantiate because a discriminator + # propertyName value was passed in + + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance(cls, model_kwargs, kwargs, model_arg=arg) + return oneof_instance + + + visited_composed_classes = kwargs.get('_visited_composed_classes', ()) + if ( + cls.discriminator is None or + cls in visited_composed_classes + ): + # Use case 1: this openapi schema (cls) does not have a discriminator + # Use case 2: we have already visited this class before and are sure that we + # want to instantiate it this time. We have visited this class deserializing + # a payload with a discriminator. During that process we traveled through + # this class but did not make an instance of it. Now we are making an + # instance of a composed class which contains cls in it, so this time make an instance of cls. + # + # Here's an example of use case 2: If Animal has a discriminator + # petType and we pass in "Dog", and the class Dog + # allOf includes Animal, we move through Animal + # once using the discriminator, and pick Dog. + # Then in the composed schema dog Dog, we will make an instance of the + # Animal class (because Dal has allOf: Animal) but this time we won't travel + # through Animal's discriminator because we passed in + # _visited_composed_classes = (Animal,) + + return cls._from_openapi_data(*args, **kwargs) + + # Get the name and value of the discriminator property. + # The discriminator name is obtained from the discriminator meta-data + # and the discriminator value is obtained from the input data. + discr_propertyname_py = list(cls.discriminator.keys())[0] + discr_propertyname_js = cls.attribute_map[discr_propertyname_py] + if discr_propertyname_js in kwargs: + discr_value = kwargs[discr_propertyname_js] + elif discr_propertyname_py in kwargs: + discr_value = kwargs[discr_propertyname_py] + else: + # The input data does not contain the discriminator property. + path_to_item = kwargs.get('_path_to_item', ()) + raise ApiValueError( + "Cannot deserialize input data due to missing discriminator. " + "The discriminator property '%s' is missing at path: %s" % + (discr_propertyname_js, path_to_item) + ) + + # Implementation note: the last argument to get_discriminator_class + # is a list of visited classes. get_discriminator_class may recursively + # call itself and update the list of visited classes, and the initial + # value must be an empty list. Hence not using 'visited_composed_classes' + new_cls = get_discriminator_class( + cls, discr_propertyname_py, discr_value, []) + if new_cls is None: + path_to_item = kwargs.get('_path_to_item', ()) + disc_prop_value = kwargs.get( + discr_propertyname_js, kwargs.get(discr_propertyname_py)) + raise ApiValueError( + "Cannot deserialize input data due to invalid discriminator " + "value. The OpenAPI document has no mapping for discriminator " + "property '%s'='%s' at path: %s" % + (discr_propertyname_js, disc_prop_value, path_to_item) + ) + + if new_cls in visited_composed_classes: + # if we are making an instance of a composed schema Descendent + # which allOf includes Ancestor, then Ancestor contains + # a discriminator that includes Descendent. + # So if we make an instance of Descendent, we have to make an + # instance of Ancestor to hold the allOf properties. + # This code detects that use case and makes the instance of Ancestor + # For example: + # When making an instance of Dog, _visited_composed_classes = (Dog,) + # then we make an instance of Animal to include in dog._composed_instances + # so when we are here, cls is Animal + # cls.discriminator != None + # cls not in _visited_composed_classes + # new_cls = Dog + # but we know we know that we already have Dog + # because it is in visited_composed_classes + # so make Animal here + return cls._from_openapi_data(*args, **kwargs) + + # Build a list containing all oneOf and anyOf descendants. + oneof_anyof_classes = None + if cls._composed_schemas is not None: + oneof_anyof_classes = ( + cls._composed_schemas.get('oneOf', ()) + + cls._composed_schemas.get('anyOf', ())) + oneof_anyof_child = new_cls in oneof_anyof_classes + kwargs['_visited_composed_classes'] = visited_composed_classes + (cls,) + + if cls._composed_schemas.get('allOf') and oneof_anyof_child: + # Validate that we can make self because when we make the + # new_cls it will not include the allOf validations in self + self_inst = cls._from_openapi_data(*args, **kwargs) + + + new_inst = new_cls._new_from_openapi_data(*args, **kwargs) + return new_inst + + class ModelSimple(OpenApiModel): """the parent class of models whose type != object in their swagger/openapi""" @@ -1208,14 +1339,14 @@ def deserialize_model(model_data, model_class, path_to_item, check_type, _spec_property_naming=spec_property_naming) if issubclass(model_class, ModelSimple): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) elif isinstance(model_data, list): - return model_class(*model_data, **kw_args) + return model_class._new_from_openapi_data(*model_data, **kw_args) if isinstance(model_data, dict): kw_args.update(model_data) - return model_class(**kw_args) + return model_class._new_from_openapi_data(**kw_args) elif isinstance(model_data, PRIMITIVE_TYPES): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) def deserialize_file(response_data, configuration, content_disposition=None): @@ -1577,22 +1708,6 @@ def get_valid_classes_phrase(input_classes): return "is one of [{0}]".format(", ".join(all_class_names)) -def convert_js_args_to_python_args(fn): - from functools import wraps - @wraps(fn) - def wrapped_init(_self, *args, **kwargs): - """ - An attribute named `self` received from the api will conflicts with the reserved `self` - parameter of a class method. During generation, `self` attributes are mapped - to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. - """ - spec_property_naming = kwargs.get('_spec_property_naming', False) - if spec_property_naming: - kwargs = change_keys_js_to_python(kwargs, _self.__class__) - return fn(_self, *args, **kwargs) - return wrapped_init - - def get_allof_instances(self, model_args, constant_args): """ Args: diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py b/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py index 9345e736905d..7993d12971b2 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py +++ b/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py @@ -29,6 +29,22 @@ file_type = io.IOBase +def convert_js_args_to_python_args(fn): + from functools import wraps + @wraps(fn) + def wrapped_init(_self, *args, **kwargs): + """ + An attribute named `self` received from the api will conflicts with the reserved `self` + parameter of a class method. During generation, `self` attributes are mapped + to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. + """ + spec_property_naming = kwargs.get('_spec_property_naming', False) + if spec_property_naming: + kwargs = change_keys_js_to_python(kwargs, _self if isinstance(_self, type) else _self.__class__) + return fn(_self, *args, **kwargs) + return wrapped_init + + class cached_property(object): # this caches the result of the function call for fn with no inputs # use this as a decorator on fuction methods that you want converted @@ -284,6 +300,121 @@ def __new__(cls, *args, **kwargs): return new_inst + @classmethod + @convert_js_args_to_python_args + def _new_from_openapi_data(cls, *args, **kwargs): + # this function uses the discriminator to + # pick a new schema/class to instantiate because a discriminator + # propertyName value was passed in + + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance(cls, model_kwargs, kwargs, model_arg=arg) + return oneof_instance + + + visited_composed_classes = kwargs.get('_visited_composed_classes', ()) + if ( + cls.discriminator is None or + cls in visited_composed_classes + ): + # Use case 1: this openapi schema (cls) does not have a discriminator + # Use case 2: we have already visited this class before and are sure that we + # want to instantiate it this time. We have visited this class deserializing + # a payload with a discriminator. During that process we traveled through + # this class but did not make an instance of it. Now we are making an + # instance of a composed class which contains cls in it, so this time make an instance of cls. + # + # Here's an example of use case 2: If Animal has a discriminator + # petType and we pass in "Dog", and the class Dog + # allOf includes Animal, we move through Animal + # once using the discriminator, and pick Dog. + # Then in the composed schema dog Dog, we will make an instance of the + # Animal class (because Dal has allOf: Animal) but this time we won't travel + # through Animal's discriminator because we passed in + # _visited_composed_classes = (Animal,) + + return cls._from_openapi_data(*args, **kwargs) + + # Get the name and value of the discriminator property. + # The discriminator name is obtained from the discriminator meta-data + # and the discriminator value is obtained from the input data. + discr_propertyname_py = list(cls.discriminator.keys())[0] + discr_propertyname_js = cls.attribute_map[discr_propertyname_py] + if discr_propertyname_js in kwargs: + discr_value = kwargs[discr_propertyname_js] + elif discr_propertyname_py in kwargs: + discr_value = kwargs[discr_propertyname_py] + else: + # The input data does not contain the discriminator property. + path_to_item = kwargs.get('_path_to_item', ()) + raise ApiValueError( + "Cannot deserialize input data due to missing discriminator. " + "The discriminator property '%s' is missing at path: %s" % + (discr_propertyname_js, path_to_item) + ) + + # Implementation note: the last argument to get_discriminator_class + # is a list of visited classes. get_discriminator_class may recursively + # call itself and update the list of visited classes, and the initial + # value must be an empty list. Hence not using 'visited_composed_classes' + new_cls = get_discriminator_class( + cls, discr_propertyname_py, discr_value, []) + if new_cls is None: + path_to_item = kwargs.get('_path_to_item', ()) + disc_prop_value = kwargs.get( + discr_propertyname_js, kwargs.get(discr_propertyname_py)) + raise ApiValueError( + "Cannot deserialize input data due to invalid discriminator " + "value. The OpenAPI document has no mapping for discriminator " + "property '%s'='%s' at path: %s" % + (discr_propertyname_js, disc_prop_value, path_to_item) + ) + + if new_cls in visited_composed_classes: + # if we are making an instance of a composed schema Descendent + # which allOf includes Ancestor, then Ancestor contains + # a discriminator that includes Descendent. + # So if we make an instance of Descendent, we have to make an + # instance of Ancestor to hold the allOf properties. + # This code detects that use case and makes the instance of Ancestor + # For example: + # When making an instance of Dog, _visited_composed_classes = (Dog,) + # then we make an instance of Animal to include in dog._composed_instances + # so when we are here, cls is Animal + # cls.discriminator != None + # cls not in _visited_composed_classes + # new_cls = Dog + # but we know we know that we already have Dog + # because it is in visited_composed_classes + # so make Animal here + return cls._from_openapi_data(*args, **kwargs) + + # Build a list containing all oneOf and anyOf descendants. + oneof_anyof_classes = None + if cls._composed_schemas is not None: + oneof_anyof_classes = ( + cls._composed_schemas.get('oneOf', ()) + + cls._composed_schemas.get('anyOf', ())) + oneof_anyof_child = new_cls in oneof_anyof_classes + kwargs['_visited_composed_classes'] = visited_composed_classes + (cls,) + + if cls._composed_schemas.get('allOf') and oneof_anyof_child: + # Validate that we can make self because when we make the + # new_cls it will not include the allOf validations in self + self_inst = cls._from_openapi_data(*args, **kwargs) + + + new_inst = new_cls._new_from_openapi_data(*args, **kwargs) + return new_inst + + class ModelSimple(OpenApiModel): """the parent class of models whose type != object in their swagger/openapi""" @@ -1208,14 +1339,14 @@ def deserialize_model(model_data, model_class, path_to_item, check_type, _spec_property_naming=spec_property_naming) if issubclass(model_class, ModelSimple): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) elif isinstance(model_data, list): - return model_class(*model_data, **kw_args) + return model_class._new_from_openapi_data(*model_data, **kw_args) if isinstance(model_data, dict): kw_args.update(model_data) - return model_class(**kw_args) + return model_class._new_from_openapi_data(**kw_args) elif isinstance(model_data, PRIMITIVE_TYPES): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) def deserialize_file(response_data, configuration, content_disposition=None): @@ -1577,22 +1708,6 @@ def get_valid_classes_phrase(input_classes): return "is one of [{0}]".format(", ".join(all_class_names)) -def convert_js_args_to_python_args(fn): - from functools import wraps - @wraps(fn) - def wrapped_init(_self, *args, **kwargs): - """ - An attribute named `self` received from the api will conflicts with the reserved `self` - parameter of a class method. During generation, `self` attributes are mapped - to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. - """ - spec_property_naming = kwargs.get('_spec_property_naming', False) - if spec_property_naming: - kwargs = change_keys_js_to_python(kwargs, _self.__class__) - return fn(_self, *args, **kwargs) - return wrapped_init - - def get_allof_instances(self, model_args, constant_args): """ Args: diff --git a/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py b/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py index bb9ec1c821a0..2fcf6b2de1e4 100644 --- a/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py +++ b/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py @@ -29,6 +29,22 @@ file_type = io.IOBase +def convert_js_args_to_python_args(fn): + from functools import wraps + @wraps(fn) + def wrapped_init(_self, *args, **kwargs): + """ + An attribute named `self` received from the api will conflicts with the reserved `self` + parameter of a class method. During generation, `self` attributes are mapped + to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. + """ + spec_property_naming = kwargs.get('_spec_property_naming', False) + if spec_property_naming: + kwargs = change_keys_js_to_python(kwargs, _self if isinstance(_self, type) else _self.__class__) + return fn(_self, *args, **kwargs) + return wrapped_init + + class cached_property(object): # this caches the result of the function call for fn with no inputs # use this as a decorator on fuction methods that you want converted @@ -284,6 +300,121 @@ def __new__(cls, *args, **kwargs): return new_inst + @classmethod + @convert_js_args_to_python_args + def _new_from_openapi_data(cls, *args, **kwargs): + # this function uses the discriminator to + # pick a new schema/class to instantiate because a discriminator + # propertyName value was passed in + + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance(cls, model_kwargs, kwargs, model_arg=arg) + return oneof_instance + + + visited_composed_classes = kwargs.get('_visited_composed_classes', ()) + if ( + cls.discriminator is None or + cls in visited_composed_classes + ): + # Use case 1: this openapi schema (cls) does not have a discriminator + # Use case 2: we have already visited this class before and are sure that we + # want to instantiate it this time. We have visited this class deserializing + # a payload with a discriminator. During that process we traveled through + # this class but did not make an instance of it. Now we are making an + # instance of a composed class which contains cls in it, so this time make an instance of cls. + # + # Here's an example of use case 2: If Animal has a discriminator + # petType and we pass in "Dog", and the class Dog + # allOf includes Animal, we move through Animal + # once using the discriminator, and pick Dog. + # Then in the composed schema dog Dog, we will make an instance of the + # Animal class (because Dal has allOf: Animal) but this time we won't travel + # through Animal's discriminator because we passed in + # _visited_composed_classes = (Animal,) + + return cls._from_openapi_data(*args, **kwargs) + + # Get the name and value of the discriminator property. + # The discriminator name is obtained from the discriminator meta-data + # and the discriminator value is obtained from the input data. + discr_propertyname_py = list(cls.discriminator.keys())[0] + discr_propertyname_js = cls.attribute_map[discr_propertyname_py] + if discr_propertyname_js in kwargs: + discr_value = kwargs[discr_propertyname_js] + elif discr_propertyname_py in kwargs: + discr_value = kwargs[discr_propertyname_py] + else: + # The input data does not contain the discriminator property. + path_to_item = kwargs.get('_path_to_item', ()) + raise ApiValueError( + "Cannot deserialize input data due to missing discriminator. " + "The discriminator property '%s' is missing at path: %s" % + (discr_propertyname_js, path_to_item) + ) + + # Implementation note: the last argument to get_discriminator_class + # is a list of visited classes. get_discriminator_class may recursively + # call itself and update the list of visited classes, and the initial + # value must be an empty list. Hence not using 'visited_composed_classes' + new_cls = get_discriminator_class( + cls, discr_propertyname_py, discr_value, []) + if new_cls is None: + path_to_item = kwargs.get('_path_to_item', ()) + disc_prop_value = kwargs.get( + discr_propertyname_js, kwargs.get(discr_propertyname_py)) + raise ApiValueError( + "Cannot deserialize input data due to invalid discriminator " + "value. The OpenAPI document has no mapping for discriminator " + "property '%s'='%s' at path: %s" % + (discr_propertyname_js, disc_prop_value, path_to_item) + ) + + if new_cls in visited_composed_classes: + # if we are making an instance of a composed schema Descendent + # which allOf includes Ancestor, then Ancestor contains + # a discriminator that includes Descendent. + # So if we make an instance of Descendent, we have to make an + # instance of Ancestor to hold the allOf properties. + # This code detects that use case and makes the instance of Ancestor + # For example: + # When making an instance of Dog, _visited_composed_classes = (Dog,) + # then we make an instance of Animal to include in dog._composed_instances + # so when we are here, cls is Animal + # cls.discriminator != None + # cls not in _visited_composed_classes + # new_cls = Dog + # but we know we know that we already have Dog + # because it is in visited_composed_classes + # so make Animal here + return cls._from_openapi_data(*args, **kwargs) + + # Build a list containing all oneOf and anyOf descendants. + oneof_anyof_classes = None + if cls._composed_schemas is not None: + oneof_anyof_classes = ( + cls._composed_schemas.get('oneOf', ()) + + cls._composed_schemas.get('anyOf', ())) + oneof_anyof_child = new_cls in oneof_anyof_classes + kwargs['_visited_composed_classes'] = visited_composed_classes + (cls,) + + if cls._composed_schemas.get('allOf') and oneof_anyof_child: + # Validate that we can make self because when we make the + # new_cls it will not include the allOf validations in self + self_inst = cls._from_openapi_data(*args, **kwargs) + + + new_inst = new_cls._new_from_openapi_data(*args, **kwargs) + return new_inst + + class ModelSimple(OpenApiModel): """the parent class of models whose type != object in their swagger/openapi""" @@ -1208,14 +1339,14 @@ def deserialize_model(model_data, model_class, path_to_item, check_type, _spec_property_naming=spec_property_naming) if issubclass(model_class, ModelSimple): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) elif isinstance(model_data, list): - return model_class(*model_data, **kw_args) + return model_class._new_from_openapi_data(*model_data, **kw_args) if isinstance(model_data, dict): kw_args.update(model_data) - return model_class(**kw_args) + return model_class._new_from_openapi_data(**kw_args) elif isinstance(model_data, PRIMITIVE_TYPES): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) def deserialize_file(response_data, configuration, content_disposition=None): @@ -1577,22 +1708,6 @@ def get_valid_classes_phrase(input_classes): return "is one of [{0}]".format(", ".join(all_class_names)) -def convert_js_args_to_python_args(fn): - from functools import wraps - @wraps(fn) - def wrapped_init(_self, *args, **kwargs): - """ - An attribute named `self` received from the api will conflicts with the reserved `self` - parameter of a class method. During generation, `self` attributes are mapped - to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. - """ - spec_property_naming = kwargs.get('_spec_property_naming', False) - if spec_property_naming: - kwargs = change_keys_js_to_python(kwargs, _self.__class__) - return fn(_self, *args, **kwargs) - return wrapped_init - - def get_allof_instances(self, model_args, constant_args): """ Args: diff --git a/samples/openapi3/client/petstore/python/.openapi-generator/FILES b/samples/openapi3/client/petstore/python/.openapi-generator/FILES index 175fdaa09196..9e23967bd9af 100644 --- a/samples/openapi3/client/petstore/python/.openapi-generator/FILES +++ b/samples/openapi3/client/petstore/python/.openapi-generator/FILES @@ -64,6 +64,7 @@ docs/MapTest.md docs/MixedPropertiesAndAdditionalPropertiesClass.md docs/Model200Response.md docs/ModelReturn.md +docs/Mole.md docs/Name.md docs/NullableClass.md docs/NullableShape.md @@ -173,6 +174,7 @@ petstore_api/model/map_test.py petstore_api/model/mixed_properties_and_additional_properties_class.py petstore_api/model/model200_response.py petstore_api/model/model_return.py +petstore_api/model/mole.py petstore_api/model/name.py petstore_api/model/nullable_class.py petstore_api/model/nullable_shape.py diff --git a/samples/openapi3/client/petstore/python/README.md b/samples/openapi3/client/petstore/python/README.md index ce718fd4a468..bf7ae031db41 100644 --- a/samples/openapi3/client/petstore/python/README.md +++ b/samples/openapi3/client/petstore/python/README.md @@ -192,6 +192,7 @@ Class | Method | HTTP request | Description - [MixedPropertiesAndAdditionalPropertiesClass](docs/MixedPropertiesAndAdditionalPropertiesClass.md) - [Model200Response](docs/Model200Response.md) - [ModelReturn](docs/ModelReturn.md) + - [Mole](docs/Mole.md) - [Name](docs/Name.md) - [NullableClass](docs/NullableClass.md) - [NullableShape](docs/NullableShape.md) diff --git a/samples/openapi3/client/petstore/python/docs/Mole.md b/samples/openapi3/client/petstore/python/docs/Mole.md new file mode 100644 index 000000000000..6c4f714963e2 --- /dev/null +++ b/samples/openapi3/client/petstore/python/docs/Mole.md @@ -0,0 +1,17 @@ +# Mole + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**blind** | **bool** | | [readonly] +**smell** | **str** | | +**hearing** | **bool** | | +**touch** | **bool** | | [optional] [readonly] +**taste** | **str** | | [optional] +**seeing_ghosts** | **bool** | | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_class.py b/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_class.py index 82aca2a9ca8d..6540576f957b 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AdditionalPropertiesClass(ModelNormal): @@ -104,8 +107,92 @@ def discriminator(): 'map_with_undeclared_properties_string': 'map_with_undeclared_properties_string', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + map_property ({str: (str,)}): [optional] # noqa: E501 + map_of_map_property ({str: ({str: (str,)},)}): [optional] # noqa: E501 + anytype_1 (bool, date, datetime, dict, float, int, list, str, none_type): [optional] # noqa: E501 + map_with_undeclared_properties_anytype_1 ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): [optional] # noqa: E501 + map_with_undeclared_properties_anytype_2 ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): [optional] # noqa: E501 + map_with_undeclared_properties_anytype_3 ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): [optional] # noqa: E501 + empty_map (dict): an object with no declared properties and no undeclared properties, hence it's an empty map.. [optional] # noqa: E501 + map_with_undeclared_properties_string ({str: (str,)}): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -191,3 +278,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_with_array_of_enums.py b/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_with_array_of_enums.py index 67d43acfe532..f8e0b8529ccd 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_with_array_of_enums.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/additional_properties_with_array_of_enums.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.enum_class import EnumClass @@ -94,8 +97,84 @@ def discriminator(): attribute_map = { } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """AdditionalPropertiesWithArrayOfEnums - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +252,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/address.py b/samples/openapi3/client/petstore/python/petstore_api/model/address.py index b1504407903d..a7c88b8fec25 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/address.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/address.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Address(ModelNormal): @@ -88,8 +91,84 @@ def discriminator(): attribute_map = { } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Address - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -167,3 +246,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/animal.py b/samples/openapi3/client/petstore/python/petstore_api/model/animal.py index c53b1e1ad289..fda6c283ebdc 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/animal.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/animal.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.cat import Cat @@ -106,8 +109,89 @@ def discriminator(): 'color': 'color', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, class_name, *args, **kwargs): # noqa: E501 + """Animal - a model defined in OpenAPI + + Args: + class_name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.class_name = class_name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -190,3 +274,6 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/animal_farm.py b/samples/openapi3/client/petstore/python/petstore_api/model/animal_farm.py index fb58224ebd4c..59bde51a2907 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/animal_farm.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/animal_farm.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -90,6 +93,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -189,3 +194,97 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """AnimalFarm - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] ([Animal]): # noqa: E501 + + Keyword Args: + value ([Animal]): # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/api_response.py b/samples/openapi3/client/petstore/python/petstore_api/model/api_response.py index 53adb5aba12f..d1f3b363bef5 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/api_response.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/api_response.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ApiResponse(ModelNormal): @@ -94,8 +97,87 @@ def discriminator(): 'message': 'message', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ApiResponse - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + code (int): [optional] # noqa: E501 + type (str): [optional] # noqa: E501 + message (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -176,3 +258,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/apple.py b/samples/openapi3/client/petstore/python/petstore_api/model/apple.py index 4068d2488e57..b5d3d62826d8 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/apple.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/apple.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Apple(ModelNormal): @@ -103,8 +106,89 @@ def discriminator(): 'origin': 'origin', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, cultivar, *args, **kwargs): # noqa: E501 + """Apple - a model defined in OpenAPI + + Args: + cultivar (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + origin (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.cultivar = cultivar + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -187,3 +271,6 @@ def __init__(self, cultivar, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/apple_req.py b/samples/openapi3/client/petstore/python/petstore_api/model/apple_req.py index fb161cd4c0fc..469aa6e1f6e6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/apple_req.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/apple_req.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class AppleReq(ModelNormal): @@ -86,8 +89,89 @@ def discriminator(): 'mealy': 'mealy', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, cultivar, *args, **kwargs): # noqa: E501 + """AppleReq - a model defined in OpenAPI + + Args: + cultivar (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + mealy (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.cultivar = cultivar + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +254,6 @@ def __init__(self, cultivar, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py index 8b6a2c42d0ed..16d9bda29f1f 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_array_of_number_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ArrayOfArrayOfNumberOnly(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'array_array_number': 'ArrayArrayNumber', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ArrayOfArrayOfNumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_array_number ([[float]]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_enums.py b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_enums.py index 8d9962152edf..1a4166a6e675 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_enums.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_enums.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.string_enum import StringEnum @@ -90,6 +93,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -189,3 +194,97 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """ArrayOfEnums - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] ([StringEnum]): # noqa: E501 + + Keyword Args: + value ([StringEnum]): # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_number_only.py b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_number_only.py index 7b754dc283e6..0e44ab61aff5 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/array_of_number_only.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/array_of_number_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ArrayOfNumberOnly(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'array_number': 'ArrayNumber', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ArrayOfNumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_number ([float]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/array_test.py b/samples/openapi3/client/petstore/python/petstore_api/model/array_test.py index 9691a1e60374..64c180d11bc5 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/array_test.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/array_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.read_only_first import ReadOnlyFirst @@ -100,8 +103,87 @@ def discriminator(): 'array_array_of_model': 'array_array_of_model', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ArrayTest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_of_string ([str]): [optional] # noqa: E501 + array_array_of_integer ([[int]]): [optional] # noqa: E501 + array_array_of_model ([[ReadOnlyFirst]]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -182,3 +264,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/banana.py b/samples/openapi3/client/petstore/python/petstore_api/model/banana.py index 24ad257e6d21..2e2249d2f5e1 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/banana.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/banana.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Banana(ModelNormal): @@ -90,8 +93,88 @@ def discriminator(): 'length_cm': 'lengthCm', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, length_cm, *args, **kwargs): # noqa: E501 + """Banana - a model defined in OpenAPI + + Args: + length_cm (float): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.length_cm = length_cm + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +256,6 @@ def __init__(self, length_cm, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/banana_req.py b/samples/openapi3/client/petstore/python/petstore_api/model/banana_req.py index 472678bd20e0..ff367d1d550f 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/banana_req.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/banana_req.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class BananaReq(ModelNormal): @@ -86,8 +89,89 @@ def discriminator(): 'sweet': 'sweet', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, length_cm, *args, **kwargs): # noqa: E501 + """BananaReq - a model defined in OpenAPI + + Args: + length_cm (float): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + sweet (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.length_cm = length_cm + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +254,6 @@ def __init__(self, length_cm, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/basque_pig.py b/samples/openapi3/client/petstore/python/petstore_api/model/basque_pig.py index 25b336460bc4..bdf993909529 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/basque_pig.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/basque_pig.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class BasquePig(ModelNormal): @@ -90,8 +93,88 @@ def discriminator(): 'class_name': 'className', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, class_name, *args, **kwargs): # noqa: E501 + """BasquePig - a model defined in OpenAPI + + Args: + class_name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.class_name = class_name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +256,6 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/capitalization.py b/samples/openapi3/client/petstore/python/petstore_api/model/capitalization.py index 6d939535ceef..2f1323481dca 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/capitalization.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/capitalization.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Capitalization(ModelNormal): @@ -100,8 +103,90 @@ def discriminator(): 'att_name': 'ATT_NAME', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Capitalization - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + small_camel (str): [optional] # noqa: E501 + capital_camel (str): [optional] # noqa: E501 + small_snake (str): [optional] # noqa: E501 + capital_snake (str): [optional] # noqa: E501 + sca_eth_flow_points (str): [optional] # noqa: E501 + att_name (str): Name of the pet . [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -185,3 +270,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/cat.py b/samples/openapi3/client/petstore/python/petstore_api/model/cat.py index eeea79359fc9..be46fe5abd8c 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/cat.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/cat.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -105,6 +108,100 @@ def discriminator(): 'color': 'color', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Cat - a model defined in OpenAPI + + Keyword Args: + class_name (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + declawed (bool): [optional] # noqa: E501 + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -202,6 +299,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/cat_all_of.py b/samples/openapi3/client/petstore/python/petstore_api/model/cat_all_of.py index 7efba680b4d8..a5bef948f72b 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/cat_all_of.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/cat_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class CatAllOf(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'declawed': 'declawed', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """CatAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + declawed (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/category.py b/samples/openapi3/client/petstore/python/petstore_api/model/category.py index 4936b4f0e443..b40329c9424d 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/category.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/category.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Category(ModelNormal): @@ -92,8 +95,90 @@ def discriminator(): 'id': 'id', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Category - a model defined in OpenAPI + + Args: + + Keyword Args: + name (str): defaults to "default-name" # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + """ + + name = kwargs.get('name', "default-name") + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -177,3 +262,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/child_cat.py b/samples/openapi3/client/petstore/python/petstore_api/model/child_cat.py index d054cb7a97a0..3644df82fc54 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/child_cat.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/child_cat.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_cat_all_of import ChildCatAllOf @@ -103,6 +106,99 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildCat - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -199,6 +295,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/child_cat_all_of.py b/samples/openapi3/client/petstore/python/petstore_api/model/child_cat_all_of.py index 3d732d085fba..48b725d7c3c6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/child_cat_all_of.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/child_cat_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ChildCatAllOf(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ChildCatAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/class_model.py b/samples/openapi3/client/petstore/python/petstore_api/model/class_model.py index 9e65a9373650..a3f2b58f87f3 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/class_model.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/class_model.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ClassModel(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): '_class': '_class', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ClassModel - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _class (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/client.py b/samples/openapi3/client/petstore/python/petstore_api/model/client.py index 6218de1e19e4..3dca32f7926b 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/client.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/client.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Client(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'client': 'client', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Client - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + client (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/complex_quadrilateral.py b/samples/openapi3/client/petstore/python/petstore_api/model/complex_quadrilateral.py index e461673adbd4..bd835d9a39a1 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/complex_quadrilateral.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/complex_quadrilateral.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.quadrilateral_interface import QuadrilateralInterface @@ -100,6 +103,99 @@ def discriminator(): 'quadrilateral_type': 'quadrilateralType', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ComplexQuadrilateral - a model defined in OpenAPI + + Keyword Args: + shape_type (str): + quadrilateral_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -196,6 +292,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/composed_one_of_number_with_validations.py b/samples/openapi3/client/petstore/python/petstore_api/model/composed_one_of_number_with_validations.py index 299c866cf8f3..68847c276eee 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/composed_one_of_number_with_validations.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/composed_one_of_number_with_validations.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -100,6 +103,99 @@ def discriminator(): 'class_name': 'className', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ComposedOneOfNumberWithValidations - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + class_name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -196,6 +292,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/composed_schema_with_props_and_no_add_props.py b/samples/openapi3/client/petstore/python/petstore_api/model/composed_schema_with_props_and_no_add_props.py index 518f4774b555..2cba94f64090 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/composed_schema_with_props_and_no_add_props.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/composed_schema_with_props_and_no_add_props.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.tag import Tag @@ -93,6 +96,100 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ComposedSchemaWithPropsAndNoAddProps - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + color (str): [optional] # noqa: E501 + id (int): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -190,6 +287,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/danish_pig.py b/samples/openapi3/client/petstore/python/petstore_api/model/danish_pig.py index 82215915e84c..c102f99cd285 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/danish_pig.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/danish_pig.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class DanishPig(ModelNormal): @@ -90,8 +93,88 @@ def discriminator(): 'class_name': 'className', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, class_name, *args, **kwargs): # noqa: E501 + """DanishPig - a model defined in OpenAPI + + Args: + class_name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.class_name = class_name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +256,6 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/dog.py b/samples/openapi3/client/petstore/python/petstore_api/model/dog.py index 3452f0d040a0..4a20dafa46cc 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/dog.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/dog.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -105,6 +108,100 @@ def discriminator(): 'color': 'color', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Dog - a model defined in OpenAPI + + Keyword Args: + class_name (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + breed (str): [optional] # noqa: E501 + color (str): [optional] if omitted the server will use the default value of "red" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -202,6 +299,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/dog_all_of.py b/samples/openapi3/client/petstore/python/petstore_api/model/dog_all_of.py index 962903d3a381..dbc36cb2c8f3 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/dog_all_of.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/dog_all_of.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class DogAllOf(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'breed': 'breed', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """DogAllOf - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + breed (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/drawing.py b/samples/openapi3/client/petstore/python/petstore_api/model/drawing.py index 24d402c3a820..41b4a5802c03 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/drawing.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/drawing.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.fruit import Fruit @@ -108,8 +111,88 @@ def discriminator(): 'shapes': 'shapes', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Drawing - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + main_shape (Shape): [optional] # noqa: E501 + shape_or_null (ShapeOrNull): [optional] # noqa: E501 + nullable_shape (NullableShape): [optional] # noqa: E501 + shapes ([Shape]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -191,3 +274,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/enum_arrays.py b/samples/openapi3/client/petstore/python/petstore_api/model/enum_arrays.py index db56838d7e49..da42763d9c32 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/enum_arrays.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/enum_arrays.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class EnumArrays(ModelNormal): @@ -100,8 +103,86 @@ def discriminator(): 'array_enum': 'array_enum', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """EnumArrays - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + just_symbol (str): [optional] # noqa: E501 + array_enum ([str]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -181,3 +262,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/enum_class.py b/samples/openapi3/client/petstore/python/petstore_api/model/enum_class.py index 63be703c38e9..a9e7723b255f 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/enum_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/enum_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class EnumClass(ModelSimple): @@ -89,6 +92,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -184,3 +189,93 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """EnumClass - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str): if omitted defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] # noqa: E501 + + Keyword Args: + value (str): if omitted defaults to "-efg", must be one of ["_abc", "-efg", "(xyz)", ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + value = "-efg" + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/enum_test.py b/samples/openapi3/client/petstore/python/petstore_api/model/enum_test.py index 23ddbcf9a2ca..1587b332721a 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/enum_test.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/enum_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.array_of_enums import ArrayOfEnums @@ -144,8 +147,98 @@ def discriminator(): 'array_of_str_enum': 'ArrayOfStrEnum', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, enum_string_required, *args, **kwargs): # noqa: E501 + """EnumTest - a model defined in OpenAPI + + Args: + enum_string_required (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + enum_string (str): [optional] # noqa: E501 + enum_integer (int): [optional] # noqa: E501 + enum_number (float): [optional] # noqa: E501 + string_enum (StringEnum): [optional] # noqa: E501 + integer_enum (IntegerEnum): [optional] # noqa: E501 + string_enum_with_default_value (StringEnumWithDefaultValue): [optional] # noqa: E501 + integer_enum_with_default_value (IntegerEnumWithDefaultValue): [optional] # noqa: E501 + integer_enum_one_value (IntegerEnumOneValue): [optional] # noqa: E501 + inline_array_of_str_enum ([StringEnum]): [optional] # noqa: E501 + array_of_str_enum (ArrayOfEnums): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.enum_string_required = enum_string_required + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -237,3 +330,6 @@ def __init__(self, enum_string_required, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/equilateral_triangle.py b/samples/openapi3/client/petstore/python/petstore_api/model/equilateral_triangle.py index e5e4104bd024..54549b982130 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/equilateral_triangle.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/equilateral_triangle.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.shape_interface import ShapeInterface @@ -100,6 +103,99 @@ def discriminator(): 'triangle_type': 'triangleType', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """EquilateralTriangle - a model defined in OpenAPI + + Keyword Args: + shape_type (str): + triangle_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -196,6 +292,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py b/samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py index 833bbdd8261c..71b921c921fb 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class FakeGetInlineAdditionalPropertiesPayloadArrayData(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'labels': 'labels', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """FakeGetInlineAdditionalPropertiesPayloadArrayData - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + labels ([str, none_type]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/file.py b/samples/openapi3/client/petstore/python/petstore_api/model/file.py index 137d00263242..849f5727dc9f 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/file.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/file.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class File(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'source_uri': 'sourceURI', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """File - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + source_uri (str): Test capitalization. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/file_schema_test_class.py b/samples/openapi3/client/petstore/python/petstore_api/model/file_schema_test_class.py index 3722125ae485..f7e154e47b7c 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/file_schema_test_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/file_schema_test_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.file import File @@ -98,8 +101,86 @@ def discriminator(): 'files': 'files', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """FileSchemaTestClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + file (File): [optional] # noqa: E501 + files ([File]): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -179,3 +260,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/foo.py b/samples/openapi3/client/petstore/python/petstore_api/model/foo.py index 7c319dc9995d..ad17251f73b6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/foo.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/foo.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Foo(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'bar': 'bar', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Foo - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bar (str): [optional] if omitted the server will use the default value of "bar" # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/format_test.py b/samples/openapi3/client/petstore/python/petstore_api/model/format_test.py index cce7f7f09819..6d4b3b79d705 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/format_test.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/format_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class FormatTest(ModelNormal): @@ -163,8 +166,106 @@ def discriminator(): 'pattern_with_digits_and_delimiter': 'pattern_with_digits_and_delimiter', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, number, byte, date, password, *args, **kwargs): # noqa: E501 + """FormatTest - a model defined in OpenAPI + + Args: + number (float): + byte (str): + date (date): + password (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + integer (int): [optional] # noqa: E501 + int32 (int): [optional] # noqa: E501 + int64 (int): [optional] # noqa: E501 + float (float): [optional] # noqa: E501 + double (float): [optional] # noqa: E501 + string (str): [optional] # noqa: E501 + binary (file_type): [optional] # noqa: E501 + date_time (datetime): [optional] # noqa: E501 + uuid (str): [optional] # noqa: E501 + uuid_no_example (str): [optional] # noqa: E501 + pattern_with_digits (str): A string that is a 10 digit number. Can have leading zeros.. [optional] # noqa: E501 + pattern_with_digits_and_delimiter (str): A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.number = number + self.byte = byte + self.date = date + self.password = password + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -264,3 +365,6 @@ def __init__(self, number, byte, date, password, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/fruit.py b/samples/openapi3/client/petstore/python/petstore_api/model/fruit.py index c7283f99d0c7..fedd13c38e47 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/fruit.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/fruit.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.apple import Apple @@ -115,6 +118,101 @@ def discriminator(): 'origin': 'origin', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Fruit - a model defined in OpenAPI + + Keyword Args: + cultivar (str): + length_cm (float): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + color (str): [optional] # noqa: E501 + origin (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -213,6 +311,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/fruit_req.py b/samples/openapi3/client/petstore/python/petstore_api/model/fruit_req.py index 519aa6d20eb5..01b907c5d8cf 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/fruit_req.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/fruit_req.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.apple_req import AppleReq @@ -104,6 +107,101 @@ def discriminator(): 'length_cm': 'lengthCm', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """FruitReq - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + mealy (bool): [optional] # noqa: E501 + sweet (bool): [optional] # noqa: E501 + cultivar (str): [optional] # noqa: E501 + length_cm (float): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -202,6 +300,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/gm_fruit.py b/samples/openapi3/client/petstore/python/petstore_api/model/gm_fruit.py index dc9299c2a1b6..99efd26f0d4c 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/gm_fruit.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/gm_fruit.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.apple import Apple @@ -115,6 +118,101 @@ def discriminator(): 'origin': 'origin', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """GmFruit - a model defined in OpenAPI + + Keyword Args: + cultivar (str): + length_cm (float): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + color (str): [optional] # noqa: E501 + origin (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -213,6 +311,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/grandparent_animal.py b/samples/openapi3/client/petstore/python/petstore_api/model/grandparent_animal.py index 70523affd890..1580c5a7b724 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/grandparent_animal.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/grandparent_animal.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_cat import ChildCat @@ -104,8 +107,88 @@ def discriminator(): 'pet_type': 'pet_type', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, pet_type, *args, **kwargs): # noqa: E501 + """GrandparentAnimal - a model defined in OpenAPI + + Args: + pet_type (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.pet_type = pet_type + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -187,3 +270,6 @@ def __init__(self, pet_type, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/has_only_read_only.py b/samples/openapi3/client/petstore/python/petstore_api/model/has_only_read_only.py index 4ea0bb087217..33d1c15b58d9 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/has_only_read_only.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/has_only_read_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class HasOnlyReadOnly(ModelNormal): @@ -92,8 +95,88 @@ def discriminator(): 'foo': 'foo', # noqa: E501 } + read_only_vars = { + 'bar', # noqa: E501 + 'foo', # noqa: E501 + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """HasOnlyReadOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bar (str): [optional] # noqa: E501 + foo (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +256,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/health_check_result.py b/samples/openapi3/client/petstore/python/petstore_api/model/health_check_result.py index 356ddea3cb14..0b3818b7c506 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/health_check_result.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/health_check_result.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class HealthCheckResult(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'nullable_message': 'NullableMessage', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """HealthCheckResult - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + nullable_message (str, none_type): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py b/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py index 9c78998902a2..4ba519ea0aff 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.fake_get_inline_additional_properties_payload_array_data import FakeGetInlineAdditionalPropertiesPayloadArrayData @@ -96,8 +99,85 @@ def discriminator(): 'array_data': 'arrayData', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """InlineAdditionalPropertiesRefPayload - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_data ([FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -176,3 +256,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py b/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py index ee93b74eac98..dbbd376e1250 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.fake_get_inline_additional_properties_payload_array_data import FakeGetInlineAdditionalPropertiesPayloadArrayData @@ -96,8 +99,85 @@ def discriminator(): 'array_data': 'arrayData', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """InlineObject6 - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + array_data ([FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -176,3 +256,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/inline_response_default.py b/samples/openapi3/client/petstore/python/petstore_api/model/inline_response_default.py index cb7b9985ea85..b755dbadd364 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/inline_response_default.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/inline_response_default.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.foo import Foo @@ -96,8 +99,85 @@ def discriminator(): 'string': 'string', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """InlineResponseDefault - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + string (Foo): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -176,3 +256,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum.py b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum.py index a31cd7c56958..2d3d1293cd33 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class IntegerEnum(ModelSimple): @@ -89,6 +92,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -188,3 +193,97 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """IntegerEnum - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (int):, must be one of [0, 1, 2, ] # noqa: E501 + + Keyword Args: + value (int):, must be one of [0, 1, 2, ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_one_value.py b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_one_value.py index f8fc86bfba7f..63c1a0b9a7b0 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_one_value.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_one_value.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class IntegerEnumOneValue(ModelSimple): @@ -87,6 +90,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -182,3 +187,93 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """IntegerEnumOneValue - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (int): if omitted defaults to 0, must be one of [0, ] # noqa: E501 + + Keyword Args: + value (int): if omitted defaults to 0, must be one of [0, ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + value = 0 + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_with_default_value.py b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_with_default_value.py index 3c56da865f6c..008f954a0f15 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_with_default_value.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/integer_enum_with_default_value.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class IntegerEnumWithDefaultValue(ModelSimple): @@ -89,6 +92,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -184,3 +189,93 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """IntegerEnumWithDefaultValue - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (int): if omitted defaults to 0, must be one of [0, 1, 2, ] # noqa: E501 + + Keyword Args: + value (int): if omitted defaults to 0, must be one of [0, 1, 2, ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + value = 0 + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/isosceles_triangle.py b/samples/openapi3/client/petstore/python/petstore_api/model/isosceles_triangle.py index b1f64bcb0db9..bcbc721c2b6b 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/isosceles_triangle.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/isosceles_triangle.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.shape_interface import ShapeInterface @@ -100,6 +103,99 @@ def discriminator(): 'triangle_type': 'triangleType', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """IsoscelesTriangle - a model defined in OpenAPI + + Keyword Args: + shape_type (str): + triangle_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -196,6 +292,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/list.py b/samples/openapi3/client/petstore/python/petstore_api/model/list.py index 11b46f10b565..4b71d9deec05 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/list.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/list.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class List(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): '_123_list': '123-list', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """List - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _123_list (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/mammal.py b/samples/openapi3/client/petstore/python/petstore_api/model/mammal.py index 234933fe1a8e..62037474b90a 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/mammal.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/mammal.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.pig import Pig @@ -118,6 +121,101 @@ def discriminator(): 'type': 'type', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Mammal - a model defined in OpenAPI + + Keyword Args: + class_name (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + has_baleen (bool): [optional] # noqa: E501 + has_teeth (bool): [optional] # noqa: E501 + type (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -216,6 +314,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/map_test.py b/samples/openapi3/client/petstore/python/petstore_api/model/map_test.py index a5418b39e734..39c3b180e88c 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/map_test.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/map_test.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.string_boolean_map import StringBooleanMap @@ -106,8 +109,88 @@ def discriminator(): 'indirect_map': 'indirect_map', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """MapTest - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + map_map_of_string ({str: ({str: (str,)},)}): [optional] # noqa: E501 + map_of_enum_string ({str: (str,)}): [optional] # noqa: E501 + direct_map ({str: (bool,)}): [optional] # noqa: E501 + indirect_map (StringBooleanMap): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -189,3 +272,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py b/samples/openapi3/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py index 67b3f79d9e5f..f46cd0b89726 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/mixed_properties_and_additional_properties_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.animal import Animal @@ -100,8 +103,87 @@ def discriminator(): 'map': 'map', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """MixedPropertiesAndAdditionalPropertiesClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + uuid (str): [optional] # noqa: E501 + date_time (datetime): [optional] # noqa: E501 + map ({str: (Animal,)}): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -182,3 +264,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/model200_response.py b/samples/openapi3/client/petstore/python/petstore_api/model/model200_response.py index 056f4c56ad35..41a8dee5fdf2 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/model200_response.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/model200_response.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Model200Response(ModelNormal): @@ -92,8 +95,86 @@ def discriminator(): '_class': 'class', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Model200Response - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (int): [optional] # noqa: E501 + _class (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +254,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/model_return.py b/samples/openapi3/client/petstore/python/petstore_api/model/model_return.py index 5f34582cdb4a..f3720b05246f 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/model_return.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/model_return.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ModelReturn(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): '_return': 'return', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ModelReturn - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _return (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/mole.py b/samples/openapi3/client/petstore/python/petstore_api/model/mole.py new file mode 100644 index 000000000000..328168b21235 --- /dev/null +++ b/samples/openapi3/client/petstore/python/petstore_api/model/mole.py @@ -0,0 +1,284 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from petstore_api.model_utils import ( # noqa: F401 + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + change_keys_js_to_python, + convert_js_args_to_python_args, + date, + datetime, + file_type, + none_type, + validate_get_composed_info, +) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + + + +class Mole(ModelNormal): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + Attributes: + allowed_values (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + with a capitalized key describing the allowed value and an allowed + value. These dicts store the allowed enum values. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + discriminator_value_class_map (dict): A dict to go from the discriminator + variable value to the discriminator class name. + validations (dict): The key is the tuple path to the attribute + and the for var_name this is (var_name,). The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + additional_properties_type (tuple): A tuple of classes accepted + as additional properties values. + """ + + allowed_values = { + } + + validations = { + } + + @cached_property + def additional_properties_type(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + """ + return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 + + _nullable = False + + @cached_property + def openapi_types(): + """ + This must be a method because a model may have properties that are + of type self, this must run after the class is loaded + + Returns + openapi_types (dict): The key is attribute name + and the value is attribute type. + """ + return { + 'blind': (bool,), # noqa: E501 + 'smell': (str,), # noqa: E501 + 'hearing': (bool,), # noqa: E501 + 'touch': (bool,), # noqa: E501 + 'taste': (str,), # noqa: E501 + 'seeing_ghosts': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'blind': 'blind', # noqa: E501 + 'smell': 'smell', # noqa: E501 + 'hearing': 'hearing', # noqa: E501 + 'touch': 'touch', # noqa: E501 + 'taste': 'taste', # noqa: E501 + 'seeing_ghosts': 'seeingGhosts', # noqa: E501 + } + + read_only_vars = { + 'blind', # noqa: E501 + 'touch', # noqa: E501 + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, blind, smell, hearing, *args, **kwargs): # noqa: E501 + """Mole - a model defined in OpenAPI + + Args: + blind (bool): + smell (str): + hearing (bool): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + touch (bool): [optional] # noqa: E501 + taste (str): [optional] # noqa: E501 + seeing_ghosts (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.blind = blind + self.smell = smell + self.hearing = hearing + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + + required_properties = set([ + '_data_store', + '_check_type', + '_spec_property_naming', + '_path_to_item', + '_configuration', + '_visited_composed_classes', + ]) + + @convert_js_args_to_python_args + def __init__(self, smell, hearing, *args, **kwargs): # noqa: E501 + """Mole - a model defined in OpenAPI + + smell (str): + hearing (bool): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + touch (bool): [optional] # noqa: E501 + taste (str): [optional] # noqa: E501 + seeing_ghosts (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.smell = smell + self.hearing = hearing + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/name.py b/samples/openapi3/client/petstore/python/petstore_api/model/name.py index 06b387ce9bfe..d46618c88a14 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/name.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/name.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Name(ModelNormal): @@ -96,8 +99,93 @@ def discriminator(): '_123_number': '123Number', # noqa: E501 } + read_only_vars = { + 'snake_case', # noqa: E501 + '_123_number', # noqa: E501 + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, *args, **kwargs): # noqa: E501 + """Name - a model defined in OpenAPI + + Args: + name (int): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + snake_case (int): [optional] # noqa: E501 + _property (str): [optional] # noqa: E501 + _123_number (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -182,3 +270,6 @@ def __init__(self, name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/nullable_class.py b/samples/openapi3/client/petstore/python/petstore_api/model/nullable_class.py index f2c2cb7642e6..ad5e551dd0fd 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/nullable_class.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/nullable_class.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class NullableClass(ModelNormal): @@ -114,8 +117,97 @@ def discriminator(): 'object_items_nullable': 'object_items_nullable', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """NullableClass - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + integer_prop (int, none_type): [optional] # noqa: E501 + number_prop (float, none_type): [optional] # noqa: E501 + boolean_prop (bool, none_type): [optional] # noqa: E501 + string_prop (str, none_type): [optional] # noqa: E501 + date_prop (date, none_type): [optional] # noqa: E501 + datetime_prop (datetime, none_type): [optional] # noqa: E501 + array_nullable_prop ([{str: (bool, date, datetime, dict, float, int, list, str, none_type)}], none_type): [optional] # noqa: E501 + array_and_items_nullable_prop ([{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type], none_type): [optional] # noqa: E501 + array_items_nullable ([{str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type]): [optional] # noqa: E501 + object_nullable ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type): [optional] # noqa: E501 + object_nullable_prop ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},)}, none_type): [optional] # noqa: E501 + object_and_items_nullable_prop ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type)}, none_type): [optional] # noqa: E501 + object_items_nullable ({str: ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type)}): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -206,3 +298,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/nullable_shape.py b/samples/openapi3/client/petstore/python/petstore_api/model/nullable_shape.py index a2cf17e3e7b9..6b2a0573ade8 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/nullable_shape.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/nullable_shape.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.quadrilateral import Quadrilateral @@ -108,6 +111,100 @@ def discriminator(): 'triangle_type': 'triangleType', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """NullableShape - a model defined in OpenAPI + + Keyword Args: + shape_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + quadrilateral_type (str): [optional] # noqa: E501 + triangle_type (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -205,6 +302,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/number_only.py b/samples/openapi3/client/petstore/python/petstore_api/model/number_only.py index cb2c9e2ad526..a96d91650569 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/number_only.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/number_only.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class NumberOnly(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'just_number': 'JustNumber', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """NumberOnly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + just_number (float): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/number_with_validations.py b/samples/openapi3/client/petstore/python/petstore_api/model/number_with_validations.py index a3b2746c22b5..afcbf8463eaa 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/number_with_validations.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/number_with_validations.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class NumberWithValidations(ModelSimple): @@ -88,6 +91,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -187,3 +192,97 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """NumberWithValidations - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (float): # noqa: E501 + + Keyword Args: + value (float): # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/object_interface.py b/samples/openapi3/client/petstore/python/petstore_api/model/object_interface.py index 7ba55b76eb24..23d16918fd60 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/object_interface.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/object_interface.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ObjectInterface(ModelNormal): @@ -88,8 +91,84 @@ def discriminator(): attribute_map = { } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ObjectInterface - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -167,3 +246,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py b/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py index 11db10a6128c..56a55a14c090 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/object_model_with_ref_props.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.number_with_validations import NumberWithValidations @@ -104,8 +107,88 @@ def discriminator(): 'my_boolean': 'my_boolean', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ObjectModelWithRefProps - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + my_number (NumberWithValidations): [optional] # noqa: E501 + my_readonly (Readonly): [optional] # noqa: E501 + my_string (str): [optional] # noqa: E501 + my_boolean (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -187,3 +270,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/object_with_validations.py b/samples/openapi3/client/petstore/python/petstore_api/model/object_with_validations.py index e03392b1154a..dd38862e11bf 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/object_with_validations.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/object_with_validations.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ObjectWithValidations(ModelNormal): @@ -91,8 +94,84 @@ def discriminator(): attribute_map = { } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ObjectWithValidations - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +249,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/order.py b/samples/openapi3/client/petstore/python/petstore_api/model/order.py index 48207e4560eb..eeefff1513f6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/order.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/order.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Order(ModelNormal): @@ -105,8 +108,90 @@ def discriminator(): 'complete': 'complete', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Order - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + pet_id (int): [optional] # noqa: E501 + quantity (int): [optional] # noqa: E501 + ship_date (datetime): [optional] # noqa: E501 + status (str): Order Status. [optional] # noqa: E501 + complete (bool): [optional] if omitted the server will use the default value of False # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -190,3 +275,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/parent_pet.py b/samples/openapi3/client/petstore/python/petstore_api/model/parent_pet.py index bda9c2779965..ff58abf3d793 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/parent_pet.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/parent_pet.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.child_cat import ChildCat @@ -103,6 +106,98 @@ def discriminator(): 'pet_type': 'pet_type', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ParentPet - a model defined in OpenAPI + + Keyword Args: + pet_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -198,6 +293,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/pet.py b/samples/openapi3/client/petstore/python/petstore_api/model/pet.py index b0c8b08607d1..8946f6d4bea3 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/pet.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/pet.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.category import Category @@ -113,8 +116,94 @@ def discriminator(): 'status': 'status', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, photo_urls, *args, **kwargs): # noqa: E501 + """Pet - a model defined in OpenAPI + + Args: + name (str): + photo_urls ([str]): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + category (Category): [optional] # noqa: E501 + tags ([Tag]): [optional] # noqa: E501 + status (str): pet status in the store. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.name = name + self.photo_urls = photo_urls + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -202,3 +291,6 @@ def __init__(self, name, photo_urls, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/pig.py b/samples/openapi3/client/petstore/python/petstore_api/model/pig.py index 21f61c65de08..07845be55eb1 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/pig.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/pig.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.basque_pig import BasquePig @@ -104,6 +107,98 @@ def discriminator(): 'class_name': 'className', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Pig - a model defined in OpenAPI + + Keyword Args: + class_name (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -199,6 +294,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral.py b/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral.py index d15d37cdbca9..b3aefcd1bd50 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.complex_quadrilateral import ComplexQuadrilateral @@ -106,6 +109,99 @@ def discriminator(): 'shape_type': 'shapeType', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Quadrilateral - a model defined in OpenAPI + + Keyword Args: + quadrilateral_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + shape_type (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -202,6 +298,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral_interface.py b/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral_interface.py index 872608885aca..5ca8fae392a8 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral_interface.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/quadrilateral_interface.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class QuadrilateralInterface(ModelNormal): @@ -90,8 +93,88 @@ def discriminator(): 'quadrilateral_type': 'quadrilateralType', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, quadrilateral_type, *args, **kwargs): # noqa: E501 + """QuadrilateralInterface - a model defined in OpenAPI + + Args: + quadrilateral_type (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.quadrilateral_type = quadrilateral_type + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +256,6 @@ def __init__(self, quadrilateral_type, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/read_only_first.py b/samples/openapi3/client/petstore/python/petstore_api/model/read_only_first.py index 0302bf96a7e5..38cb5e2634f6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/read_only_first.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/read_only_first.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ReadOnlyFirst(ModelNormal): @@ -92,8 +95,87 @@ def discriminator(): 'baz': 'baz', # noqa: E501 } + read_only_vars = { + 'bar', # noqa: E501 + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ReadOnlyFirst - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + bar (str): [optional] # noqa: E501 + baz (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +255,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py b/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py index 7d038917bb43..9a98af452eb8 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/readonly.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Readonly(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Readonly - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/scalene_triangle.py b/samples/openapi3/client/petstore/python/petstore_api/model/scalene_triangle.py index 86fc0a4f4959..a10ce28f172b 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/scalene_triangle.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/scalene_triangle.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.shape_interface import ShapeInterface @@ -100,6 +103,99 @@ def discriminator(): 'triangle_type': 'triangleType', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ScaleneTriangle - a model defined in OpenAPI + + Keyword Args: + shape_type (str): + triangle_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -196,6 +292,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/shape.py b/samples/openapi3/client/petstore/python/petstore_api/model/shape.py index 763a7aa362b0..50e21b8c8d8b 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/shape.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/shape.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.quadrilateral import Quadrilateral @@ -108,6 +111,100 @@ def discriminator(): 'triangle_type': 'triangleType', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Shape - a model defined in OpenAPI + + Keyword Args: + shape_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + quadrilateral_type (str): [optional] # noqa: E501 + triangle_type (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -205,6 +302,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/shape_interface.py b/samples/openapi3/client/petstore/python/petstore_api/model/shape_interface.py index b8ab31fc31c6..0f11d5a14466 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/shape_interface.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/shape_interface.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class ShapeInterface(ModelNormal): @@ -90,8 +93,88 @@ def discriminator(): 'shape_type': 'shapeType', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, shape_type, *args, **kwargs): # noqa: E501 + """ShapeInterface - a model defined in OpenAPI + + Args: + shape_type (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.shape_type = shape_type + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +256,6 @@ def __init__(self, shape_type, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/shape_or_null.py b/samples/openapi3/client/petstore/python/petstore_api/model/shape_or_null.py index 403449e0c9c2..00ae221f8a63 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/shape_or_null.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/shape_or_null.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.quadrilateral import Quadrilateral @@ -108,6 +111,100 @@ def discriminator(): 'triangle_type': 'triangleType', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """ShapeOrNull - a model defined in OpenAPI + + Keyword Args: + shape_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + quadrilateral_type (str): [optional] # noqa: E501 + triangle_type (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -205,6 +302,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/simple_quadrilateral.py b/samples/openapi3/client/petstore/python/petstore_api/model/simple_quadrilateral.py index d68f1d3b5cb3..1a3bef4c26e2 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/simple_quadrilateral.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/simple_quadrilateral.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.quadrilateral_interface import QuadrilateralInterface @@ -100,6 +103,99 @@ def discriminator(): 'quadrilateral_type': 'quadrilateralType', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """SimpleQuadrilateral - a model defined in OpenAPI + + Keyword Args: + shape_type (str): + quadrilateral_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -196,6 +292,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/some_object.py b/samples/openapi3/client/petstore/python/petstore_api/model/some_object.py index 72687c02ab69..3c3215d357bb 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/some_object.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/some_object.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.object_interface import ObjectInterface @@ -94,6 +97,97 @@ def discriminator(): attribute_map = { } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """SomeObject - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -188,6 +282,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/some_object_with_self_attr.py b/samples/openapi3/client/petstore/python/petstore_api/model/some_object_with_self_attr.py index 3fba94014b5c..76e776ae67fc 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/some_object_with_self_attr.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/some_object_with_self_attr.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class SomeObjectWithSelfAttr(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): '_self': 'self', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """SomeObjectWithSelfAttr - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + _self (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/special_model_name.py b/samples/openapi3/client/petstore/python/petstore_api/model/special_model_name.py index cfaedbc78815..cc2e49f6bcb0 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/special_model_name.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/special_model_name.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class SpecialModelName(ModelNormal): @@ -90,8 +93,85 @@ def discriminator(): 'special_property_name': '$special[property.name]', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """SpecialModelName - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + special_property_name (int): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -170,3 +250,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/string_boolean_map.py b/samples/openapi3/client/petstore/python/petstore_api/model/string_boolean_map.py index 4ac526991839..05f8527fec1e 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/string_boolean_map.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/string_boolean_map.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class StringBooleanMap(ModelNormal): @@ -88,8 +91,84 @@ def discriminator(): attribute_map = { } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """StringBooleanMap - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -167,3 +246,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/string_enum.py b/samples/openapi3/client/petstore/python/petstore_api/model/string_enum.py index 1e48fdecbf49..890e25eeddcf 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/string_enum.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/string_enum.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class StringEnum(ModelSimple): @@ -95,6 +98,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -198,3 +203,101 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """StringEnum - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str):, must be one of ["placed", "approved", "delivered", "single quoted", '''multiple +lines''', '''double quote + with newline''', ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["placed", "approved", "delivered", "single quoted", '''multiple +lines''', '''double quote + with newline''', ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/string_enum_with_default_value.py b/samples/openapi3/client/petstore/python/petstore_api/model/string_enum_with_default_value.py index 1417d0ff0fc1..3861e56a08ce 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/string_enum_with_default_value.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/string_enum_with_default_value.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class StringEnumWithDefaultValue(ModelSimple): @@ -89,6 +92,8 @@ def discriminator(): attribute_map = {} + read_only_vars = set() + _composed_schemas = None required_properties = set([ @@ -184,3 +189,93 @@ def __init__(self, *args, **kwargs): path_to_item=_path_to_item, valid_classes=(self.__class__,), ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """StringEnumWithDefaultValue - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str): if omitted defaults to "placed", must be one of ["placed", "approved", "delivered", ] # noqa: E501 + + Keyword Args: + value (str): if omitted defaults to "placed", must be one of ["placed", "approved", "delivered", ] # noqa: E501 + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + value = "placed" + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + self.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/tag.py b/samples/openapi3/client/petstore/python/petstore_api/model/tag.py index 0e7427effa67..95a08c180731 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/tag.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/tag.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Tag(ModelNormal): @@ -92,8 +95,86 @@ def discriminator(): 'name': 'name', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Tag - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + name (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +254,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/triangle.py b/samples/openapi3/client/petstore/python/petstore_api/model/triangle.py index b1112e24892d..f9082e2098ff 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/triangle.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/triangle.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + def lazy_import(): from petstore_api.model.equilateral_triangle import EquilateralTriangle @@ -109,6 +112,99 @@ def discriminator(): 'shape_type': 'shapeType', # noqa: E501 } + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Triangle - a model defined in OpenAPI + + Keyword Args: + triangle_type (str): + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + shape_type (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # discard variable. + continue + setattr(self, var_name, var_value) + + return self + required_properties = set([ '_data_store', '_check_type', @@ -205,6 +301,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") @cached_property def _composed_schemas(): diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/triangle_interface.py b/samples/openapi3/client/petstore/python/petstore_api/model/triangle_interface.py index f31e3dba1358..783e5fe3bf83 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/triangle_interface.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/triangle_interface.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class TriangleInterface(ModelNormal): @@ -90,8 +93,88 @@ def discriminator(): 'triangle_type': 'triangleType', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, triangle_type, *args, **kwargs): # noqa: E501 + """TriangleInterface - a model defined in OpenAPI + + Args: + triangle_type (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.triangle_type = triangle_type + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -173,3 +256,6 @@ def __init__(self, triangle_type, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/user.py b/samples/openapi3/client/petstore/python/petstore_api/model/user.py index 2271e3e37e51..f77ab381d217 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/user.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/user.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class User(ModelNormal): @@ -112,8 +115,96 @@ def discriminator(): 'any_type_prop_nullable': 'anyTypePropNullable', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """User - a model defined in OpenAPI + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + id (int): [optional] # noqa: E501 + username (str): [optional] # noqa: E501 + first_name (str): [optional] # noqa: E501 + last_name (str): [optional] # noqa: E501 + email (str): [optional] # noqa: E501 + password (str): [optional] # noqa: E501 + phone (str): [optional] # noqa: E501 + user_status (int): User Status. [optional] # noqa: E501 + object_with_no_declared_props ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): test code generation for objects Value must be a map of strings to values. It cannot be the 'null' value.. [optional] # noqa: E501 + object_with_no_declared_props_nullable ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}, none_type): test code generation for nullable objects. Value must be a map of strings to values or the 'null' value.. [optional] # noqa: E501 + any_type_prop (bool, date, datetime, dict, float, int, list, str, none_type): test code generation for any type Here the 'type' attribute is not specified, which means the value can be anything, including the null value, string, number, boolean, array or object. See https://github.com/OAI/OpenAPI-Specification/issues/1389. [optional] # noqa: E501 + any_type_prop_nullable (bool, date, datetime, dict, float, int, list, str, none_type): test code generation for any type Here the 'type' attribute is not specified, which means the value can be anything, including the null value, string, number, boolean, array or object. The 'nullable' attribute does not change the allowed values.. [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -203,3 +294,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/whale.py b/samples/openapi3/client/petstore/python/petstore_api/model/whale.py index c3e1c40b4e51..a8eb263b118f 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/whale.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/whale.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Whale(ModelNormal): @@ -94,8 +97,90 @@ def discriminator(): 'has_teeth': 'hasTeeth', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, class_name, *args, **kwargs): # noqa: E501 + """Whale - a model defined in OpenAPI + + Args: + class_name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + has_baleen (bool): [optional] # noqa: E501 + has_teeth (bool): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.class_name = class_name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -179,3 +264,6 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/zebra.py b/samples/openapi3/client/petstore/python/petstore_api/model/zebra.py index bf5bbbefa9ce..c348b3316715 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/zebra.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/zebra.py @@ -25,6 +25,9 @@ none_type, validate_get_composed_info, ) +from ..model_utils import OpenApiModel +from petstore_api.exceptions import ApiAttributeError + class Zebra(ModelNormal): @@ -97,8 +100,89 @@ def discriminator(): 'type': 'type', # noqa: E501 } + read_only_vars = { + } + _composed_schemas = {} + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, class_name, *args, **kwargs): # noqa: E501 + """Zebra - a model defined in OpenAPI + + Args: + class_name (str): + + Keyword Args: + _check_type (bool): if True, values for parameters in openapi_types + will be type checked and a TypeError will be + raised if the wrong type is input. + Defaults to True + _path_to_item (tuple/list): This is a list of keys or values to + drill down to the model in received_data + when deserializing a response + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _configuration (Configuration): the instance to use when + deserializing a file_type parameter. + If passed, type conversion is attempted + If omitted no type conversion is done. + _visited_composed_classes (tuple): This stores a tuple of + classes that we have traveled through so that + if we see that class again we will not use its + discriminator again. + When traveling through a discriminator, the + composed schema that is + is traveled through is added to this set. + For example if Animal has a discriminator + petType and we pass in "Dog", and the class Dog + allOf includes Animal, we move through Animal + once using the discriminator, and pick Dog. + Then in Dog, we will make an instance of the + Animal class but this time we won't travel + through its discriminator because we passed in + _visited_composed_classes = (Animal,) + type (str): [optional] # noqa: E501 + """ + + _check_type = kwargs.pop('_check_type', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _path_to_item = kwargs.pop('_path_to_item', ()) + _configuration = kwargs.pop('_configuration', None) + _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % ( + args, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + + self.class_name = class_name + for var_name, var_value in kwargs.items(): + if var_name not in self.attribute_map and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self.additional_properties_type is None: + # discard variable. + continue + setattr(self, var_name, var_value) + return self + required_properties = set([ '_data_store', '_check_type', @@ -181,3 +265,6 @@ def __init__(self, class_name, *args, **kwargs): # noqa: E501 # discard variable. continue setattr(self, var_name, var_value) + if var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " + f"class with read only attributes.") diff --git a/samples/openapi3/client/petstore/python/petstore_api/model_utils.py b/samples/openapi3/client/petstore/python/petstore_api/model_utils.py index 3a555f0a88c4..3913228d6b89 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model_utils.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model_utils.py @@ -29,6 +29,22 @@ file_type = io.IOBase +def convert_js_args_to_python_args(fn): + from functools import wraps + @wraps(fn) + def wrapped_init(_self, *args, **kwargs): + """ + An attribute named `self` received from the api will conflicts with the reserved `self` + parameter of a class method. During generation, `self` attributes are mapped + to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. + """ + spec_property_naming = kwargs.get('_spec_property_naming', False) + if spec_property_naming: + kwargs = change_keys_js_to_python(kwargs, _self if isinstance(_self, type) else _self.__class__) + return fn(_self, *args, **kwargs) + return wrapped_init + + class cached_property(object): # this caches the result of the function call for fn with no inputs # use this as a decorator on fuction methods that you want converted @@ -284,6 +300,121 @@ def __new__(cls, *args, **kwargs): return new_inst + @classmethod + @convert_js_args_to_python_args + def _new_from_openapi_data(cls, *args, **kwargs): + # this function uses the discriminator to + # pick a new schema/class to instantiate because a discriminator + # propertyName value was passed in + + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance(cls, model_kwargs, kwargs, model_arg=arg) + return oneof_instance + + + visited_composed_classes = kwargs.get('_visited_composed_classes', ()) + if ( + cls.discriminator is None or + cls in visited_composed_classes + ): + # Use case 1: this openapi schema (cls) does not have a discriminator + # Use case 2: we have already visited this class before and are sure that we + # want to instantiate it this time. We have visited this class deserializing + # a payload with a discriminator. During that process we traveled through + # this class but did not make an instance of it. Now we are making an + # instance of a composed class which contains cls in it, so this time make an instance of cls. + # + # Here's an example of use case 2: If Animal has a discriminator + # petType and we pass in "Dog", and the class Dog + # allOf includes Animal, we move through Animal + # once using the discriminator, and pick Dog. + # Then in the composed schema dog Dog, we will make an instance of the + # Animal class (because Dal has allOf: Animal) but this time we won't travel + # through Animal's discriminator because we passed in + # _visited_composed_classes = (Animal,) + + return cls._from_openapi_data(*args, **kwargs) + + # Get the name and value of the discriminator property. + # The discriminator name is obtained from the discriminator meta-data + # and the discriminator value is obtained from the input data. + discr_propertyname_py = list(cls.discriminator.keys())[0] + discr_propertyname_js = cls.attribute_map[discr_propertyname_py] + if discr_propertyname_js in kwargs: + discr_value = kwargs[discr_propertyname_js] + elif discr_propertyname_py in kwargs: + discr_value = kwargs[discr_propertyname_py] + else: + # The input data does not contain the discriminator property. + path_to_item = kwargs.get('_path_to_item', ()) + raise ApiValueError( + "Cannot deserialize input data due to missing discriminator. " + "The discriminator property '%s' is missing at path: %s" % + (discr_propertyname_js, path_to_item) + ) + + # Implementation note: the last argument to get_discriminator_class + # is a list of visited classes. get_discriminator_class may recursively + # call itself and update the list of visited classes, and the initial + # value must be an empty list. Hence not using 'visited_composed_classes' + new_cls = get_discriminator_class( + cls, discr_propertyname_py, discr_value, []) + if new_cls is None: + path_to_item = kwargs.get('_path_to_item', ()) + disc_prop_value = kwargs.get( + discr_propertyname_js, kwargs.get(discr_propertyname_py)) + raise ApiValueError( + "Cannot deserialize input data due to invalid discriminator " + "value. The OpenAPI document has no mapping for discriminator " + "property '%s'='%s' at path: %s" % + (discr_propertyname_js, disc_prop_value, path_to_item) + ) + + if new_cls in visited_composed_classes: + # if we are making an instance of a composed schema Descendent + # which allOf includes Ancestor, then Ancestor contains + # a discriminator that includes Descendent. + # So if we make an instance of Descendent, we have to make an + # instance of Ancestor to hold the allOf properties. + # This code detects that use case and makes the instance of Ancestor + # For example: + # When making an instance of Dog, _visited_composed_classes = (Dog,) + # then we make an instance of Animal to include in dog._composed_instances + # so when we are here, cls is Animal + # cls.discriminator != None + # cls not in _visited_composed_classes + # new_cls = Dog + # but we know we know that we already have Dog + # because it is in visited_composed_classes + # so make Animal here + return cls._from_openapi_data(*args, **kwargs) + + # Build a list containing all oneOf and anyOf descendants. + oneof_anyof_classes = None + if cls._composed_schemas is not None: + oneof_anyof_classes = ( + cls._composed_schemas.get('oneOf', ()) + + cls._composed_schemas.get('anyOf', ())) + oneof_anyof_child = new_cls in oneof_anyof_classes + kwargs['_visited_composed_classes'] = visited_composed_classes + (cls,) + + if cls._composed_schemas.get('allOf') and oneof_anyof_child: + # Validate that we can make self because when we make the + # new_cls it will not include the allOf validations in self + self_inst = cls._from_openapi_data(*args, **kwargs) + + + new_inst = new_cls._new_from_openapi_data(*args, **kwargs) + return new_inst + + class ModelSimple(OpenApiModel): """the parent class of models whose type != object in their swagger/openapi""" @@ -1208,14 +1339,14 @@ def deserialize_model(model_data, model_class, path_to_item, check_type, _spec_property_naming=spec_property_naming) if issubclass(model_class, ModelSimple): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) elif isinstance(model_data, list): - return model_class(*model_data, **kw_args) + return model_class._new_from_openapi_data(*model_data, **kw_args) if isinstance(model_data, dict): kw_args.update(model_data) - return model_class(**kw_args) + return model_class._new_from_openapi_data(**kw_args) elif isinstance(model_data, PRIMITIVE_TYPES): - return model_class(model_data, **kw_args) + return model_class._new_from_openapi_data(model_data, **kw_args) def deserialize_file(response_data, configuration, content_disposition=None): @@ -1577,22 +1708,6 @@ def get_valid_classes_phrase(input_classes): return "is one of [{0}]".format(", ".join(all_class_names)) -def convert_js_args_to_python_args(fn): - from functools import wraps - @wraps(fn) - def wrapped_init(_self, *args, **kwargs): - """ - An attribute named `self` received from the api will conflicts with the reserved `self` - parameter of a class method. During generation, `self` attributes are mapped - to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. - """ - spec_property_naming = kwargs.get('_spec_property_naming', False) - if spec_property_naming: - kwargs = change_keys_js_to_python(kwargs, _self.__class__) - return fn(_self, *args, **kwargs) - return wrapped_init - - def get_allof_instances(self, model_args, constant_args): """ Args: diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py b/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py index ef47f62075b4..f18e33defce6 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py @@ -67,6 +67,7 @@ from petstore_api.model.mixed_properties_and_additional_properties_class import MixedPropertiesAndAdditionalPropertiesClass from petstore_api.model.model200_response import Model200Response from petstore_api.model.model_return import ModelReturn +from petstore_api.model.mole import Mole from petstore_api.model.name import Name from petstore_api.model.nullable_class import NullableClass from petstore_api.model.nullable_shape import NullableShape diff --git a/samples/openapi3/client/petstore/python/test/test_mole.py b/samples/openapi3/client/petstore/python/test/test_mole.py new file mode 100644 index 000000000000..176fdf03a314 --- /dev/null +++ b/samples/openapi3/client/petstore/python/test/test_mole.py @@ -0,0 +1,35 @@ +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import petstore_api +from petstore_api.model.mole import Mole + + +class TestMole(unittest.TestCase): + """Mole unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testMole(self): + """Test Mole""" + # FIXME: construct object with mandatory attributes with example values + # mole = Mole() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_mole.py b/samples/openapi3/client/petstore/python/tests_manual/test_mole.py new file mode 100644 index 000000000000..fa8bf28c3088 --- /dev/null +++ b/samples/openapi3/client/petstore/python/tests_manual/test_mole.py @@ -0,0 +1,78 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest +from petstore_api.exceptions import ApiAttributeError + +import petstore_api + +try: + from petstore_api.model import mole +except ImportError: + mole = sys.modules["petstore_api.model.mole"] + + +class TestMole(unittest.TestCase): + """Triangle unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testMole(self): + # includes required parameters that are `readOnly=False` and not defined `readOnly` + my_mole = mole.Mole(smell="dirt", hearing=False) + assert my_mole.smell == "dirt" + assert my_mole.hearing is False + + # includes required parameters that `readOnly=False`, an optional `readOnly=False` and not defined `readOnly` + my_mole = mole.Mole(smell="dirt", taste="kfc", hearing=True) + assert my_mole.smell == "dirt" + assert my_mole.taste == "kfc" + assert my_mole.hearing is True + + # includes required parameters that `readOnly=False`, and required not defined `readOnly`, and an optional not defined + my_mole = mole.Mole(smell="dirt", seeing_ghosts=True, hearing=False) + assert my_mole.smell == "dirt" + assert my_mole.seeing_ghosts is True + assert my_mole.hearing is False + + # passing in required readOnly parameters raises an exception + with self.assertRaises(ApiAttributeError): + mole.Mole(smell="dirt", hearing=False, blind=True) + + # passing in optional readOnly parameters raises an exception + with self.assertRaises(ApiAttributeError): + mole.Mole(smell="dirt", hearing=False, touch=True) + + # passing in required an optional parameters with readOnly true or false works with from_openapi_data + my_mole = mole.Mole._from_openapi_data( + smell="dirt", + taste="kfc", + blind=True, + touch=False, + hearing=True, + seeing_ghosts=False, + ) + assert my_mole.smell == "dirt" + assert my_mole.taste == "kfc" + assert my_mole.blind is True + assert my_mole.touch is False + assert my_mole.hearing is True + assert my_mole.seeing_ghosts is False + + +if __name__ == "__main__": + unittest.main() From 456023b77c863f496e7eb830f7b9d7e0a9b6ab59 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 12 May 2021 17:08:59 +0800 Subject: [PATCH 103/186] Update erlang-server dependencies (#9414) * update erlang-server dependencies * reenable erlang-server test * test with 2.7.0 * use only cowboy * comment out erlang server test --- CI/.drone.yml | 1 + .../resources/erlang-server/rebar.config.mustache | 6 +++--- .../erlang-server/.openapi-generator/FILES | 14 ++++++++++++++ .../erlang-server/.openapi-generator/VERSION | 2 +- samples/server/petstore/erlang-server/rebar.config | 6 +++--- 5 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 samples/server/petstore/erlang-server/.openapi-generator/FILES diff --git a/CI/.drone.yml b/CI/.drone.yml index d8dd0dff8275..032d64b9e154 100644 --- a/CI/.drone.yml +++ b/CI/.drone.yml @@ -59,4 +59,5 @@ steps: commands: - (cd samples/client/petstore/erlang-client && rebar3 compile) - (cd samples/client/petstore/erlang-proper && rebar3 compile) + # comment out as the tests pass locally but not in the CI #- (cd samples/server/petstore/erlang-server && rebar3 compile) diff --git a/modules/openapi-generator/src/main/resources/erlang-server/rebar.config.mustache b/modules/openapi-generator/src/main/resources/erlang-server/rebar.config.mustache index 7ddca0f30279..743b108f384a 100644 --- a/modules/openapi-generator/src/main/resources/erlang-server/rebar.config.mustache +++ b/modules/openapi-generator/src/main/resources/erlang-server/rebar.config.mustache @@ -1,6 +1,6 @@ {deps, [ - {cowboy, {git, "https://github.com/ninenines/cowboy.git", {tag, "2.5.0"}}}, + {cowboy, {git, "https://github.com/ninenines/cowboy.git", {tag, "2.8.0"}}}, {rfc3339, {git, "https://github.com/talentdeficit/rfc3339.git", {tag, "master"}}}, - {jsx, {git, "https://github.com/talentdeficit/jsx.git", {tag, "2.9.0"}}}, - {jesse, {git, "https://github.com/for-GET/jesse.git", {tag, "1.5.2"}}} + {jsx, {git, "https://github.com/talentdeficit/jsx.git", {tag, "v3.1.0"}}}, + {jesse, {git, "https://github.com/for-GET/jesse.git", {tag, "1.5.6"}}} ]}. diff --git a/samples/server/petstore/erlang-server/.openapi-generator/FILES b/samples/server/petstore/erlang-server/.openapi-generator/FILES new file mode 100644 index 000000000000..9c50202b9359 --- /dev/null +++ b/samples/server/petstore/erlang-server/.openapi-generator/FILES @@ -0,0 +1,14 @@ +README.md +priv/openapi.json +rebar.config +src/openapi.app.src +src/openapi_api.erl +src/openapi_auth.erl +src/openapi_default_logic_handler.erl +src/openapi_logic_handler.erl +src/openapi_pet_handler.erl +src/openapi_router.erl +src/openapi_server.erl +src/openapi_store_handler.erl +src/openapi_user_handler.erl +src/openapi_utils.erl diff --git a/samples/server/petstore/erlang-server/.openapi-generator/VERSION b/samples/server/petstore/erlang-server/.openapi-generator/VERSION index d99e7162d01f..d509cc92aa80 100644 --- a/samples/server/petstore/erlang-server/.openapi-generator/VERSION +++ b/samples/server/petstore/erlang-server/.openapi-generator/VERSION @@ -1 +1 @@ -5.0.0-SNAPSHOT \ No newline at end of file +5.1.1-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/erlang-server/rebar.config b/samples/server/petstore/erlang-server/rebar.config index 7ddca0f30279..743b108f384a 100644 --- a/samples/server/petstore/erlang-server/rebar.config +++ b/samples/server/petstore/erlang-server/rebar.config @@ -1,6 +1,6 @@ {deps, [ - {cowboy, {git, "https://github.com/ninenines/cowboy.git", {tag, "2.5.0"}}}, + {cowboy, {git, "https://github.com/ninenines/cowboy.git", {tag, "2.8.0"}}}, {rfc3339, {git, "https://github.com/talentdeficit/rfc3339.git", {tag, "master"}}}, - {jsx, {git, "https://github.com/talentdeficit/jsx.git", {tag, "2.9.0"}}}, - {jesse, {git, "https://github.com/for-GET/jesse.git", {tag, "1.5.2"}}} + {jsx, {git, "https://github.com/talentdeficit/jsx.git", {tag, "v3.1.0"}}}, + {jesse, {git, "https://github.com/for-GET/jesse.git", {tag, "1.5.6"}}} ]}. From c4c15cecb60de654ad036b2a942c53d520256132 Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Wed, 12 May 2021 13:56:03 +0100 Subject: [PATCH 104/186] [kotlin][client] add sample for parcelizeModels (#9394) --- bin/configs/kotlin-json-request-string.yaml | 1 + .../src/main/resources/kotlin-client/data_class.mustache | 1 - .../client/petstore/kotlin-json-request-string/build.gradle | 1 + .../kotlin/org/openapitools/client/models/ApiResponse.kt | 5 ++++- .../main/kotlin/org/openapitools/client/models/Category.kt | 5 ++++- .../src/main/kotlin/org/openapitools/client/models/Order.kt | 5 ++++- .../src/main/kotlin/org/openapitools/client/models/Pet.kt | 5 ++++- .../src/main/kotlin/org/openapitools/client/models/Tag.kt | 5 ++++- .../src/main/kotlin/org/openapitools/client/models/User.kt | 5 ++++- 9 files changed, 26 insertions(+), 7 deletions(-) diff --git a/bin/configs/kotlin-json-request-string.yaml b/bin/configs/kotlin-json-request-string.yaml index 8f1dade28c90..375622ae5df0 100644 --- a/bin/configs/kotlin-json-request-string.yaml +++ b/bin/configs/kotlin-json-request-string.yaml @@ -5,3 +5,4 @@ templateDir: modules/openapi-generator/src/main/resources/kotlin-client additionalProperties: requestDateConverter: toString artifactId: kotlin-petstore-json-request-string + parcelizeModels: true diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache index 117cdef8fd79..216df66eeac0 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache @@ -25,7 +25,6 @@ import kotlinx.serialization.Contextual {{#parcelizeModels}} import android.os.Parcelable import kotlinx.parcelize.Parcelize - {{/parcelizeModels}} {{/multiplatform}} {{#multiplatform}} diff --git a/samples/client/petstore/kotlin-json-request-string/build.gradle b/samples/client/petstore/kotlin-json-request-string/build.gradle index 60e5056e0316..4e47e29cc51b 100644 --- a/samples/client/petstore/kotlin-json-request-string/build.gradle +++ b/samples/client/petstore/kotlin-json-request-string/build.gradle @@ -18,6 +18,7 @@ buildscript { } apply plugin: 'kotlin' +apply plugin: 'kotlin-parcelize' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt index fafca8738f66..5e349f9f96e0 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/ApiResponse.kt @@ -13,6 +13,8 @@ package org.openapitools.client.models import com.squareup.moshi.Json +import android.os.Parcelable +import kotlinx.parcelize.Parcelize /** * Describes the result of uploading an image resource @@ -20,6 +22,7 @@ import com.squareup.moshi.Json * @param type * @param message */ +@Parcelize data class ApiResponse ( @Json(name = "code") @@ -28,5 +31,5 @@ data class ApiResponse ( val type: kotlin.String? = null, @Json(name = "message") val message: kotlin.String? = null -) +) : Parcelable diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt index a4c17c3b49dd..38cc22268468 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Category.kt @@ -13,17 +13,20 @@ package org.openapitools.client.models import com.squareup.moshi.Json +import android.os.Parcelable +import kotlinx.parcelize.Parcelize /** * A category for a pet * @param id * @param name */ +@Parcelize data class Category ( @Json(name = "id") val id: kotlin.Long? = null, @Json(name = "name") val name: kotlin.String? = null -) +) : Parcelable diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt index 2bdaec85131d..7e9d9fc46441 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Order.kt @@ -13,6 +13,8 @@ package org.openapitools.client.models import com.squareup.moshi.Json +import android.os.Parcelable +import kotlinx.parcelize.Parcelize /** * An order for a pets from the pet store @@ -23,6 +25,7 @@ import com.squareup.moshi.Json * @param status Order Status * @param complete */ +@Parcelize data class Order ( @Json(name = "id") @@ -38,7 +41,7 @@ data class Order ( val status: Order.Status? = null, @Json(name = "complete") val complete: kotlin.Boolean? = null -) { +) : Parcelable { /** * Order Status diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt index 0e38da34b79e..35de5ef28a2a 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Pet.kt @@ -15,6 +15,8 @@ import org.openapitools.client.models.Category import org.openapitools.client.models.Tag import com.squareup.moshi.Json +import android.os.Parcelable +import kotlinx.parcelize.Parcelize /** * A pet for sale in the pet store @@ -25,6 +27,7 @@ import com.squareup.moshi.Json * @param tags * @param status pet status in the store */ +@Parcelize data class Pet ( @Json(name = "name") @@ -40,7 +43,7 @@ data class Pet ( /* pet status in the store */ @Json(name = "status") val status: Pet.Status? = null -) { +) : Parcelable { /** * pet status in the store diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt index 6e619023a5c9..dc72586b9919 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/Tag.kt @@ -13,17 +13,20 @@ package org.openapitools.client.models import com.squareup.moshi.Json +import android.os.Parcelable +import kotlinx.parcelize.Parcelize /** * A tag for a pet * @param id * @param name */ +@Parcelize data class Tag ( @Json(name = "id") val id: kotlin.Long? = null, @Json(name = "name") val name: kotlin.String? = null -) +) : Parcelable diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt index af1e270325de..9a840f06e7fa 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/models/User.kt @@ -13,6 +13,8 @@ package org.openapitools.client.models import com.squareup.moshi.Json +import android.os.Parcelable +import kotlinx.parcelize.Parcelize /** * A User who is purchasing from the pet store @@ -25,6 +27,7 @@ import com.squareup.moshi.Json * @param phone * @param userStatus User Status */ +@Parcelize data class User ( @Json(name = "id") @@ -44,5 +47,5 @@ data class User ( /* User Status */ @Json(name = "userStatus") val userStatus: kotlin.Int? = null -) +) : Parcelable From be06541b4716be16944f1da585ad61c8e4c35f65 Mon Sep 17 00:00:00 2001 From: Sheldon Young Date: Wed, 12 May 2021 06:16:27 -0700 Subject: [PATCH 105/186] [scala-sttp] Compilation failed when URI parameter name is not camelCase, fixes #9345 (#9354) --- .../languages/ScalaSttpClientCodegen.java | 15 ++++++++++++-- .../codegen/scala/SttpCodegenTest.java | 20 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/scala/SttpCodegenTest.java diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java index 701be93e47d2..68ae83dc061f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java @@ -37,6 +37,8 @@ import java.io.StringWriter; import java.io.Writer; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import static org.openapitools.codegen.utils.StringUtils.camelize; @@ -179,8 +181,17 @@ public String getHelp() { @Override public String encodePath(String input) { - String result = super.encodePath(input); - return result.replace("{", "${"); + String path = super.encodePath(input); + + // The parameter names in the URI must be converted to the same case as + // the method parameter. + StringBuffer buf = new StringBuffer(path.length()); + Matcher matcher = Pattern.compile("[{](.*?)[}]").matcher(path); + while (matcher.find()) { + matcher.appendReplacement(buf, "\\${" + toParamName(matcher.group(0)) + "}"); + } + matcher.appendTail(buf); + return buf.toString(); } @Override diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scala/SttpCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scala/SttpCodegenTest.java new file mode 100644 index 000000000000..a48225430f00 --- /dev/null +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scala/SttpCodegenTest.java @@ -0,0 +1,20 @@ +package org.openapitools.codegen.scala; + +import org.openapitools.codegen.languages.ScalaSttpClientCodegen; +import org.testng.Assert; +import org.testng.annotations.Test; + +public class SttpCodegenTest { + + private final ScalaSttpClientCodegen codegen = new ScalaSttpClientCodegen(); + + @Test + public void encodePath() { + Assert.assertEquals(codegen.encodePath("{user_name}"), "${userName}"); + Assert.assertEquals(codegen.encodePath("{userName}"), "${userName}"); + Assert.assertEquals(codegen.encodePath("{UserName}"), "${userName}"); + Assert.assertEquals(codegen.encodePath("user_name"), "user_name"); + Assert.assertEquals(codegen.encodePath("before/{UserName}/after"), "before/${userName}/after"); + } + +} From f9cd80deeda15f8dbdb7689a988d0b9a8bca7f6c Mon Sep 17 00:00:00 2001 From: Sheldon Young Date: Wed, 12 May 2021 06:29:51 -0700 Subject: [PATCH 106/186] [scala-sttp] Bump minor versions of libraries, SBT and Scala (#9356) --- docs/generators/scala-sttp.md | 6 +++--- .../codegen/languages/ScalaSttpClientCodegen.java | 6 +++--- .../src/main/resources/scala-sttp/build.sbt.mustache | 4 ++-- .../scala-sttp/project/build.properties.mustache | 3 ++- samples/client/petstore/scala-sttp/build.sbt | 10 +++++----- .../petstore/scala-sttp/project/build.properties | 3 ++- 6 files changed, 17 insertions(+), 15 deletions(-) diff --git a/docs/generators/scala-sttp.md b/docs/generators/scala-sttp.md index 5f0c9f7e6adc..77891a59141a 100644 --- a/docs/generators/scala-sttp.md +++ b/docs/generators/scala-sttp.md @@ -13,8 +13,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl |dateLibrary|Option. Date library to use|
**joda**
Joda (for legacy app)
**java8**
Java 8 native JSR310 (prefered for JDK 1.8+)
|java8| |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
**false**
The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
**true**
Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
|true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| -|jodaTimeVersion|The version of joda-time library| |2.10.6| -|json4sVersion|The version of json4s library| |3.6.8| +|jodaTimeVersion|The version of joda-time library| |2.10.10| +|json4sVersion|The version of json4s library| |3.6.11| |jsonLibrary|Json library to use. Possible values are: json4s and circe.| |json4s| |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| |mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| @@ -25,7 +25,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |null| -|sttpClientVersion|The version of sttp client| |2.2.0| +|sttpClientVersion|The version of sttp client| |2.2.9| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java index 68ae83dc061f..18ad26324407 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java @@ -44,15 +44,15 @@ public class ScalaSttpClientCodegen extends AbstractScalaCodegen implements CodegenConfig { private static final StringProperty STTP_CLIENT_VERSION = new StringProperty("sttpClientVersion", "The version of " + - "sttp client", "2.2.0"); + "sttp client", "2.2.9"); private static final BooleanProperty USE_SEPARATE_ERROR_CHANNEL = new BooleanProperty("separateErrorChannel", "Whether to return response as " + "F[Either[ResponseError[ErrorType], ReturnType]]] or to flatten " + "response's error raising them through enclosing monad (F[ReturnType]).", true); private static final StringProperty JODA_TIME_VERSION = new StringProperty("jodaTimeVersion", "The version of " + - "joda-time library", "2.10.6"); + "joda-time library", "2.10.10"); private static final StringProperty JSON4S_VERSION = new StringProperty("json4sVersion", "The version of json4s " + - "library", "3.6.8"); + "library", "3.6.11"); private static final StringProperty CIRCE_VERSION = new StringProperty("circeVersion", "The version of circe " + "library", "0.13.0"); private static final JsonLibraryProperty JSON_LIBRARY_PROPERTY = new JsonLibraryProperty(); diff --git a/modules/openapi-generator/src/main/resources/scala-sttp/build.sbt.mustache b/modules/openapi-generator/src/main/resources/scala-sttp/build.sbt.mustache index a20ba532f446..3072a54368c3 100644 --- a/modules/openapi-generator/src/main/resources/scala-sttp/build.sbt.mustache +++ b/modules/openapi-generator/src/main/resources/scala-sttp/build.sbt.mustache @@ -2,8 +2,8 @@ version := "{{artifactVersion}}" name := "{{artifactId}}" organization := "{{groupId}}" -scalaVersion := "2.13.2" -crossScalaVersions := Seq(scalaVersion.value, "2.12.10") +scalaVersion := "2.13.5" +crossScalaVersions := Seq(scalaVersion.value, "2.12.13") libraryDependencies ++= Seq( "com.softwaremill.sttp.client" %% "core" % "{{sttpClientVersion}}", diff --git a/modules/openapi-generator/src/main/resources/scala-sttp/project/build.properties.mustache b/modules/openapi-generator/src/main/resources/scala-sttp/project/build.properties.mustache index 654fe70c42c7..51e30dcd1b3f 100644 --- a/modules/openapi-generator/src/main/resources/scala-sttp/project/build.properties.mustache +++ b/modules/openapi-generator/src/main/resources/scala-sttp/project/build.properties.mustache @@ -1 +1,2 @@ -sbt.version=1.3.12 +sbt.version=1.5.0 + diff --git a/samples/client/petstore/scala-sttp/build.sbt b/samples/client/petstore/scala-sttp/build.sbt index e7d77cdd2dba..1b13385dba10 100644 --- a/samples/client/petstore/scala-sttp/build.sbt +++ b/samples/client/petstore/scala-sttp/build.sbt @@ -2,13 +2,13 @@ version := "1.0.0" name := "scala-sttp-petstore" organization := "org.openapitools" -scalaVersion := "2.13.2" -crossScalaVersions := Seq(scalaVersion.value, "2.12.10") +scalaVersion := "2.13.5" +crossScalaVersions := Seq(scalaVersion.value, "2.12.13") libraryDependencies ++= Seq( - "com.softwaremill.sttp.client" %% "core" % "2.2.0", - "com.softwaremill.sttp.client" %% "json4s" % "2.2.0", - "org.json4s" %% "json4s-jackson" % "3.6.8" + "com.softwaremill.sttp.client" %% "core" % "2.2.9", + "com.softwaremill.sttp.client" %% "json4s" % "2.2.9", + "org.json4s" %% "json4s-jackson" % "3.6.11" ) scalacOptions := Seq( diff --git a/samples/client/petstore/scala-sttp/project/build.properties b/samples/client/petstore/scala-sttp/project/build.properties index 654fe70c42c7..51e30dcd1b3f 100644 --- a/samples/client/petstore/scala-sttp/project/build.properties +++ b/samples/client/petstore/scala-sttp/project/build.properties @@ -1 +1,2 @@ -sbt.version=1.3.12 +sbt.version=1.5.0 + From 44efb7a3f6408523944904b47aff1fbc987e6bbd Mon Sep 17 00:00:00 2001 From: Yusuke Hosonuma Date: Thu, 13 May 2021 18:28:47 +0900 Subject: [PATCH 107/186] [python][flask] specify flask version 1.1.2 (#9471) --- .../src/main/resources/python-flask/requirements.mustache | 1 + samples/server/petstore/python-flask/requirements.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/openapi-generator/src/main/resources/python-flask/requirements.mustache b/modules/openapi-generator/src/main/resources/python-flask/requirements.mustache index 6e2cf517819f..2d1a20a01902 100644 --- a/modules/openapi-generator/src/main/resources/python-flask/requirements.mustache +++ b/modules/openapi-generator/src/main/resources/python-flask/requirements.mustache @@ -22,3 +22,4 @@ typing >= 3.5.2.2 pyyaml < 5.3; python_version<="2.7" {{/supportPython2}} setuptools >= 21.0.0 +Flask == 1.1.2 diff --git a/samples/server/petstore/python-flask/requirements.txt b/samples/server/petstore/python-flask/requirements.txt index 72ed547c4429..70e1f0c55402 100644 --- a/samples/server/petstore/python-flask/requirements.txt +++ b/samples/server/petstore/python-flask/requirements.txt @@ -8,3 +8,4 @@ werkzeug == 0.16.1; python_version=="3.5" or python_version=="3.4" swagger-ui-bundle >= 0.0.2 python_dateutil >= 2.6.0 setuptools >= 21.0.0 +Flask == 1.1.2 From ecedd28e4eab2cfb7c1aabe50ff7383c6b064a32 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 13 May 2021 17:32:00 +0800 Subject: [PATCH 108/186] better code format (#9463) --- .../src/main/resources/scala-sttp/api.mustache | 2 +- .../main/resources/scala-sttp/project/build.properties.mustache | 1 - samples/client/petstore/scala-sttp/project/build.properties | 1 - .../src/main/scala/org/openapitools/client/api/PetApi.scala | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/scala-sttp/api.mustache b/modules/openapi-generator/src/main/resources/scala-sttp/api.mustache index fa99fc624755..28cf170922d3 100644 --- a/modules/openapi-generator/src/main/resources/scala-sttp/api.mustache +++ b/modules/openapi-generator/src/main/resources/scala-sttp/api.mustache @@ -30,7 +30,7 @@ class {{classname}}(baseUrl: String) { .header("{{keyParamName}}", apiKey){{/isKeyInHeader}}{{#isKeyInCookie}} .cookie("{{keyParamName}}", apiKey){{/isKeyInCookie}}{{/isApiKey}}{{/authMethods}}{{#formParams.0}}{{^isMultipart}} .body(Map({{#formParams}} - {{>paramFormCreation}}{{^-last}}, {{/-last}}{{/formParams}} + {{>paramFormCreation}}{{^-last}},{{/-last}}{{/formParams}} )){{/isMultipart}}{{#isMultipart}} .multipartBody(Seq({{#formParams}} {{>paramMultipartCreation}}{{^-last}}, {{/-last}}{{/formParams}} diff --git a/modules/openapi-generator/src/main/resources/scala-sttp/project/build.properties.mustache b/modules/openapi-generator/src/main/resources/scala-sttp/project/build.properties.mustache index 51e30dcd1b3f..e67343ae796c 100644 --- a/modules/openapi-generator/src/main/resources/scala-sttp/project/build.properties.mustache +++ b/modules/openapi-generator/src/main/resources/scala-sttp/project/build.properties.mustache @@ -1,2 +1 @@ sbt.version=1.5.0 - diff --git a/samples/client/petstore/scala-sttp/project/build.properties b/samples/client/petstore/scala-sttp/project/build.properties index 51e30dcd1b3f..e67343ae796c 100644 --- a/samples/client/petstore/scala-sttp/project/build.properties +++ b/samples/client/petstore/scala-sttp/project/build.properties @@ -1,2 +1 @@ sbt.version=1.5.0 - diff --git a/samples/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/api/PetApi.scala b/samples/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/api/PetApi.scala index 8f541ae7bfe4..7bed7d54f339 100644 --- a/samples/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/api/PetApi.scala +++ b/samples/client/petstore/scala-sttp/src/main/scala/org/openapitools/client/api/PetApi.scala @@ -139,7 +139,7 @@ class PetApi(baseUrl: String) { .method(Method.POST, uri"$baseUrl/pet/${petId}") .contentType("application/x-www-form-urlencoded") .body(Map( - "name" -> name, + "name" -> name, "status" -> status )) .response(asJson[Unit]) From e6a10ae35095cca10a35e91d78a6118263df85db Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Sat, 15 May 2021 08:46:32 +0100 Subject: [PATCH 109/186] [swift5][client] add option to generate or not the model additional properties (#9375) * [swift5][client] add option to generate or not the models additional properties * [swift5][client] update sample projects * [swift5][client] format code * [swift5][client] format code * [swift5][client] format code * [swift5][client] update docs --- bin/configs/swift5-rxswiftLibrary.yaml | 1 + docs/generators/swift5.md | 1 + .../languages/Swift5ClientCodegen.java | 14 +++ .../main/resources/swift5/Extensions.mustache | 4 +- .../resources/swift5/modelObject.mustache | 24 +++--- .../options/Swift5OptionsProvider.java | 2 + .../codegen/swift5/Swift5OptionsTest.java | 1 + .../Models/AdditionalPropertiesClass.swift | 4 +- .../Classes/OpenAPIs/Models/Animal.swift | 4 +- .../Classes/OpenAPIs/Models/ApiResponse.swift | 4 +- .../Models/ArrayOfArrayOfNumberOnly.swift | 4 +- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/ArrayTest.swift | 4 +- .../OpenAPIs/Models/Capitalization.swift | 4 +- .../Classes/OpenAPIs/Models/Cat.swift | 4 +- .../Classes/OpenAPIs/Models/CatAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/ClassModel.swift | 4 +- .../Classes/OpenAPIs/Models/Client.swift | 4 +- .../Classes/OpenAPIs/Models/Dog.swift | 4 +- .../Classes/OpenAPIs/Models/DogAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/EnumArrays.swift | 4 +- .../Classes/OpenAPIs/Models/EnumTest.swift | 4 +- .../Classes/OpenAPIs/Models/File.swift | 4 +- .../OpenAPIs/Models/FileSchemaTestClass.swift | 4 +- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +- .../OpenAPIs/Models/HasOnlyReadOnly.swift | 4 +- .../Classes/OpenAPIs/Models/List.swift | 4 +- .../Classes/OpenAPIs/Models/MapTest.swift | 4 +- ...opertiesAndAdditionalPropertiesClass.swift | 4 +- .../OpenAPIs/Models/Model200Response.swift | 4 +- .../Classes/OpenAPIs/Models/Name.swift | 4 +- .../Classes/OpenAPIs/Models/NumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/Order.swift | 4 +- .../OpenAPIs/Models/OuterComposite.swift | 4 +- .../Classes/OpenAPIs/Models/Pet.swift | 4 +- .../OpenAPIs/Models/ReadOnlyFirst.swift | 4 +- .../Classes/OpenAPIs/Models/Return.swift | 4 +- .../OpenAPIs/Models/SpecialModelName.swift | 4 +- .../OpenAPIs/Models/StringBooleanMap.swift | 4 +- .../Classes/OpenAPIs/Models/Tag.swift | 4 +- .../OpenAPIs/Models/TypeHolderDefault.swift | 4 +- .../OpenAPIs/Models/TypeHolderExample.swift | 4 +- .../Classes/OpenAPIs/Models/User.swift | 4 +- .../Models/AdditionalPropertiesClass.swift | 4 +- .../Classes/OpenAPIs/Models/Animal.swift | 4 +- .../Classes/OpenAPIs/Models/ApiResponse.swift | 4 +- .../Models/ArrayOfArrayOfNumberOnly.swift | 4 +- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/ArrayTest.swift | 4 +- .../OpenAPIs/Models/Capitalization.swift | 4 +- .../Classes/OpenAPIs/Models/Cat.swift | 4 +- .../Classes/OpenAPIs/Models/CatAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/ClassModel.swift | 4 +- .../Classes/OpenAPIs/Models/Client.swift | 4 +- .../Classes/OpenAPIs/Models/Dog.swift | 4 +- .../Classes/OpenAPIs/Models/DogAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/EnumArrays.swift | 4 +- .../Classes/OpenAPIs/Models/EnumTest.swift | 4 +- .../Classes/OpenAPIs/Models/File.swift | 4 +- .../OpenAPIs/Models/FileSchemaTestClass.swift | 4 +- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +- .../OpenAPIs/Models/HasOnlyReadOnly.swift | 4 +- .../Classes/OpenAPIs/Models/List.swift | 4 +- .../Classes/OpenAPIs/Models/MapTest.swift | 4 +- ...opertiesAndAdditionalPropertiesClass.swift | 4 +- .../OpenAPIs/Models/Model200Response.swift | 4 +- .../Classes/OpenAPIs/Models/Name.swift | 4 +- .../Classes/OpenAPIs/Models/NumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/Order.swift | 4 +- .../OpenAPIs/Models/OuterComposite.swift | 4 +- .../Classes/OpenAPIs/Models/Pet.swift | 4 +- .../OpenAPIs/Models/ReadOnlyFirst.swift | 4 +- .../Classes/OpenAPIs/Models/Return.swift | 4 +- .../OpenAPIs/Models/SpecialModelName.swift | 4 +- .../OpenAPIs/Models/StringBooleanMap.swift | 4 +- .../Classes/OpenAPIs/Models/Tag.swift | 4 +- .../OpenAPIs/Models/TypeHolderDefault.swift | 4 +- .../OpenAPIs/Models/TypeHolderExample.swift | 4 +- .../Classes/OpenAPIs/Models/User.swift | 4 +- .../Models/AdditionalPropertiesAnyType.swift | 4 +- .../Models/AdditionalPropertiesArray.swift | 4 +- .../Models/AdditionalPropertiesBoolean.swift | 4 +- .../Models/AdditionalPropertiesClass.swift | 4 +- .../Models/AdditionalPropertiesInteger.swift | 4 +- .../Models/AdditionalPropertiesNumber.swift | 4 +- .../Models/AdditionalPropertiesObject.swift | 4 +- .../Models/AdditionalPropertiesString.swift | 4 +- .../Classes/OpenAPIs/Models/Animal.swift | 4 +- .../Classes/OpenAPIs/Models/ApiResponse.swift | 4 +- .../Models/ArrayOfArrayOfNumberOnly.swift | 4 +- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/ArrayTest.swift | 4 +- .../Classes/OpenAPIs/Models/BigCat.swift | 4 +- .../Classes/OpenAPIs/Models/BigCatAllOf.swift | 4 +- .../OpenAPIs/Models/Capitalization.swift | 4 +- .../Classes/OpenAPIs/Models/Cat.swift | 4 +- .../Classes/OpenAPIs/Models/CatAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/ClassModel.swift | 4 +- .../Classes/OpenAPIs/Models/Client.swift | 4 +- .../Classes/OpenAPIs/Models/Dog.swift | 4 +- .../Classes/OpenAPIs/Models/DogAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/EnumArrays.swift | 4 +- .../Classes/OpenAPIs/Models/EnumTest.swift | 4 +- .../Classes/OpenAPIs/Models/File.swift | 4 +- .../OpenAPIs/Models/FileSchemaTestClass.swift | 4 +- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +- .../OpenAPIs/Models/HasOnlyReadOnly.swift | 4 +- .../Classes/OpenAPIs/Models/List.swift | 4 +- .../Classes/OpenAPIs/Models/MapTest.swift | 4 +- ...opertiesAndAdditionalPropertiesClass.swift | 4 +- .../OpenAPIs/Models/Model200Response.swift | 4 +- .../Classes/OpenAPIs/Models/Name.swift | 4 +- .../Classes/OpenAPIs/Models/NumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/Order.swift | 4 +- .../OpenAPIs/Models/OuterComposite.swift | 4 +- .../Classes/OpenAPIs/Models/Pet.swift | 4 +- .../OpenAPIs/Models/ReadOnlyFirst.swift | 4 +- .../Classes/OpenAPIs/Models/Return.swift | 4 +- .../OpenAPIs/Models/SpecialModelName.swift | 4 +- .../OpenAPIs/Models/StringBooleanMap.swift | 4 +- .../Classes/OpenAPIs/Models/Tag.swift | 4 +- .../OpenAPIs/Models/TypeHolderDefault.swift | 4 +- .../OpenAPIs/Models/TypeHolderExample.swift | 4 +- .../Classes/OpenAPIs/Models/User.swift | 4 +- .../Classes/OpenAPIs/Models/XmlItem.swift | 4 +- .../Classes/OpenAPIs/Models/ApiResponse.swift | 4 +- .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/Order.swift | 4 +- .../Classes/OpenAPIs/Models/Pet.swift | 4 +- .../Classes/OpenAPIs/Models/Tag.swift | 4 +- .../Classes/OpenAPIs/Models/User.swift | 4 +- .../Models/AdditionalPropertiesClass.swift | 4 +- .../Classes/OpenAPIs/Models/Animal.swift | 4 +- .../Classes/OpenAPIs/Models/ApiResponse.swift | 4 +- .../Models/ArrayOfArrayOfNumberOnly.swift | 4 +- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/ArrayTest.swift | 4 +- .../OpenAPIs/Models/Capitalization.swift | 4 +- .../Classes/OpenAPIs/Models/Cat.swift | 4 +- .../Classes/OpenAPIs/Models/CatAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/ClassModel.swift | 4 +- .../Classes/OpenAPIs/Models/Client.swift | 4 +- .../Classes/OpenAPIs/Models/Dog.swift | 4 +- .../Classes/OpenAPIs/Models/DogAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/EnumArrays.swift | 4 +- .../Classes/OpenAPIs/Models/EnumTest.swift | 4 +- .../Classes/OpenAPIs/Models/File.swift | 4 +- .../OpenAPIs/Models/FileSchemaTestClass.swift | 4 +- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +- .../OpenAPIs/Models/HasOnlyReadOnly.swift | 4 +- .../Classes/OpenAPIs/Models/List.swift | 4 +- .../Classes/OpenAPIs/Models/MapTest.swift | 4 +- ...opertiesAndAdditionalPropertiesClass.swift | 4 +- .../OpenAPIs/Models/Model200Response.swift | 4 +- .../Classes/OpenAPIs/Models/Name.swift | 4 +- .../Classes/OpenAPIs/Models/NumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/Order.swift | 4 +- .../OpenAPIs/Models/OuterComposite.swift | 4 +- .../Classes/OpenAPIs/Models/Pet.swift | 4 +- .../OpenAPIs/Models/ReadOnlyFirst.swift | 4 +- .../Classes/OpenAPIs/Models/Return.swift | 4 +- .../OpenAPIs/Models/SpecialModelName.swift | 4 +- .../OpenAPIs/Models/StringBooleanMap.swift | 4 +- .../Classes/OpenAPIs/Models/Tag.swift | 4 +- .../OpenAPIs/Models/TypeHolderDefault.swift | 4 +- .../OpenAPIs/Models/TypeHolderExample.swift | 4 +- .../Classes/OpenAPIs/Models/User.swift | 4 +- .../Models/AdditionalPropertiesClass.swift | 4 +- .../Classes/OpenAPIs/Models/Animal.swift | 4 +- .../Classes/OpenAPIs/Models/ApiResponse.swift | 4 +- .../Models/ArrayOfArrayOfNumberOnly.swift | 4 +- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/ArrayTest.swift | 4 +- .../OpenAPIs/Models/Capitalization.swift | 4 +- .../Classes/OpenAPIs/Models/Cat.swift | 4 +- .../Classes/OpenAPIs/Models/CatAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/ClassModel.swift | 4 +- .../Classes/OpenAPIs/Models/Client.swift | 4 +- .../Classes/OpenAPIs/Models/Dog.swift | 4 +- .../Classes/OpenAPIs/Models/DogAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/EnumArrays.swift | 4 +- .../Classes/OpenAPIs/Models/EnumTest.swift | 4 +- .../Classes/OpenAPIs/Models/File.swift | 4 +- .../OpenAPIs/Models/FileSchemaTestClass.swift | 4 +- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +- .../OpenAPIs/Models/HasOnlyReadOnly.swift | 4 +- .../Classes/OpenAPIs/Models/List.swift | 4 +- .../Classes/OpenAPIs/Models/MapTest.swift | 4 +- ...opertiesAndAdditionalPropertiesClass.swift | 4 +- .../OpenAPIs/Models/Model200Response.swift | 4 +- .../Classes/OpenAPIs/Models/Name.swift | 4 +- .../Classes/OpenAPIs/Models/NumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/Order.swift | 4 +- .../OpenAPIs/Models/OuterComposite.swift | 4 +- .../Classes/OpenAPIs/Models/Pet.swift | 4 +- .../OpenAPIs/Models/ReadOnlyFirst.swift | 4 +- .../Classes/OpenAPIs/Models/Return.swift | 4 +- .../OpenAPIs/Models/SpecialModelName.swift | 4 +- .../OpenAPIs/Models/StringBooleanMap.swift | 4 +- .../Classes/OpenAPIs/Models/Tag.swift | 4 +- .../OpenAPIs/Models/TypeHolderDefault.swift | 4 +- .../OpenAPIs/Models/TypeHolderExample.swift | 4 +- .../Classes/OpenAPIs/Models/User.swift | 4 +- .../Models/AdditionalPropertiesClass.swift | 4 +- .../Classes/OpenAPIs/Models/Animal.swift | 4 +- .../Classes/OpenAPIs/Models/ApiResponse.swift | 4 +- .../Models/ArrayOfArrayOfNumberOnly.swift | 4 +- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/ArrayTest.swift | 4 +- .../OpenAPIs/Models/Capitalization.swift | 4 +- .../Classes/OpenAPIs/Models/Cat.swift | 4 +- .../Classes/OpenAPIs/Models/CatAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/ClassModel.swift | 4 +- .../Classes/OpenAPIs/Models/Client.swift | 4 +- .../Classes/OpenAPIs/Models/Dog.swift | 4 +- .../Classes/OpenAPIs/Models/DogAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/EnumArrays.swift | 4 +- .../Classes/OpenAPIs/Models/EnumTest.swift | 4 +- .../Classes/OpenAPIs/Models/File.swift | 4 +- .../OpenAPIs/Models/FileSchemaTestClass.swift | 4 +- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +- .../OpenAPIs/Models/HasOnlyReadOnly.swift | 4 +- .../Classes/OpenAPIs/Models/List.swift | 4 +- .../Classes/OpenAPIs/Models/MapTest.swift | 4 +- ...opertiesAndAdditionalPropertiesClass.swift | 4 +- .../OpenAPIs/Models/Model200Response.swift | 4 +- .../Classes/OpenAPIs/Models/Name.swift | 4 +- .../Classes/OpenAPIs/Models/NumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/Order.swift | 4 +- .../OpenAPIs/Models/OuterComposite.swift | 4 +- .../Classes/OpenAPIs/Models/Pet.swift | 4 +- .../OpenAPIs/Models/ReadOnlyFirst.swift | 4 +- .../Classes/OpenAPIs/Models/Return.swift | 4 +- .../OpenAPIs/Models/SpecialModelName.swift | 4 +- .../OpenAPIs/Models/StringBooleanMap.swift | 4 +- .../Classes/OpenAPIs/Models/Tag.swift | 4 +- .../OpenAPIs/Models/TypeHolderDefault.swift | 4 +- .../OpenAPIs/Models/TypeHolderExample.swift | 4 +- .../Classes/OpenAPIs/Models/User.swift | 4 +- .../Models/AdditionalPropertiesClass.swift | 4 +- .../Classes/OpenAPIs/Models/Animal.swift | 4 +- .../Classes/OpenAPIs/Models/ApiResponse.swift | 4 +- .../Models/ArrayOfArrayOfNumberOnly.swift | 4 +- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/ArrayTest.swift | 4 +- .../OpenAPIs/Models/Capitalization.swift | 4 +- .../Classes/OpenAPIs/Models/Cat.swift | 4 +- .../Classes/OpenAPIs/Models/CatAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/ClassModel.swift | 4 +- .../Classes/OpenAPIs/Models/Client.swift | 4 +- .../Classes/OpenAPIs/Models/Dog.swift | 4 +- .../Classes/OpenAPIs/Models/DogAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/EnumArrays.swift | 4 +- .../Classes/OpenAPIs/Models/EnumTest.swift | 4 +- .../Classes/OpenAPIs/Models/File.swift | 4 +- .../OpenAPIs/Models/FileSchemaTestClass.swift | 4 +- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +- .../OpenAPIs/Models/HasOnlyReadOnly.swift | 4 +- .../Classes/OpenAPIs/Models/List.swift | 4 +- .../Classes/OpenAPIs/Models/MapTest.swift | 4 +- ...opertiesAndAdditionalPropertiesClass.swift | 4 +- .../OpenAPIs/Models/Model200Response.swift | 4 +- .../Classes/OpenAPIs/Models/Name.swift | 4 +- .../Classes/OpenAPIs/Models/NumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/Order.swift | 4 +- .../OpenAPIs/Models/OuterComposite.swift | 4 +- .../Classes/OpenAPIs/Models/Pet.swift | 4 +- .../OpenAPIs/Models/ReadOnlyFirst.swift | 4 +- .../Classes/OpenAPIs/Models/Return.swift | 4 +- .../OpenAPIs/Models/SpecialModelName.swift | 4 +- .../OpenAPIs/Models/StringBooleanMap.swift | 4 +- .../Classes/OpenAPIs/Models/Tag.swift | 4 +- .../OpenAPIs/Models/TypeHolderDefault.swift | 4 +- .../OpenAPIs/Models/TypeHolderExample.swift | 4 +- .../Classes/OpenAPIs/Models/User.swift | 4 +- .../Models/AdditionalPropertiesClass.swift | 4 +- .../Classes/OpenAPIs/Models/Animal.swift | 4 +- .../Classes/OpenAPIs/Models/ApiResponse.swift | 4 +- .../Models/ArrayOfArrayOfNumberOnly.swift | 4 +- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/ArrayTest.swift | 4 +- .../OpenAPIs/Models/Capitalization.swift | 4 +- .../Classes/OpenAPIs/Models/Cat.swift | 4 +- .../Classes/OpenAPIs/Models/CatAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/ClassModel.swift | 4 +- .../Classes/OpenAPIs/Models/Client.swift | 4 +- .../Classes/OpenAPIs/Models/Dog.swift | 4 +- .../Classes/OpenAPIs/Models/DogAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/EnumArrays.swift | 4 +- .../Classes/OpenAPIs/Models/EnumTest.swift | 4 +- .../Classes/OpenAPIs/Models/File.swift | 4 +- .../OpenAPIs/Models/FileSchemaTestClass.swift | 4 +- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +- .../OpenAPIs/Models/HasOnlyReadOnly.swift | 4 +- .../Classes/OpenAPIs/Models/List.swift | 4 +- .../Classes/OpenAPIs/Models/MapTest.swift | 4 +- ...opertiesAndAdditionalPropertiesClass.swift | 4 +- .../OpenAPIs/Models/Model200Response.swift | 4 +- .../Classes/OpenAPIs/Models/Name.swift | 4 +- .../Classes/OpenAPIs/Models/NumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/Order.swift | 4 +- .../OpenAPIs/Models/OuterComposite.swift | 4 +- .../Classes/OpenAPIs/Models/Pet.swift | 4 +- .../OpenAPIs/Models/ReadOnlyFirst.swift | 4 +- .../Classes/OpenAPIs/Models/Return.swift | 4 +- .../OpenAPIs/Models/SpecialModelName.swift | 4 +- .../OpenAPIs/Models/StringBooleanMap.swift | 4 +- .../Classes/OpenAPIs/Models/Tag.swift | 4 +- .../OpenAPIs/Models/TypeHolderDefault.swift | 4 +- .../OpenAPIs/Models/TypeHolderExample.swift | 4 +- .../Classes/OpenAPIs/Models/User.swift | 4 +- .../Classes/OpenAPIs/Extensions.swift | 86 ------------------- .../Models/AdditionalPropertiesClass.swift | 4 +- .../Classes/OpenAPIs/Models/Animal.swift | 4 +- .../Classes/OpenAPIs/Models/ApiResponse.swift | 4 +- .../Models/ArrayOfArrayOfNumberOnly.swift | 4 +- .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/ArrayTest.swift | 4 +- .../OpenAPIs/Models/Capitalization.swift | 4 +- .../Classes/OpenAPIs/Models/Cat.swift | 4 +- .../Classes/OpenAPIs/Models/CatAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/Category.swift | 4 +- .../Classes/OpenAPIs/Models/ClassModel.swift | 4 +- .../Classes/OpenAPIs/Models/Client.swift | 4 +- .../Classes/OpenAPIs/Models/Dog.swift | 4 +- .../Classes/OpenAPIs/Models/DogAllOf.swift | 4 +- .../Classes/OpenAPIs/Models/EnumArrays.swift | 4 +- .../Classes/OpenAPIs/Models/EnumTest.swift | 4 +- .../Classes/OpenAPIs/Models/File.swift | 4 +- .../OpenAPIs/Models/FileSchemaTestClass.swift | 4 +- .../Classes/OpenAPIs/Models/FormatTest.swift | 4 +- .../OpenAPIs/Models/HasOnlyReadOnly.swift | 4 +- .../Classes/OpenAPIs/Models/List.swift | 4 +- .../Classes/OpenAPIs/Models/MapTest.swift | 4 +- ...opertiesAndAdditionalPropertiesClass.swift | 4 +- .../OpenAPIs/Models/Model200Response.swift | 4 +- .../Classes/OpenAPIs/Models/Name.swift | 4 +- .../Classes/OpenAPIs/Models/NumberOnly.swift | 4 +- .../Classes/OpenAPIs/Models/Order.swift | 4 +- .../OpenAPIs/Models/OuterComposite.swift | 4 +- .../Classes/OpenAPIs/Models/Pet.swift | 4 +- .../OpenAPIs/Models/ReadOnlyFirst.swift | 4 +- .../Classes/OpenAPIs/Models/Return.swift | 4 +- .../OpenAPIs/Models/SpecialModelName.swift | 4 +- .../OpenAPIs/Models/StringBooleanMap.swift | 28 +----- .../Classes/OpenAPIs/Models/Tag.swift | 4 +- .../OpenAPIs/Models/TypeHolderDefault.swift | 4 +- .../OpenAPIs/Models/TypeHolderExample.swift | 4 +- .../Classes/OpenAPIs/Models/User.swift | 4 +- .../Models/AdditionalPropertiesClass.swift | 4 +- .../PetstoreClient/Models/Animal.swift | 4 +- .../PetstoreClient/Models/ApiResponse.swift | 4 +- .../Models/ArrayOfArrayOfNumberOnly.swift | 4 +- .../Models/ArrayOfNumberOnly.swift | 4 +- .../PetstoreClient/Models/ArrayTest.swift | 4 +- .../Models/Capitalization.swift | 4 +- .../Sources/PetstoreClient/Models/Cat.swift | 4 +- .../PetstoreClient/Models/CatAllOf.swift | 4 +- .../PetstoreClient/Models/Category.swift | 4 +- .../PetstoreClient/Models/ClassModel.swift | 4 +- .../PetstoreClient/Models/Client.swift | 4 +- .../Sources/PetstoreClient/Models/Dog.swift | 4 +- .../PetstoreClient/Models/DogAllOf.swift | 4 +- .../PetstoreClient/Models/EnumArrays.swift | 4 +- .../PetstoreClient/Models/EnumTest.swift | 4 +- .../Sources/PetstoreClient/Models/File.swift | 4 +- .../Models/FileSchemaTestClass.swift | 4 +- .../PetstoreClient/Models/FormatTest.swift | 4 +- .../Models/HasOnlyReadOnly.swift | 4 +- .../Sources/PetstoreClient/Models/List.swift | 4 +- .../PetstoreClient/Models/MapTest.swift | 4 +- ...opertiesAndAdditionalPropertiesClass.swift | 4 +- .../Models/Model200Response.swift | 4 +- .../Sources/PetstoreClient/Models/Name.swift | 4 +- .../PetstoreClient/Models/NumberOnly.swift | 4 +- .../Sources/PetstoreClient/Models/Order.swift | 4 +- .../Models/OuterComposite.swift | 4 +- .../Sources/PetstoreClient/Models/Pet.swift | 4 +- .../PetstoreClient/Models/ReadOnlyFirst.swift | 4 +- .../PetstoreClient/Models/Return.swift | 4 +- .../Models/SpecialModelName.swift | 4 +- .../Models/StringBooleanMap.swift | 4 +- .../Sources/PetstoreClient/Models/Tag.swift | 4 +- .../Models/TypeHolderDefault.swift | 4 +- .../Models/TypeHolderExample.swift | 4 +- .../Sources/PetstoreClient/Models/User.swift | 4 +- 394 files changed, 434 insertions(+), 1267 deletions(-) diff --git a/bin/configs/swift5-rxswiftLibrary.yaml b/bin/configs/swift5-rxswiftLibrary.yaml index 49d0e24cca5b..8751d3479121 100644 --- a/bin/configs/swift5-rxswiftLibrary.yaml +++ b/bin/configs/swift5-rxswiftLibrary.yaml @@ -10,3 +10,4 @@ additionalProperties: projectName: PetstoreClient podHomepage: https://github.com/openapitools/openapi-generator useBacktickEscapes: true + generateModelAdditionalProperties: false diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index 9774b434f13d..eb9bb6c3d713 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -11,6 +11,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |apiNamePrefix|Prefix that will be appended to all API names ('tags'). Default: empty string. e.g. Pet => Pet.| |null| |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
**false**
The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
**true**
Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
|true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| +|generateModelAdditionalProperties|Generate model additional properties (default: true)| |true| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |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| |lenientTypeCast|Accept and cast values for simple types (string->bool, string->int, int->string)| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index 5d7f86a40d30..a4ab7ecec202 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -64,6 +64,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig public static final String USE_SPM_FILE_STRUCTURE = "useSPMFileStructure"; public static final String SWIFT_PACKAGE_PATH = "swiftPackagePath"; public static final String USE_BACKTICK_ESCAPES = "useBacktickEscapes"; + public static final String GENERATE_MODEL_ADDITIONAL_PROPERTIES = "generateModelAdditionalProperties"; protected static final String LIBRARY_ALAMOFIRE = "alamofire"; protected static final String LIBRARY_URLSESSION = "urlsession"; protected static final String RESPONSE_LIBRARY_PROMISE_KIT = "PromiseKit"; @@ -80,6 +81,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig protected boolean useSPMFileStructure = false; protected String swiftPackagePath = "Classes" + File.separator + "OpenAPIs"; protected boolean useBacktickEscapes = false; + protected boolean generateModelAdditionalProperties = true; protected String[] responseAs = new String[0]; protected String sourceFolder = swiftPackagePath; protected HashSet objcReservedWords; @@ -267,6 +269,9 @@ public Swift5ClientCodegen() { cliOptions.add(new CliOption(USE_BACKTICK_ESCAPES, "Escape reserved words using backticks (default: false)") .defaultValue(Boolean.FALSE.toString())); + cliOptions.add(new CliOption(GENERATE_MODEL_ADDITIONAL_PROPERTIES, + "Generate model additional properties (default: true)") + .defaultValue(Boolean.TRUE.toString())); cliOptions.add(new CliOption(CodegenConstants.API_NAME_PREFIX, CodegenConstants.API_NAME_PREFIX_DESC)); cliOptions.add(new CliOption(USE_SPM_FILE_STRUCTURE, "Use SPM file structure" @@ -448,6 +453,11 @@ public void processOpts() { setUseBacktickEscapes(convertPropertyToBooleanAndWriteBack(USE_BACKTICK_ESCAPES)); } + if (additionalProperties.containsKey(GENERATE_MODEL_ADDITIONAL_PROPERTIES)) { + setGenerateModelAdditionalProperties(convertPropertyToBooleanAndWriteBack(GENERATE_MODEL_ADDITIONAL_PROPERTIES)); + } + additionalProperties.put(GENERATE_MODEL_ADDITIONAL_PROPERTIES, generateModelAdditionalProperties); + setLenientTypeCast(convertPropertyToBooleanAndWriteBack(LENIENT_TYPE_CAST)); // make api and model doc path available in mustache template @@ -862,6 +872,10 @@ public void setUseBacktickEscapes(boolean useBacktickEscapes) { this.useBacktickEscapes = useBacktickEscapes; } + public void setGenerateModelAdditionalProperties(boolean generateModelAdditionalProperties) { + this.generateModelAdditionalProperties = generateModelAdditionalProperties; + } + @Override public String toEnumValue(String value, String datatype) { // for string, array of string diff --git a/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache b/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache index 7e6dcc1994f7..7a7ec22715ca 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache @@ -92,7 +92,7 @@ extension UUID: JSONEncodable { func encodeToJSON() -> Any { return self.uuidString } -} +}{{#generateModelAdditionalProperties}} extension String: CodingKey { @@ -178,7 +178,7 @@ extension KeyedDecodingContainerProtocol { return map } -} +}{{/generateModelAdditionalProperties}} extension HTTPURLResponse { var isStatusCodeSuccessful: Bool { diff --git a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache index c119f723a2a3..bc6f9c64e70f 100644 --- a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache @@ -36,12 +36,13 @@ {{/allVars}} } {{/hasVars}} + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} enum CodingKeys: {{#hasVars}}String, {{/hasVars}}CodingKey, CaseIterable { {{#allVars}} case {{{name}}}{{#vendorExtensions.x-codegen-escaped-property-name}} = "{{{baseName}}}"{{/vendorExtensions.x-codegen-escaped-property-name}} {{/allVars}} - } -{{#additionalPropertiesType}} + }{{#generateModelAdditionalProperties}}{{#additionalPropertiesType}} + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#readonlyProperties}}private(set) {{/readonlyProperties}}var additionalProperties: [String: {{{additionalPropertiesType}}}] = [:] {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} subscript(key: String) -> {{{additionalPropertiesType}}}? { @@ -55,8 +56,7 @@ set { additionalProperties[key] = newValue } - } -{{/additionalPropertiesType}} + }{{/additionalPropertiesType}}{{/generateModelAdditionalProperties}} // Encodable protocol methods @@ -65,13 +65,14 @@ {{#allVars}} try container.encode{{^required}}IfPresent{{/required}}({{{name}}}, forKey: .{{{name}}}) {{/allVars}} + {{#generateModelAdditionalProperties}} {{#additionalPropertiesType}} var additionalPropertiesContainer = encoder.container(keyedBy: String.self) try additionalPropertiesContainer.encodeMap(additionalProperties) {{/additionalPropertiesType}} - } + {{/generateModelAdditionalProperties}} + }{{#generateModelAdditionalProperties}}{{#additionalPropertiesType}} -{{#additionalPropertiesType}} // Decodable protocol methods {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}}{{#objcCompatible}} required{{/objcCompatible}} init(from decoder: Decoder) throws { @@ -85,22 +86,19 @@ nonAdditionalPropertyKeys.insert("{{{baseName}}}") {{/allVars}} additionalProperties = try container.decodeMap({{{additionalPropertiesType}}}.self, excludedKeys: nonAdditionalPropertyKeys) - } -{{/additionalPropertiesType}} + }{{/additionalPropertiesType}}{{/generateModelAdditionalProperties}}{{^objcCompatible}}{{#useClasses}} -{{^objcCompatible}}{{#useClasses}} {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func == (lhs: {{classname}}, rhs: {{classname}}) -> Bool { {{#allVars}} lhs.{{{name}}} == rhs.{{{name}}}{{^-last}} &&{{/-last}} {{/allVars}} - {{#additionalPropertiesType}}{{#hasVars}}&& {{/hasVars}}lhs.additionalProperties == rhs.additionalProperties{{/additionalPropertiesType}} + {{#generateModelAdditionalProperties}}{{#additionalPropertiesType}}{{#hasVars}}&& {{/hasVars}}lhs.additionalProperties == rhs.additionalProperties{{/additionalPropertiesType}}{{/generateModelAdditionalProperties}} } {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} func hash(into hasher: inout Hasher) { {{#allVars}} hasher.combine({{{name}}}{{^required}}?{{/required}}.hashValue) {{/allVars}} - {{#additionalPropertiesType}}hasher.combine(additionalProperties.hashValue){{/additionalPropertiesType}} - } -{{/useClasses}}{{/objcCompatible}} + {{#generateModelAdditionalProperties}}{{#additionalPropertiesType}}hasher.combine(additionalProperties.hashValue){{/additionalPropertiesType}}{{/generateModelAdditionalProperties}} + }{{/useClasses}}{{/objcCompatible}} } \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java index 9e2a4a3b36fd..5ed11f1036c4 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java @@ -47,6 +47,7 @@ public class Swift5OptionsProvider implements OptionsProvider { public static final String READONLY_PROPERTIES_VALUE = "false"; public static final String SWIFT_USE_API_NAMESPACE_VALUE = "swiftUseApiNamespace"; public static final String USE_BACKTICKS_ESCAPES_VALUE = "false"; + public static final String GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE = "true"; public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false"; public static final String PREPEND_FORM_OR_BODY_PARAMETERS_VALUE = "true"; public static final String LIBRARY_VALUE = "alamofire"; @@ -91,6 +92,7 @@ public Map createOptions() { .put(CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT, "true") .put(Swift5ClientCodegen.USE_SPM_FILE_STRUCTURE, USE_SPM_FILE_STRUCTURE_VALUE) .put(Swift5ClientCodegen.SWIFT_PACKAGE_PATH, SWIFT_PACKAGE_PATH_VALUE) + .put(Swift5ClientCodegen.GENERATE_MODEL_ADDITIONAL_PROPERTIES, GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE) .build(); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java index 65e97494cfa7..ca237bb7dafe 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java @@ -48,5 +48,6 @@ protected void verifyOptions() { verify(clientCodegen).setLenientTypeCast(Boolean.parseBoolean(Swift5OptionsProvider.LENIENT_TYPE_CAST_VALUE)); verify(clientCodegen).setPrependFormOrBodyParameters(Boolean.valueOf(Swift5OptionsProvider.PREPEND_FORM_OR_BODY_PARAMETERS_VALUE)); verify(clientCodegen).setReadonlyProperties(Boolean.parseBoolean(Swift5OptionsProvider.READONLY_PROPERTIES_VALUE)); + verify(clientCodegen).setGenerateModelAdditionalProperties(Boolean.parseBoolean(Swift5OptionsProvider.GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE)); } } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 75ab9bc8d0ad..23c4af6d4ff6 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -17,6 +17,7 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" @@ -29,7 +30,4 @@ public struct AdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(mapString, forKey: .mapString) try container.encodeIfPresent(mapMapString, forKey: .mapMapString) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 0f825cf24d0c..a422ee73b556 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -17,6 +17,7 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -29,7 +30,4 @@ public struct Animal: Codable, Hashable { try container.encode(className, forKey: .className) try container.encodeIfPresent(color, forKey: .color) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 2b66af2dc949..7f7c6a34bdf5 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -19,6 +19,7 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -33,7 +34,4 @@ public struct ApiResponse: Codable, Hashable { try container.encodeIfPresent(type, forKey: .type) try container.encodeIfPresent(message, forKey: .message) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 06f0640475c2..0221229e7dd2 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 8c50c7fa1e44..b5c7ca501e73 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 461ec7cd9acf..9074d9ab4aae 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -19,6 +19,7 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" @@ -33,7 +34,4 @@ public struct ArrayTest: Codable, Hashable { try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index fbe62983d5e9..f0ca1a76f273 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -26,6 +26,7 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } + public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -46,7 +47,4 @@ public struct Capitalization: Codable, Hashable { try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 7f3a86932f1b..89aaea45b910 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -19,6 +19,7 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Cat: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 8df239548324..c80f7549e692 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -15,6 +15,7 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case declawed } @@ -25,7 +26,4 @@ public struct CatAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 4109db4d1ef7..0def88b1fc8c 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -17,6 +17,7 @@ public struct Category: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Category: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encode(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 7269ddbef6fd..90e4986e7f6b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -16,6 +16,7 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case _class } @@ -26,7 +27,4 @@ public struct ClassModel: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 7d6eff2ffe1f..4e0318069017 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -15,6 +15,7 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { case client } @@ -25,7 +26,4 @@ public struct Client: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(client, forKey: .client) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index b5f2bcea38a3..2387b3e7b2cf 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -19,6 +19,7 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Dog: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 1bfa23d7bc6d..4317578cee4c 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -15,6 +15,7 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case breed } @@ -25,7 +26,4 @@ public struct DogAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 73368c421433..01b8960fe34b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -25,6 +25,7 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" @@ -37,7 +38,4 @@ public struct EnumArrays: Codable, Hashable { try container.encodeIfPresent(justSymbol, forKey: .justSymbol) try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 60a81bcac77b..9c8e2e9ac842 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -41,6 +41,7 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -59,7 +60,4 @@ public struct EnumTest: Codable, Hashable { try container.encodeIfPresent(enumNumber, forKey: .enumNumber) try container.encodeIfPresent(outerEnum, forKey: .outerEnum) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 90283656d1b3..2a9c769ca6ce 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -17,6 +17,7 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { case sourceURI } @@ -27,7 +28,4 @@ public struct File: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(sourceURI, forKey: .sourceURI) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cff92673bbeb..cd8a9a0e9fef 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -17,6 +17,7 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { case file case files @@ -29,7 +30,4 @@ public struct FileSchemaTestClass: Codable, Hashable { try container.encodeIfPresent(file, forKey: .file) try container.encodeIfPresent(files, forKey: .files) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index fc86676eec30..11493f7ce28a 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -39,6 +39,7 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -73,7 +74,4 @@ public struct FormatTest: Codable, Hashable { try container.encodeIfPresent(uuid, forKey: .uuid) try container.encode(password, forKey: .password) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index d7960f5c8008..b7a1449830a4 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -17,6 +17,7 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case foo @@ -29,7 +30,4 @@ public struct HasOnlyReadOnly: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(foo, forKey: .foo) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index c5d4f2cae567..8d484cf0a334 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -15,6 +15,7 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } + public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } @@ -25,7 +26,4 @@ public struct List: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_123list, forKey: ._123list) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index b54bd01e5dc9..4b56880fed68 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -25,6 +25,7 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -41,7 +42,4 @@ public struct MapTest: Codable, Hashable { try container.encodeIfPresent(directMap, forKey: .directMap) try container.encodeIfPresent(indirectMap, forKey: .indirectMap) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index c8f639ef43d0..f07f8132af76 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -19,6 +19,7 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { case uuid case dateTime @@ -33,7 +34,4 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(dateTime, forKey: .dateTime) try container.encodeIfPresent(map, forKey: .map) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 5368032f09b4..dc99e8cb8ddf 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -18,6 +18,7 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" @@ -30,7 +31,4 @@ public struct Model200Response: Codable, Hashable { try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 84a40e1c1016..d9f893c86ba0 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -22,6 +22,7 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -38,7 +39,4 @@ public struct Name: Codable, Hashable { try container.encodeIfPresent(property, forKey: .property) try container.encodeIfPresent(_123number, forKey: ._123number) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 710f41648f90..8c1ad5ddd4b3 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -15,6 +15,7 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } @@ -25,7 +26,4 @@ public struct NumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(justNumber, forKey: .justNumber) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 15726ab16a47..c474a6e657b3 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -31,6 +31,7 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case petId @@ -51,7 +52,4 @@ public struct Order: Codable, Hashable { try container.encodeIfPresent(status, forKey: .status) try container.encodeIfPresent(complete, forKey: .complete) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 36904afbd508..cdaad279b0f1 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -19,6 +19,7 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } + public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" @@ -33,7 +34,4 @@ public struct OuterComposite: Codable, Hashable { try container.encodeIfPresent(myString, forKey: .myString) try container.encodeIfPresent(myBoolean, forKey: .myBoolean) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 7a1c2826a195..ea9ece39161f 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -31,6 +31,7 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case category @@ -51,7 +52,4 @@ public struct Pet: Codable, Hashable { try container.encodeIfPresent(tags, forKey: .tags) try container.encodeIfPresent(status, forKey: .status) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 38fb57af3287..d08a673dbf4f 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -17,6 +17,7 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case baz @@ -29,7 +30,4 @@ public struct ReadOnlyFirst: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(baz, forKey: .baz) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index ed7e538a06d5..d34dc71ec37e 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -16,6 +16,7 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } + public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } @@ -26,7 +27,4 @@ public struct Return: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_return, forKey: ._return) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 18747e071bc6..e0e0ea6ae297 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -15,6 +15,7 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } + public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } @@ -25,7 +26,4 @@ public struct SpecialModelName: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 0699c25ff7ed..8fb1b40e5eea 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -10,8 +10,10 @@ import AnyCodable public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { } + public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -43,6 +45,4 @@ public struct StringBooleanMap: Codable, Hashable { var nonAdditionalPropertyKeys = Set() additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 11c5f7a750bb..5d90c8a74009 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -17,6 +17,7 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Tag: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 35b1a5833b93..e6e6530dc510 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -23,6 +23,7 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderDefault: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 37277a4ac00a..17c811b2edcd 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -23,6 +23,7 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderExample: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 2bbc31806fff..f93cecfc5d00 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -30,6 +30,7 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case username @@ -54,7 +55,4 @@ public struct User: Codable, Hashable { try container.encodeIfPresent(phone, forKey: .phone) try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 75ab9bc8d0ad..23c4af6d4ff6 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -17,6 +17,7 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" @@ -29,7 +30,4 @@ public struct AdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(mapString, forKey: .mapString) try container.encodeIfPresent(mapMapString, forKey: .mapMapString) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 0f825cf24d0c..a422ee73b556 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -17,6 +17,7 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -29,7 +30,4 @@ public struct Animal: Codable, Hashable { try container.encode(className, forKey: .className) try container.encodeIfPresent(color, forKey: .color) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 2b66af2dc949..7f7c6a34bdf5 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -19,6 +19,7 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -33,7 +34,4 @@ public struct ApiResponse: Codable, Hashable { try container.encodeIfPresent(type, forKey: .type) try container.encodeIfPresent(message, forKey: .message) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 06f0640475c2..0221229e7dd2 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 8c50c7fa1e44..b5c7ca501e73 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 461ec7cd9acf..9074d9ab4aae 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -19,6 +19,7 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" @@ -33,7 +34,4 @@ public struct ArrayTest: Codable, Hashable { try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index fbe62983d5e9..f0ca1a76f273 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -26,6 +26,7 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } + public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -46,7 +47,4 @@ public struct Capitalization: Codable, Hashable { try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 7f3a86932f1b..89aaea45b910 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -19,6 +19,7 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Cat: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 8df239548324..c80f7549e692 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -15,6 +15,7 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case declawed } @@ -25,7 +26,4 @@ public struct CatAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 4109db4d1ef7..0def88b1fc8c 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -17,6 +17,7 @@ public struct Category: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Category: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encode(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 7269ddbef6fd..90e4986e7f6b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -16,6 +16,7 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case _class } @@ -26,7 +27,4 @@ public struct ClassModel: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 7d6eff2ffe1f..4e0318069017 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -15,6 +15,7 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { case client } @@ -25,7 +26,4 @@ public struct Client: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(client, forKey: .client) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index b5f2bcea38a3..2387b3e7b2cf 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -19,6 +19,7 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Dog: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 1bfa23d7bc6d..4317578cee4c 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -15,6 +15,7 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case breed } @@ -25,7 +26,4 @@ public struct DogAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 73368c421433..01b8960fe34b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -25,6 +25,7 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" @@ -37,7 +38,4 @@ public struct EnumArrays: Codable, Hashable { try container.encodeIfPresent(justSymbol, forKey: .justSymbol) try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 60a81bcac77b..9c8e2e9ac842 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -41,6 +41,7 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -59,7 +60,4 @@ public struct EnumTest: Codable, Hashable { try container.encodeIfPresent(enumNumber, forKey: .enumNumber) try container.encodeIfPresent(outerEnum, forKey: .outerEnum) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 90283656d1b3..2a9c769ca6ce 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -17,6 +17,7 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { case sourceURI } @@ -27,7 +28,4 @@ public struct File: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(sourceURI, forKey: .sourceURI) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cff92673bbeb..cd8a9a0e9fef 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -17,6 +17,7 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { case file case files @@ -29,7 +30,4 @@ public struct FileSchemaTestClass: Codable, Hashable { try container.encodeIfPresent(file, forKey: .file) try container.encodeIfPresent(files, forKey: .files) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index fc86676eec30..11493f7ce28a 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -39,6 +39,7 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -73,7 +74,4 @@ public struct FormatTest: Codable, Hashable { try container.encodeIfPresent(uuid, forKey: .uuid) try container.encode(password, forKey: .password) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index d7960f5c8008..b7a1449830a4 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -17,6 +17,7 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case foo @@ -29,7 +30,4 @@ public struct HasOnlyReadOnly: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(foo, forKey: .foo) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index c5d4f2cae567..8d484cf0a334 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -15,6 +15,7 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } + public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } @@ -25,7 +26,4 @@ public struct List: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_123list, forKey: ._123list) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index b54bd01e5dc9..4b56880fed68 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -25,6 +25,7 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -41,7 +42,4 @@ public struct MapTest: Codable, Hashable { try container.encodeIfPresent(directMap, forKey: .directMap) try container.encodeIfPresent(indirectMap, forKey: .indirectMap) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index c8f639ef43d0..f07f8132af76 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -19,6 +19,7 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { case uuid case dateTime @@ -33,7 +34,4 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(dateTime, forKey: .dateTime) try container.encodeIfPresent(map, forKey: .map) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 5368032f09b4..dc99e8cb8ddf 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -18,6 +18,7 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" @@ -30,7 +31,4 @@ public struct Model200Response: Codable, Hashable { try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 84a40e1c1016..d9f893c86ba0 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -22,6 +22,7 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -38,7 +39,4 @@ public struct Name: Codable, Hashable { try container.encodeIfPresent(property, forKey: .property) try container.encodeIfPresent(_123number, forKey: ._123number) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 710f41648f90..8c1ad5ddd4b3 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -15,6 +15,7 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } @@ -25,7 +26,4 @@ public struct NumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(justNumber, forKey: .justNumber) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 15726ab16a47..c474a6e657b3 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -31,6 +31,7 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case petId @@ -51,7 +52,4 @@ public struct Order: Codable, Hashable { try container.encodeIfPresent(status, forKey: .status) try container.encodeIfPresent(complete, forKey: .complete) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 36904afbd508..cdaad279b0f1 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -19,6 +19,7 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } + public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" @@ -33,7 +34,4 @@ public struct OuterComposite: Codable, Hashable { try container.encodeIfPresent(myString, forKey: .myString) try container.encodeIfPresent(myBoolean, forKey: .myBoolean) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 7a1c2826a195..ea9ece39161f 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -31,6 +31,7 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case category @@ -51,7 +52,4 @@ public struct Pet: Codable, Hashable { try container.encodeIfPresent(tags, forKey: .tags) try container.encodeIfPresent(status, forKey: .status) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 38fb57af3287..d08a673dbf4f 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -17,6 +17,7 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case baz @@ -29,7 +30,4 @@ public struct ReadOnlyFirst: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(baz, forKey: .baz) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index ed7e538a06d5..d34dc71ec37e 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -16,6 +16,7 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } + public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } @@ -26,7 +27,4 @@ public struct Return: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_return, forKey: ._return) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 18747e071bc6..e0e0ea6ae297 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -15,6 +15,7 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } + public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } @@ -25,7 +26,4 @@ public struct SpecialModelName: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 0699c25ff7ed..8fb1b40e5eea 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -10,8 +10,10 @@ import AnyCodable public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { } + public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -43,6 +45,4 @@ public struct StringBooleanMap: Codable, Hashable { var nonAdditionalPropertyKeys = Set() additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 11c5f7a750bb..5d90c8a74009 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -17,6 +17,7 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Tag: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 35b1a5833b93..e6e6530dc510 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -23,6 +23,7 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderDefault: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 37277a4ac00a..17c811b2edcd 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -23,6 +23,7 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderExample: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 2bbc31806fff..f93cecfc5d00 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -30,6 +30,7 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case username @@ -54,7 +55,4 @@ public struct User: Codable, Hashable { try container.encodeIfPresent(phone, forKey: .phone) try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift index dd9fdef5c970..d178f10df649 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift @@ -15,9 +15,11 @@ public struct AdditionalPropertiesAnyType: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case name } + public var additionalProperties: [String: AnyCodable] = [:] public subscript(key: String) -> AnyCodable? { @@ -52,6 +54,4 @@ public struct AdditionalPropertiesAnyType: Codable, Hashable { nonAdditionalPropertyKeys.insert("name") additionalProperties = try container.decodeMap(AnyCodable.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift index 03708059804b..8ddb4720d6df 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift @@ -15,9 +15,11 @@ public struct AdditionalPropertiesArray: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case name } + public var additionalProperties: [String: [AnyCodable]] = [:] public subscript(key: String) -> [AnyCodable]? { @@ -52,6 +54,4 @@ public struct AdditionalPropertiesArray: Codable, Hashable { nonAdditionalPropertyKeys.insert("name") additionalProperties = try container.decodeMap([AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift index 6a8bd72e6e54..efa557ee7a82 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift @@ -15,9 +15,11 @@ public struct AdditionalPropertiesBoolean: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case name } + public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -52,6 +54,4 @@ public struct AdditionalPropertiesBoolean: Codable, Hashable { nonAdditionalPropertyKeys.insert("name") additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index abe4a1818906..10b6866249af 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -35,6 +35,7 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.anytype2 = anytype2 self.anytype3 = anytype3 } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapNumber = "map_number" @@ -65,7 +66,4 @@ public struct AdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(anytype2, forKey: .anytype2) try container.encodeIfPresent(anytype3, forKey: .anytype3) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift index 90109260d024..4274f8bde698 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift @@ -15,9 +15,11 @@ public struct AdditionalPropertiesInteger: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case name } + public var additionalProperties: [String: Int] = [:] public subscript(key: String) -> Int? { @@ -52,6 +54,4 @@ public struct AdditionalPropertiesInteger: Codable, Hashable { nonAdditionalPropertyKeys.insert("name") additionalProperties = try container.decodeMap(Int.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift index 2cae455cf248..5bacbca48085 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift @@ -15,9 +15,11 @@ public struct AdditionalPropertiesNumber: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case name } + public var additionalProperties: [String: Double] = [:] public subscript(key: String) -> Double? { @@ -52,6 +54,4 @@ public struct AdditionalPropertiesNumber: Codable, Hashable { nonAdditionalPropertyKeys.insert("name") additionalProperties = try container.decodeMap(Double.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift index 6f86abd07abb..cd460f79f64a 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift @@ -15,9 +15,11 @@ public struct AdditionalPropertiesObject: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case name } + public var additionalProperties: [String: [String: AnyCodable]] = [:] public subscript(key: String) -> [String: AnyCodable]? { @@ -52,6 +54,4 @@ public struct AdditionalPropertiesObject: Codable, Hashable { nonAdditionalPropertyKeys.insert("name") additionalProperties = try container.decodeMap([String: AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift index b8b54f04b1b8..a5b9c4d43ee7 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift @@ -15,9 +15,11 @@ public struct AdditionalPropertiesString: Codable, Hashable { public init(name: String? = nil) { self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case name } + public var additionalProperties: [String: String] = [:] public subscript(key: String) -> String? { @@ -52,6 +54,4 @@ public struct AdditionalPropertiesString: Codable, Hashable { nonAdditionalPropertyKeys.insert("name") additionalProperties = try container.decodeMap(String.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 0f825cf24d0c..a422ee73b556 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -17,6 +17,7 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -29,7 +30,4 @@ public struct Animal: Codable, Hashable { try container.encode(className, forKey: .className) try container.encodeIfPresent(color, forKey: .color) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 2b66af2dc949..7f7c6a34bdf5 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -19,6 +19,7 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -33,7 +34,4 @@ public struct ApiResponse: Codable, Hashable { try container.encodeIfPresent(type, forKey: .type) try container.encodeIfPresent(message, forKey: .message) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 06f0640475c2..0221229e7dd2 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 8c50c7fa1e44..b5c7ca501e73 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 461ec7cd9acf..9074d9ab4aae 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -19,6 +19,7 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" @@ -33,7 +34,4 @@ public struct ArrayTest: Codable, Hashable { try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift index 9c3f0f237a39..288d1f5c29f4 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift @@ -21,6 +21,7 @@ public struct BigCat: Codable, Hashable { public init(kind: Kind? = nil) { self.kind = kind } + public enum CodingKeys: String, CodingKey, CaseIterable { case kind } @@ -31,7 +32,4 @@ public struct BigCat: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(kind, forKey: .kind) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift index 6b78ab7b42a2..b4e5595c22fe 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift @@ -21,6 +21,7 @@ public struct BigCatAllOf: Codable, Hashable { public init(kind: Kind? = nil) { self.kind = kind } + public enum CodingKeys: String, CodingKey, CaseIterable { case kind } @@ -31,7 +32,4 @@ public struct BigCatAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(kind, forKey: .kind) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index fbe62983d5e9..f0ca1a76f273 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -26,6 +26,7 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } + public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -46,7 +47,4 @@ public struct Capitalization: Codable, Hashable { try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 7f3a86932f1b..89aaea45b910 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -19,6 +19,7 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Cat: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 8df239548324..c80f7549e692 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -15,6 +15,7 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case declawed } @@ -25,7 +26,4 @@ public struct CatAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 611a8a32e393..d695f78bb4eb 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -17,6 +17,7 @@ public struct Category: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Category: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encode(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 7269ddbef6fd..90e4986e7f6b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -16,6 +16,7 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case _class } @@ -26,7 +27,4 @@ public struct ClassModel: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 7d6eff2ffe1f..4e0318069017 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -15,6 +15,7 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { case client } @@ -25,7 +26,4 @@ public struct Client: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(client, forKey: .client) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index b5f2bcea38a3..2387b3e7b2cf 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -19,6 +19,7 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Dog: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 1bfa23d7bc6d..4317578cee4c 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -15,6 +15,7 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case breed } @@ -25,7 +26,4 @@ public struct DogAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 73368c421433..01b8960fe34b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -25,6 +25,7 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" @@ -37,7 +38,4 @@ public struct EnumArrays: Codable, Hashable { try container.encodeIfPresent(justSymbol, forKey: .justSymbol) try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 60a81bcac77b..9c8e2e9ac842 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -41,6 +41,7 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -59,7 +60,4 @@ public struct EnumTest: Codable, Hashable { try container.encodeIfPresent(enumNumber, forKey: .enumNumber) try container.encodeIfPresent(outerEnum, forKey: .outerEnum) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 90283656d1b3..2a9c769ca6ce 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -17,6 +17,7 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { case sourceURI } @@ -27,7 +28,4 @@ public struct File: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(sourceURI, forKey: .sourceURI) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cff92673bbeb..cd8a9a0e9fef 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -17,6 +17,7 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { case file case files @@ -29,7 +30,4 @@ public struct FileSchemaTestClass: Codable, Hashable { try container.encodeIfPresent(file, forKey: .file) try container.encodeIfPresent(files, forKey: .files) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index ea348c3581ee..8b16c3a20134 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -41,6 +41,7 @@ public struct FormatTest: Codable, Hashable { self.password = password self.bigDecimal = bigDecimal } + public enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -77,7 +78,4 @@ public struct FormatTest: Codable, Hashable { try container.encode(password, forKey: .password) try container.encodeIfPresent(bigDecimal, forKey: .bigDecimal) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index d7960f5c8008..b7a1449830a4 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -17,6 +17,7 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case foo @@ -29,7 +30,4 @@ public struct HasOnlyReadOnly: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(foo, forKey: .foo) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift index c5d4f2cae567..8d484cf0a334 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -15,6 +15,7 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } + public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } @@ -25,7 +26,4 @@ public struct List: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_123list, forKey: ._123list) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index b54bd01e5dc9..4b56880fed68 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -25,6 +25,7 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -41,7 +42,4 @@ public struct MapTest: Codable, Hashable { try container.encodeIfPresent(directMap, forKey: .directMap) try container.encodeIfPresent(indirectMap, forKey: .indirectMap) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index c8f639ef43d0..f07f8132af76 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -19,6 +19,7 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { case uuid case dateTime @@ -33,7 +34,4 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(dateTime, forKey: .dateTime) try container.encodeIfPresent(map, forKey: .map) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 5368032f09b4..dc99e8cb8ddf 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -18,6 +18,7 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" @@ -30,7 +31,4 @@ public struct Model200Response: Codable, Hashable { try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 84a40e1c1016..d9f893c86ba0 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -22,6 +22,7 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -38,7 +39,4 @@ public struct Name: Codable, Hashable { try container.encodeIfPresent(property, forKey: .property) try container.encodeIfPresent(_123number, forKey: ._123number) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 710f41648f90..8c1ad5ddd4b3 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -15,6 +15,7 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } @@ -25,7 +26,4 @@ public struct NumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(justNumber, forKey: .justNumber) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 15726ab16a47..c474a6e657b3 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -31,6 +31,7 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case petId @@ -51,7 +52,4 @@ public struct Order: Codable, Hashable { try container.encodeIfPresent(status, forKey: .status) try container.encodeIfPresent(complete, forKey: .complete) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 36904afbd508..cdaad279b0f1 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -19,6 +19,7 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } + public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" @@ -33,7 +34,4 @@ public struct OuterComposite: Codable, Hashable { try container.encodeIfPresent(myString, forKey: .myString) try container.encodeIfPresent(myBoolean, forKey: .myBoolean) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 03e81af5d05b..a1a04b93d267 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -31,6 +31,7 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case category @@ -51,7 +52,4 @@ public struct Pet: Codable, Hashable { try container.encodeIfPresent(tags, forKey: .tags) try container.encodeIfPresent(status, forKey: .status) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 38fb57af3287..d08a673dbf4f 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -17,6 +17,7 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case baz @@ -29,7 +30,4 @@ public struct ReadOnlyFirst: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(baz, forKey: .baz) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index ed7e538a06d5..d34dc71ec37e 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -16,6 +16,7 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } + public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } @@ -26,7 +27,4 @@ public struct Return: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_return, forKey: ._return) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 18747e071bc6..e0e0ea6ae297 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -15,6 +15,7 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } + public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } @@ -25,7 +26,4 @@ public struct SpecialModelName: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 0699c25ff7ed..8fb1b40e5eea 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -10,8 +10,10 @@ import AnyCodable public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { } + public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -43,6 +45,4 @@ public struct StringBooleanMap: Codable, Hashable { var nonAdditionalPropertyKeys = Set() additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 11c5f7a750bb..5d90c8a74009 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -17,6 +17,7 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Tag: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 35b1a5833b93..e6e6530dc510 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -23,6 +23,7 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderDefault: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 66dc3819f2a9..3e25b2288463 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -25,6 +25,7 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -45,7 +46,4 @@ public struct TypeHolderExample: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 2bbc31806fff..f93cecfc5d00 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -30,6 +30,7 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case username @@ -54,7 +55,4 @@ public struct User: Codable, Hashable { try container.encodeIfPresent(phone, forKey: .phone) try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - - } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift index daa3716aeca6..d7fa1248dcde 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift @@ -71,6 +71,7 @@ public struct XmlItem: Codable, Hashable { self.prefixNsArray = prefixNsArray self.prefixNsWrappedArray = prefixNsWrappedArray } + public enum CodingKeys: String, CodingKey, CaseIterable { case attributeString = "attribute_string" case attributeNumber = "attribute_number" @@ -137,7 +138,4 @@ public struct XmlItem: Codable, Hashable { try container.encodeIfPresent(prefixNsArray, forKey: .prefixNsArray) try container.encodeIfPresent(prefixNsWrappedArray, forKey: .prefixNsWrappedArray) } - - - } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 8ed4cc03185b..665bc7675c1d 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -20,6 +20,7 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -34,7 +35,4 @@ public struct ApiResponse: Codable, Hashable { try container.encodeIfPresent(type, forKey: .type) try container.encodeIfPresent(message, forKey: .message) } - - - } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 508c796f6269..3212f61529d3 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -18,6 +18,7 @@ public struct Category: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -30,7 +31,4 @@ public struct Category: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 11ee45fef690..f98e49776396 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -33,6 +33,7 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case petId @@ -53,7 +54,4 @@ public struct Order: Codable, Hashable { try container.encodeIfPresent(status, forKey: .status) try container.encodeIfPresent(complete, forKey: .complete) } - - - } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index c1bac661e1fe..7ade27d71a0c 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -33,6 +33,7 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case category @@ -53,7 +54,4 @@ public struct Pet: Codable, Hashable { try container.encodeIfPresent(tags, forKey: .tags) try container.encodeIfPresent(status, forKey: .status) } - - - } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 5a275f11b25c..864a0dbbf99c 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -18,6 +18,7 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -30,7 +31,4 @@ public struct Tag: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 058360d1249e..7b8fee0dd9fd 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -31,6 +31,7 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case username @@ -55,7 +56,4 @@ public struct User: Codable, Hashable { try container.encodeIfPresent(phone, forKey: .phone) try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 675937c90fa5..d9dd5e565017 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -17,6 +17,7 @@ internal struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } + internal enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" @@ -29,7 +30,4 @@ internal struct AdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(mapString, forKey: .mapString) try container.encodeIfPresent(mapMapString, forKey: .mapMapString) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 8c8ffe45faa8..db644cbd9213 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -17,6 +17,7 @@ internal struct Animal: Codable, Hashable { self.className = className self.color = color } + internal enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -29,7 +30,4 @@ internal struct Animal: Codable, Hashable { try container.encode(className, forKey: .className) try container.encodeIfPresent(color, forKey: .color) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 25f5c34054ba..4b3bb87eef86 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -19,6 +19,7 @@ internal struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + internal enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -33,7 +34,4 @@ internal struct ApiResponse: Codable, Hashable { try container.encodeIfPresent(type, forKey: .type) try container.encodeIfPresent(message, forKey: .message) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 48daaaffa2ff..709e7f19109c 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ internal struct ArrayOfArrayOfNumberOnly: Codable, Hashable { internal init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } + internal enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } @@ -25,7 +26,4 @@ internal struct ArrayOfArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index b38ece08cc8b..960702ef37ea 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ internal struct ArrayOfNumberOnly: Codable, Hashable { internal init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } + internal enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } @@ -25,7 +26,4 @@ internal struct ArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 60f642f72a9a..eeb73442a48a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -19,6 +19,7 @@ internal struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } + internal enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" @@ -33,7 +34,4 @@ internal struct ArrayTest: Codable, Hashable { try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 1184a9c9c780..5c5341e77a73 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -26,6 +26,7 @@ internal struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } + internal enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -46,7 +47,4 @@ internal struct Capitalization: Codable, Hashable { try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 47016f63e3b3..61463086913e 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -19,6 +19,7 @@ internal struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + internal enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ internal struct Cat: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 9d01dbd63915..7c742b83be19 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -15,6 +15,7 @@ internal struct CatAllOf: Codable, Hashable { internal init(declawed: Bool? = nil) { self.declawed = declawed } + internal enum CodingKeys: String, CodingKey, CaseIterable { case declawed } @@ -25,7 +26,4 @@ internal struct CatAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index b99e1f159fcb..9ee881909bfd 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -17,6 +17,7 @@ internal struct Category: Codable, Hashable { self.id = id self.name = name } + internal enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ internal struct Category: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encode(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index efb0200fe335..3ed6d33da0fa 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -16,6 +16,7 @@ internal struct ClassModel: Codable, Hashable { internal init(_class: String? = nil) { self._class = _class } + internal enum CodingKeys: String, CodingKey, CaseIterable { case _class } @@ -26,7 +27,4 @@ internal struct ClassModel: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 84457478611b..390f624be4f7 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -15,6 +15,7 @@ internal struct Client: Codable, Hashable { internal init(client: String? = nil) { self.client = client } + internal enum CodingKeys: String, CodingKey, CaseIterable { case client } @@ -25,7 +26,4 @@ internal struct Client: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(client, forKey: .client) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 580fc9003c7a..71848669f329 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -19,6 +19,7 @@ internal struct Dog: Codable, Hashable { self.color = color self.breed = breed } + internal enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ internal struct Dog: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 33f2e3a8c1e1..d26c5f5d87dc 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -15,6 +15,7 @@ internal struct DogAllOf: Codable, Hashable { internal init(breed: String? = nil) { self.breed = breed } + internal enum CodingKeys: String, CodingKey, CaseIterable { case breed } @@ -25,7 +26,4 @@ internal struct DogAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 33a4472b1a7c..553e1b1de09e 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -25,6 +25,7 @@ internal struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } + internal enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" @@ -37,7 +38,4 @@ internal struct EnumArrays: Codable, Hashable { try container.encodeIfPresent(justSymbol, forKey: .justSymbol) try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 476bf2dbbaa7..23817dcd6d5b 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -41,6 +41,7 @@ internal struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } + internal enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -59,7 +60,4 @@ internal struct EnumTest: Codable, Hashable { try container.encodeIfPresent(enumNumber, forKey: .enumNumber) try container.encodeIfPresent(outerEnum, forKey: .outerEnum) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 668a27c089f0..f14a3a326ca0 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -17,6 +17,7 @@ internal struct File: Codable, Hashable { internal init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + internal enum CodingKeys: String, CodingKey, CaseIterable { case sourceURI } @@ -27,7 +28,4 @@ internal struct File: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(sourceURI, forKey: .sourceURI) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 29e7ce62f3b6..ff5e1a2bf003 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -17,6 +17,7 @@ internal struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + internal enum CodingKeys: String, CodingKey, CaseIterable { case file case files @@ -29,7 +30,4 @@ internal struct FileSchemaTestClass: Codable, Hashable { try container.encodeIfPresent(file, forKey: .file) try container.encodeIfPresent(files, forKey: .files) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index e42c76fb1b58..a03e2aaa9302 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -39,6 +39,7 @@ internal struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + internal enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -73,7 +74,4 @@ internal struct FormatTest: Codable, Hashable { try container.encodeIfPresent(uuid, forKey: .uuid) try container.encode(password, forKey: .password) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index fff4dc5bef6f..3e928855ab44 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -17,6 +17,7 @@ internal struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + internal enum CodingKeys: String, CodingKey, CaseIterable { case bar case foo @@ -29,7 +30,4 @@ internal struct HasOnlyReadOnly: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(foo, forKey: .foo) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 71249ab1f5c8..80d8b0c4071d 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -15,6 +15,7 @@ internal struct List: Codable, Hashable { internal init(_123list: String? = nil) { self._123list = _123list } + internal enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } @@ -25,7 +26,4 @@ internal struct List: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_123list, forKey: ._123list) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index c1057f3ebf57..d61a6e2bd7f1 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -25,6 +25,7 @@ internal struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } + internal enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -41,7 +42,4 @@ internal struct MapTest: Codable, Hashable { try container.encodeIfPresent(directMap, forKey: .directMap) try container.encodeIfPresent(indirectMap, forKey: .indirectMap) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index ebf6ae145dd0..a8d53ffb288f 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -19,6 +19,7 @@ internal struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + internal enum CodingKeys: String, CodingKey, CaseIterable { case uuid case dateTime @@ -33,7 +34,4 @@ internal struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(dateTime, forKey: .dateTime) try container.encodeIfPresent(map, forKey: .map) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 1efae876cbfa..14656a218e77 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -18,6 +18,7 @@ internal struct Model200Response: Codable, Hashable { self.name = name self._class = _class } + internal enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" @@ -30,7 +31,4 @@ internal struct Model200Response: Codable, Hashable { try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index aa9337dedc43..f61b75d65339 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -22,6 +22,7 @@ internal struct Name: Codable, Hashable { self.property = property self._123number = _123number } + internal enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -38,7 +39,4 @@ internal struct Name: Codable, Hashable { try container.encodeIfPresent(property, forKey: .property) try container.encodeIfPresent(_123number, forKey: ._123number) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 0748cf0a096d..dcae16adea48 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -15,6 +15,7 @@ internal struct NumberOnly: Codable, Hashable { internal init(justNumber: Double? = nil) { self.justNumber = justNumber } + internal enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } @@ -25,7 +26,4 @@ internal struct NumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(justNumber, forKey: .justNumber) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 378e41056a87..a2aed66bc25f 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -31,6 +31,7 @@ internal struct Order: Codable, Hashable { self.status = status self.complete = complete } + internal enum CodingKeys: String, CodingKey, CaseIterable { case id case petId @@ -51,7 +52,4 @@ internal struct Order: Codable, Hashable { try container.encodeIfPresent(status, forKey: .status) try container.encodeIfPresent(complete, forKey: .complete) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 76508a79a262..5bd719c715f1 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -19,6 +19,7 @@ internal struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } + internal enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" @@ -33,7 +34,4 @@ internal struct OuterComposite: Codable, Hashable { try container.encodeIfPresent(myString, forKey: .myString) try container.encodeIfPresent(myBoolean, forKey: .myBoolean) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index c28c280608f7..0d1ec07d3e5b 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -31,6 +31,7 @@ internal struct Pet: Codable, Hashable { self.tags = tags self.status = status } + internal enum CodingKeys: String, CodingKey, CaseIterable { case id case category @@ -51,7 +52,4 @@ internal struct Pet: Codable, Hashable { try container.encodeIfPresent(tags, forKey: .tags) try container.encodeIfPresent(status, forKey: .status) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 7f9cf4abd2e3..46101e497304 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -17,6 +17,7 @@ internal struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + internal enum CodingKeys: String, CodingKey, CaseIterable { case bar case baz @@ -29,7 +30,4 @@ internal struct ReadOnlyFirst: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(baz, forKey: .baz) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index bd512e38ac3f..144e53c1759c 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -16,6 +16,7 @@ internal struct Return: Codable, Hashable { internal init(_return: Int? = nil) { self._return = _return } + internal enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } @@ -26,7 +27,4 @@ internal struct Return: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_return, forKey: ._return) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 848bbe6f3844..aa152383444a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -15,6 +15,7 @@ internal struct SpecialModelName: Codable, Hashable { internal init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } + internal enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } @@ -25,7 +26,4 @@ internal struct SpecialModelName: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 50ff6bedf9b7..2b1e5e2cf884 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -10,8 +10,10 @@ import AnyCodable internal struct StringBooleanMap: Codable, Hashable { + internal enum CodingKeys: CodingKey, CaseIterable { } + internal var additionalProperties: [String: Bool] = [:] internal subscript(key: String) -> Bool? { @@ -43,6 +45,4 @@ internal struct StringBooleanMap: Codable, Hashable { var nonAdditionalPropertyKeys = Set() additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 2acf7c82cd48..58215131abe1 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -17,6 +17,7 @@ internal struct Tag: Codable, Hashable { self.id = id self.name = name } + internal enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ internal struct Tag: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 1e306e356999..d4f790d97ee7 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -23,6 +23,7 @@ internal struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + internal enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ internal struct TypeHolderDefault: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 386054d5ca96..e8b051a4508f 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -23,6 +23,7 @@ internal struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + internal enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ internal struct TypeHolderExample: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift index a3e131ac3d92..d7ae12492198 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -30,6 +30,7 @@ internal struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + internal enum CodingKeys: String, CodingKey, CaseIterable { case id case username @@ -54,7 +55,4 @@ internal struct User: Codable, Hashable { try container.encodeIfPresent(phone, forKey: .phone) try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index aab3e933f3fa..3a2ec316678b 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -17,6 +17,7 @@ import AnyCodable self.mapString = mapString self.mapMapString = mapMapString } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" @@ -29,7 +30,4 @@ import AnyCodable try container.encodeIfPresent(mapString, forKey: .mapString) try container.encodeIfPresent(mapMapString, forKey: .mapMapString) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index edd4017fd47f..c011c374f67a 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -17,6 +17,7 @@ import AnyCodable self._className = _className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { case _className = "className" case color @@ -29,7 +30,4 @@ import AnyCodable try container.encode(_className, forKey: ._className) try container.encodeIfPresent(color, forKey: .color) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 7c6f40923fa0..dd42fa46250b 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -24,6 +24,7 @@ import AnyCodable self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -38,7 +39,4 @@ import AnyCodable try container.encodeIfPresent(type, forKey: .type) try container.encodeIfPresent(message, forKey: .message) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 1971654130e0..e88fea34550c 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ import AnyCodable public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } @@ -25,7 +26,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 5802e520a2ae..010207d5832d 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ import AnyCodable public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } @@ -25,7 +26,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 1f33262b7494..4e93d3ec1954 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -19,6 +19,7 @@ import AnyCodable self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" @@ -33,7 +34,4 @@ import AnyCodable try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 0ede392b725c..3edcf4aec71f 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -26,6 +26,7 @@ import AnyCodable self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } + public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -46,7 +47,4 @@ import AnyCodable try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index ac482af78678..7ed4aad879db 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -24,6 +24,7 @@ import AnyCodable self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case _className = "className" case color @@ -38,7 +39,4 @@ import AnyCodable try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 714af722413e..a921ec323a72 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -20,6 +20,7 @@ import AnyCodable public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case declawed } @@ -30,7 +31,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 4545308c0b57..448bbbd77fcd 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -22,6 +22,7 @@ import AnyCodable self._id = _id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case _id = "id" case name @@ -34,7 +35,4 @@ import AnyCodable try container.encodeIfPresent(_id, forKey: ._id) try container.encode(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index a16525261cd0..3ab43620369a 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -16,6 +16,7 @@ import AnyCodable public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case _class } @@ -26,7 +27,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 1a3e53ef2f3a..1e4e0390c6d2 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -15,6 +15,7 @@ import AnyCodable public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { case client } @@ -25,7 +26,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(client, forKey: .client) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index b6de22c59402..d68dadf06978 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -19,6 +19,7 @@ import AnyCodable self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case _className = "className" case color @@ -33,7 +34,4 @@ import AnyCodable try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 88215365c681..6e6747572351 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -15,6 +15,7 @@ import AnyCodable public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case breed } @@ -25,7 +26,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index c3f1766d81c8..7d461e9f488f 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -25,6 +25,7 @@ import AnyCodable self.justSymbol = justSymbol self.arrayEnum = arrayEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" @@ -37,7 +38,4 @@ import AnyCodable try container.encodeIfPresent(justSymbol, forKey: .justSymbol) try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index ac8620deb3ba..4a464b00cf2c 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -41,6 +41,7 @@ import AnyCodable self.enumNumber = enumNumber self.outerEnum = outerEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -59,7 +60,4 @@ import AnyCodable try container.encodeIfPresent(enumNumber, forKey: .enumNumber) try container.encodeIfPresent(outerEnum, forKey: .outerEnum) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 0fac5200c96e..d3acff746fca 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -17,6 +17,7 @@ import AnyCodable public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { case sourceURI } @@ -27,7 +28,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(sourceURI, forKey: .sourceURI) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 062b68c5e5a3..1b4688f9bd70 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -17,6 +17,7 @@ import AnyCodable self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { case file case files @@ -29,7 +30,4 @@ import AnyCodable try container.encodeIfPresent(file, forKey: .file) try container.encodeIfPresent(files, forKey: .files) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index dacf0f0fc21b..45bb30fca6e9 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -64,6 +64,7 @@ import AnyCodable self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -98,7 +99,4 @@ import AnyCodable try container.encodeIfPresent(uuid, forKey: .uuid) try container.encode(password, forKey: .password) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index ac9b61b5a15d..b3cd9e7b4c37 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -17,6 +17,7 @@ import AnyCodable self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case foo @@ -29,7 +30,4 @@ import AnyCodable try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(foo, forKey: .foo) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift index cfb6cbbe8d5f..8ea2f8feea7c 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -15,6 +15,7 @@ import AnyCodable public init(_123list: String? = nil) { self._123list = _123list } + public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } @@ -25,7 +26,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_123list, forKey: ._123list) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 17011781e79d..bb104e8169f7 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -25,6 +25,7 @@ import AnyCodable self.directMap = directMap self.indirectMap = indirectMap } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -41,7 +42,4 @@ import AnyCodable try container.encodeIfPresent(directMap, forKey: .directMap) try container.encodeIfPresent(indirectMap, forKey: .indirectMap) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index ee69cad2f18f..444ca3572e9b 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -19,6 +19,7 @@ import AnyCodable self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { case uuid case dateTime @@ -33,7 +34,4 @@ import AnyCodable try container.encodeIfPresent(dateTime, forKey: .dateTime) try container.encodeIfPresent(map, forKey: .map) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 19617eb563ef..1bdf12817bae 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -23,6 +23,7 @@ import AnyCodable self.name = name self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" @@ -35,7 +36,4 @@ import AnyCodable try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 50b14e9343a6..c5a36141fab1 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -32,6 +32,7 @@ import AnyCodable self.property = property self._123number = _123number } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -48,7 +49,4 @@ import AnyCodable try container.encodeIfPresent(property, forKey: .property) try container.encodeIfPresent(_123number, forKey: ._123number) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 6da3b7f3634d..2a90178bdb1e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -15,6 +15,7 @@ import AnyCodable public init(justNumber: Double? = nil) { self.justNumber = justNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } @@ -25,7 +26,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(justNumber, forKey: .justNumber) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index ad21080d0241..5db1f6b36c6b 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -51,6 +51,7 @@ import AnyCodable self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { case _id = "id" case petId @@ -71,7 +72,4 @@ import AnyCodable try container.encodeIfPresent(status, forKey: .status) try container.encodeIfPresent(complete, forKey: .complete) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index ad7118aae8b3..fd6674b056dd 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -24,6 +24,7 @@ import AnyCodable self.myString = myString self.myBoolean = myBoolean } + public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" @@ -38,7 +39,4 @@ import AnyCodable try container.encodeIfPresent(myString, forKey: .myString) try container.encodeIfPresent(myBoolean, forKey: .myBoolean) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index dcd875c08987..192ef69463a2 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -36,6 +36,7 @@ import AnyCodable self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { case _id = "id" case category @@ -56,7 +57,4 @@ import AnyCodable try container.encodeIfPresent(tags, forKey: .tags) try container.encodeIfPresent(status, forKey: .status) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 1b278c72d119..ef38f6c6d9c7 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -17,6 +17,7 @@ import AnyCodable self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case baz @@ -29,7 +30,4 @@ import AnyCodable try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(baz, forKey: .baz) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index f5c4e90d0e1e..e1bc6f765ac7 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -21,6 +21,7 @@ import AnyCodable public init(_return: Int? = nil) { self._return = _return } + public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } @@ -31,7 +32,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_return, forKey: ._return) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index a512f5fb3278..abafeff9b751 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -20,6 +20,7 @@ import AnyCodable public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } + public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } @@ -30,7 +31,4 @@ import AnyCodable var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 1cb86591c3c2..f9cb11c7cc62 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -10,8 +10,10 @@ import AnyCodable @objc public class StringBooleanMap: NSObject, Codable { + public enum CodingKeys: CodingKey, CaseIterable { } + public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -43,6 +45,4 @@ import AnyCodable var nonAdditionalPropertyKeys = Set() additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index eea33c371aca..e861826bcf98 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -22,6 +22,7 @@ import AnyCodable self._id = _id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case _id = "id" case name @@ -34,7 +35,4 @@ import AnyCodable try container.encodeIfPresent(_id, forKey: ._id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index b6c174ed1461..66eaf47b8036 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -23,6 +23,7 @@ import AnyCodable self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ import AnyCodable try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index d794fec5ce9d..f4aa2c171e5f 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -23,6 +23,7 @@ import AnyCodable self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ import AnyCodable try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f233f6cccbdf..41aa41aaaff1 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -40,6 +40,7 @@ import AnyCodable self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { case _id = "id" case username @@ -64,7 +65,4 @@ import AnyCodable try container.encodeIfPresent(phone, forKey: .phone) try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 75ab9bc8d0ad..23c4af6d4ff6 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -17,6 +17,7 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" @@ -29,7 +30,4 @@ public struct AdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(mapString, forKey: .mapString) try container.encodeIfPresent(mapMapString, forKey: .mapMapString) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 0f825cf24d0c..a422ee73b556 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -17,6 +17,7 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -29,7 +30,4 @@ public struct Animal: Codable, Hashable { try container.encode(className, forKey: .className) try container.encodeIfPresent(color, forKey: .color) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 2b66af2dc949..7f7c6a34bdf5 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -19,6 +19,7 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -33,7 +34,4 @@ public struct ApiResponse: Codable, Hashable { try container.encodeIfPresent(type, forKey: .type) try container.encodeIfPresent(message, forKey: .message) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 06f0640475c2..0221229e7dd2 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 8c50c7fa1e44..b5c7ca501e73 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 461ec7cd9acf..9074d9ab4aae 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -19,6 +19,7 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" @@ -33,7 +34,4 @@ public struct ArrayTest: Codable, Hashable { try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index fbe62983d5e9..f0ca1a76f273 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -26,6 +26,7 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } + public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -46,7 +47,4 @@ public struct Capitalization: Codable, Hashable { try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 7f3a86932f1b..89aaea45b910 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -19,6 +19,7 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Cat: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 8df239548324..c80f7549e692 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -15,6 +15,7 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case declawed } @@ -25,7 +26,4 @@ public struct CatAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 4109db4d1ef7..0def88b1fc8c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -17,6 +17,7 @@ public struct Category: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Category: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encode(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 7269ddbef6fd..90e4986e7f6b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -16,6 +16,7 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case _class } @@ -26,7 +27,4 @@ public struct ClassModel: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 7d6eff2ffe1f..4e0318069017 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -15,6 +15,7 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { case client } @@ -25,7 +26,4 @@ public struct Client: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(client, forKey: .client) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index b5f2bcea38a3..2387b3e7b2cf 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -19,6 +19,7 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Dog: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 1bfa23d7bc6d..4317578cee4c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -15,6 +15,7 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case breed } @@ -25,7 +26,4 @@ public struct DogAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 73368c421433..01b8960fe34b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -25,6 +25,7 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" @@ -37,7 +38,4 @@ public struct EnumArrays: Codable, Hashable { try container.encodeIfPresent(justSymbol, forKey: .justSymbol) try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 60a81bcac77b..9c8e2e9ac842 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -41,6 +41,7 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -59,7 +60,4 @@ public struct EnumTest: Codable, Hashable { try container.encodeIfPresent(enumNumber, forKey: .enumNumber) try container.encodeIfPresent(outerEnum, forKey: .outerEnum) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 90283656d1b3..2a9c769ca6ce 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -17,6 +17,7 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { case sourceURI } @@ -27,7 +28,4 @@ public struct File: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(sourceURI, forKey: .sourceURI) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cff92673bbeb..cd8a9a0e9fef 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -17,6 +17,7 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { case file case files @@ -29,7 +30,4 @@ public struct FileSchemaTestClass: Codable, Hashable { try container.encodeIfPresent(file, forKey: .file) try container.encodeIfPresent(files, forKey: .files) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index fc86676eec30..11493f7ce28a 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -39,6 +39,7 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -73,7 +74,4 @@ public struct FormatTest: Codable, Hashable { try container.encodeIfPresent(uuid, forKey: .uuid) try container.encode(password, forKey: .password) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index d7960f5c8008..b7a1449830a4 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -17,6 +17,7 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case foo @@ -29,7 +30,4 @@ public struct HasOnlyReadOnly: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(foo, forKey: .foo) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index c5d4f2cae567..8d484cf0a334 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -15,6 +15,7 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } + public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } @@ -25,7 +26,4 @@ public struct List: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_123list, forKey: ._123list) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index b54bd01e5dc9..4b56880fed68 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -25,6 +25,7 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -41,7 +42,4 @@ public struct MapTest: Codable, Hashable { try container.encodeIfPresent(directMap, forKey: .directMap) try container.encodeIfPresent(indirectMap, forKey: .indirectMap) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index c8f639ef43d0..f07f8132af76 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -19,6 +19,7 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { case uuid case dateTime @@ -33,7 +34,4 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(dateTime, forKey: .dateTime) try container.encodeIfPresent(map, forKey: .map) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 5368032f09b4..dc99e8cb8ddf 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -18,6 +18,7 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" @@ -30,7 +31,4 @@ public struct Model200Response: Codable, Hashable { try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 84a40e1c1016..d9f893c86ba0 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -22,6 +22,7 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -38,7 +39,4 @@ public struct Name: Codable, Hashable { try container.encodeIfPresent(property, forKey: .property) try container.encodeIfPresent(_123number, forKey: ._123number) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 710f41648f90..8c1ad5ddd4b3 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -15,6 +15,7 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } @@ -25,7 +26,4 @@ public struct NumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(justNumber, forKey: .justNumber) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 15726ab16a47..c474a6e657b3 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -31,6 +31,7 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case petId @@ -51,7 +52,4 @@ public struct Order: Codable, Hashable { try container.encodeIfPresent(status, forKey: .status) try container.encodeIfPresent(complete, forKey: .complete) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 36904afbd508..cdaad279b0f1 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -19,6 +19,7 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } + public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" @@ -33,7 +34,4 @@ public struct OuterComposite: Codable, Hashable { try container.encodeIfPresent(myString, forKey: .myString) try container.encodeIfPresent(myBoolean, forKey: .myBoolean) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 7a1c2826a195..ea9ece39161f 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -31,6 +31,7 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case category @@ -51,7 +52,4 @@ public struct Pet: Codable, Hashable { try container.encodeIfPresent(tags, forKey: .tags) try container.encodeIfPresent(status, forKey: .status) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 38fb57af3287..d08a673dbf4f 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -17,6 +17,7 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case baz @@ -29,7 +30,4 @@ public struct ReadOnlyFirst: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(baz, forKey: .baz) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index ed7e538a06d5..d34dc71ec37e 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -16,6 +16,7 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } + public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } @@ -26,7 +27,4 @@ public struct Return: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_return, forKey: ._return) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 18747e071bc6..e0e0ea6ae297 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -15,6 +15,7 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } + public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } @@ -25,7 +26,4 @@ public struct SpecialModelName: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 0699c25ff7ed..8fb1b40e5eea 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -10,8 +10,10 @@ import AnyCodable public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { } + public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -43,6 +45,4 @@ public struct StringBooleanMap: Codable, Hashable { var nonAdditionalPropertyKeys = Set() additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 11c5f7a750bb..5d90c8a74009 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -17,6 +17,7 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Tag: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 35b1a5833b93..e6e6530dc510 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -23,6 +23,7 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderDefault: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 37277a4ac00a..17c811b2edcd 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -23,6 +23,7 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderExample: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 2bbc31806fff..f93cecfc5d00 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -30,6 +30,7 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case username @@ -54,7 +55,4 @@ public struct User: Codable, Hashable { try container.encodeIfPresent(phone, forKey: .phone) try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index ccdd14f32608..b8a7361ac05d 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -17,6 +17,7 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" @@ -29,7 +30,4 @@ public struct AdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(mapString, forKey: .mapString) try container.encodeIfPresent(mapMapString, forKey: .mapMapString) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 4efa18dd3164..7acb01512575 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -17,6 +17,7 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -29,7 +30,4 @@ public struct Animal: Codable, Hashable { try container.encode(className, forKey: .className) try container.encodeIfPresent(color, forKey: .color) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 72f8703b0f82..1c9f0e12f41f 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -19,6 +19,7 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -33,7 +34,4 @@ public struct ApiResponse: Codable, Hashable { try container.encodeIfPresent(type, forKey: .type) try container.encodeIfPresent(message, forKey: .message) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 0904c4693323..4c439515c837 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index e91f2a29097a..e882a622576e 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 5262ce6185fa..0e6db13a2921 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -19,6 +19,7 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" @@ -33,7 +34,4 @@ public struct ArrayTest: Codable, Hashable { try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 63f53d282930..5993241ce322 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -26,6 +26,7 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } + public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -46,7 +47,4 @@ public struct Capitalization: Codable, Hashable { try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index a74ed96c8ccb..d1526a8ac3a8 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -19,6 +19,7 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Cat: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index d6ef582ff640..1e2fbc1a2bfe 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -15,6 +15,7 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case declawed } @@ -25,7 +26,4 @@ public struct CatAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 27c46ebc1ce0..73d137b704b3 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -17,6 +17,7 @@ public struct Category: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Category: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encode(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index e5e78f49084d..823b48cad607 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -16,6 +16,7 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case _class } @@ -26,7 +27,4 @@ public struct ClassModel: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 7553011dbf3f..7ff9f1e47f1b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -15,6 +15,7 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { case client } @@ -25,7 +26,4 @@ public struct Client: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(client, forKey: .client) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index c458bc06ab03..423eb7a58ef4 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -19,6 +19,7 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Dog: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 6e165285668b..ad9761aba9af 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -15,6 +15,7 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case breed } @@ -25,7 +26,4 @@ public struct DogAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 4850d7bbe5a0..e413cc97d43f 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -25,6 +25,7 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" @@ -37,7 +38,4 @@ public struct EnumArrays: Codable, Hashable { try container.encodeIfPresent(justSymbol, forKey: .justSymbol) try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index ec8c5ff72bc0..5ea4ff0cf5b8 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -41,6 +41,7 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -59,7 +60,4 @@ public struct EnumTest: Codable, Hashable { try container.encodeIfPresent(enumNumber, forKey: .enumNumber) try container.encodeIfPresent(outerEnum, forKey: .outerEnum) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift index bfe11105fc61..48b1211fe029 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -17,6 +17,7 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { case sourceURI } @@ -27,7 +28,4 @@ public struct File: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(sourceURI, forKey: .sourceURI) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index dd837236657b..ad421491c9b9 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -17,6 +17,7 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { case file case files @@ -29,7 +30,4 @@ public struct FileSchemaTestClass: Codable, Hashable { try container.encodeIfPresent(file, forKey: .file) try container.encodeIfPresent(files, forKey: .files) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 078c2c4a08c5..0e262943f6d2 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -39,6 +39,7 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -73,7 +74,4 @@ public struct FormatTest: Codable, Hashable { try container.encodeIfPresent(uuid, forKey: .uuid) try container.encode(password, forKey: .password) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index cddd61da5f76..f89b0bac8ebb 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -17,6 +17,7 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case foo @@ -29,7 +30,4 @@ public struct HasOnlyReadOnly: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(foo, forKey: .foo) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift index b03a8bd8cfdc..97e9eb6c9a0c 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -15,6 +15,7 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } + public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } @@ -25,7 +26,4 @@ public struct List: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_123list, forKey: ._123list) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index db5928bc97e5..e3b9164f4639 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -25,6 +25,7 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -41,7 +42,4 @@ public struct MapTest: Codable, Hashable { try container.encodeIfPresent(directMap, forKey: .directMap) try container.encodeIfPresent(indirectMap, forKey: .indirectMap) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index cd1c8eb22c05..1156ca42155a 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -19,6 +19,7 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { case uuid case dateTime @@ -33,7 +34,4 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(dateTime, forKey: .dateTime) try container.encodeIfPresent(map, forKey: .map) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 070ed68254b2..511011c84a1d 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -18,6 +18,7 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" @@ -30,7 +31,4 @@ public struct Model200Response: Codable, Hashable { try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index c90f8deb5563..10c59ae2a62b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -22,6 +22,7 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -38,7 +39,4 @@ public struct Name: Codable, Hashable { try container.encodeIfPresent(property, forKey: .property) try container.encodeIfPresent(_123number, forKey: ._123number) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 32a62548302a..767a52c5b444 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -15,6 +15,7 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } @@ -25,7 +26,4 @@ public struct NumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(justNumber, forKey: .justNumber) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index cf5160c930db..359def85db8a 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -31,6 +31,7 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case petId @@ -51,7 +52,4 @@ public struct Order: Codable, Hashable { try container.encodeIfPresent(status, forKey: .status) try container.encodeIfPresent(complete, forKey: .complete) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 72a76adba292..3f36b653aac7 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -19,6 +19,7 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } + public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" @@ -33,7 +34,4 @@ public struct OuterComposite: Codable, Hashable { try container.encodeIfPresent(myString, forKey: .myString) try container.encodeIfPresent(myBoolean, forKey: .myBoolean) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index d47534027595..7fa54eaef817 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -31,6 +31,7 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case category @@ -51,7 +52,4 @@ public struct Pet: Codable, Hashable { try container.encodeIfPresent(tags, forKey: .tags) try container.encodeIfPresent(status, forKey: .status) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 6f285eef8a0e..24c117a48763 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -17,6 +17,7 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case baz @@ -29,7 +30,4 @@ public struct ReadOnlyFirst: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(baz, forKey: .baz) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 2c791780b410..47e57b215c50 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -16,6 +16,7 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } + public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } @@ -26,7 +27,4 @@ public struct Return: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_return, forKey: ._return) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index baf147201756..ab93560e778b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -15,6 +15,7 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } + public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } @@ -25,7 +26,4 @@ public struct SpecialModelName: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 0b671fe0ad3b..3b304716da48 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -10,8 +10,10 @@ import AnyCodable public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { } + public private(set) var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -43,6 +45,4 @@ public struct StringBooleanMap: Codable, Hashable { var nonAdditionalPropertyKeys = Set() additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 76fdd4a783dd..ff5e4bbaf36b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -17,6 +17,7 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Tag: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index d518a528ba70..22e7d001936a 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -23,6 +23,7 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderDefault: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 07ec715e38a0..d03f41b1d95c 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -23,6 +23,7 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderExample: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f9a7b1e36e3e..21532c7023b0 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -30,6 +30,7 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case username @@ -54,7 +55,4 @@ public struct User: Codable, Hashable { try container.encodeIfPresent(phone, forKey: .phone) try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 75ab9bc8d0ad..23c4af6d4ff6 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -17,6 +17,7 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" @@ -29,7 +30,4 @@ public struct AdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(mapString, forKey: .mapString) try container.encodeIfPresent(mapMapString, forKey: .mapMapString) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 0f825cf24d0c..a422ee73b556 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -17,6 +17,7 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -29,7 +30,4 @@ public struct Animal: Codable, Hashable { try container.encode(className, forKey: .className) try container.encodeIfPresent(color, forKey: .color) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 2b66af2dc949..7f7c6a34bdf5 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -19,6 +19,7 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -33,7 +34,4 @@ public struct ApiResponse: Codable, Hashable { try container.encodeIfPresent(type, forKey: .type) try container.encodeIfPresent(message, forKey: .message) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 06f0640475c2..0221229e7dd2 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 8c50c7fa1e44..b5c7ca501e73 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 461ec7cd9acf..9074d9ab4aae 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -19,6 +19,7 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" @@ -33,7 +34,4 @@ public struct ArrayTest: Codable, Hashable { try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index fbe62983d5e9..f0ca1a76f273 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -26,6 +26,7 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } + public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -46,7 +47,4 @@ public struct Capitalization: Codable, Hashable { try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 7f3a86932f1b..89aaea45b910 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -19,6 +19,7 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Cat: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 8df239548324..c80f7549e692 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -15,6 +15,7 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case declawed } @@ -25,7 +26,4 @@ public struct CatAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 4109db4d1ef7..0def88b1fc8c 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -17,6 +17,7 @@ public struct Category: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Category: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encode(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 7269ddbef6fd..90e4986e7f6b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -16,6 +16,7 @@ public struct ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case _class } @@ -26,7 +27,4 @@ public struct ClassModel: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 7d6eff2ffe1f..4e0318069017 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -15,6 +15,7 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { case client } @@ -25,7 +26,4 @@ public struct Client: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(client, forKey: .client) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index b5f2bcea38a3..2387b3e7b2cf 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -19,6 +19,7 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Dog: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 1bfa23d7bc6d..4317578cee4c 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -15,6 +15,7 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case breed } @@ -25,7 +26,4 @@ public struct DogAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 73368c421433..01b8960fe34b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -25,6 +25,7 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" @@ -37,7 +38,4 @@ public struct EnumArrays: Codable, Hashable { try container.encodeIfPresent(justSymbol, forKey: .justSymbol) try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 60a81bcac77b..9c8e2e9ac842 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -41,6 +41,7 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -59,7 +60,4 @@ public struct EnumTest: Codable, Hashable { try container.encodeIfPresent(enumNumber, forKey: .enumNumber) try container.encodeIfPresent(outerEnum, forKey: .outerEnum) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 90283656d1b3..2a9c769ca6ce 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -17,6 +17,7 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { case sourceURI } @@ -27,7 +28,4 @@ public struct File: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(sourceURI, forKey: .sourceURI) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cff92673bbeb..cd8a9a0e9fef 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -17,6 +17,7 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { case file case files @@ -29,7 +30,4 @@ public struct FileSchemaTestClass: Codable, Hashable { try container.encodeIfPresent(file, forKey: .file) try container.encodeIfPresent(files, forKey: .files) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index fc86676eec30..11493f7ce28a 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -39,6 +39,7 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -73,7 +74,4 @@ public struct FormatTest: Codable, Hashable { try container.encodeIfPresent(uuid, forKey: .uuid) try container.encode(password, forKey: .password) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index d7960f5c8008..b7a1449830a4 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -17,6 +17,7 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case foo @@ -29,7 +30,4 @@ public struct HasOnlyReadOnly: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(foo, forKey: .foo) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index c5d4f2cae567..8d484cf0a334 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -15,6 +15,7 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } + public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } @@ -25,7 +26,4 @@ public struct List: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_123list, forKey: ._123list) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index b54bd01e5dc9..4b56880fed68 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -25,6 +25,7 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -41,7 +42,4 @@ public struct MapTest: Codable, Hashable { try container.encodeIfPresent(directMap, forKey: .directMap) try container.encodeIfPresent(indirectMap, forKey: .indirectMap) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index c8f639ef43d0..f07f8132af76 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -19,6 +19,7 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { case uuid case dateTime @@ -33,7 +34,4 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(dateTime, forKey: .dateTime) try container.encodeIfPresent(map, forKey: .map) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 5368032f09b4..dc99e8cb8ddf 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -18,6 +18,7 @@ public struct Model200Response: Codable, Hashable { self.name = name self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" @@ -30,7 +31,4 @@ public struct Model200Response: Codable, Hashable { try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(_class, forKey: ._class) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 84a40e1c1016..d9f893c86ba0 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -22,6 +22,7 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -38,7 +39,4 @@ public struct Name: Codable, Hashable { try container.encodeIfPresent(property, forKey: .property) try container.encodeIfPresent(_123number, forKey: ._123number) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 710f41648f90..8c1ad5ddd4b3 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -15,6 +15,7 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } @@ -25,7 +26,4 @@ public struct NumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(justNumber, forKey: .justNumber) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 15726ab16a47..c474a6e657b3 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -31,6 +31,7 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case petId @@ -51,7 +52,4 @@ public struct Order: Codable, Hashable { try container.encodeIfPresent(status, forKey: .status) try container.encodeIfPresent(complete, forKey: .complete) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 36904afbd508..cdaad279b0f1 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -19,6 +19,7 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } + public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" @@ -33,7 +34,4 @@ public struct OuterComposite: Codable, Hashable { try container.encodeIfPresent(myString, forKey: .myString) try container.encodeIfPresent(myBoolean, forKey: .myBoolean) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 7a1c2826a195..ea9ece39161f 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -31,6 +31,7 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case category @@ -51,7 +52,4 @@ public struct Pet: Codable, Hashable { try container.encodeIfPresent(tags, forKey: .tags) try container.encodeIfPresent(status, forKey: .status) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 38fb57af3287..d08a673dbf4f 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -17,6 +17,7 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case baz @@ -29,7 +30,4 @@ public struct ReadOnlyFirst: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(baz, forKey: .baz) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index ed7e538a06d5..d34dc71ec37e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -16,6 +16,7 @@ public struct Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } + public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } @@ -26,7 +27,4 @@ public struct Return: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_return, forKey: ._return) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 18747e071bc6..e0e0ea6ae297 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -15,6 +15,7 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } + public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } @@ -25,7 +26,4 @@ public struct SpecialModelName: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 0699c25ff7ed..8fb1b40e5eea 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -10,8 +10,10 @@ import AnyCodable public struct StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { } + public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -43,6 +45,4 @@ public struct StringBooleanMap: Codable, Hashable { var nonAdditionalPropertyKeys = Set() additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 11c5f7a750bb..5d90c8a74009 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -17,6 +17,7 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Tag: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 35b1a5833b93..e6e6530dc510 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -23,6 +23,7 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderDefault: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 37277a4ac00a..17c811b2edcd 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -23,6 +23,7 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderExample: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 2bbc31806fff..f93cecfc5d00 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -30,6 +30,7 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case username @@ -54,7 +55,4 @@ public struct User: Codable, Hashable { try container.encodeIfPresent(phone, forKey: .phone) try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 3aef2d1d6c54..7c712846fbd5 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -93,92 +93,6 @@ extension UUID: JSONEncodable { } } -extension String: CodingKey { - - public var stringValue: String { - return self - } - - public init?(stringValue: String) { - self.init(stringLiteral: stringValue) - } - - public var intValue: Int? { - return nil - } - - public init?(intValue: Int) { - return nil - } - -} - -extension KeyedEncodingContainerProtocol { - - public mutating func encodeArray(_ values: [T], forKey key: Self.Key) throws where T: Encodable { - var arrayContainer = nestedUnkeyedContainer(forKey: key) - try arrayContainer.encode(contentsOf: values) - } - - public mutating func encodeArrayIfPresent(_ values: [T]?, forKey key: Self.Key) throws where T: Encodable { - if let values = values { - try encodeArray(values, forKey: key) - } - } - - public mutating func encodeMap(_ pairs: [Self.Key: T]) throws where T: Encodable { - for (key, value) in pairs { - try encode(value, forKey: key) - } - } - - public mutating func encodeMapIfPresent(_ pairs: [Self.Key: T]?) throws where T: Encodable { - if let pairs = pairs { - try encodeMap(pairs) - } - } - -} - -extension KeyedDecodingContainerProtocol { - - public func decodeArray(_ type: T.Type, forKey key: Self.Key) throws -> [T] where T: Decodable { - var tmpArray = [T]() - - var nestedContainer = try nestedUnkeyedContainer(forKey: key) - while !nestedContainer.isAtEnd { - let arrayValue = try nestedContainer.decode(T.self) - tmpArray.append(arrayValue) - } - - return tmpArray - } - - public func decodeArrayIfPresent(_ type: T.Type, forKey key: Self.Key) throws -> [T]? where T: Decodable { - var tmpArray: [T]? - - if contains(key) { - tmpArray = try decodeArray(T.self, forKey: key) - } - - return tmpArray - } - - public func decodeMap(_ type: T.Type, excludedKeys: Set) throws -> [Self.Key: T] where T: Decodable { - var map: [Self.Key: T] = [:] - - for key in allKeys { - if !excludedKeys.contains(key) { - let value = try decode(T.self, forKey: key) - map[key] = value - } - } - - return map - } - -} - extension HTTPURLResponse { var isStatusCodeSuccessful: Bool { return Array(200 ..< 300).contains(statusCode) diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 75ab9bc8d0ad..23c4af6d4ff6 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -17,6 +17,7 @@ public struct AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" @@ -29,7 +30,4 @@ public struct AdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(mapString, forKey: .mapString) try container.encodeIfPresent(mapMapString, forKey: .mapMapString) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 0f825cf24d0c..a422ee73b556 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -17,6 +17,7 @@ public struct Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -29,7 +30,4 @@ public struct Animal: Codable, Hashable { try container.encode(className, forKey: .className) try container.encodeIfPresent(color, forKey: .color) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 2b66af2dc949..7f7c6a34bdf5 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -19,6 +19,7 @@ public struct ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -33,7 +34,4 @@ public struct ApiResponse: Codable, Hashable { try container.encodeIfPresent(type, forKey: .type) try container.encodeIfPresent(message, forKey: .message) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 06f0640475c2..0221229e7dd2 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 8c50c7fa1e44..b5c7ca501e73 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public struct ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } @@ -25,7 +26,4 @@ public struct ArrayOfNumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 461ec7cd9acf..9074d9ab4aae 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -19,6 +19,7 @@ public struct ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" @@ -33,7 +34,4 @@ public struct ArrayTest: Codable, Hashable { try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index fbe62983d5e9..f0ca1a76f273 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -26,6 +26,7 @@ public struct Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } + public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -46,7 +47,4 @@ public struct Capitalization: Codable, Hashable { try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 7f3a86932f1b..89aaea45b910 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -19,6 +19,7 @@ public struct Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Cat: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 8df239548324..c80f7549e692 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -15,6 +15,7 @@ public struct CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case declawed } @@ -25,7 +26,4 @@ public struct CatAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(declawed, forKey: .declawed) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 4109db4d1ef7..0def88b1fc8c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -17,6 +17,7 @@ public struct Category: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Category: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encode(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 44ac733f2c52..b83341aa308c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -16,6 +16,7 @@ public struct ClassModel: Codable, Hashable { public init(`class`: String? = nil) { self.`class` = `class` } + public enum CodingKeys: String, CodingKey, CaseIterable { case `class` = "_class" } @@ -26,7 +27,4 @@ public struct ClassModel: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(`class`, forKey: .`class`) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 7d6eff2ffe1f..4e0318069017 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -15,6 +15,7 @@ public struct Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { case client } @@ -25,7 +26,4 @@ public struct Client: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(client, forKey: .client) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index b5f2bcea38a3..2387b3e7b2cf 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -19,6 +19,7 @@ public struct Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -33,7 +34,4 @@ public struct Dog: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 1bfa23d7bc6d..4317578cee4c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -15,6 +15,7 @@ public struct DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case breed } @@ -25,7 +26,4 @@ public struct DogAllOf: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(breed, forKey: .breed) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 73368c421433..01b8960fe34b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -25,6 +25,7 @@ public struct EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" @@ -37,7 +38,4 @@ public struct EnumArrays: Codable, Hashable { try container.encodeIfPresent(justSymbol, forKey: .justSymbol) try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 60a81bcac77b..9c8e2e9ac842 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -41,6 +41,7 @@ public struct EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -59,7 +60,4 @@ public struct EnumTest: Codable, Hashable { try container.encodeIfPresent(enumNumber, forKey: .enumNumber) try container.encodeIfPresent(outerEnum, forKey: .outerEnum) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 90283656d1b3..2a9c769ca6ce 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -17,6 +17,7 @@ public struct File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { case sourceURI } @@ -27,7 +28,4 @@ public struct File: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(sourceURI, forKey: .sourceURI) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cff92673bbeb..cd8a9a0e9fef 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -17,6 +17,7 @@ public struct FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { case file case files @@ -29,7 +30,4 @@ public struct FileSchemaTestClass: Codable, Hashable { try container.encodeIfPresent(file, forKey: .file) try container.encodeIfPresent(files, forKey: .files) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index fc86676eec30..11493f7ce28a 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -39,6 +39,7 @@ public struct FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -73,7 +74,4 @@ public struct FormatTest: Codable, Hashable { try container.encodeIfPresent(uuid, forKey: .uuid) try container.encode(password, forKey: .password) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index d7960f5c8008..b7a1449830a4 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -17,6 +17,7 @@ public struct HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case foo @@ -29,7 +30,4 @@ public struct HasOnlyReadOnly: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(foo, forKey: .foo) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index c5d4f2cae567..8d484cf0a334 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -15,6 +15,7 @@ public struct List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } + public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } @@ -25,7 +26,4 @@ public struct List: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(_123list, forKey: ._123list) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index b54bd01e5dc9..4b56880fed68 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -25,6 +25,7 @@ public struct MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -41,7 +42,4 @@ public struct MapTest: Codable, Hashable { try container.encodeIfPresent(directMap, forKey: .directMap) try container.encodeIfPresent(indirectMap, forKey: .indirectMap) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index c8f639ef43d0..f07f8132af76 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -19,6 +19,7 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { case uuid case dateTime @@ -33,7 +34,4 @@ public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(dateTime, forKey: .dateTime) try container.encodeIfPresent(map, forKey: .map) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 9b7e3c46d8c0..73afe1ea4584 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -18,6 +18,7 @@ public struct Model200Response: Codable, Hashable { self.name = name self.`class` = `class` } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case `class` = "class" @@ -30,7 +31,4 @@ public struct Model200Response: Codable, Hashable { try container.encodeIfPresent(name, forKey: .name) try container.encodeIfPresent(`class`, forKey: .`class`) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 84a40e1c1016..d9f893c86ba0 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -22,6 +22,7 @@ public struct Name: Codable, Hashable { self.property = property self._123number = _123number } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -38,7 +39,4 @@ public struct Name: Codable, Hashable { try container.encodeIfPresent(property, forKey: .property) try container.encodeIfPresent(_123number, forKey: ._123number) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 710f41648f90..8c1ad5ddd4b3 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -15,6 +15,7 @@ public struct NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } @@ -25,7 +26,4 @@ public struct NumberOnly: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(justNumber, forKey: .justNumber) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 15726ab16a47..c474a6e657b3 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -31,6 +31,7 @@ public struct Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case petId @@ -51,7 +52,4 @@ public struct Order: Codable, Hashable { try container.encodeIfPresent(status, forKey: .status) try container.encodeIfPresent(complete, forKey: .complete) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 36904afbd508..cdaad279b0f1 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -19,6 +19,7 @@ public struct OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } + public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" @@ -33,7 +34,4 @@ public struct OuterComposite: Codable, Hashable { try container.encodeIfPresent(myString, forKey: .myString) try container.encodeIfPresent(myBoolean, forKey: .myBoolean) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 7a1c2826a195..ea9ece39161f 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -31,6 +31,7 @@ public struct Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case category @@ -51,7 +52,4 @@ public struct Pet: Codable, Hashable { try container.encodeIfPresent(tags, forKey: .tags) try container.encodeIfPresent(status, forKey: .status) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 38fb57af3287..d08a673dbf4f 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -17,6 +17,7 @@ public struct ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case baz @@ -29,7 +30,4 @@ public struct ReadOnlyFirst: Codable, Hashable { try container.encodeIfPresent(bar, forKey: .bar) try container.encodeIfPresent(baz, forKey: .baz) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 91d2d536a7b5..99ff0ddad82a 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -16,6 +16,7 @@ public struct Return: Codable, Hashable { public init(`return`: Int? = nil) { self.`return` = `return` } + public enum CodingKeys: String, CodingKey, CaseIterable { case `return` = "return" } @@ -26,7 +27,4 @@ public struct Return: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(`return`, forKey: .`return`) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 18747e071bc6..e0e0ea6ae297 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -15,6 +15,7 @@ public struct SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } + public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } @@ -25,7 +26,4 @@ public struct SpecialModelName: Codable, Hashable { var container = encoder.container(keyedBy: CodingKeys.self) try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 0699c25ff7ed..d6d89678adcd 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -10,39 +10,13 @@ import AnyCodable public struct StringBooleanMap: Codable, Hashable { - public enum CodingKeys: CodingKey, CaseIterable { - } - public var additionalProperties: [String: Bool] = [:] - - public subscript(key: String) -> Bool? { - get { - if let value = additionalProperties[key] { - return value - } - return nil - } - set { - additionalProperties[key] = newValue - } + public enum CodingKeys: CodingKey, CaseIterable { } // Encodable protocol methods public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - var additionalPropertiesContainer = encoder.container(keyedBy: String.self) - try additionalPropertiesContainer.encodeMap(additionalProperties) - } - - // Decodable protocol methods - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) - - var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 11c5f7a750bb..5d90c8a74009 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -17,6 +17,7 @@ public struct Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -29,7 +30,4 @@ public struct Tag: Codable, Hashable { try container.encodeIfPresent(id, forKey: .id) try container.encodeIfPresent(name, forKey: .name) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 35b1a5833b93..e6e6530dc510 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -23,6 +23,7 @@ public struct TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderDefault: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 37277a4ac00a..17c811b2edcd 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -23,6 +23,7 @@ public struct TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -41,7 +42,4 @@ public struct TypeHolderExample: Codable, Hashable { try container.encode(boolItem, forKey: .boolItem) try container.encode(arrayItem, forKey: .arrayItem) } - - - } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 2bbc31806fff..f93cecfc5d00 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -30,6 +30,7 @@ public struct User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case username @@ -54,7 +55,4 @@ public struct User: Codable, Hashable { try container.encodeIfPresent(phone, forKey: .phone) try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift index 5c3e8279143e..2898823a5296 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift @@ -17,6 +17,7 @@ public final class AdditionalPropertiesClass: Codable, Hashable { self.mapString = mapString self.mapMapString = mapMapString } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapString = "map_string" case mapMapString = "map_map_string" @@ -30,8 +31,6 @@ public final class AdditionalPropertiesClass: Codable, Hashable { try container.encodeIfPresent(mapMapString, forKey: .mapMapString) } - - public static func == (lhs: AdditionalPropertiesClass, rhs: AdditionalPropertiesClass) -> Bool { lhs.mapString == rhs.mapString && lhs.mapMapString == rhs.mapMapString @@ -43,5 +42,4 @@ public final class AdditionalPropertiesClass: Codable, Hashable { hasher.combine(mapMapString?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift index 6bae9f2d0ecd..927e6d2865b2 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift @@ -17,6 +17,7 @@ public final class Animal: Codable, Hashable { self.className = className self.color = color } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -30,8 +31,6 @@ public final class Animal: Codable, Hashable { try container.encodeIfPresent(color, forKey: .color) } - - public static func == (lhs: Animal, rhs: Animal) -> Bool { lhs.className == rhs.className && lhs.color == rhs.color @@ -43,5 +42,4 @@ public final class Animal: Codable, Hashable { hasher.combine(color?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift index a0f3a24a8ee9..77172181cc95 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift @@ -19,6 +19,7 @@ public final class ApiResponse: Codable, Hashable { self.type = type self.message = message } + public enum CodingKeys: String, CodingKey, CaseIterable { case code case type @@ -34,8 +35,6 @@ public final class ApiResponse: Codable, Hashable { try container.encodeIfPresent(message, forKey: .message) } - - public static func == (lhs: ApiResponse, rhs: ApiResponse) -> Bool { lhs.code == rhs.code && lhs.type == rhs.type && @@ -49,5 +48,4 @@ public final class ApiResponse: Codable, Hashable { hasher.combine(message?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift index b4b66b37be5e..090ffe3b17dc 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { public init(arrayArrayNumber: [[Double]]? = nil) { self.arrayArrayNumber = arrayArrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayArrayNumber = "ArrayArrayNumber" } @@ -26,8 +27,6 @@ public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) } - - public static func == (lhs: ArrayOfArrayOfNumberOnly, rhs: ArrayOfArrayOfNumberOnly) -> Bool { lhs.arrayArrayNumber == rhs.arrayArrayNumber @@ -37,5 +36,4 @@ public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { hasher.combine(arrayArrayNumber?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift index 1efbc2aa9e4d..aa63577f84b1 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift @@ -15,6 +15,7 @@ public final class ArrayOfNumberOnly: Codable, Hashable { public init(arrayNumber: [Double]? = nil) { self.arrayNumber = arrayNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayNumber = "ArrayNumber" } @@ -26,8 +27,6 @@ public final class ArrayOfNumberOnly: Codable, Hashable { try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) } - - public static func == (lhs: ArrayOfNumberOnly, rhs: ArrayOfNumberOnly) -> Bool { lhs.arrayNumber == rhs.arrayNumber @@ -37,5 +36,4 @@ public final class ArrayOfNumberOnly: Codable, Hashable { hasher.combine(arrayNumber?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift index 6ca479263d3c..a51a38c8afee 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift @@ -19,6 +19,7 @@ public final class ArrayTest: Codable, Hashable { self.arrayArrayOfInteger = arrayArrayOfInteger self.arrayArrayOfModel = arrayArrayOfModel } + public enum CodingKeys: String, CodingKey, CaseIterable { case arrayOfString = "array_of_string" case arrayArrayOfInteger = "array_array_of_integer" @@ -34,8 +35,6 @@ public final class ArrayTest: Codable, Hashable { try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) } - - public static func == (lhs: ArrayTest, rhs: ArrayTest) -> Bool { lhs.arrayOfString == rhs.arrayOfString && lhs.arrayArrayOfInteger == rhs.arrayArrayOfInteger && @@ -49,5 +48,4 @@ public final class ArrayTest: Codable, Hashable { hasher.combine(arrayArrayOfModel?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift index fd148a09d299..e7bad1f3da7d 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift @@ -26,6 +26,7 @@ public final class Capitalization: Codable, Hashable { self.sCAETHFlowPoints = sCAETHFlowPoints self.ATT_NAME = ATT_NAME } + public enum CodingKeys: String, CodingKey, CaseIterable { case smallCamel case capitalCamel = "CapitalCamel" @@ -47,8 +48,6 @@ public final class Capitalization: Codable, Hashable { try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) } - - public static func == (lhs: Capitalization, rhs: Capitalization) -> Bool { lhs.smallCamel == rhs.smallCamel && lhs.capitalCamel == rhs.capitalCamel && @@ -68,5 +67,4 @@ public final class Capitalization: Codable, Hashable { hasher.combine(ATT_NAME?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift index 54b81364f35c..b22d8572b931 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift @@ -19,6 +19,7 @@ public final class Cat: Codable, Hashable { self.color = color self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -34,8 +35,6 @@ public final class Cat: Codable, Hashable { try container.encodeIfPresent(declawed, forKey: .declawed) } - - public static func == (lhs: Cat, rhs: Cat) -> Bool { lhs.className == rhs.className && lhs.color == rhs.color && @@ -49,5 +48,4 @@ public final class Cat: Codable, Hashable { hasher.combine(declawed?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift index 5074d59cb5df..5b374b752ceb 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift @@ -15,6 +15,7 @@ public final class CatAllOf: Codable, Hashable { public init(declawed: Bool? = nil) { self.declawed = declawed } + public enum CodingKeys: String, CodingKey, CaseIterable { case declawed } @@ -26,8 +27,6 @@ public final class CatAllOf: Codable, Hashable { try container.encodeIfPresent(declawed, forKey: .declawed) } - - public static func == (lhs: CatAllOf, rhs: CatAllOf) -> Bool { lhs.declawed == rhs.declawed @@ -37,5 +36,4 @@ public final class CatAllOf: Codable, Hashable { hasher.combine(declawed?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift index 242fc578d458..e5128f8b0964 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift @@ -17,6 +17,7 @@ public final class Category: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -30,8 +31,6 @@ public final class Category: Codable, Hashable { try container.encode(name, forKey: .name) } - - public static func == (lhs: Category, rhs: Category) -> Bool { lhs.id == rhs.id && lhs.name == rhs.name @@ -43,5 +42,4 @@ public final class Category: Codable, Hashable { hasher.combine(name.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift index ba363df9d14d..211f3f1a233a 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift @@ -16,6 +16,7 @@ public final class ClassModel: Codable, Hashable { public init(_class: String? = nil) { self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case _class } @@ -27,8 +28,6 @@ public final class ClassModel: Codable, Hashable { try container.encodeIfPresent(_class, forKey: ._class) } - - public static func == (lhs: ClassModel, rhs: ClassModel) -> Bool { lhs._class == rhs._class @@ -38,5 +37,4 @@ public final class ClassModel: Codable, Hashable { hasher.combine(_class?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift index 323ab20082de..73ac3e225753 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift @@ -15,6 +15,7 @@ public final class Client: Codable, Hashable { public init(client: String? = nil) { self.client = client } + public enum CodingKeys: String, CodingKey, CaseIterable { case client } @@ -26,8 +27,6 @@ public final class Client: Codable, Hashable { try container.encodeIfPresent(client, forKey: .client) } - - public static func == (lhs: Client, rhs: Client) -> Bool { lhs.client == rhs.client @@ -37,5 +36,4 @@ public final class Client: Codable, Hashable { hasher.combine(client?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift index ec8a67480353..cee84354a050 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift @@ -19,6 +19,7 @@ public final class Dog: Codable, Hashable { self.color = color self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case className case color @@ -34,8 +35,6 @@ public final class Dog: Codable, Hashable { try container.encodeIfPresent(breed, forKey: .breed) } - - public static func == (lhs: Dog, rhs: Dog) -> Bool { lhs.className == rhs.className && lhs.color == rhs.color && @@ -49,5 +48,4 @@ public final class Dog: Codable, Hashable { hasher.combine(breed?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift index 82d185f1a42b..a4d610050ff1 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift @@ -15,6 +15,7 @@ public final class DogAllOf: Codable, Hashable { public init(breed: String? = nil) { self.breed = breed } + public enum CodingKeys: String, CodingKey, CaseIterable { case breed } @@ -26,8 +27,6 @@ public final class DogAllOf: Codable, Hashable { try container.encodeIfPresent(breed, forKey: .breed) } - - public static func == (lhs: DogAllOf, rhs: DogAllOf) -> Bool { lhs.breed == rhs.breed @@ -37,5 +36,4 @@ public final class DogAllOf: Codable, Hashable { hasher.combine(breed?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift index 573cb86e1ba7..2348f0f01b1e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift @@ -25,6 +25,7 @@ public final class EnumArrays: Codable, Hashable { self.justSymbol = justSymbol self.arrayEnum = arrayEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case justSymbol = "just_symbol" case arrayEnum = "array_enum" @@ -38,8 +39,6 @@ public final class EnumArrays: Codable, Hashable { try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) } - - public static func == (lhs: EnumArrays, rhs: EnumArrays) -> Bool { lhs.justSymbol == rhs.justSymbol && lhs.arrayEnum == rhs.arrayEnum @@ -51,5 +50,4 @@ public final class EnumArrays: Codable, Hashable { hasher.combine(arrayEnum?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift index ca04771171b9..d7502d65c1cd 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift @@ -41,6 +41,7 @@ public final class EnumTest: Codable, Hashable { self.enumNumber = enumNumber self.outerEnum = outerEnum } + public enum CodingKeys: String, CodingKey, CaseIterable { case enumString = "enum_string" case enumStringRequired = "enum_string_required" @@ -60,8 +61,6 @@ public final class EnumTest: Codable, Hashable { try container.encodeIfPresent(outerEnum, forKey: .outerEnum) } - - public static func == (lhs: EnumTest, rhs: EnumTest) -> Bool { lhs.enumString == rhs.enumString && lhs.enumStringRequired == rhs.enumStringRequired && @@ -79,5 +78,4 @@ public final class EnumTest: Codable, Hashable { hasher.combine(outerEnum?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift index a899d021b870..439997188be3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift @@ -17,6 +17,7 @@ public final class File: Codable, Hashable { public init(sourceURI: String? = nil) { self.sourceURI = sourceURI } + public enum CodingKeys: String, CodingKey, CaseIterable { case sourceURI } @@ -28,8 +29,6 @@ public final class File: Codable, Hashable { try container.encodeIfPresent(sourceURI, forKey: .sourceURI) } - - public static func == (lhs: File, rhs: File) -> Bool { lhs.sourceURI == rhs.sourceURI @@ -39,5 +38,4 @@ public final class File: Codable, Hashable { hasher.combine(sourceURI?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift index 2465bd5103f4..136b2106145c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift @@ -17,6 +17,7 @@ public final class FileSchemaTestClass: Codable, Hashable { self.file = file self.files = files } + public enum CodingKeys: String, CodingKey, CaseIterable { case file case files @@ -30,8 +31,6 @@ public final class FileSchemaTestClass: Codable, Hashable { try container.encodeIfPresent(files, forKey: .files) } - - public static func == (lhs: FileSchemaTestClass, rhs: FileSchemaTestClass) -> Bool { lhs.file == rhs.file && lhs.files == rhs.files @@ -43,5 +42,4 @@ public final class FileSchemaTestClass: Codable, Hashable { hasher.combine(files?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift index 52c9d58241f6..a4e2bf9a8ea4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift @@ -39,6 +39,7 @@ public final class FormatTest: Codable, Hashable { self.uuid = uuid self.password = password } + public enum CodingKeys: String, CodingKey, CaseIterable { case integer case int32 @@ -74,8 +75,6 @@ public final class FormatTest: Codable, Hashable { try container.encode(password, forKey: .password) } - - public static func == (lhs: FormatTest, rhs: FormatTest) -> Bool { lhs.integer == rhs.integer && lhs.int32 == rhs.int32 && @@ -109,5 +108,4 @@ public final class FormatTest: Codable, Hashable { hasher.combine(password.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift index 4044065d4f89..701101b66f73 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift @@ -17,6 +17,7 @@ public final class HasOnlyReadOnly: Codable, Hashable { self.bar = bar self.foo = foo } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case foo @@ -30,8 +31,6 @@ public final class HasOnlyReadOnly: Codable, Hashable { try container.encodeIfPresent(foo, forKey: .foo) } - - public static func == (lhs: HasOnlyReadOnly, rhs: HasOnlyReadOnly) -> Bool { lhs.bar == rhs.bar && lhs.foo == rhs.foo @@ -43,5 +42,4 @@ public final class HasOnlyReadOnly: Codable, Hashable { hasher.combine(foo?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift index c2457325b5bc..08a9b37f367b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift @@ -15,6 +15,7 @@ public final class List: Codable, Hashable { public init(_123list: String? = nil) { self._123list = _123list } + public enum CodingKeys: String, CodingKey, CaseIterable { case _123list = "123-list" } @@ -26,8 +27,6 @@ public final class List: Codable, Hashable { try container.encodeIfPresent(_123list, forKey: ._123list) } - - public static func == (lhs: List, rhs: List) -> Bool { lhs._123list == rhs._123list @@ -37,5 +36,4 @@ public final class List: Codable, Hashable { hasher.combine(_123list?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift index 83a6f77e76ef..f89f3bea22fe 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift @@ -25,6 +25,7 @@ public final class MapTest: Codable, Hashable { self.directMap = directMap self.indirectMap = indirectMap } + public enum CodingKeys: String, CodingKey, CaseIterable { case mapMapOfString = "map_map_of_string" case mapOfEnumString = "map_of_enum_string" @@ -42,8 +43,6 @@ public final class MapTest: Codable, Hashable { try container.encodeIfPresent(indirectMap, forKey: .indirectMap) } - - public static func == (lhs: MapTest, rhs: MapTest) -> Bool { lhs.mapMapOfString == rhs.mapMapOfString && lhs.mapOfEnumString == rhs.mapOfEnumString && @@ -59,5 +58,4 @@ public final class MapTest: Codable, Hashable { hasher.combine(indirectMap?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 08222b23f5cf..b7d4981c4ae1 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -19,6 +19,7 @@ public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashabl self.dateTime = dateTime self.map = map } + public enum CodingKeys: String, CodingKey, CaseIterable { case uuid case dateTime @@ -34,8 +35,6 @@ public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashabl try container.encodeIfPresent(map, forKey: .map) } - - public static func == (lhs: MixedPropertiesAndAdditionalPropertiesClass, rhs: MixedPropertiesAndAdditionalPropertiesClass) -> Bool { lhs.uuid == rhs.uuid && lhs.dateTime == rhs.dateTime && @@ -49,5 +48,4 @@ public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashabl hasher.combine(map?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift index 10290c43c3e1..6231c764daaa 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift @@ -18,6 +18,7 @@ public final class Model200Response: Codable, Hashable { self.name = name self._class = _class } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case _class = "class" @@ -31,8 +32,6 @@ public final class Model200Response: Codable, Hashable { try container.encodeIfPresent(_class, forKey: ._class) } - - public static func == (lhs: Model200Response, rhs: Model200Response) -> Bool { lhs.name == rhs.name && lhs._class == rhs._class @@ -44,5 +43,4 @@ public final class Model200Response: Codable, Hashable { hasher.combine(_class?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift index 533e5f2aea3d..ab883e7ce644 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift @@ -22,6 +22,7 @@ public final class Name: Codable, Hashable { self.property = property self._123number = _123number } + public enum CodingKeys: String, CodingKey, CaseIterable { case name case snakeCase = "snake_case" @@ -39,8 +40,6 @@ public final class Name: Codable, Hashable { try container.encodeIfPresent(_123number, forKey: ._123number) } - - public static func == (lhs: Name, rhs: Name) -> Bool { lhs.name == rhs.name && lhs.snakeCase == rhs.snakeCase && @@ -56,5 +55,4 @@ public final class Name: Codable, Hashable { hasher.combine(_123number?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift index be9925066cec..0abdc58b2b5a 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift @@ -15,6 +15,7 @@ public final class NumberOnly: Codable, Hashable { public init(justNumber: Double? = nil) { self.justNumber = justNumber } + public enum CodingKeys: String, CodingKey, CaseIterable { case justNumber = "JustNumber" } @@ -26,8 +27,6 @@ public final class NumberOnly: Codable, Hashable { try container.encodeIfPresent(justNumber, forKey: .justNumber) } - - public static func == (lhs: NumberOnly, rhs: NumberOnly) -> Bool { lhs.justNumber == rhs.justNumber @@ -37,5 +36,4 @@ public final class NumberOnly: Codable, Hashable { hasher.combine(justNumber?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift index cfce5645a20f..c4c4a3dd9ef4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift @@ -31,6 +31,7 @@ public final class Order: Codable, Hashable { self.status = status self.complete = complete } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case petId @@ -52,8 +53,6 @@ public final class Order: Codable, Hashable { try container.encodeIfPresent(complete, forKey: .complete) } - - public static func == (lhs: Order, rhs: Order) -> Bool { lhs.id == rhs.id && lhs.petId == rhs.petId && @@ -73,5 +72,4 @@ public final class Order: Codable, Hashable { hasher.combine(complete?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift index d238c4c13ddf..d16b840bec6b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift @@ -19,6 +19,7 @@ public final class OuterComposite: Codable, Hashable { self.myString = myString self.myBoolean = myBoolean } + public enum CodingKeys: String, CodingKey, CaseIterable { case myNumber = "my_number" case myString = "my_string" @@ -34,8 +35,6 @@ public final class OuterComposite: Codable, Hashable { try container.encodeIfPresent(myBoolean, forKey: .myBoolean) } - - public static func == (lhs: OuterComposite, rhs: OuterComposite) -> Bool { lhs.myNumber == rhs.myNumber && lhs.myString == rhs.myString && @@ -49,5 +48,4 @@ public final class OuterComposite: Codable, Hashable { hasher.combine(myBoolean?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift index c036d6d0cfbc..15490bba7140 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift @@ -31,6 +31,7 @@ public final class Pet: Codable, Hashable { self.tags = tags self.status = status } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case category @@ -52,8 +53,6 @@ public final class Pet: Codable, Hashable { try container.encodeIfPresent(status, forKey: .status) } - - public static func == (lhs: Pet, rhs: Pet) -> Bool { lhs.id == rhs.id && lhs.category == rhs.category && @@ -73,5 +72,4 @@ public final class Pet: Codable, Hashable { hasher.combine(status?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift index 1e2cdb966f21..8c66afb096a6 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift @@ -17,6 +17,7 @@ public final class ReadOnlyFirst: Codable, Hashable { self.bar = bar self.baz = baz } + public enum CodingKeys: String, CodingKey, CaseIterable { case bar case baz @@ -30,8 +31,6 @@ public final class ReadOnlyFirst: Codable, Hashable { try container.encodeIfPresent(baz, forKey: .baz) } - - public static func == (lhs: ReadOnlyFirst, rhs: ReadOnlyFirst) -> Bool { lhs.bar == rhs.bar && lhs.baz == rhs.baz @@ -43,5 +42,4 @@ public final class ReadOnlyFirst: Codable, Hashable { hasher.combine(baz?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift index c28939bb89d4..273fac1a3e35 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift @@ -16,6 +16,7 @@ public final class Return: Codable, Hashable { public init(_return: Int? = nil) { self._return = _return } + public enum CodingKeys: String, CodingKey, CaseIterable { case _return = "return" } @@ -27,8 +28,6 @@ public final class Return: Codable, Hashable { try container.encodeIfPresent(_return, forKey: ._return) } - - public static func == (lhs: Return, rhs: Return) -> Bool { lhs._return == rhs._return @@ -38,5 +37,4 @@ public final class Return: Codable, Hashable { hasher.combine(_return?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift index 3fd247331743..de2a54506e76 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift @@ -15,6 +15,7 @@ public final class SpecialModelName: Codable, Hashable { public init(specialPropertyName: Int64? = nil) { self.specialPropertyName = specialPropertyName } + public enum CodingKeys: String, CodingKey, CaseIterable { case specialPropertyName = "$special[property.name]" } @@ -26,8 +27,6 @@ public final class SpecialModelName: Codable, Hashable { try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) } - - public static func == (lhs: SpecialModelName, rhs: SpecialModelName) -> Bool { lhs.specialPropertyName == rhs.specialPropertyName @@ -37,5 +36,4 @@ public final class SpecialModelName: Codable, Hashable { hasher.combine(specialPropertyName?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift index 9e90edf7be9c..946c1b11a33c 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift @@ -10,8 +10,10 @@ import AnyCodable public final class StringBooleanMap: Codable, Hashable { + public enum CodingKeys: CodingKey, CaseIterable { } + public var additionalProperties: [String: Bool] = [:] public subscript(key: String) -> Bool? { @@ -44,7 +46,6 @@ public final class StringBooleanMap: Codable, Hashable { additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } - public static func == (lhs: StringBooleanMap, rhs: StringBooleanMap) -> Bool { lhs.additionalProperties == rhs.additionalProperties } @@ -52,5 +53,4 @@ public final class StringBooleanMap: Codable, Hashable { public func hash(into hasher: inout Hasher) { hasher.combine(additionalProperties.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift index b30b0f62acee..edf15aa31968 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift @@ -17,6 +17,7 @@ public final class Tag: Codable, Hashable { self.id = id self.name = name } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case name @@ -30,8 +31,6 @@ public final class Tag: Codable, Hashable { try container.encodeIfPresent(name, forKey: .name) } - - public static func == (lhs: Tag, rhs: Tag) -> Bool { lhs.id == rhs.id && lhs.name == rhs.name @@ -43,5 +42,4 @@ public final class Tag: Codable, Hashable { hasher.combine(name?.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift index f99b86d1d642..7da67c016ebd 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift @@ -23,6 +23,7 @@ public final class TypeHolderDefault: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -42,8 +43,6 @@ public final class TypeHolderDefault: Codable, Hashable { try container.encode(arrayItem, forKey: .arrayItem) } - - public static func == (lhs: TypeHolderDefault, rhs: TypeHolderDefault) -> Bool { lhs.stringItem == rhs.stringItem && lhs.numberItem == rhs.numberItem && @@ -61,5 +60,4 @@ public final class TypeHolderDefault: Codable, Hashable { hasher.combine(arrayItem.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift index d266ad2f0d18..4822336dcccb 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift @@ -23,6 +23,7 @@ public final class TypeHolderExample: Codable, Hashable { self.boolItem = boolItem self.arrayItem = arrayItem } + public enum CodingKeys: String, CodingKey, CaseIterable { case stringItem = "string_item" case numberItem = "number_item" @@ -42,8 +43,6 @@ public final class TypeHolderExample: Codable, Hashable { try container.encode(arrayItem, forKey: .arrayItem) } - - public static func == (lhs: TypeHolderExample, rhs: TypeHolderExample) -> Bool { lhs.stringItem == rhs.stringItem && lhs.numberItem == rhs.numberItem && @@ -61,5 +60,4 @@ public final class TypeHolderExample: Codable, Hashable { hasher.combine(arrayItem.hashValue) } - } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift index dcbecdf498d8..ccb1efefbd37 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift @@ -30,6 +30,7 @@ public final class User: Codable, Hashable { self.phone = phone self.userStatus = userStatus } + public enum CodingKeys: String, CodingKey, CaseIterable { case id case username @@ -55,8 +56,6 @@ public final class User: Codable, Hashable { try container.encodeIfPresent(userStatus, forKey: .userStatus) } - - public static func == (lhs: User, rhs: User) -> Bool { lhs.id == rhs.id && lhs.username == rhs.username && @@ -80,5 +79,4 @@ public final class User: Codable, Hashable { hasher.combine(userStatus?.hashValue) } - } From 5ea31b585c782f337856a1978c0c1c86e450a195 Mon Sep 17 00:00:00 2001 From: Yusuke Hosonuma Date: Sat, 15 May 2021 17:02:06 +0900 Subject: [PATCH 110/186] [crystal] Update crystal version 1.0.0 (from 0.35.1) (#9477) * [crystal] update crystal version 1.0.0 * [crystal] show crystal version on CI * [crystal][client] $ shards update --ignore-crystal-version * [crystal][client] update pom.xml --- .travis.yml | 8 ++++---- samples/client/petstore/crystal/bin/ameba | Bin 7907132 -> 8441256 bytes samples/client/petstore/crystal/pom.xml | 4 ++++ samples/client/petstore/crystal/shard.lock | 12 ++++++------ 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index cc1f953acaa4..7deb298f0fa1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -76,11 +76,11 @@ before_install: - docker run -d -e SWAGGER_HOST=http://petstore.swagger.io -e SWAGGER_BASE_PATH=/v2 -p 80:8080 swaggerapi/petstore - docker ps -a # install crystal - - curl -sSL https://dist.crystal-lang.org/apt/setup.sh | sudo bash - - curl -sL "https://keybase.io/crystal/pgp_keys.asc" | sudo apt-key add - - - echo "deb https://dist.crystal-lang.org/apt crystal main" | sudo tee /etc/apt/sources.list.d/crystal.list - - sudo apt-get update + - echo 'deb http://download.opensuse.org/repositories/devel:/languages:/crystal/xUbuntu_16.04/ /' | sudo tee /etc/apt/sources.list.d/devel:languages:crystal.list + - curl -fsSL https://download.opensuse.org/repositories/devel:languages:crystal/xUbuntu_16.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_languages_crystal.gpg > /dev/null + - sudo apt update - sudo apt install crystal + - crystal --version - curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.22.0 - export PATH="$HOME/.yarn/bin:$PATH" # install rust diff --git a/samples/client/petstore/crystal/bin/ameba b/samples/client/petstore/crystal/bin/ameba index 332b8c750a451f5455b78b2c2e41f80e6e6a8ea3..c88ac4a8d026b5de83d40b977412745b246ff610 100755 GIT binary patch literal 8441256 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℞s0tKPpQ8n}u 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

Ajh%_yC_f#MF9Bo@Y7C zKi)qZ#O}jyVCx;hOEK)2kF^wMNrm&WY`TvEWS#*&7LV~WA-~vhclaH01_;6W67!Wc z;Kag9D#9<-1^874kgBIH`)gW?G0)*Rom;~F7`Hn!k9$U$Ewus( z-NTUGn|a(43#`)vSPYTtWl;g%ijqfJn~l+DEeY#sG3D~{YTH3j~4!QR<{wkoytN#Mxr7ScQE zD6v0g?cUKKf*58u&#t%A_-wiSr-8SLR&Bv!o53TSX4@U}X#X?yHJgiW__kOEh9YwR zxD2481Axbr9jA=lray@6)u8by-~T4}YBWSX&z zt4W@mVt4OtBg6ERUxX*Modlj$d&$I+cNX$;nMs z!=oyLmKXv0M1-kq$CG$KCtU+{W(9OoU_hTiCr-72DDE_e(@-lQwUFn%oMxJvkjLWW zK{xZ!ojM-JC|XkDAvUmadjiaNMi#+dv>9h`uq979M6@=PltWLPEcK$BX?}SoibU_w ziqfp$Gby2{J`1C}S8^^ z5*dY_H%^hxc+XAfo}`sWT`=UV>+)lzR@o$p;4Pu+x$=2`&hD?imn87klGx1;j4xyt8uj?QZ0 z4DZ=|3IhQFi3@d79O65-Ryf_W5A{#SqD`id{(;iDE-IOQ2tVLhVE%?xMc2toe$cAnD;~Hpc>}k)tvVH97ONg@CiA+;T=V82Dnm(+-)6Mh9%KOHW8;LNO|^LxM)!W zZYjXjj?^RE!qY{ZGGcIonq-_t_A3krHPICD-roP6=Rgw4jYJv*$PUdk4>|0^eEBBh+SMVn1r1vZ3 z6*hf=4KuRGjlK+1EGMHi6na&P6@s2ASf`Ss-=iaDL@-64GjG0uM$?!|85zfU9b5F7 zin0DAWES3PJkQTD_j|JJQ!IG5E1>2=KzxQv0A)(|4ca%J?Q^4R3e?Yfc_>e-1Gbga zQ71cA6Nx8XHta|HFq~tIriCVk{zO zOM(2(bwox*LH$`47`B|fSl27Uy*Kg1vcy9YXN?cg+qF(T*6AqVsC5nu{U0mZ*C)4@3}b!|0U~!E0&sYccN0Jy}gvk6MFkN0}kl*PASF- zlkWdUzvpZeAt<-@@2nv02QtW|G7v_d`fT+z-D-8z-B?;ZFlkHlF!Vto;g*#yI@Uh| zG4*LEnXCX#sGfTCbbpe$MS$yqD4i}R&t0N&vfhs`W4%RZ zQ7^!V=Fz3djF~Y5P9jB*vK6XwGnSAq24sMXoBl`e5m-O5D>U($?=|sG)-)j$?PTP@ zDv(dbBqRrmQppV9MUfu*0&RNb7jniGNv$z4HG{qQBMgVIAZqg$WCJfKOGemNWDZ!{ z=29`mn_e68reo};_u_FMsIo-5afb`sv6Id?ONqu1j#7iIrP_-w#dnJ{au!w9GF8xf zs&-pnM%830AG%g>Eye)XS&FHOUZh3}Kbs3w&$@#=e|t;wFhKKQOtE8-JWU08sQDn} zJZ|%dDuk2+x=pQ>r3ET+T|xRfo1Ot$MlaIiav1B?P*4Vly_ONSc^H5^RLqj=+MfKX zex9c)2KVDVLojcaXowS>P6zjzIY}_5)uHB3dmG?#Zbg>TmAlFMD6`BhVjt$#L^ycm z9=}kV(=f?sw&IDz96YKI*{k|5no$am*rQi81m3XY$Jm6`VWHgTzz-t1$W~twc zru7-AALp~4vkSa~6&^$NJ~ZHIm>P?{EFT_DC|(pyuyf6oU2TeiY zINU2W-~6d=Qf`##iwH71V*(Gfb=0x;R z|49F{ruKCqG7boxaN#$-Jr#^%Mok6@lMV?I+{h~N00{s zcY5vB7uaZfg!sm+aXyJSknSn3<0bc z&9%3RP{(3R#(eoHncUsz3(#p*-IsoWiU{&>LLY-9iVY^7fjA7NgzzSaM0T2=B4mTJ zRW47XZ=q6x2sxD2FNiZ3f`e43A=A8Evz#j~2CwTy!1Q7h+a-IY4%yJAE5aQR>2=az z8(&+F*DR+kA1L;#Nbk6FFqLnXv+s;KLHpe40JkV2y$e`2wsFhjF@7fG7ZWrP>B$-O z>@JG*I>73RNUsOSbvrTCpl~68bYs={9Te$pT%*Iz(A^sLi3G=Ce^ek@S;y`TJJ%I~ z^_>6~Lqwz}b$`J$Vze;IxW_%JZUTv%+}Q>{j2!|M`*9||W0BrC0+f|T3L1D#n|~~W zaT7e8-hoK3JgDAEn~MS1i{$I_3;gSHB0VrKB1S^Dj78!cvZDU6$*8}sU^#o)Wk^FB z9TjXn>nU zzzF5?_ zu=3!@I;$}GAs`c(9%sodf7T9X0BvrCyWKGCS#{(oq?2ou!MVhyWdPFJ!3Ns#vygjR z8{|38=3#)qhxuRV{N}?a|0?i5`jgg$0SezJ*GBk_1zgygAWz2TVSvEzfQ=XFU;esD z(h9Ggzvl3JxSrZ~FKI4;PPX7XIlSb#68|;<2CC{L07_v)y zWI8$Xc+3ams7rr^{&V_vf;Pi$f=tN&d{rUbx;vCOqDQ))6Bw9HwYx`yiStsKzr4cA zP?RNfKs9@3b1eQjSBP*gdZ^cQKE@fv(>&o`MUn<46O?$KIU&u}7QKv(n$rMT_7ac> zd`Fg4yOEbkLE!I(yBaS2xGE>+)T%4OtD%3gKOwpXJHNfBDUY` z^}kCsvG!IteX@pLgDP?j&BSB;OvrEE8rlO9r5V41Yv}5VaG$K9y~w{4d z!8P=WKPnv&3a~rJV$%Rr`uqxk1p3dA-5bBD0jwheSPYRhROwF+Wcw;^MXa!4%SeTF3EMH&BXvRRor1O@}iKT zD4#O8hC&FC2I^b1w8Dx&J{#PJm7Sd1dMTh`F=Ug`i!;RMwAd}O2+JhO3d{2D!VP~F z4vHt3%RM7+ICIS^UJ&S8`A@_6KiEY zcLi>oK;9)0*LYOQbf*Mr-26u)KI%GpL30at$2s}?cqq%Q1FzES)~pdpEl5n5Gj<>m zStnaKu=6x7-EZF6gm&gc)UrO*^)&%BWlaEc3y4%4eb$u--xBB5sYq94BHE1@>{cWF zL$B09^_W-cemrQAvqov`%9mv10XuP83(BD$s?KmHHL?*gb2wL)!6Dw>G#V&|q2P)vPfUT7C4RY`w4^fT-~J3S*(S z*t^soJP+t@Wa)Cu5n!+#pCV;ui5U9tv6V@|aahnIZ9U2|a-U4<2rh_Y-uA1>QA?!f^A{|OX z2l)?UY5Xh0CCPamCcs{=+f<7dl+Kqsj95nw$U;{UD!tC@%IoD0)QP}8cA#{*|AZdg z=iV5Jr*NQ;?6s5gGq2Q^SR-B=oVP|q_wf%Bx5B4(a$HP6QsI5Asd_#{@gJ3^MD|}A+Z#vx*?sY&M{L34>=XR2 zZ*V?_di1mC!|W>j09-uwdDa)pJ|r>xOvo=L#!46!6csJj$dsTyLne|+#iYW^E(0{P z_D-nH2kim!lr!TwXzO6JRv=0C6oeO4tu*GbN{jF_B%CVd*=GD~aNZaZJ;VPZbjVd} z#}6f(kK?f;0gJWYte*)9uv+cCXhp{VowV`@n+_w(&xHII>i?9+s8^k()*Hoh`uuk7 zoB7q>1J!4<wkAd6w-X z?a6zP!av$C$GFF1y?-{4C>y~~D2XGEcki&QJI>0XCNfuKfr3JB!Ad>nU4TM&)d&g|`}_Eh4vR#e zX4M53CiW7E=ugNm!3Yvvh6s8Jk?62o#+xJ~{fQWVa~XdbWXwmRmk>DE2^Tcvkmy_f z_jZg#jU&VJEEXM%Vs;ga4q}BBi};y{@pl_6T6z1nBQLV$JS@5wX>y|qEGhvYv+4Ex zcKrlNvL_>a2)67R7VQN97K`@er(zL56EXe{gGHlkI$#k$6Y?965mG{adHZ4*Ec!x0 z^_SkZdswvoulb#DEuicei!Nk20Tvb8ssoGonULRYv8bV-i~|8dv8ZH~ViD&Ck4A|o z)itn%zY6Fyi0J1RWdB1_8w%!ui*>-K+4Y=~G>aF1NS!m$Pn z77Q|1I7-IBfwD_EO9c^CU%s+SxeUnc!FfS}0vcUNNp>$^7-KiOlWpqSfG6pIn1{k7 zT<*FrE{qj66MTNj!QKXc;0M51b@6GImu?k434W-9xuQOdt5cYzv(PW*g8PJlfC53I zFc9-mgQf(nbu_AUf}DUE?Fo!#vk2XTu3SWXF2{kHIDt?dMtheiy)}0 zHJ=o2!Otex%I`P+SF$J)^5npNrj(BIGrvX&K~L^^jG{;5H3qFf<`Lex5M1I%9!OK`E(mD^X$fa`pSac znNRO=^2+4Y`BaCMZu|4;t@%>MF3%@VN)gG2If^rQnE4dE_xC@U{#=7sSEyFLYxHNb z&9y7@WpA5jC+5qyZ{Dr>a>y@sXTGf93L6)`lkGSodz)9H(CBSbt)uuBI2u!%eu@Bi7r0 zl5J#Fl9TTXppLUpXIQ8u0u`0*HGlaI*v3()G00eE*$KFtYM%Zsg2ap&6!q1DS?NN( zP zQL25eD6omtBxU@1nJuG9%JA>W=YP6UN_Rz5Z5rSmTw)i)Y0Tfk)7jLUbeU3lHzXtDgp)p@P8ixYES)vX3jBUs&sh9`_ zt_C>20`EnA5%-DXG4Y-R@3B+`5ypZ$2k1}FLc)an+MNS6M3(x$O-LSmC;cQ=akj#& z`Wef^eQ!CnQ0-s7J=qVj5)+`cGsVf6Wl$bLHhQtR7d?cLLq_hxJDqiifnmQVOWd#l zd%FB&wAY;cTf2XST@4;&pyV+=rk+`TBBS@$XxOC3{rQa8ddDTHmFAn5?@h>!GNerXV1jD8y7uVcqU9N7byIFI@^PLwbcfj;Nr6GPD5>AVPv`2vJN zi@zv}Jc(aAh!AEL79WzM{`0{>KdNQ9T)Y>&jyh9L+IAo>Q>Tb^ygPtb;S({U3+6+} zzhnbyQX0crRg{J77xJYSN8stD87P|Vv=GLdS))cl1i8F)S$KKriLWSUVsgHJzwfeXgZ+5wA|0pfzagW2<{PJhxJhu`$^PjH z5cJr$3G!fQws^qfW!;mWgGRN6CL|8^==4{iw?<@-M^aR%2Pwr=Wh!@%yqp)t(ShXP z^9&N6_O$X3Qy9$iH&1x{klP>H_-3%lM7B!A3%%MyGN8j5f{q5!&*_o$gi4o1mWM{X z#4W6ZSA<)x*;{IMJ5HrJ^n)#*_<(Ks`H0H(A}$25dpTVD`uj@OIOYgPZZ=9pTZ{ei z{v3iCBoq^+E*UchIAHgAAQZ3OuLTh65;4+D=;}E%4zD$y93eD{(%Tol@0$u^E=!`CYO3C8iSh){=-&_ zqppKJLVFuHaljq&0rPAC^vDp!|Fa=q;fJc0nFzcXiP8RO%yFH|{-^u{E&Aj1MX!@# zz#rAK30s5Uen7YO|1|A?I%efk+yBP^3PS*8>#9KQkQ?37*aBqBE@a+Z5{L^hMlz6? zY45U{N`v&|!xQV37$2^PRvQT2U5oCHqr0&&j$(LV{uU=#Fc|`UXLL8`PJ=2$VThWl z+H=(qgK23s`PXwrh{1^zUQy>!u0x97%wHf$Yp>=!>zSuRNySN@OmGa&&eEaf+w zKeuX)gx)xtg|eC7+CY|YBJQKv8xGw53vqeS#xp=^4o`4|(gcgI=nJm*YSx=Z)B%O< z0qHWQPk(()f6?rt{Lc?I>BKOulJofkre3P zVh*vjVP1Q<^cQ;o_rFFyb-@xHhH|!Hr{z;e*j$HeE|Bs8kn|nPr?O9INn?YOwlAOh z;%xHDyDXpDcq><&U6oJWcP$Fb+aIo|4gAB&r|!}+c3GZKA*Ja4@WnYOVcY$odFt+= z?=P2Q=O&~V6~uA|>FQ}hp`dpSm6|+VaB77kA+*BLmO(XeI~#N7{e*{+!g2m3fFsBO zvWACEXBBe{aS`mqsd+|jsfP|d_yclQqz*I3{FOd(#l+*3|?Y)J?+Wlv__vPY> zufSlSmU?61lSgkSxXiJEc!>Vb;=zNj=c6k6qO9C zU?$uygV5RP%jdmw3eh9C(x3|cRkT>P<*z8X0A^5M)YJ^ZGY%`|;;FK==8=0w>WxG3 z_nN2s$vos0!T~@Z4)d6*UElTg54G&D#FqgJa3o(sWRS}an79Mrb8ypHZgm$Zm_qc) zgh(<6jwk7%UO7k#r;=*aYIvTWP;XHGnKms0K0&>-{f9z;h~-!i#Q9|P z(jLI&7G+jkhKj4w&Z(C&qdDwHBs-R?!!bpmuKJ=WS9s$E-Z=b{k+e#qa-2U@k(7F_ z=DDkL@UV3<71!jv>`j0lqOSV%EmCV)2X<1Cln~5!^UIlU{-DjUUDn1Fy)3#=y;S+F z!TT|nLB^khS;6? z=peC!){QZ-kJw3|uS039UGFXbK9fV$`hEP`5j8hJO;^Y*HE9@azWP&w!l9C5WMcpw zTRB$pBcY@kQc>IH=JCsfcbtVxiqxLyK!F21 z&)_~TWd-`@wpbUw2C>cAGo4Ag~;7hQ0ZU>wyt z@9|yOoay^w@oo&cGVf4x4L(t5vuU~7@?|Gda0aDDXVEY~$XVtA@qd$B%lMH`uhD7@ z2wJmou5>BPV{P~S?730w$Oj z^A4!HLuI!2>!lMuL78pwRU`*BXx1;KI2%p5;U@Rfa0C{M2Io1u#rR~=WL z6oNh|$u)>19hi_D5j}}_?AqxyXNu-kH@wWDj}V#jsYFuOK~Pi#&yV`1Jg|+$#-Y{{ zfJ!#(+QP7|-$(2E(2V=ce@b5f>QK!%0c8$=(lk(QjDLm&fOe7OXK&TbKVh2HH%l+2 zaegh>w-n+hw71B=2H01Gsb|+#bK0eXeGJk?Sl@-k&W$TLc5Y;6k+__`gq%GC6Kk=w z%lfMi-D6P~k|1`w?R##zo@Dn!H$ZM&;j|Gq7h`OB(L7nxW;VS?+P#*1#$ya+#Tg407jmUMQ;o?Eq!r$w?;+&_7yy%* z*}bLLpt|@hC!!r7?o`qJ#C+pjWr@UTmdwaaF}*JagBHWLsSVJfVReGPC?k8cf~M&* zo(zltw;(OelMH0UUX`>_bOA$2Sya(dCP7Qpu`Oj0=9DN}DjJL<<$?+nnDw3dS3h(VqhuQvU_16hj>x3Al+gOwgD3LxhEI7@*V8qPczn{jZm3kM}< z3P#l^%r!VG0XDN>VzcC-oFyM)fB5g)#aI?$F2iLGlzWQ*HT#Iiw^<=Ecx}%OjzcoF zfK8z`<$V5KwozupO{`^jTU7o&=29h+0z0LcnbQQ78KkNNp1i;aRGx|;pz<_LJcGVO ziWm!223d?YLafpNu}U0oLh)GvwZM|)3zoyPO zf)sbh;w!p8%ttekK6|-0X0m?jTWRPWrh@G0>MJZ-2BHoUE}5ejEz&v403s#90kOKx zDMDg(;Q3$!I&u!;%!Vs0Qi4?BVFiwZeX^ktBL{0*f+WDmGXJ5Vw#5kXwYL29M9B)Z zWlGfc*_o_ud}MfTP~9R#NOhYZ(CRXPy7{(JZ(Ia?`WC`4`#4o|vvC-FD!2PPw33@e zGlq?Wb`LlPY~QfgOr@1Ou=qC~>383LOI=^3;$uIFK&$M5WVuvoONnMX1I>RuUVwlX z`&Xhvn8_S_0~(aiC3-RDkoz<%@f(CXn{W^C6Sk2VMy zBTFrvweiQ&SEq7AgtHLVsIjg;vF*D4SF|3q;R!ValA{ehs4v-Wx@wgd%3#>ZQj^Sq{jP!11$ox6 zmh*_@bpOkU$~d)ZN+%AyMW4oVeG1*ZLCL(B_Mk~vnPZcj4!&Za`~ypc5Eu8R`I(Sk zbo@j9N;9TOhf!^Sw0YrqgJz~yBeCFZ|3Xc~0N0t9{TtkjpejchrqM`u_-XOiD(D5n zjwhb&XlCBi4zrOsOW2?{Rg8?rlMF1Mg> zG6=PO!_UP3;qHCl>#mBt|MZ_k`I91ltbkGlq%5GVqPCV|3cVVz7po8{N}(>eTOL6x zHd0+9scH1y++OS|fv&b19zpAFkthU%wva+?B31~35Vb(Wswdtm6%hgy_`N?f=X-N+ zo1|&iXCI#*FPi)Pp6@wx{>_;)XJ*cfg>PYOzQ))*`*rWOO2THk@0fAsP$VI3odT+x zyFZJ0l@R5gvDf3yfx10Qaw#>7=byy>sKj4u*0wDup|I5UVH1Vt(ZJ%ZUdqnsIhx39 zMbFV_EzA9(8dGBpJ0&*k62O`IZ*Sua&ZnS3`r{f62Q5l(zRsTj6U4jmC}6z)+quNYMki9>YnH-p7}qg|KEXY_d9JO-Zx(6rthoF)~;an z?eRm*O0lcbuHiEh04|C-quU~Zo>)I zXn@-1XyEYo6hWY$yg4*;r>5}waL#JS(nVx}jw*l7@>ku~6aIxfoHz$5M7013VULQ% zl)%`PEqqg@DAO}vbJ(UIVc}m78k_Ic&%H3SBK-0yafMxBnS)9_I1?WsI3Uc=1f~|% zeHru8-)w&w)WlH((u)VfPrpFZ(htr|KV_FpL*nh%JkXEidv&T>?4D=$D;&@-W1?_& zZ0Je)wl9}VwL{prj5kPNxl;BG%eCnktd6h76{8fpWNK}{H$2f4kv%`5_lcPxhI?V; zw^Q*DPiUIwU6%29$Z>UOAtFTSgI=aemcUecF$|A*tN63l-ZI$T8M9!#;POu#J#rT0IU zQG#xfDF`4gABViC`iE5xUyIE0ZY#TVT64Y~laS~Q>sw9BO>5>r=s8V;2iIhan8iD$ zy9ZuWk+9)IfHqfW(%VNn_xr+TEVVf2E>?R?LSc|DQzdRjuzQfj=>qq$2u`=XAHTpr zBN=eN&rdGkJyFIMC)nmUJFu%fsZX<$*m0RD0|F&YJ1a;?U;?F+O`xRL@Vgx{FW&)L zEwW6OH(cZ)$~A3;_s5dZe?%8g#pxe#zceZoX6qyi!Nq*RI82R5IwD96LTgJT`m<)OoD4C;ikFTi1vLg)c4m$R^J8$;k z^uVBdO2dr0RN<_!t;Lssvf_pb%7s*qHCZ}At+bs9%7~n#8h`|D*#!0Lv=FY3Af_fD zo&rSSM{%f%Q)4a#wN_@!IM6j`eh0;nTxVAXOv|U)Y-Ri^s^2J>LTbp;QCS87xHTLl zjQ8p8e;2KY^h#u`xSq^)TMP$g8w}_7#`-N4_4sQ{N+2T>{x$n%;SE#bk~>wbzZgKbuCQpeZU|Ta~3jNu)-qR`1bU->Fhz z>#A`T&gmIy>#~cy72PIGZS0yFG!~Us{p|n!xQ7X=pMY-z=?Vh8zEA^m_ z3bw-9K*B5-BRG;H3TK2@e#Pfb4Rn!6|4tC3%jlO6sSyi3I#J^WlGbT)7c>-O#nknM z!y4lm=lDxg52|Bef2g|c;4x6E2SLQ(CZ(_SW`)A$LPd16dL#^xJUDY=a}UlB$XfJW z{mZFV?o_vQ**@oIp7|O&d#5dWDYiv*SP%aT{)!%cxc`d)AQhTx;|8`*Q~^eI%13Ru zY#yYvj~_ONo3VC+K{a+b(^N%vv2zdjW3weBmjDY_yQEg5!%47)yn2i_J-HSo6dSke zn4r~Xe6a1ER(113CzKD-^Pedm2%;Tszo($b+w#&~MTxD&_OqS*%zyWZtfWd7VgEOo z#q#~Dar@K~`B9kizib>NN6HH}Q-$#YuO~d2fCuTs;T!z^m4a`MO&QN#F|nWOQ6q=5 zA;9fmdHqFy9ELtw+b>=Az~n5X*(LfHy@uQROSj9Mi7CSUBqlq~o_EVbOyl`KxLck+ zPn0&*`aii_{t1-pe8A@;cw^Ybze8j zA6)GiInrkNNx9`1ao0Hx`VO`wDip*8Ao5aZoGroe%vS_ea)ui3gToi!(He0TBz&X@6KFr(^ zhkI|N9aT*m1@CVDl)_tqm-%>&a>HlU&TpozZ;N>*pZ&0(f~*Z7?Mg`JO7qU)I{tTw z_3!{T;a9?pq))l}o#E4`RVG@O=b*F)77jN<$%}zpIIcPMT&79k>2x)IXIP-T_TFrN zGfm3YY=1>cB_Qh8DL*u>aGd$?3v6Z>Bs!@LV&9Ik^C)Sw?@u{jR<`Guz-Iq<7=7+z z>GMbOkiD|z*34yO04boh9579SeBpg z-A7GQ0|4$5}KBe~f%i+iI;50mGz*G-Q=zj>hn)gf9AgR#yRf(-}swS^fBz~G5_4)Cg)8rdfLoA@(Kg*U&4 z3cF&3V=q#LIuqAM@lU)CXO}!s?MNOrLKDUk%|4HnNxJQa_kc|^2;18`=(ydA?+TDy@tMhiX5^Zyn%+iz{T~ntb5f2_K1)hulDAmjlH*3KWb$Aot;@ZeN*bz?hSEwH;gU}6p^~EpE14N9 zQPNPA99de)0ee%)q`^uaYV@8cX{btWt6{><;-fIuXGLvxL7*4$0y>~9$j&L7G!zHQ_d z-kG9>-z#h30q1L!-1aWp(h1aTQwM)@_Lqh#i81Tek2|a$RkOzyaK3AU>+wYf_XHvU zvnM>o-zA^wUjdyAm0fHL(Is|Q_~QY#GpzLrTlw+e4mk_)K#P<_i(&@xKBH+-RnryP zC06+^p+?v)aVx+YH|THaE}_=3OZ>C7FW02c!z?xL&S*O2o>UEKB@38_1;4z?Ww{a zpI*{Kc9qfhuy?S+hFGDJ_Eh1yRM>xnCfHX&++=*g=dZEJ)n83+kE(cE;e211;nV-c zR%2GcZVNmVt@+z*z;A=L=9&a$7<9nBL6~MtuHOtVUq_ska5h}#H zS5o0Qu|g&7slww+D+C=zU*V>~3LpPB@1c_RRN-xCu=;Og7YgfQsR~BX4;aaQ^f&>X z`!7NYR+N?Mp1d%OPI#k`}sLfi?&A#QmSDq~Vje!?YNISreMjLG}^ z!iN|RDI!pkBtoj1JWkrjRY#2kp$uF7YKLFbo|)RZ}LseZK3VAq|B^O1{^iMaFqRN&g2V=qQb zVv0x!L_T27kHR&up2yyi6gNi{^_wn zN-%b5?YQ&}Nyl_tw_HcXTuR`ONe{=R$mKm8pX7Rasdr8ZSrlp-&^Mn9zRD6N^v16y z07+eA{l@7^|CM}9y1was#jc-#LmFJ;tKS#4lB0C?*1Uf_3#y;CkE6=iZ#_0Q z=`Ui&>kBs&*N5vfdc#%UngBAOOfk8e9J)%eQr{cizzp#rSY3JiSF3UjzBpQovP}pj!p;+n3fR){OCdSq3$ZPo%J(_0f`?10 z)?4!$qXrpbvn3?Jj-rERrk9Y-&)?KApBLJtpPZe^Auh@Q@J04xg#o@)Z_NuD=42Lh zAQQl&KyBh(c{KrD7$Yuq5WnfQr^ZG8YJ5NtFaZO#JFTM=K4%|ZT{wy1i=BVnOgf)L zQihaV|F8sW^_}voH-VWb;8148ofl}FHlqkM(e`AkrV9~M;cANfOYdNjpT9jRqUjD_ z@gn03uPXeMoO4TZt}W)&u{~TmnDaq$zPTjl=ZZNMW;49AJm;j6oaYvE9-y3umFIl1 zq-+0F%qg!mp@0gOuBn}>eOpP+iekPv?=M%*>&kPsmE>Gk%(=gE zUS6K_+LD}~FXlW(InPLP9(`c;oXjfBqci7~fO`wz zRIVm#;l#r@iuZT1cWcV;uqr0bV3)p?q+Dusb|b-@Ebel)Now%Ido1V}0Z?}_?dBFD z_XfLJMLl4q#FO$Kf;LyQ!0#?_m03$KOvY7C{}1Sl2j`w)N`(69i31Ov{9=iq3mv*E zY$s(W+BAFz4T)iL#ur{*_;|SRlcLKM(wAu5{=*9t+1RdN(%7Fv2r?2OZIvkko-|~L zu7Gjr;oG@%iPqyhn$w8-z#jU~IqT`VsrI6pSoA&Qto ztCSeedZuRbyGe2jlAN%(sFG{9GgsCEJy;Q<$KsoG(2;3w!CGPswG9>hkxA~HeaGV< z;+*W$VdpCkhPjo-E9Z9-n=Z3qPP5ES=9h~J_Tpw}d|7M-M0TJ)dSPxGm{sT+5=-6d zm@UgYizS&g4%K$kdq3g(q!`L8kts9e?+$4XPn%*}UTA*bmfUTxW zVogdY*2K*I-D+Bq)b!k9?~@XWHL*AT-D=7tHLZ*_DWOJNyyC8NP)tO%$@7N|~Jfb@N=%MaX7b zsO_DgfL>fN$Cs&AV7jXEU6nL#r@Yxu*5mlbm?upQG&)>ED{?J*98+QgBAIYilUUXM zqxploi>9R{^`AZt)2LTWgN+nVRyff)nrJxVKgn+Fo&4K-jmg4j5Fb$#QHRCZ7S@%3 z!3I?~S4RNzT?eCJ%Y(JwL^1GZgko0?7CSI$bidr&Q4)L@q2#QgO3t8U+ZgYA|4F=r zH+;--TH{rmB&}1Mq{JnGO_G@yCX?hZqnM%7wL*`jt+<4DYsC?<6-p?Mh1U1qtrZK^ir=O+7J4jg#RW+#uDQ&| zLJ7rIXzl;qS}|X(SYWNtV`(eSOmz9K6mjtm!`Jn^gCWk9wz-uun?pngmj6=17H;D!-Vbu;@$>dncS-V!^A2x^Y2~N_ql1e72tINwO5tSRV zClg~OzdL=Gp7@8&VeT-MRH~Ar%PJ8~9I}#%SV_aKmH3Cv;ScX0x+eqhvf+pNSe%o- z;VRi7R+u?Ca@R`y!{+e$VJeXnH`ESRLVW6MOAk%Xp_6WTP!IlU5x2ALJ4tb6NX}Iv zEl*hv_AE-BdWX4 zfl(}QSYVgfK1d}dAo`IGFyH@IZ=F*2X|bEIQx+$S3=+%DWS#qT0}YSCQT~&_Qi@re zSljOn=lG0jk=NuW%vi63ZsNSDkCEg}Kf0&Wsb8C|k+14>sEQUHux#VG{$G4Rl#p%O zBp`WB{|L8r+LE##iDi|LH5U%9Im)#doc3AhQDIYYYFMw(;LE*sk-zE9{;v|Khnx3A;!Lw>@BF2--!CV@5Y0s<@} z*Ci(xE;EP1c313B<}`jWFm{8icx|ksusO1o9y)Rve9b6BM>d^8eMGQ+lLLs1W!25a zkl1GGQq_d_=!$+MlNDk7M|^TraG$VsifRIe!9Xma&aSv8T?|JHSaM}FTTgG<#?uh!qZD< zBB#~V;>a>vM{LRzu_@EUrc^A-6tOA!hv1Z7y%U?#w8wKWpM!MWmC8IYo8XkltvD)j zjX8<%ocb{c)GDnw)z?_BO3dM^s7^9Z%;EHySeh3v4w^aKm(Qlr`x2e9LY*<8#-KUe zVHf*!8xh`@i-TIYHr+q{=Q!O;*|+Hq39PFUSV}SCWNp7U+{T32Z09F@;|HQlCc^CC zca+g7MY^&rTa$_ow~7)+GdGMJol<+Wb+zxqK4?lnDvrFS7@gAK7YUEzt8^BZe^?vK z>D-5O*RI;FRQUOu->Mb8()Jj4ir}}K2XK$DW^?1fF1MSTw7FVKJ`f=)VV_p3=%qnA zz#wUFaZvkkyII?T!RlNXQ9&s*>%Q>lK{jtlP;@h}D|{Cc#ylcf;h(wgtw#`KG_WX0 z>Ixa<@;mLhvvfbB19(Vjv-gBQoe4mXp^`g$d^UXzx1G6OdlYl=@gwDm`$bLTJgp7KUoA zwa0{3+5Bo=>RweiDr~&S(W8w7xeLI65&fSf(g!Q!g05VP%7oVeT)1G@LUVc1oY=Lh zo6oKsY}6`MAj-PXU`^}H<&~7R8~J_>#;x|V?VlBf`8`_uoAn!FcE{3<#Ae#nsWMC7 zrjJufcebHcClyYI%et-;YW1X4+6>iKW4D%&Yi4Stu~^qpzgR4l%rxn(+5W;}-BGwh zELMF(u3aU4Bu27@s_?flQj&Lt z*Tm(QYRy&V=3xboGd2X_!6Jy&cP8;i78W&lQC~Ni{_G%rxO9l_;!$1{-z4du^mE{D zi4WVV@P%02cOyQ*mqcHE25;GR?gmkEH~&^SW7MRFHK8D$uhql)*J1U`GVHsPW%xXb zRQ2RyuKDP9{|g+={N~>y;17##Y~e`s%*3gJ&`7Qr+T~GZ*(O!H;BLFic{2P){OXd9 zFdK^F;*LR2H^#+D*Dx_W`9WW0#>UY?E()MdDECZtuWWyve7j*l&QvJL{dPHckv1Qz zVqG1^E4yy`*KW$z?&R_qUrc?X>y7AcafT?Q!5dWSLAh8@^)%M^?rt+Twos`tLIs2m zG%ghMR4qS3X2{3!2gZAj4lYT@;n7Yc+Dg=JAIrels-F~lrUYH4mX^dMeKXG*Pe_L7 zRAmrIw|qU;-w-MY?upBdQ4lV_fNGWf*ZDq-lU3Qia9R?j7^DvyB$}s`eIr)lat+pD z2Fn<0r8#4L08in>{ft_%Eu-^)ahj0N{kQYGmPG!UK?v9^=1eHrOD;L)(ug@*fhu^$4k&I?Nch2Y0_J>{bk8)ENrxW zYGtl&d3f6y+KQLYOy6KmIaU#3W)!o`5E#>Io^=Mdr`yl-8Q(6#xi2%`M?ssVj~gTg zTq*lDuh^k#rCwA5o3GOkG7}z`mJ3)^4`=V z$Sqrv8o&1e9|t8w1Dtfj2pdy(QgCT3s04Q^R2qrdBS%2Wth&LCX%*_mPD(Ib_LHn% z`t_y``sH?~1r!YQKAZ0#YXM%;?NGgF;qJu#YNF9=cr&9B=12>>3N1X~XvHx1mHZ@e zr@K-E!s@P6pMJQ&9_+VhVWpCxwNlKhor|5`=SE{;)e2=C+K(TwmI4t+_J$v9}Iq?0B=Xg*@V z`W#p&%Q2uFuOX;uSNPPqjymJjJ%fj}?2ik-3k%{0<;C+~x!;L*72Xw2jTuxO8Q5>e zrPn7`P*14_@qLHKTuNYUY$)E(?DWf>oMLd$;lVcU;GD^BWxQIvMUo2ccZ3c^ePT3j ziCR(-w_Lku8;B}I$zFMA_PmKT+4ojv_ha4+g_dm+niW}(L3^PhzaSI`@3aumN*Y?{ zH)sKKP_RT7wX#t4Ej)JBE7*?xyGiTV*MjHPVy7t@H_Q_>LwH(O!|Filk)7jIfoSFU1>quBt$g;3yR%K}X>Hxb z92T)>02prj#Jbf3E2Y{qSt5P9zgk8|q^jKL(8HKadpf-R8S#@w#G*1WpJ;m9sG@L? z&Qz)lEIXnwi}_JJtIwh8+hkMzLG6z;CtzszDH@_#GI%2=(;)~#Sb zR)*uwi+tNrRGnTiqkH!-W~UcwqoHQBK~Ze0poL?WDLZQN<~^yQa7K(a1=Z>E7THbI zh5|9JsV%)yj#a)+1gEPQA&HsT3iasQB3t3w!Ui44OZuzk$~Ph$qZO}*Jc#{+HIrYV z)C!z_EqM)h$x8_9P&#pkWuuNVo+?XnC_1x~SP8 zFRJ6Ct=2{JoEj)WymGpG&{>~m-7=jKGZ`ABy8GYB2harfAl?QzP%yZ*4d&2$hi4EQ zt*%t7elZ~9b8GQ)oW(eQ6%2c}U8+F{zvyG8Tn#^D zo~O5F!*B@yN|s~>!jECD?GP>oh?{zJ>Km^q`wnjhPk?Fy*hCswXGzedZeZb?Dve1l zPS0!C;XsZ}q&1r3{-RAgt2rovN)qN{%amx2yMvL`sObU@erT2)I=IoS&6?Gp+y2c= zZQIox_rZi-Yu79@$89??#YZ<*J(Q2ebagS3Vb0l(BT99iLBm{bjyn}^ym+q=r`Ym# z7{2JYsVj70s8!aBm#G(+<1Pf6tjq?@aUUDX9JhCHn-dRh_;^d&8>9p~47ZIV$XN{9 zBf@LB@-dff5jyv@jZ2Zsd#K&da{X(}r37Zd2K1X_5_8-$<5!IqcYCehyPD&^^$o?Y ze--EExw_RFh5J}hW&J+r_@X)PYVWtKZ$&fcw;p#j$4&g%v$IL$UcVz0@OI#Lsh}M@ zAU$;l*5oJL^j+}8{6AZ!ceN+#jym`6S<@mx| zAYp7r1d^GqC+xa8v7a!=o20kaoltmV)Spl|{p-TZL<&>CZchCgBG_5zrku|0xGxER zdymbY;tFjiIDk)E%Kf4I(!Qx57D?v8Fa>*itND(iJfxcTc1KSU#7nIpcX#N-?}{DP z74)W?nyRH6V#nOY?exI@I?gC&`mT=R>##E1NkEwA32s1hfq9h1O{T(cIhaD_w#XXE zNWXf>hS-Q1WW$_qKjxe?lYcKSIISlp;fnxrkELIPoLEEUp;n|N)E=vn>A?6JS=$!L z6|uC60o^R)`WMCm#$6!nD{bk2i*0ha1?rOzS}sG|Wmws9ulb7ZTR$dzOg)1m%V&1? zK`Wmq+_!!v`Z!BMKZsDu2d#cVy{G9iYm2j?27u1KqVQUr`Chc-{K5kHtF#~(;X*=K zWSi!w=%ItD^A{(nIs3*SX-F|6zT==VMDBcv&E&yBk|0VgA7YH~m_p^#{KfkA*uuku z0QUpnAdpWRkQXZoRk#<6$>9aN%G}E+XSl6jc}{U-NG7jS@U+nR#8@S`zkWQj+%*F|QKH zD{{&bM1H2n&N8o#wioJPGb@&{ZP3baa2Yzj*~Fxtm&Yb^9{a8kHJ4znWD77m?GeNnw1ZiNBF?x#AD(cV1`dQFry8| zSs5^`dw?mmxkWFocyd>JI#7kz8aQ{-`+ZUE-Hvp^$8&0yZJz{5qr#~InQeDOi(-Ws zi6eR`ldvs1pD-h7Lsy;2;ssALl2*8^)GBZiysTXdPVN9F@leYC#XXjUl|3R;XWT{OK}o~NHARfsKjj$d7(+(C9fA*v-LR~PF%Qr2GLA9I$XXDV>9L~>GmHGt zH)9#+hm=v++(wzkyQ+#3gh8)npN#n{88JzO)0{k(BcpT23psPV5bhmsSh+}}>YEPe zvDDw}NAC8~IN5%ipb+~1*Ju_>&hs|i7g#wzz}p@P?s%Hx&NM9n17`RrEEMj%!+{9} zeakUma~+scT`~?ZPxD|e+g?@#R*Hy!f-umsY6CW%zXt472d30!Gh6V$5G9D%QUq7m z7J9`BL{Fn!?G>UPCPZDfNm%%yGJ%8eQ}+C`YiFM;Jk6j`9xbF(cwUQmHGG8n7LuIaP4c9|P7S21U| z3LuEEa`_&6i!fVy?XBG_YVWhR4PLuN=|PSWo20dfI76UmrzQqTgV)z0vN1Pjji4>U zrkdOuwTvbSf9Dd5&RaIg-YmS>+}w?7%iP>e-UyF(lFJ8cghiHPJ*pzc*=ulPBfpVN z?FI}L7VEN`bqN8hXP((l(076Nt?+jUEH7U*2O2t>sa+D0`Cf2gUMAD3)Itmxh-wTb*{{ zSNqH_s=Z>r?)zCPpyE{&oX=yiV!f1ATr_EGiRI0r&ALu`1|_PG1hA~)O-YL{hy|5U zY%wEhRJvGk&8`)9CgqQc<&{t@&#c&zE0)(vD{J`rr2N)*ddHPeEYHlE3!!59>ARNi zNXoB{<&{t@4|c>Gx4U)x)}-LYv7i!)1-mIYg}RCr>!qyWZAtlKVtFML%lA-za0O=9M9v#iAr%57N3iU>3Cgb4z-+UoG1Y>Y+ZKZ%@vL#JmE zcC$COQh_*!{#WVOZ5*0blErA?HI~;>bL~onpn94W3||>zM9)D+zdsvR8OZy>wGJ{v zv8>&vFp#nzV0kFj-9rJ=)2v{qE(K}aN~j-OT8r?ThOhKm=yQgraDrF1)GAxdU#o11 zSEf`v_VSm?Jk8372N0G(OuYTZx`c^kl?kV*tf5%hQdPG8a2u>e0EErruT>^<04;oe zkaF;s$~?`=hkq%pEM7Xhh*TVsselYGl+_|^r;D&;eT(ZZl1}rS{Fj zz_5=r&}b{0tV_rr9Rb{|+YrO30?TFqMYvq}O8i&EwiKYSWjLX^&-;;AJ2+vX@(5 zMr5`o`I};XC3yZ`^5bq!b*w6@qcNz7}+6I^%`-zH!=zZ9aG{PLqBERS{E@@Xd;Sf! zw?Xz(EX@jr2X-2=J3Pr)ofN=e{_>RuPsr|e1qSa}ho@9Otpd-}tYBy?g;&=a?tY;Z zK3jFPs?&k0jS&e~cr}x(nu+|iYIH0BC6(H2{*ZEZyWCmN4wXBitfH0SgI-Y_w6)4| z-HX({Y?Ic*u147Lyv{mfso3byGA;FZV9&OzQ#teIXa)$$*@%;Qi|12Z5{~RrU)8V5 z)^UEab3bpKj#7N&u$1PoRNI;y-m`UfR*GkLGOToVQ z4u{y<@R6r&#SSg6g0*gwpd@R-JrSoaw)$M~hXo27jHO_zfJ&d&x*nDu8*lB7uGDt1 zz9ci7wb&$Y=do|xXTws#+q+sS-0}r#%~+HolGnLB<(dtj7ak>mBNt`-298EhRZ=f(HlBo0UfdrRn6Hk z-65ht>m)X{xL=i*kqfU0RrUa0z|3myz zswezaq$!CMRTD$h-tpvEISU$FI1Zs?Vjj3;$m$7}JHF69*o0gDq9$a;%{2X9Z&#OPzSJ_GY?<}Ba0R=6rb*F43myW@V4hAkw(r}gQh3J3s%!6>o#~m~ z(1%rX>M>mvJiKsBvlWW5A|7SnR}@xZ;y9z~S}ag>{En6wdTh3YSk2~UYgjD#h`e{a zj=}B!C;lYSajTmCNU?tXfxosU9X+1seEU*zX=V3TW2E6mK&-JHPgWhA3Qtx|)SrW+ zY(gd$cCsKnCM5@r9_8;=e*PRR8f8ngLn)o%l+}hwM-+~r29fv@Ycsd5!@XZ@Rt8HG z8qlT*t@~i%gGu^grTd*>a}UrJ?mYxGvKbB|OhNt18y24HGOtj}LiZ%~gbg5U;R(PPm@Obt*%YMg+%;gVH z=1*8YZ});zlY#`}@=^Hub#Xl%lK?u&0ewt>&K97V4(PbTaY>e!dzMR;M{@82@Kv`e7w^+eR zuZi<=yv;zDSzkZGxx}m|nS?c1Qv5VLFW3wfcb#Ya=^vGSh zSV>cpE>83=Dv2((#V!u;8z;7cFR_bCjhX18^77WnPro|v1Uc^4D=7j`wX!->|E1>C zm+&|S7qAlkqqmvMT8cRU!<8xWTg|mQGPMP`t;Q}`A&XK{pRxUD#T#rdz?RoIDEO;% zpIy#M_mxWhYL{E?3uEr(;+4|dv*}H_G?$ES&DGx;?)tr&BqLA$$)H(Ar^XG|cURq3 zR|xm-AOm`EaePn-r+N?5#l`e4e3IKCRNe~08lSM54z)Hb+y%2D8L{$*llu+E+OVm> zLt;u=vS-Ed>9p~wZ^-1YqFAQobNsE&wAb^4RhS&{VHJkW)pKLG>eQTmzPa`}q8w$? ze{Ieyk8NmAHs@8$p8vvFHXAH^eIi%))Evy8cJL?l7apGEUfo}LexfG(hwOe`@2;c< zb+#eo{zcQ6>b7$CTi3)rbvLJbnrrXR)cz(Tg@3B|>C|tuijUeQdS6Xmqi92<72c;y zqC|JJgc1_oNp+l%E$|~)_VT&_ZQts<<^42W&TuuVsgpkYUkpv=g_ z8c-sTVFBxU0RqzneaOd9B&1O!q%dyWq|rxW+RbYR**Edrks3EoXQ|DzpWck&)8LK! z8(!}`p9}amvAB9zZJ2-Pv8{Beo8I4sW^pW|{hVm=oUgL!bu9Q2W2vHWe@@Kn!hHb+ ztEF(zV`~}w9>5v=iLs0lfKNt=1yDNZv0Uj;ywtSyb>0uV)TB0T%39Fzoc;Ak2RV!I z5T-pYbaF{#B9M%?M3U{<5HX1ftA!SY{#{|)b0SA07=k1wAnwM(wPfMyZCdp)#%#I` zcpWy+_l0X5-c)9m_#pfhB}g2fDK%$CNhlF?G604OhSLV&aXB~K{JT={t$_DULh`${ z%Kt{MWwO;WDXHZsgXoH8yF*1So@V7k?{7=NvbHv~##TQ{d@x2~qQR?7;2q%bl-g{O zpgkgklW7$VUvP*u?cA>B)D~_O>R)!BhvzJRybR_Kmn<7{(na_#{B(=!GB~j~9i!HI| zpSD^?zc4#h%Z+`dV6|l8N(}$y@P=Q4&9?U3n$VYwiiUF>qAi&}sL{kvVFm2EWQ@N- zUM?Zhixsz%qau4x)tsIg_bY0u&a?8@g|vGBY~R6sduIQY?BfG4g*(F490@Y1Lg7^% zDhLP1)_o0|CE;}rT)gl)9_-?@KXENGqb-UjU!9pfu)=W8Wl%&^%0^Z(9lIjHFxF6Rz{ADyUB26-iFAL zwZq5sxP`wSR#E?c>St6W}*==KtN3VPD5?XtV*R zPUS0qRCMTNhmVLx|94J?pEzuIG%89QB0h;6f=`)j-Ey`PPOsc5!&crEVCcVwQGeCB z`s)gL9JhF{Se6;P_P0Y-w}k!@v|wj|8OrvObJu4~vBu(y#p^O#Kz#mTl5l6xn=@ zkMr|WVL9NF#29gY*5M>;22C*QmAr6EN8CDlk>^PGd1Wl}^QLsR^RtSGpU-VD9)Gyg zGl%EVot<~#%ClSWum z*h?N><-@y$wa&DQhwnf+RL;ZqS}i*E_9*|`y_Vs5_+~p*Cr4~a69pkW_Fxe(H*&)~ zucyXP%g-PSgzn2W33r_n|39?eCmcM=^}cnY&%FphB7`kj@3Zcwy`x+2W6?zIdA+X} zQpELM{Tq93P1bw0#%qZ6UemaJVsZirU;F66uEIPNFgrMf4Ezv(rxoForyWvJI50^I z%V!><>$4M!gdHPJxs-0T=-KuMsGZrP;O7wT&Eu~L_x5DZ`QaX0P5>m*G?@7BlA#Q1&v}m5 zA>y=G_MFe(C#Y`E`K6!pTyBRK*O%5q2kW5?>=XWmuGF>zh;|1O1`{&Su#W6KVZ*z% z25P&pfzc9?bq_LW8Skb#@e1HFh#mL_>>D%dcMwfE3&h&RyawKtntZ<;2c{->n@@3+ z9YF29L-mAPC%X?1>fhnmEUP5yPq)n+Q}+gIR<33$lg;A53`h!0jPFjig~ftl$rYe5 zIJ&F+;W!G;xF?&wVaWl7SCO{X0oLRvT(}qwI~u0KK^@%fKmc+B9%qgzypc?tac5Q8 z=gr~m*bYzw1F<>e{_T(omTP{(=}Fn2cW?#4%bIV6Gm{UuTayi_eVCVgXzh@SZ}7u; z$%ilQ;;p9WFJPkjUS^N;k8yu`!7Iwv9}@fF?@v#QdE>fcDt9n_og?0#e&OW~->nNr zT;CH}2}Tos63ZyTD9KQ!w#VM10gX&$$y(mc)YcixuJGH(ZA~w-^(IPSYx)u%Fo962 zyDveM?rDC1I=@9Y>-VRx|Fu8U@lNJaEM>|4=|+b?dYYl~;p7M(nBafW4Df9ZY;TBz z7{c)APt`=fKYhi$JP&z)8s(RG`oHJ-=CDee=RKcqw(sW%F$}+xMkL3AZe;lYl@Ua!|T8aQ9CcL`Jfr`GF7#*cEnp6VHglSiyU zX+6sI`p=JyX1yMT_o-yPw%Yk^aJ{zv#70Q8t9T5E{P92PdVOK+=-2E0G4I~2*EO-s z-mKS4W0?`x>!!Ojv3s$oKMK z>qEb?#_sic{hWdG_4-O->i^VwZLb*RdR^fehg+|I>eRHRT1TKM?XifIl9h%&s_g9Wew8L+EMn{tEI$!0Q^w+G-?D!=HlZ%Oda;t5{bCLNJMK!E(QKTJu~gPB;~A@Y;Y&LumbEip zHnmM0t=~!L!OcW2y$uQN;GuOcEwfTnVksq9scj0JkiJF^RqB_A?49b{?ru{|jJ%4* z@J}8kH&jzzlG+-CR~$FRuQ+F7tm$R?8a)QLi(i2?^)xFOp4@1i1XwLsExW_x5*4{w z9koxVK=`=OHSuQUa+5N7!avx3zn&L-Hl}JIbgAw1Cr3pjMbb6X7vf)xnbvIX#eKg@E!xP`>~tYRLL^1Q zOYZx<_zQzSJdqsczTdZmvR1?TaD?GiWV8M5>G9eO%H<4+6s{bf)UoKL4^-4!IP%Ds z-1pr?WG+f60!ngRDkBEBS$-I}*u%E-U_`t&9I2g<{T};;IL#NYy@`5g;u%&aUL1J(XP4+4L*}MeSYZ6#Wp;`BZnQPG)%5jzpM8p0M z2qmF+M)M>NEl%n^(|(S0H988gU>h@1ZS|Kz&al!{dBVw^VComn{B-1Q4337)8H z%l=|lr>A3hFYGx2}o5I%%sWtgo%Rh*p{l~Tn=eR%a02F>_O0#r zhQB=?u`EB~(Yd;1Qy#zyo6{{L`_``%z?ShzMYUE@&K<7f7d)5TUb3Bof-G-$*~(#t0KOtYW#NOkK%Owq=E0a+VfS z=pLE>u?2Y$RjzOdnliW}Mf@=F$M)!bq424iyxV)`+AZT}zQa)E%x_RGzm}r8mUaBa zJ8_%+nCE^hm}Lit%VU}95g1|-U7{rm`I+OAa1^?>$j$9q45{pr>;41K0C5d^W-7?P z=vG$09F^zmLzu<=A1;*X0$1vJY`LD_-M=X2=<+Z6Jl=k&x_CLyUbvj6U-y5T%WFi4 z8>a=C+QOR5)#LWMI}FUKWblY|!xW?#e0c;TZceJLvA(TLgdN4yufeX`MBKPnXC*7zFrHp>OKW0v(Yn9%~_hH+?&B7Ylms#u{WQy+HuhG2w z0odX))g50ri%y2?>ETera3-zlCo~IHFX8Vj2xvpq>W#B_zN+dQ&=v8}O-tw@epg>! zI4(?j%4vs^1Q56N>C$l>U`Gc7m-1PAxdpF^OF4s*yuK5I%-uV@^#pyktM@qBt9^V>ym>7X3a9YFM=s`m>B-bd_5g z-kjT}{O@ROjy61ig~t$#XGuwg}Hq?txa0E`Zikly)fY{mQeI3-xbdLoK}&0 z7tFSpiL^y=7&4Yaw$yE?2O}A7@W!GN&U<(QUts3PC!2qemN#zDU#+o){1Wu;d>^*( z4hGEq77gEvhuZ0Mpj^&k5)QNEE)ZZXxoP3X9ljcr6oGrhtLPA^bcj9;aF(B%Wy`Om zwOW399j3zhgB6|7U`y*(y)_&q0ik4M^+|gu*LA}9zT`@g95gK89?^nMqJ`n5DTz^o(q@ z)9j}=Ar)Ck<;Hc@{MmDZw_Gj*#vcIk? z@zIb`>M4a8VaJ~wu5IHgjB5$*tLM^s%#5qSo31hFc@fpRLkq7Ccf=9`K}!l-!n&B^ zbXN_as|who$A+?dNezM`=bB4n86^OPj7VSn2A7K2Q(4K+CM8dcC6!Kc$+TW;c5P zadU;|uonsTmw{cViZHpg8LsaX9Z9Ny718tyA&6&Gd1X!MC z1;aEdD8eH~2EI28-hJWi4zJhX^(62fba+b5wJQ~Po@NEZZ@yas&n6X+^Hhjq>9$Qa z3f;W=9b9W7iE5%!n`7kbPM&=fR5Yw`pc9#cF!_5_z#UbHgj^Mxqr%9)_p!m(WCyZ- zdn{`X>A;35n!#uznfLXNn?%97;jY8j;TG$=BOuoUG0xz6VEsy*o)dB^y?Rb2y%WFa z1BfvZZq)@GtbpsiFeZ_~sL9v$cmR_y=Rv`9q7r?#&NJX1oxq6$JpUpR=QNuK7Qk-- zJZn%ARiX;Y(kWf!qUDjWjV7`9>pN*uH%;0C9THBbGH0EX$__>xnmrhCh@HlIow&Xz zC%4IYr`5*m?`L1z(r=_?&-&-fJmYZk@t=K1^O$OdAhq&K|IK`+Q)9q0;~%MbSNQT> z!l*sj*UnuBz^H#-C~;wl{<%lEHH3V;)PM8OhV+cbw&*JtqFPNyP*tsOUt)fTGJ|}wOqqr&YBs$Y*=nD`KA2in)Kof6{|$wsawP;XJv>{#WP1& zYZ-y7>}`X9GEbuRAiQeg=$g@6b6(9KHC8yf zHadc%Yrf&=y2f(0Yoze(S#3EtXtd^H<73}$^p4&*Rd3CC%}1=|B>R4ohH6gsrYTl7 z?<1C<%o{!Juv*L|c&%b?mzUcP1-d%ZxRyxx_(!Npo#?dm8|rR`-y4L{s;)-X|*#;!T9 z@yz7qS(=(U`4MX+c-*ezC)={tUfNsr(zHr15O%Any_>h_)f{08fO6)>oGK>qLW?Hz zLrqioscvr9pmOVDC#9%sK%hWreyB3=!zsYhHuUPHsfWLC#7aWAs2A@w>Jwh5q=6re z89zYRV1WwiJ^0}bU87dd$+fSwZ`L8IT&&hJf%fgjPW?3Bq!AF}`nPW02-w6+&f3A3 z`ToV*cCLNt^D;I5CHPylzo}mY6|sB+_B@^E<|g$%gKPgLy=s?0iA7_qlnk}3i0jr2 zuI`IBsXC19$Y-tKj`y6*<*VmpKe9?g!$+X3gsUX}6<%_)YnEyQ@#t_Y3vDNiyM)q= z`$B#gaIvqbXN0 z0I&Q|PMTiI_{6CRh{GcYB{+!aGR>U_q54+1E}!)fgjr6 z$4|Ds*IrtB^kUqJM^!-`3A=vRY)P^6Cnc5t$K&39B_!?F%~*?JSZsVJu*w=gB`JS? zEU$#vc>LwE`NzGVW)t%w-9xh(7PjE!a`3w5|yx<;5(lf@mw{K`4mi6Pke)u2#9vo6GnhZ`r*F5`O{N9erb+y@)*ZzIty3!3mH7*7PqXr&^_#`k z&1r7eJbN@(hO&(pnz~kL`Bv2l9n_1R8f&t@&5k34*5>RPmEk`*jMK;Isti*6Jk9yT zjU+AGBwl7$AKzvALu^0Hg+_fQYZytz`qUDZUt#xhzNx=X)hO1>egtr-vIX2zYR z8(5pGahicr-d6c1A9D^7S2sIz>7Chhz(63>--1RlWdYF8C=L`gih4q$IIxRGG3B?p zj*qY!_DK=96l}95^*yR4Nis^xzG+GpC$O$bU@65Eao=ANRU}an_xT?PCrTA@y1t=% z!0z9IqvA!%lB->rJBv|_shhD9?~;EQzwNOyclP+~y-ciVarnA_;4Ek|i||?lP@l=2 zCjj%wB9rTk=b|RlAcWpKUVLeG#xA$xtnCRTq^B3&XCcbrw{bW=yVBdYmNw2XOq^>B~< zeteqtlibAI;_*W$0MkP%02Me}3cXuSL!o!jMi8BWyv=KoLNAy?@3hz?6nc7Ww!bu~ zOrclN9Tj?EFBN)I)tM$yu|b7i<5useQuhf>MLi8oXBZ^VR4Mz0rXs-x>rcOqD6bS# z=vmwE4aW*cq&Ch^IB?p&DD)-@pm{H`ik4eNxuye@yeEa8HU%qnb}XfYT@-o-f6od% zqi50oG4T~yU>-VgduiyzV3qymS2jbbU=+!$8oqH?b>^Y!hTo6j7V`7#@^x=0ObwrI zkl(hhaJ?gytPm_zV(5`K7rPT>9+Ov_t7L*OKJOYg(Ch9(&rs*@#_iQIje^+rAl2)p zk^D0D9*H2Z`gq27bG+rsGnB$EY4nEu;ni5Y)LShh%-G+lz$3o|6w;^3yh*Bl)5;Fi zU*;}~5)v}DE0&)~dE^|=P}M*Px08))Cb~VQ@5A|Pg4Gc7l+ADFFT990 zQqZ)5$%E7^)=yC@Ari};rTjFrA=j=lBl&AWKH5N}uT0{vX^sVc7{OoDg6OYleu=-P zHCw60Ci|&gUye%fd!Y>Z9{e?R#xi0JybQxCvCJk$wmeXT3v-RbGm>Z=rgK={KBXoOVahx+ zoi+$BS9e3W`D>-kT?KeCSZ>cHCM&$rYcbkm9^I`L(KIkysk{4Y5`^&3e;D8za)kf2 zn&%PyHF1A(p@e|D`%A!Q!T|1Dotiftg1=SxMw)J^qfEb4JYhiJ0@%meYuoS;|0Z241SV&K29xtqxmA zXZ*rZ9Ny}!NCQ}mSY1h!;956SGpF7PwM$+R=v|HsTsUtoegp{Dx%D&gzl6QdaEsF=%Fi*jpKJE z^wtt3bfw@*3H{Ls*AE61w#&vH+)(GSqeKZkUL~Z2o)Jq31T8@ceSAz&7Hiw^5rsbc zB@MI_#ZlZqcVSakcq`jD^D|!+40!{6cSCL!4Ud4oQ6bz}_dbxJfnJG(>@dcnD{TF? z0j@E?;-ic(X*Ix6D0TNRLMj@T1K6C=H^}1d4UTC7-U09sfnVjoMFHJp!+=Yu2XLhl zDUQFc0(HWqqTzV0x_GDkM*_WUlMpmHUrg&9+=b$PRy=QH>lA>cxP z(^cK@hcVSpca7mvJ6MI|JaY;WLhbhv6r>(5I?n6e&2iqteoQHrIOabjTz|NbIL<38 zQ40FGm=VW$z2W4!FP1sZd${O0uVg>n%|B+g-B`S=1zQCTG_{;>Yz~XI1&cM3c|&7Y zcIRStDUv;ws-JIs>WdzA=D5CD=bK&q(PA3XJ7+k5wCQ-hsVO<%*vZS5>!DkGxo)Sa zcJ9Ci@YeEkho;){hM#&~CG6o`BYOcWb89T41TWJEQEKHZR2BeFM?lNJJmy!z9?mw! zGupgZCZ5qo@{f6A&X%Um<`xnsgg@aS5Hu|KvBV7VZ4bH`ro4$y(*nQFrlBtMXxWz62~` z?mk;qjgBZC#cJAAAm`O+3qjP(U#sRQuSTi6`^OZ7@D{H~Ll?S4B!~Bp`41gG>Byfr zGW&-4Aafza#4CaxJIk2N;@uNq(ZX_0$+E%q1HlyHgvZ+7rPIgS88skc;B|bk&mDSc4HG}<#v(Z4CuMYEPUPRFm&> zbROIBW6!He9_@K-eJnE!zy6vpFfXIy*B}47P$NC+^VpZQHaOOaU;mcLZFIyN>O7V) z$a~MPPxTryp-b2|0>6%bt8DG9h#b};Y56u+qL3Ju${f~~$Q)Xu%%O3U4R(qE44#)r z1c6h#{Lt>uFF0l#wYi#d*#%di#=mq=QR|Xgjmf9&rf-YDR_SU-diBh7-&JD?%2Amk z3moyTK@POt$zs$%w~awCF}84wv1y#V>(_>7R!h#YO{8S*O=ByX)8C%nO}wL{ws)J9~{#f-gf9GTtG(hB*D#a}^ z(8n*bx28+@$;SKA&WSif;&-UAp-={ZTXw8ocmueBYF^L)WTV zFXpUN&NBydK1j}2mgIb6G3SxWd31TsfszJ~FXlWzIsb;L4zyP7g867k&R;!{bnO+& z`P1^8n@V!F6>}b_oY$A<{Lhk{Unu5$xpH1vo^xeM&I^h;rKkz%@|>S4$@%7D&SRAG zm?Y=n>JfAO`Y$NF<%-7o75}#6kiv|{`n3wmd5RxrW)M^=m}~7g8y+ zbPqz8mAbBcYxw$ohW1qj#oLlqMgv(E+?_MOw^lBo(y$%5FcB~~CfFWs2hmFQ=#_;; z_ouE#`aBVAdUi64J^L_Q9HeoD0G9bH@)Sl5TRM&~Y^q^yrJSxF6&v{D;*iwd2Ftx~II#5RRnET>7bH z&nk@5=Tt?wt>J=;l25+ytpCflFJ=-sR_Gv|jh0aB^(+;S$AiCxZ#FKc+B)~d z&)q8?vlgCfl{^so!W7MFtPi`dxPuGFnc{v$mJaoQPrbS=wPTidZzFgvG(WcR#x64u z;=c#DHlY?6ygzF%SXJtmSWLg6L$-_SZmF4b!F9CpEmv8Sn^&3b zW-+VNEaqY#V-T84zXq+eTTo**COQ@*7=9IPVmRW5#(Om>Nwiwj*+-+=M#Fdv7l%X# z5XEq^eV8K+MT@GMCeoDtIsB0+Lf%CienmO_@han(B(2Ehd-T_Cfxz1I@&aqq#}5)P zNtd|KEXs}5qSz-mH8E2#OU7EcR3zJSENO}Ts7WvwnMtI%0b$O*1AU5$I#&jC1JrC_ zInVWo+`=$*!Z2}<;#P^vk)Ct!zsuM>8+}vQGIQel*laZT{a5m*t7(A0HmzM|ybxzt zsY$-~@~m~9Gowz|{&}dvJ_dsm?1OI-oq`Yq@p_DIagI?L$cUlc>`U3YY)DkyQyMxevSf zyPT5bogMQkfxM!2P+YcDJ(f#$ghB@Yz*xp`s?48lnV52NlK+w0ygf>=_P|E$=9*;s zl^V=Z_~H`Q>QME}mqdn)$9L6(iBvApSLgh9^>wL&;rdTgO>{HU?(&e8>M8R$(Ev-d zSgD-XIsExNk5)S&2;rTv26nrS@Ol#m#p^WgXXZ{eTIi6FCz1F^eCh*bX~#lqN5t-3 z70&ccEn<#3c2POgtD?@?Ha0F(?V@x>Kx10xIpfZjeA{fSArum8*uvdwIFZiu?)X>}TdQR$wa&I&z@!VvD*zxzp>f>xT?%2c%RD?;DN zaPbfNJa|3qlPhcrI3+DK_^lI39hvhIgTCO+SZ ztnU+ceG@9HZI89DO%Rn)uikRD!9=L65^afOSxg^UC|;mNJ%;Yu=4q1<K=xU;p69mIxW!spU9-{0 zacin*vi8gG`5d{)+Ips)^NJ*=>&xayTfNQccVd1e5Z#^ppoUaIdTcF|xNk|y)WtGN z@G`xW!Ci~Wl!qo1V`25oj%AeKWtd;glda6kvU)ZpWe$vGl%UA-1nw|1m}m@R^dx82 zEa9I&AzX@AHvPwmDf2Z?laXkRo$48;MdeFZIE)y?OyP9$4XtTSbgZUug(2&pLE%oJ zuj^SsxV7OMO(pL-L?-5K)V)>(zMHjbYzH(Mm2D*2+(09x=GwJ$VaeiY9)ECtX*KCp zfNcesZsA_&@FrQawIvulsZM~W)SSuEfahseFjSVoTM0bzDuQ>A!>crS6$!lY4o|7O z-QB*g5Cic8H71foy>f3QDY@?BqKQMVZvO`F@24ihi5 zI+hU;*@K?8xR?)!WkzFv+IN$;$rth_+7x_I>al!L78mlmSjHFfrjc~CV?M^j?yLRj ztzR(A7lsV2NE*`q^uoo4SBne*%j{1tad=Y=o>q=wzSvMOU#Uqjld^cB2bIBFJGel@ zp$<>0Z)mmakoKo{e7x8`*`MCmP<+*h1754X#QyZVO*RTzsm}UYs}Jy2D|HzA(+_w( zHRK3?6rCH{{3xC%m0yV__e^@&|KimG!suX=-J&0^%+qKi?%zK~P=P8wjz>Btcz9H=MrdyuB zhkc$1j&VoFto4yM3S`b&;nR1(pLgqwJY2k&KYiOv9R(OaQ^V5lA>PaFvCJedBT;)^ z^PRK5S@UI)+aL@L2QAY4joR8y6inykt_H(-QJ105v$^(pe1k2Kx&RJJ1;Z!)m(6X1 z&L^@+zh1iNVdK4A>~$EuFmBJ*l}G{WN~yaW-c_oW{jC;{_wo&4(-7xlzi)&Cp>q~T;<~OQKg2j{8zbr)DkbWd#R(9j~-Zfo#dmRy|AB= z9ZEKOaN)@Cq4&6Xe52u`3ql8IP~pIi7Z7xD163~wLiL+%qF1z4e;G*iA`y66S4;yG zma@0{DQQsPxt$WG6q*=LxY2P~NkxIDb??32y_FDgong7l2yzcEh(gY6UIW@M32^x7nLZzXHGFcJrMi^JESK`! zN1s9eD6{0mpErYeny%w#;g~Mlco-c7-X`|4$GoMoyp@UO>t`$c$W72N{o-)wrjd8x%?ZZA|ISHG3(baV5mFgM%9 z(VG+c<}mj7H&d0a)m4`qaiaXi*YiKJJ@_rx`>GS^b;)hXe)He32mernE2h?Vq&?b$ zpAbuEy;1^u@K?o@@k!f;-=Qx1Fi1W69ZEz?JJfNX*~1Psj6L|zF5ZJZ_?Ax_U?UQv z+?FIh3QGWN3fP8Z`+IXkvi+6Wgn!g45Um+nQZbB8_#spfWfkGuAK^J6*Tto44~D<- zKC9o^mOwv+gIEleSQp#y1e~o6_@m`ok?iVNKm%F!#JU|^2SQJrt3~;WrS>7V5_er5 ziGF%2>n{L}8?Hr*bJlb={S*@5EcSfK71wpP$~s-!SiXLHVl->$UhRujx1r@mK^|cG zK?uO&idL8N&3x2VhC?dp4|uX_Vrs{eRR^cK?V8(><7FZPTmSy0n#r!v{CNTF3UB^~ z7L0Otm#q1?-seGqVJwASnU-hxi$4_t-E%Qre-%&riRLDy>+#P|r=CFD!~9m*PTYSu zrO_$!E{)_$`_1b@lo?C*e~iz~so!Oq{s4gfhxjbE!Yad`+KVqW4xC6BxlGvQ1>yVUD(vAtGV}JxI<3P6Ow61(Qy<8cZE|e|NlqayMV`4mFwfv(n^p^f`SAA z2?`SK0a3z5nMy_mXe20=h@jDf7!);XBT*?#DRZ2i>DH)>L?ti^)p%?*DuW|15TKHX z6@sF~BOY?J%APYt2e}0;^!L8+xAxpxuyFq8`9DuGYklio_w}vI{?=OGa^&5?eqUl1 znv(}2x#Fq#!3l|@kjs4YO`Soue}@Pn{O%8x&4ql=Z$)00GlCCVBKgv6_c;napNjpJCtRA;TnCg62%D?$DK%r(dSrmm#XsW*wf=r< zFC1U~-7v0>^7ufi`v>6k*3!|0tll48rN*5s-CycJT}-l>p1DxXv~U8!k`FSQ=nFqE z>#!UU%dMq*D+#oJ(bf3DYJn-K==}p4A3Ul>W!#q&3PjmC*K=)QQKz(z?n+Hp=Lwuf zzn~^*q|I=3w;#@oxgusU)=dOYd6gnwS1DrFiuiIXV%8Ng%ObwYin#v|Sj5|15wA1r zupH`&m<>MYHx!Y}j`q{yh+O2VT(;%!ibz)!YQhR7!-`mBES2+JbMTJw zxKFrJ-+;*hcKQ*6nYe)yq2AuKmqdeS+QKMaaL- zMbx4EYbS22iP+Zu<}Cw^`o-^W{+lHM`4>*KVzI&L22iUJ$vTTVo3{Rt*pyRbb zW7#Np0$X$=WDUmbXdT{w4GIA@XNqQa!y z9?Zq2!d{+BmSYpP^cb~M*@m6Hb~%n&oMWA$6brNqTktg&ZXHLtrQS!e=l4PE`K`cp zZXPW>A0IX6k7F+|I~BVI6@Wd!Wm%9T_&mA>TZSXC9p1@3z`K?_br<#kGZ!FrNt1q) zG1j01&KzSI1Yvh~3ZY<4)$O(Qg<-zw!qCCOOpqrmOrkE#d1083x-fLGFvzuzKP#AQ zbs>AhkZ*7y>0luz9h+Fl0aQp`$g{(c&s=3?ql1N~3rPor#9@6;uPvwb>*>B=y1qf|vj5ieH>SAA67WS+@vQ>$=V8`2P&N!Ef_QQ$Lp%Q@tJ7avceNn0j&^13X( zK=IAtSK=|Q%)sh&ZB!xL3Af;{@2ZV2f%rNY0`Wa@vGO+y(jJvpd=C&cU2Bahgc&fn zwl+R71EOqqQGU~+oK}>R_*InaiJA&wJD`Rlo0|d#XVgVWE9mj;@H(+!QdFUsh9UDHji(WHGXzGmoWsMB}WDc_Tw16ay>_}Mon(^U8eC)rxV;K27{T15EAS%6Ens9 z+tk;S_9;uW4v9g{yz4$ISpWw>AXJlzM0}2oU@T*GLR>Wj4M<&IvQA3} z?0xE6vf)1KZ0NVu`K815?vrjDvG~c67G@5E7Y;FS@3a08!%UdYgbPCl3lks=4l%sI ze(9wy%mxedLi?rn_n>WG>VD~!7m2x|Z0+sW*K_1M#kLv?ai{g<3o4||0F9STUt_6s zC>2gtV&TJK0SnW0o4csf@2HJ7i=M$gz)|Afe&w3u+xG3EGGH)N7vCu2%ewe3v-nyR zUlV?nKaRG@A6>WJFJ;i+^%i3sK7yM$EdQ(h(!Pc8mtdD{R!%z09*d*s@e8T6QIpNH4XJ(x_Dl@Hwg45Q8C&HhKJ-A?S z&(fY)(9FftLruYv1|3$4;mgxsyki+(zW6f7YO9QOdk{Q_jOl}~j1sa8=igP;0E@28 zf&}k|loreJeM`vL3=^J;Z7^e+M)5k9-TB@1L(kWMQ&I%M0D2K=9x+3rtpxg`_z1$6 zEu7MR1ofZJEW$6u-%T?778vl%(GTKp4%QH^b09;N&yzB(tq`sUpgd`{w&*|>~x4gvNYY38QMAwe)1pu>a#OOPDy-itMudR$TYQX3Acy*hY*Jb z!V_1!fl!eii!7PafvVTp&})nHN(WEHEwZ+z^exAhz~}Td9B7@=Cy{f^JICT55fatH zDh$4Smiq)d*F^oEUMjKoO6p4YyYIeW>4rbJb?F{pmUk@eQtU%{g5I=*w+_;J@8~tErlNiY4c!j zT!rg@Q{syFE#hS zE78r1SK%kfd)7Y0ZGRTpfsw-qugl`qyO5jjjQQ6leMxS^~K{wT;ah&^I z{t65OMg9a&q^t}KXmhLv&%;Y6;V~raZ#UxKlk4nwBdG`k}ZXUc!-(b9jmrCA( zcqpfN(5%C9zzFff(hs4{v2s5)$?JBil~1`0(1E(aw`z|o4r{?~=>=$CQy?R&uKDf) zff$@oj7VvBt3VVLPp}ntMJ>Afy~o)LL-sIOeeCJna&hW?!DUDT15rOo+(*KOD(?JZ zXp}?kko24PqrkjurIb%pUQmoHjII`MA}rojpSSv@1GZO?K#>n_7D*RBx_QeM+v@hm zL6_de*Vfz&a>iP6d`(@Si=>f9c{~C;Y?!&(C~VKG?o4IA!w9V6X&p}T7Zrb9=|4~q zhAQrhyJO)lh1;KK!Gd)@*q;|-(kte%8@C60fxD9y`ladox8brCLU>c$)1Up>0$w&< zSgKy%;*>j|9$J(J{8NK>DeVPEca1CVFCGpw`OayV20I;31m!zbR7};Fu2JODebw}^ zwk~szBem=i_kb&uBts;QCoGX;%;1CNpvCgsRk4O_dabZ)=h?u&jiij=^WQ(nAW)*!?a#A)L~lZe1K`4(hX0C zJ!~5t{J^yt8kmOdkEexW(Lm3Lok3Biep17V7JKHX=Rv8|!M4-1w`@Jm#-Qf&$a&s! zt}1x&IOUv9cEKmDPe{Z)4JX9S6+hyhB{i%E&5-jb6Z}8B(gaz`;5c@iu?LQ;-plZ~ z^$2pF!hH}vbKO0H`J(tXTZyR**W)N|DhW*p>K)EHEC)7V7l7g!_~8Xan|XbeAC~LFE?kxhY~qU4<3nqg%jjy{#+=3t6$3HSZz#Q-ruh}rq(Zxk_PtAm&`C#Ry7BD4-)J_COm+xR4c2L+|Ty(Ez zpsRwZ2}_tDFF4JDp`%T1gA*9cM{yz~ixVm1;e9&v@-psiK$x&%&fRQ>Hw;}XcyQ$* z*k`(SII~7>D_NqNcE5x*ZS_1KMH16?N3LGQW-D@_FvZI)3>|cm1DE9?V0j3yTZC)5 zJwm?)=a&vTogo#Td5b?^Cj#YouJ}C{h7O8R@TKtV@j!^d5r}(+=g81pW^~5%DM@qAnX}H+r#yH{6HDCZ zoi5mU4W$>G={N#0$zxWrd~y;CTr7?Hl&a(Z3C8L6$4rgls-dRHWl-p+UD0-2o1eu+o-6 zAI$?SL8&+HJ7sRVWE;G;Lz6Zc!VX5KGs|Jeq&*}9m)G!~8&o=tU>z`x*>n>9ERWfA z0mDACJ)DX?j(P3zdP%^d(r%?* zObd_OVx=MjAoFn9EY^zgXp5G9gD7{p`+@35J9$mL2QKX--vR5qNS3n4mvEgO^UA8BMGGz`6Ocd|7_pX>q=V-$1*y4Db3SlD zmdE;5+!}o9Oe{0HZ{_`Gyae)0@Dj)~4KIQCYY`u&mA;yY^ii5FuqJ~88J!%q zJ4SvxG$(gkg!NAgeu6tbYZb?oUeXH=S!R(F@Fj`~Ii<@>d%Z+UZEMU-ChJp5K45P9p66_>6riT!#Q zoz{PsFeb1cU0xdd#lyJPhH=qF4~Qu5_XdArRcm}%ykP?mT=Du9wivN}oNnwD4>ios$=neY!_iKEoI= zMo>eHBDg!+^mi=6aT_xXxT6b52U}yfC4$q-t>p#;euOV+^3GZ0HDgVNz4K%ToKR6R z!oe%Zf7)7t1H?;eiFO23OMFZ*ApyF)w3cWK<9clv7hMq7eL?grGO#Gv=Y2@j-}Ar^bun#D;qmlB*f;@7=M5(V5%v-m4^1w9 z+3!!_F++5;^RC?q!FT=hg$&N2q!pz>2pN#Cqjyf}dl9Wp`SlDOoOQZtovd2(RqI66 z%1=oKn@TYeOevN-P>TUzX1gO%)muDjWiQ7DM$y=~*t^cda0j{Eo8a4-J#_0Zl_@6DKibEv~h`9 za2p}kJx%#ekbSSl1M8FS7Q3y>Pzeab{fHYiub?+!{P+$ea0v2qf8e86%-2T!9w z@fp00SBk~`H(&BAO#Q#&zAx(Fvo4)u)e>AxY60*#!ck_yO~F)>)UbZB2Dqhk%hA8W zpupiZonyEl$BOh7g%+VJ@IIPGkvbqt!S{2-aItdPU#h~j;nu}%`9V_II zA7_PNsHMwGn~P?`xV{?3MHj6Kl=pjsU!Gf?lKjO#UeASrK7i5Z+E7uTXmEv41~b`f znJ>IZm}U|gC`7el?4zX9Njl(q86%MZ<^|RXlVRA0KW02Z2Ya;^f@@_%@#N-VN4qJ- z$~r;wt6M4*XP&NZHArg2@8zn#0(gtCl%_%+gO0`-Pr9+Z!bb5de|73o$E+}9Lc;}? zO@kvC&bexG+C=R<7u?+9WgfvWI1a%FhGC|H@i$>=MtQDK?h=FJ3cs)eixH&*5_LuBKtR%9bOH0(Xy+%4wJ0FjSIZpJVf@qXLfRX+aj%l9Z99z1%n<)7hk zgr{_$B{*7>;0&YQzjPpwngn@%r#bn1L|6O+eu5iZMD&e_;Mw+BZKu*pQr3faQ}G)- zb2tYUJD45H32V1AfN6c?9&Ai6%kzl!E4vXYbdrAgNhD=5CQgOHmt$PoiPyKSUw&BP z$M8fB2Pno6oNyH8eF%6^_jT2?SLveQ-j7)Iu(T*u@gVVyJtPUCCHQSZnV1Upu+-Uk zw|#PFYqj$X8r*s$L^->-f(5TR#^q(yR7HCCGeqN!#xRn@66&W8(o0=mlWVqvW1PtSHUYRv%yChf8%?5!P7T9*BF1e zYT|yCi?R$>Mn8eX6`OzPGmJV24#S{S6Qj#t6yfO?SutgJh-2Eag(Vo|%Lq@57p0KZ z!MWg+*X|Ihc}Fl5dAs;p5Z`TatB1&8*OF%%b z!4h)5(dWM-TU@KQg9ht>az5y^okJb4E`oi2L^h^@-eyTHDlIDA(~wwxhuDqb;^#a>s??tPkflZkZGR&6V^FE3 zt6wz#@DVQ@B?CW!rywVN&(q?^Xia|!j>8U94ISQ}-7fxYjQ^H@Y!yG^YqS1>Hnh$0 zx!`r|a$s;Ay8~B3h@GJjyUk@IWbbf)zr*^=;B2_ru2($~8`Oa9Z84E8*{501Y7ch& z?e5>VqdqYuYZTN&gX!eHR>iAUnvNVzO9`G^M6y4+=3_O8d{ej+yrKaMCMV#9AL_W6stH}4*4!l4wLJUmbQGmejzj9R2=>9#N^eKXtOvXud^^1d@Axpc3+FL#EA!S2!R9x!Xu?o_4Ah|7Agp<5Z5gfspzPQRyDgFuV{-OxRB zHtT2$W;RMBA2#c-9JnL?VI)-gTCmWSgXvdtW14L&Mt#nD~qO$JR! zPg47XFN$qo-Exi9eADg=W^e|HzU<=H?w0kSbayG@4khh_^E-TQ5w}h4xy9RAYj2Z0 zmyZoRVfXRu6E2SAos7yI$EvcpEBUqOC@1ePejaU#lxJL{V~tRD3zL0LLIb<6inA7h z;SIPu_!b%k-(A$Z-IYrI&DGxRW*wFTYwttIMd=H6r%sGBrIj14kPEVg+>-#+%*AGg zn^N7kF+afuEKzJ1>2|I?gKNI&&JM*I>kbn-w)1am{=sh#sjtVMpCJ|?i_Tch{={5n zO0NQU-Ht;ak)X@sJwR%UQIXYc{{SUxPW}eIiVxyvyOVv#R>?+Pvfx-ejS|6i-rFu( z<`@9)YTwkc;O{sX!q-M`Thjc4#}4_sx2%R87H$<^`E(V`6$2YXkzhqu)${V=qo9iX zUf%Bfe#>I3siqMZ|4Ym7JGP21`oD^A;a2gLPqXqD-vHLw?sDF2p=!!G?&5iA<^1qg z@%8?%;(PU0@iqOg;=3o_$o_eAnJNAr-{Zld@3Zlle9m$0OOWDJrgzQn!6o>7uU&tv z+*C%5<70eAgM`#sr~D~Kkl{B`y^8U&odJVxf#D4OXl;sJ+%i=8;DMmjvXr;tN~q{e z<8Q^4!^=`QX68ZT$KWhJ#F+v<#AmShPY*tXIcp9dmJg#C)?zpA z5Ss{>t@t|9;a=pB8K4rSWuu2J8?QW!qjT6^<{J9@aOva0UgukZl;3oY;e%5w*PPSb znPt=JSy5s~&0(unj67eiS1q*4`kvUW$j_1B2j>~j ztcrSP7xf6EzQemGzUt0h;@)rLcl>4l_#MyfA3p@|GG?Z{`@Nqp@upAn?(aV2jwLuO z*VXhO#miv1RG7&--s9MWE-y_$mCv~?^@ZQOiCc#@Zg7+WyTJGrjlKNFU zqhsg4NHL*h>GIP0Ra+R>eqmg6k>Fi@SVml0xXefQ1CvB zpr+pJg$3`eOd_*KnDn>Kam__%ZK#+G?ga$zEn(OTU06EUCa=2`oT1d%X~D+hLWC~~ zH|RB1EcGZ^;dE{jypvzF;d{R9E!zae^5}v1?2~3mJca>XdYiG3E(fRlRdR$zfj~7p zA3ui-&A!ec+kni>WN(mnK+Zw^M5#Ns5-HS#hkp(Z5Q$L?=;L7)FP$ zJxE#_{?X2miBg*z4$bNn`|2WNDLg4u-i4w=_%6Uz>24g!zY+_;VDCLyHoLlIhYwLx zDYR$`<|s0Qf69opKgfY@_6W{%FQDQgd^ujnRWM{nk#KOuUi#!kWXtfZ({ym>8%b*e z2&s3{%NB^P&^uV!As;w?Yq6Gp8Z0><0#k6)|@ z@-p;f4OY=Q4ByJogf#q!(&0y1^p2 zJAvmvVb8{JQW@;9e#ukosrEt(M-IjR^$z0)I(V_QS^z_5!`hmo(4&CF1wV3r=>Wgz zAmB@G*3nw8j{d4J%w;YN9V`rbISxcAOubr-kuc2ZE({$k3`$A08cZiqcjS6?80J+j z3>_>C_|2)+K(MXVYNW!D51nN-KnH|G***UxRCijxo_{#)1^xy{zk=(TRicVBR%#W#<*w@=GP zKXZXcCu_2qKzx0c&EUTdQ7r_DZw|l8-$tU_*0RBXL8>;sP%B0+17RJVwkT&oZd=jD zu%2fM)opMakU@htSfp*JlwgV@m|X#*R*70A{2D)2ZpxxlQ3Dz(XGMZqr&6IlG!#!7 z(r~^W`^TIzfpmwDgurVzmF4j<-TEg#E=9uXSLdE-97u=yCqfY6Y#qN3g<)Rr!q8zG z&xCxw8Rfx8DaPF_%n6tiFef>eF!OW4liCBMh?U!7?!N7VU?UDn!Exn7M-*eLSK#&lM#2^u88NCP*cbuHWp4k#O(ynY6*@nrM0&+U zmBKM1*gPB$FpYj_kWqK$9V1-=cS=&wg9`NgQSSCb6KZ9*pLgKgc0abxra?}^T)za{ z+!!3S)sMS(Paqp=m^-?yVd!A$F4(-d`>`GkQ-AlP9ER~-7&=%OR4-r2W|;bC4){5t zbl&a4==*}IKA_eS1JU}LL6{vzevfc|)q`|aAVB;$M9lcJb_u%*I^L$uS1_P*d77GJ000U)4=Y?4*B>yTNy1jk+m(KBmhhx3d9*gY_|Zlgc^{8vHQhAZRWdCX^98M4|I|FCggDk!m(;w82ez~(Us{ZhPR?Rm1LydmAajw8kKV24S zqZ^DW3r^XD)YN&IE9K@+`)cWf;c7^ZZZS?DmBn~UNVpguvA`{AA{|P^{J|Vz`Q1yy zlOAeJ1?>2!gjVzEGSXo_Eq8h$0ctD;5GRg4M}>`9)ME^Xs2K}Z@2oql-YxhVw#?G> zIt6G@V~1{u0gr0z&d*lV*qxsR2{m>xr^fD-n(L6si;=p9`rS@7)~18$ZA15&z()@l zaWI9eFO^lXQ~WkXp(k!9gc1DmZ59C?EP_e*rS?2p<}L_Be#M2PgN2+%$bJ;lLef?@ zKXGYi^PdYz2MdXL_Jx$qofn4O--VJgO~XP_u-!H-{~G-s6NG=7!l26}SOj_Q0k(lj@P56-Vm zQ?-v`bTSY+ai2vwsVMVdl($-xbWP{ziYU!Z0fU#TbkT+g1rwN5v!zZ=fG1Xu6Jy6NUw7p6xI+THWR z%bvgV{nw@f&~J@|abdTCi*^Qy;b-Y%XINTMjT?SHuG0@->v-B#3z{@^~Ej zC#K`-@qM{J5}P0H{)x0&{S9&CgLNNphfo%lc5+uy@zk+hXJj1b-*q$&ZBTPdIyQG0 zHjzi};3@jp#Nc_Q_fzzSl_jtIUztN~6n})D;Dl4uC6@)ap`K7_NaaJ9u@STd1|7Nx zgRbV@d6?XKKPOZAcJSm|6-jKOvQHjctIqe31J>g1rIh_HEWH93K`ZymV&gh{J%^-& z3FmhlesKa~hwca5=1=zxgYi;#U9fC(atvW~!L*o#O&Pyz9|-SjLZSjk@w(*TA*CaS zW4}(tzEXNmaJoz72Fj|h3lC2Gng=ItDg7=u%)wVxv$$F%d4&KZGnyV;9V|a=Ax_N9 z--d}Y5}bp*EJQvW`wCAuQ0`Xba1=be#A+pr0^!o?V1P#ql+V|Xkin?HOj68p@UwlO z#Ho933-*fa(jTN4O7$8SMGC^fVjI}Gw4Y9gp_LY>m1-hMAd({Flr`J6A%B^C(8>LD z-V_Sa&tYE+FAv2ghJ8Aux*-w_1%zn(!HMW_^>xu`igL;qd|ea*K8^a&Ho{3yrTA^s zhJ89f!Z+MqPIW(MZ;Lt(%~1F!zyIO<(gA+i^}v18@J&Xn8{*?(m`}SfbOA67 za4(BKNdBmk8SM%zBoS%mH*NJ zwDOJ~752X1@5gT5a`aQUka|Dvl$hhxX&&lw1&*js#XUTGj}P@Xoz0z#*xXd4piZR2 z-SbFpo*H#tV{Y@fs2%sHX1^npdxis;8$UZZ-g$$Ype(~3q1@q>=!&t;KgE(SQaPj* z3-HE(T6z6jtZM|23NHvZd1G_J#vL~2qRPKQQEkWG64W6mh6^o*6%PfgH$lyX_8OK% zrNLoSuuFYY#Ewrj!Fo&aq3_XhK#4W2r6U!8EL=U#@AVt)p+9Qa1X zr}lvza6HaUg41f)(@!$an?{}LFzm9q6HhAYXQ?lKu6GOqQ|n(bRaS zWj5@;E$LG`S558`=5(`yWEF(()mIrQ=Q4@pDpz7*!iMQKfm`%{%idIT>Dwuj$Z!Lr#9*QaJWCh^Zy86#^Q&ooO198 z=DF%ZB2Z;~_+M(aG8%ykWY=t9J2l%Jn~ggJ34Uvg&MbV3==z@uOehkc^I% zJ_}sOW8llm=?)JX7eCRt<=$|51;UX-b#uw_RyP|k_qkOe7895;ZK*I*-Q$hTcBkXf zr5eklmHPMQE5rJ>_$Bzp4*!Z@*gahP#mcLOI%`%|Tez}%GZjg!DBE#MK1Himct%T3 zZhP+e436BIKD6h!hWZYAS@B2w;dOKd4HhC4M>uq^E%$`Gh!{ZTJT%+OOU+nmr((Y^ zy(YM*(|X#9Ih+s+esRD;Ce}GkwSuwV566Db_<8iXbbU2TKVwp>`QuK$mV+-V;jPn~ z!6{5$jT(+Un~MFSbUOJYEOGZerI!uIo=e5<8IIlK%JVGNeZXZ-F81-RgkqWO+&nGVFM6lGd z5{rbYEe*#?D9X=EKWDDe@lNbG9CCly5aGPO=}lHj_MMIBJL0sqY97PSf16 zf$b;Jwep8GAU8lATCtbNK@G?~n-S(MK$>^1_Am0&_SeUQv;VR_Zn$Eb^|9Yt)yL75 zJXxv#{R@jCrNXwVX%`>Wbp2M<^k+OjfcmIblhw!f`(Ebiqp_yW?nJ3oAB{EjS)3|W zeQZ@z*?%Go_b^mbHY#lw|FC$q{PP_j#oMjgM%&<@CmvvZHSfG#@i+44sSm0>-VoO6 zHsZe$XQFH3Z&6>d<e?`rAM}|U&|l9*mgM=8fa@eva28A;rGe>`SpIRrCvmP9fwZXkpBl>xjXaEntr}6 zfB$b#>!o~0=*4yU)2|ha`<0GesgvyKi1X&H#)zH1ivZW>8~em3(_os_`8AcH18NSf z(nf!}d!)!2zox@fz~6gdTBvB*wb?q_q#_9uPdb=2^Qh z3nqb77Kg1qaxJjoN{?{)?RdfQxpBNX&eM3qB0eAUUT__fDY>FzN^{J+jy3RrD_+(4 zFJFUm!4pa)Rhw)|gx>vj)ele67|BL(-TmN-_Uby`l$MZ|> z*LYqTS++5rZ~PkPi>=0z!VMaH8po2?e_r!zbu6ijNlSAWldi8BNGiye@p50u+iDc~ z$b}e1H25@*BKJSr6e&`@ZiRW#GL7}UZ~O)7+uHZtZ+-sZJdAH(IM#aL0&LcE;F(Uv zrm#mpi9LE8>ciFN?zLFj;mu!DdpLuoU6zs^9Ern<54~)HB42dpJOY=oM~LHqvH7my z?x`i%n&?X5Yux8mK^&TV^woQ^`6cZ!Fyz1AfIK?{LnWNibo_c|bJ zhl<;O3KZV{0$Ar-dlkDhRF2|$bE`&yH z2IRYpZ84E=G$8wb5J+h=kgqo&u@3>cpUBr5kP{cZK2rP%k}v$1DXGP1M>92 zhenEjBJ%GI$bOdt`8knf19BIU9}u~+0r^Y^4KeZoKNJE2IQPq0Xc=pryG#- zi5x;?umSngUO<|O@FT(ck!*L(cl3D<|S@K^hdv5ocN3x7XQ z@KY;qy82BExo)g{1#IK{VUN$@i=b4qx;H_be=a_gAIKluAk(Z8o{?#3U}HyvWT`qZvnKs71n z-^KO}p8oGGb^0Le{M&qR`IqX20f@r2e-tH}<2U9D-_PXEI?p$}zI7*Z>|Fg`7<07U z{PfdHDRjL9Of~ol@)`EK5cPa;SVC=Wf>-0HeXAT*>+|R*pWRa0NEU}Tbhh8s^zSy5 zr|kB$I#`Q14*7}QYxcCvaT^D4avj>!!U3F5GaMpEwLor(;SMJ!0&eqFvt#8AFxsH% z)gUTA(zY*j9tL9sIMgu}ZGo@QoBUSl%k5nt%q-%b#U?7lu|1F|H=OYt5%zJWPHlaR z$D6!M+T-3iZK?|#=%{Yyh4t?*Uc3^e!1nteHttxTWY|6pb+fGH`Rb;2zwc{Dh5LQ3 zZct3C8@JyVcKk~5LVjprd&K?4euDXeH!D&((8<&4aSHQ~0|}g4kpIH}R5;n&P64IAc*|vMt*PKUS1*bj{c|38k_OG@uKSO_ zA7fM&-}UZtDV`QeCBFf>w7ZG2r7Z;W!HK1Fh6NnBAQeNs=mo5JdUqYF#mI|;mpC8& z7>a3HK}|sxvr%e8t*>DY>|rjl!*0($3!Ml`=etzP%H#BilacTgt$zc;nXA)Cnsb+o zluWdnt?AUFxZ6&s!LZn@u>$mZhpicKL2b7~O@B4Q^57tjXwpdQE%TML3_N!$g)h2kjaNUGOh8-BRFD^yc`km+)Gr>7e^9WUQ z@*5~l@p}H~u!X<)z3kRh1BSYID^A`|>9WBb;y7>t&YtlMVWyo~^fSDL04l{cc^w*l zW=e0Zb6iC^TII=JU-wL>dRj)hX}G6pm-C}em1DI7*`PTs}FJqDGHsBrmX(wZkW zUHqcCxfI>W{_tuZ4>MQN<)cQHh46atRPcJ{!r%3MOwHeOfJUe?1}a>1dnNAOiJmin zx)0(|Ia!^m#fFs54GlTvl3>O$I+kr+?^ z<1BNT29{v1?oGLJBP=Z)XvrCP_M{dm?n|!}-1^~G>VT3`XaKQyeaWr>c$)!lCQQOW zrcegm;&&lXOAMH9;sZHX-3iXdq0Z>=K$Y94)b?#pM-xwj>;HjcInBCcRQwwgjIhP9 z%y=sbJB{YTsPFDMPu<3;JviVe;5~oWSKE-)$GlKs&Yi*h&giMtwspthrqP0A{o*qa zi$Q@E?kS6pay&F0bUli*j2ho62k(;S!8bCnW3bmNbznsfcFD3>hO~uqN@YIb{B|ZQ z0a{Y-c;;j(Y{x3%kh{H^_}yA|WmguX4gVi{@wj$)zf(O-hOP*(f za_M#49>K^QTzlsNPDGfId5DeK+(p@>(o2rqT&4Ng75n2sCqVb%mccfD*zS#9#UK@Q zy`jq&m6}V&{j-!9B+ZGQ&v+eP*xlbK~HHQwuuL#mO z506*tFh#CKoSZ7xGN>D&`=C}CC$ySN`yi2DdtoBfro4*Yl_VltHHjM`bERyh{VMP8 z&6A1nuK9DQX}gdg+@j98>l4qS){l;-Khv}{y`*Jn`n1-i>9g9<3hi7CK;JpmZQVFn zjwKRQM^JNwy-~XAcpf0Ge@%ID@qRT3R-b+$A|}i*7F2o-xI}CQTrw zi4{66IOpIt9j8Skn?kY)^bQS?PJz34G$S90}70T)wtlz z_`0VN=Ol`f$0B(GqsKUkiEA9AtJG^)rh1idi%Rb-y%P<=VJjc^-?+zTajx#;O={N> z^xhHFCp#M77uCH8U6bZj5sVW8q?5y*)WSDd3#$G6yTBj*;@^FSO)U*1)z!+BG@zpz z!9jx3x*VAHwEzjjyZ(vyYgOTk@0~v-@>GPJym$2>yRu^Ou~g$ku`g2m4!qqRS%Bk# z>jqJbR-85hHp&9VvgxLZ>RHB$#RNXpmt7V7aW^ekQ^lXdbt*QiSl!}PYgcR~LI;9^ z1P7@T#uBBEP-hkC?qj|S&G&K28d8E9ei&cm|d2~5%(lvF}V;mbY(Rp_|mgm#@lABO2T!Od;4Y;iY) zLWxuA%>J&A{e#1Y6>CYmGuxcWZvd=lm$Wz&m)b!4yB_;bbR`#x1ET-tdoDqh?)h0( zY4{`{Y5=^}JwY*m-#relB~xnKpW{*E_g<~MVfyPBrlxRS3LK(|Zj}_WMwTxuwYc?C z%hia>V|GkW8W;PxjR@D^xse@^$u~azDb`+rPMkmTT2q)ZN2lM_f8!3zk?ni`0xd{( zMG=v4u0%JVrQx~P72MowhMP#8p2Itk7#eJ!(mn{wOo1Jk{Tfk2X>suv^6Ap1kIPs=_l`+C_Q zkbP428QEDzFS9}RTVV&!PlCYEnTLV9&=WHJaT%GcjImJ|ac^uyR4yf>kdU!vNXEJW z7+`^Z8Oc5vUgkXfaupk1hMiV*o65_ZzCc!JPR@;DIr<0uh$k~W7CsIm_{z)qSzAz( zVa-9OzAMm*&^<`|BEbA2V`1!Bv9!+=q1_LSoX*V9p6R4L$BMwaK(rTFLC_QhJ8n+1 z=5P(WOO!t+%8!G>jcXPHH?Dhxjj`^#ys=(TXzlzB_0+ph~6PlT;u zjV$%n42e=TE%nwVL}je*GAW}H@|hViDrMBDQC9VttWl$ejT@CUYQm^-qw+>g7&U2B z-l%D#CXJdgiVTU;&Vs_%CVyQ$cGB+ZE($wp%~e+%6zZu*j$zI8$uX>p0a0P;6Qs~4 zOgL@D_A(ttjTqK$l#10x@VMa|FHlI;?DmEU7F>1!J zz$g|QIhzEBB4=_myRgUjGIp-6}h zB+RD@4OO&8sY2|N39QmjM{i9Z3@}x%D5;hN`^Dur7NsL}X0yEKBOB$1&6{NiV$6OTHH_ z=!^7*k&-yZS~>>9pRutPRm*6qwlUZg6-#SLk7}ZHH z-ntE-;IqT9NyFL=yVbBZqw+@WYt)TKwHh^H)E-8yHLAs^aif}yy1}SjKwVJRsZ(o&ZIL1qIg13ma4AdSjEI(2A45P_AkD%+1JWZbm)}Y9gos z5~fn3gUpFqXGLEZh{{-fWXeYMT6*(FvF4C^1bm3R^c&S=)PPYCQL953)oN72s5YZg zMztF?VpNAwqekH}5@VS)Dhdiu!y^ySZ_Hm;gI0I0)?9VDdU6%yY9_1_gzds?rox1! zSFtfPGARsP#Jo(CQ7SgdYm|!ZW#+GvPZb+Oqfsh00yigi$KCmzgn2 z#r87OMyc2sQjKD3<2O2-TO^~f1B|ZW zRa}7V0;pb&!ej;P+CK#!)oQT|wG73MIvF1lI*8LDhDmj7Q;yl*v zkgcMOX_X!`JngELv}y?B0jsMEYP(^eMpcz*)i3%yYa428Soh%UNl|JSsIjqD%8Vl+ zgqtOXmN070s8OQ=qehG>8|QT30n*;^hfQPP~v0O30RdXqzbSqJ2-v|tMbXs;&es@@Rp6hI%>gE zux8Dg0OL~Ffq{=7ieTJ+QKkSC^MM@4dgzFeT7fbYGGO$L%1E9B1Dad-n>&`jnGXI+ zAEl`^Uh408@`X10L)Hg2Zik0p?Ph&y_8`vUQ`j6VZo;j}VX;{%nZl4W>`wqo`5x^V zF-T?@cCa{^2Ar1`B~FT_3adeZ;f=kLz9`>#&i{g_4EeAtmHDEmF~^)EpoYitOlyo! z6rf8O6X(7x%5iq#E27qr-Mdn2t`fD5eV{9~E(2;fscw<{s_g7KspQqLqrd@r4f<^> z)lH3)d3Rb+rDp6~!%xkU`wazMH zT@uuAQgxI3ciCBgspRMBtNA8hd27BY$sB`ZF`&DHC2PJZ$HD?*j+<{PD60UK$>y7s zJs8RvJS$J|rrb2&Wcg^mNjdP6Cm~ft#VkNbX9V*A1?M2*-W;ADfCZ~3{Ce>o?BmH2 z@ACSiU0z>jmp9bWv}zrxT2obP zqG}y-*5bRMBo@#2JZ-VyYY{dq*f}C-PgF;im*pivR}Zi#btiW<{-=fr0gO z3z9-A(?&HJHEC4Ds5~gVr~4J=W5SR!2!t9JvPnqRkU2v}g*+r=#E=<7QbINeNfpuEg-x?ysF0Wrq~ zFra&`S5)R~QDbo!-dLB2T&JMIv7*+ri&}Re4Db?uQKPLeiYZL>ct!Y$3LmvRS+O=% zt&ysAzUsGJwFXt|T-7>Twa!$n(^cza)tawbC#u%*sx@1+j#jNBRcoqhO;oKzRqH_2 z+F!NyRjs{MYfsf0uUey3YiHHkQMI;Lt!-6nYt`BkT7A_zx^@fO;dDr`@gd7Lfm8ca z;9;NbgaHS3?0kwRAQK>xBe!_DsE~sA2s+_Fp_h@xz#u)K(Alz}$S1-wWK5{^?h`gf zo?YsV^@B=}k(<4-0U^0bA-N%iDr``w0`~C{|pwj*( z5Kw+@NZF8aqtss^p)^W;8M;&zN*wA>8bYo`eA7b6$=K61gxn2eRtP!X^XCj31Px8 zL|H%$3Ss7;GuIGh8(R;^LRtj^r&w#|nFa8Wko5{PXUMc6vqD&L;7CJe4VgA7Fly2$ zH48Xgp*AYigdy|hZyXc^J6Ra`4j2_x7!j3A!SKcsBF2UUWd=m~{i2e6FfcXr!tioE zA~JCpP;DuWjnXM?OoSRWiUuCh5n;Y9D2@`q4Fd^d1;;84eD8=-`f1BdS~7^H8`W#nq)|OaO)Jz=g_5fKD<*$_nsUKYZHz{`dx3*coT%p7>x5M>*@EQAFD zFB_twf|rqnw9iTaFEcw>kg-7EWg)CMjFg5%4Vg8n$EX>j)GQcz6>6zMO&Zc?{_>!} zu@f-BvE!l&Sy8!B7}#SHF_sdPNr>`?L?s7ca4`b|FI|Yp^ukDsRj{c}C!9>OwBn@v z0*xR)fyE{UepFboq+?xT=>J1bo?#P)oV)=_Y)PzyvMyY{t@>HSLD%7YU zljd&(6nHuX13aA&RTvVL8-Rhel8CWBL784revhbR90qtg3d75FipX@pNc$UVLv&&f~5yB;Wj-WvJ8d0%w zEHT~*z%TY?Ss9S-t7;(37Nu%~bbnM-E-RmfaZzg~M6Jui@G=)8G3*V&j+FbDHN1Z% zDFGubR>IDXocsYASWQ^M{i1R*{DLqqH;q~f zj`@!I(j@HYOMao{8w@85q7*s@@1qy=Wg&jMj7*#PGw+2~QW#I*9pbVH8JTezxvY%B zC=B&hqmwi0b3UCBWLA_5l9>~gvv_iW^-hbtPzHrw$Kd$pVmNH}FaREQGoNGf;=l2@ zU!4+JGWD`Yupl_idvANU_ujT{?_I6k-rHNcy|*f0MTVF#jxbEaicxY>MlLTSGa8S zJ5DG3Q9DivBvAUa6L9xD#+Z^r%+jH2DBxZWYwLm}yZ#u(YWWMR^^q8Z^;M*T1Tr4xDc` zhM5PBU3&Q{1TgUZJO_hqDJnA~YHS(?jzoyaOVhgYq)#>4vk6Fd)sm5eCGV|;APaW~rpPHle$2l;F#Jf{OY#%S>b zHnNH2$SwG$5>gN!;X4ZydKp;^3=#*0&Q=BmKIsvbA!9<^-79R2JPUDmAE@*gxf!2x zLUQEur8qJU3gRqw0qnvL30uS7!H+><>)3Jlg$Rms2Pouz1Qd4oK;YDuAyGrJM)epq zZj|~mgx?A!4)ybfkZTd&q!4nl=T93#?gla=gdC5##SnG^Aag?4F>rX>ka0uGLT(f? zZ%E#d$lsXn^+K9pM~S8lX%Vs%*~TuBA$=f_PMc9}hzOk=zi6rs5@G8^L7-XUFwh=7 zqQVyFqsOq)2Ly%HoDgLdiz(v^%FPHIJ^ySF7zklU`f)?DMn#PpH>%U92~apW3?gk6 zi?13(CWRa*WEytF*J{X&kUfN`V(~>|$efTxLIT(kX5Lrs%0iw1fyc@X2@GMydj3Ws zs#tu>7{ZE$z+H$c789u-vVH6GQQHwC&7BsDRz_E-K9IG^N(npliPg`a%`@;?6gYucST&GnA zlxWggF$*uAe=7*=Il~TQ!jK80#*NAwl{IQop{`M=X+uT~nGv#D$gCj=L*|5BDkLyu zz>u<#i-pV^(q{;n0#7&!5xd}V-_N|1dkd*Rz>-uSiX6F zCl_%T5edNuD2#|8z{`dxI`Fa(CIntKL|FhY3t{HK%Z4c1;AJ5!5O|r1LNE*h>6AgG z{Y!-eh9nG`6S7*!tRW+Y%ovq5YT76@3tCa3u2HDGArt0r0u(rQ90oWxE2=OmDmMbd z8%v28O9;vgiSh?TCHrB3WBXuuxn2>O9vEq{is#4alr|Dt$VDjb z{y*mAHWoOoE{e0|AS#^PVu<79CZilDM~pH~-n^Qj94D7SAU@;dO+p+e&lzHz{E!gG z$uou+CvOnqIC;{L2K8%q)o^*LfQ=(F{A?&Zn!^+j}nSm zF)RF)(YN3iIhQBQ2cU4y7a_3eVu&Kfe1L#ypGjiV1$Kl{X0YiZgxSQViycr-eKuWYUm1L-Im437IgYY{7u~H6*rRL4l_e zFu>D8q6!0|a{Vx{RuVDRD=5<=%8!dmMqz-bJ7IXa4iTAl7-=yLHnZr22Mv9ds+E+l zIz}0}1f;mT9m7*q+`SrktQU9d(=lBj_XlS}cVjAH z?jDjg>0Bu89;kDnxVyjBB@}n})j2wGcW<4e6L z2BswvkS!pct;F3YV+bssho9i?Uzxa@-52$XE?p6KQ;>rLc_j|7^Y{hFKy*@&sON7_ zNfb1T=9B=97SvZ6-qJY+!38b+hTdmhRwwSBk#Bz*M({>t0KyrDbiNVKB#|?41+@4K z$84GtPF^|RW&$kB}&x>arcO*+^BpOvZB_Ei&{4U!^_-? z#L}5O>_~Y61Zr(k$XX%OhGY$yF>2JPS))dbnp3FN3KbZVFr+NxQX%t(3>ZRYgvecp z*c1b-A!K1(-V`F{#)8ifGQO8tDnwlZeaH}Y7cX;?5OpN;26ptl zX&4Z9Pl_t!Mdc=7pzn=~8p{gHjEeF{L?u%&yg~xM5O)v3NQ;$lbwN&kKMkxVEa5&; zIT?OIn3rn>7Cin%icR-`Rnl%k!BHbxIW~okb6;az@}JJoD`l7r{MC+^Q4k)1^bN?y80Zy&1yu|f`w$3c*S8F_5$5p=*;*L}?jvjxm79a1K1~bSX1atp1!A!S zJ7fk7fU9e>L~@M8%gqTXFnWwf0VrgLsVqs%K{0u9BV3k3j|&ZapfZAV(u{__KLac{ z^KmG7q;y+j#5bV}*h#mELb{#qf$oEW7VL|64M+FILZNLcIf}Rg$+!JUrk_gQ3IkF| z{Gx>>NMy!E_*ojh&ma^oVx&WMXl%U-!SbS=odt^>NX}bfpnxqha!oQa)RTd)8{AHa z`->kqR)X`ONXi7~3x1)|avFIr9peP&a{(htPO`L*`Q(6GVJ&_Zf^(-WV1o32p34)y z`M-ohZ`#oIjH*WHO;<#KU+^G(_=VX~dd$&d@WXdW=sipBNX{5POq0k=iYVk^;469p z2EL-lMP;(0#ztXa7!{FA2`VH+tr-%vZU6>qaU4k@YyC!Ljp{RM)TmxiUh*msc!%4N zlp%2;R|<(5GGs`nkmW);4CyzdUC0GO+6?J6q*ch-LRt)o8`31COGw0!PDAEVVK^r* zq|D00*RLUgkOPIx8PaNqD%s1mfWpQk-Mm5s24tF>J#l&&2BesqM2*eC@Wvhzk(&`z z*dS`nq^Nbb!hk3Szes-qh7)>^{HY@89^F{6j#RCwsx?uy4pprKRcn9M+E=yqR;@i% zYrJZWR;`^?Ye&`EUbVJWt*upSOV!#`wMMGe`D!uCRclbS&Q-0mRqIUEI$gC+R;~G} zb)sq=uUfNJ>u6~8ldN@g(s8zf6MC~v;56}P@UYKzg7PWYF)E5DaM6-Tj@*LnOd$pF zkyn@jg@cak+~I2Zs5xo-o7Gq@nY4s7|BQm$AlBC~>GC zH-ub^_i;QT!W$d&{Wn&u610qxb|=j;ab3|-c@=8F`>4bV4#{?L|Mfm zeP$i&COG0=HV6pVVP~EV=`bo~lqwe2QjLl#)TIg)H-7_$^a#0Fh$xq0ge(=JibcyAk`Qu|kd%e#Fl0o?;X+ig;1NTzLiQChZedysnJ{Yd5f(X*UzA@E zdIuNP0bJn0e5Qw`C$0iP|X(aM-L55p3&;hHAV(G>3D6c!nS)rMjkOB5mh& zO&povNH5@}-IZ6Yu(2btwXz3M9h~(Ess5HXrlpnJFN*Up5PL+*5zEeKb;Pn5 ztB6>3Mol1=#aQErWoOiEVp)uJh*)-J1Yk64V(t@Db!O^JMa% z*z)Miy&fmgvQ%K!!1O!yD8A!5EW;IqKr`eNJBL~w6Po}0`UUD z%_l|d+)TWc;1N4B6pc+J54=g2E|mty%$X^S~uOvjm{pI5tkVjcx> z>g`P8%s|Y;Vn)u)otc2n)O(ybg`{_%0~_ya>F`!pA(F=+Vgrw6)OJQICV4Ezs^lZC z&Zsdw$Roy@$){nQQ3uGKim|Toe2X*cG+6>MHXPi%cSZw6mOzXRA@5W;qroLh;3yBp z%Zmh`q~Pm&M*wkN%9^JRS5q*qCAOTskkw{qQgrruay2=WmW%*p5e zTxpywyp$j_g>kM?jF)1YFy*?vwPk!63b-q2Zf2LK-%b-ZqGPyvJ|j)f(FX@3rf&dpecZtb5 zGjb*)<~}h;pHSPT&Kx?LJ4zgBT6h8o)QTUF*W8)J%gw|*DrSn#wl_hL^d1R~2SUR> zf^DxS)a{6i+d@%8s9r7jD2BuS%`l%oVfj7%hH?6 z6|>xlH@`2J{ad}}@>WvR2j9yXOsj5f=Tu93pvd||lXpPZwPNe!bwoIbM3$8s=6p|O zqrsjx4`TRjh#0p5$P!r~u6T<=8dJUuRaVKa4egb+zvM=3Ok+Tp8=ZCx}V$H>#FU5WY*q7iSi zq!(KT>YD=527>v`BADmX86;bBA4ENPHJSZ`XYj-5Gxf!vEz|j?5jEz2ES+!GX8mE7t=N{- zR(*>V99qHTq3=*Sze+4~?^E$TEE|YR0^=fr{6GQ0faHbZoKSZc(dzC947Wv%w}kdL zg-&lE=;n;7Xj<0M)KSLK#L*Fr;&5h(DLK;-bB&m`GX-ZFVor*wIg@jyDm2^$HRH?8#wR-w zWNnoqiZWD6nK~=7^BaAAM|g;dR_YA#iGQ*|d*w^Ma1RX0<0BUQ7h znn~58baW0=HA&S)s?Jk&ma5ZKoh;R;ZllhYIkR~P>3o|LO!Ge_h9jFNQt{~QJ{1$B z;*A+vv^0l@V#bQ2=J*K2R%RhafMnQC+1M=lh?6XcgOCL#M~@A0U5i<+O*cWUu0?aR zyCr5=6EobF*Z5X>jd#TDx5e%6iaUL~xYIchJNzDq*5^Sy!v^32+?jzhMMo1yB}dwp zxuBPqA~dQvV^Pccs$wjXNe?(<(GAlOV-ZhE!5P~KU^-%K!ypaejBPA1eKEEHv3qdF zHY%8r7~9aA(Zm_s_F$%B?h!L{X6DS?QJ65FDxae;J7HQflw&@!2qt1fC=C6Uz;d*A zgqGu*16lpnT^@u7HKY3g9NC>2Ia72ra8z>CcT|?w9rCI;({ZLM<~A`kXBy5l#M~mL z?M&5~j+h(7^qeU>(-(8Cn1M4zXGUVK5;Jio@61%po|u_4yUxrVC4X*RUa+M9qS!h> z{Lg@L92T6>>KG?6RuMDkjGDmQim}Eq>&~dz#Df^?5Ru|c6~L%>#M~mL?M%a&hM3#L z)ST%!Q+3pLRB@zfA;RT#hrCM8jJ#YC#9_XGU}v2d8s~(DyNG6YN1(ecD&7)`HihaN z2o4QdM01!Ch>sXP-p5c~hc=X4g?e3yBNHU+1-!Joazn}1%Doc=5vw}*`kIjH=Ws2c zmT`WhcDB6LE%kx1+p)@c5T25JI}*UY2pwk2nX;ozM-@jKj;ivyP+m1>GR`!_oV(f9 z*LLO*KusMnkBI3xvv8&_=0Pz7XJ*cf#N01t;>^UEshE4j%$ylGGZ%BGn1wSvXA(z8 z3+wVBOIjt0+Y})7h?FCiozd!uWieI}vFwbRKrD-~#u3ZTsM*A_80!$R?92kd*!IOd zBBtlep)(yZ=ft#~(U7tab)=yud*DdZ!k$-NHW8#>oze6W%OE1Qgdk#zLgRwaFpp?< za{}F6QSpvYv@KNMLJ+Z=2p(4uh_eVjH>0{TX5wa$O*;7i8(6-Ui%2ebmD2egI2^h?w3*5YszC<87hg7J_pnf$oN= zI4cxogz85O7cqT^;1-oYyg;;~TUFQGOgtdybXP5aG;#31U z8Aoaa2O~#nCo}3uU12sIskelsBMk@#Bu8y)3!A^Aj-!#Io}+=IzN5aQfuo+Ik)w{I ziKDiosiTIYnWLJcxudG1g`>RSjq zHc1ROB;qWBS9J`KTcDoDrSpHm()sVObp8|gX1{&1#Wr8YmrZ(=&VSIZAnJE<-N)|& zmluLOK!G{=#;I~QdAyX)H-&NTQ>-;KmsV^pq?uIw!ueV{Kc~{sE+To&uPU8yo}o1B z*)itlspDWXeTLn-#np(qHMAb{Js6f`uWT?#=WA&AC4-QLjbvF~Xjo9maZzZ$By_rr zXvUXP8K3z>r{*nd8c#NexmZlinGI(ejF*9c-&dkN!BWB^uz?nqMonj81={a*G=5{gK{5Xs`qfL{Z|D_Ga zCQIA#8%3HO)QZiC52iSy)v*POv5I&U`XTwK32eV0o}?9%IHP70U1F?5Jpb&>3_v|I zF%OEFIBWDhs8936=6M2p_EgZV#bxvL#XEc5ES&U6AKRG~W+p8f+=U0Ws z6`^4n!M0Zt>K4Vt1)(S}RL>!J4U8pO=N$x3`@hN7yDd|+WrD}ru+ha$p`k>itZ4Gr zo674qXr?wIQz%(mVpGUlu5TJujLG%C7asA}CiFXR^GCc{NmSppjW1HxmFJocEGa#- zj4YQ*mY3yH39)x7vfM3STCqg#-l?wAx?C&CI8?@$YbE1a`}S-$e=o>zw5N3yHL9L< zRCeT#bk|FcHk~Uv+5(;A(O%lcrv{Gx#MaV1M3B%<5G0xxLeX5PK11-N0n6)n)BwTb z@*}fF1D1S)&`i8^f}n3!fJfa~(l>LZZ(0#wkr7fQ>FSX;mIUt8!+GY{VIuKI> zT@AsPSiFSU=$lG#nFzA~CCJ!S1zcQH9b>jFQQuPK@us(713?1K0Q)cmw-#8w=OcVK z?TQcZyT^O4y0lscr)h&$!~UvMP5FrTX8DcMT9#nrefKkH}83c-Pd~Gm5To? z2Ky#X2rd51&HuQp?7g3R0pag0`NRCpf0Su{^yZJB*Zk~@n$s73X8xkfX8ePdKLLFz zfA1$=kiYDMp!dEo`$6yBaECSAc>dWZpZJR8>#R-uDzz`Z)2 zZByXvzgQZ->o4sF#3g2X`oWtX#+O5lt>U@r#7!SPd(aZiohePx*t(MZI^D8Oaco1M zT=q0|audIUnw>RqNd99xq;^<>?atnYk>6#*8den9ikkJCSe~gDS*jpky-(G0s+N{2 z8BA1u?rDbA-+J{&-tXfBKnFDzUd3Zm+E=ucJuk*kJO4{O`ewUX7**U@mKc{1#Iyn8 z%KA>yMq+$avnD>u(r(F_-dG93-6#V5 zNFuVq;@y!1(Ht*W-Yl=j{g3rT{q5|h4&Kdz4To~H!^V|cLvOg$EzSDv*jqzeGRMXy zZ+^}bGyHHzt$)P&^7=0_2Rtrnj`1UM99oldr^ePmpPh#|N#Q3THam=u%}g`C)|Pdf z8b;#SwD5m${+P_Kl4~F5&){eHe%`B@_=B!y-&(-_!77W?rsy`)V_Al#H;4DwG9H;- z`ZCZqpK5^?Ej0G=Tx)v3dc^FQEM#U%!)`a3vzM=JbiLp^ki`f|ZffeLuScvAZ zXMke~{o*e-G8I{RQ<}qTq+22U&4Xz*f71FDiFz5qmv5btjk}K^ZsoEh-E6DlmZhz! zIh@hfz2-;untuZ0;DgD}e1~mdKBwsg==~Jc&yD}hTm6*Q4D5PY&%r1D!8Y~-e$$yb zc$fu`{nLSD`1~hvM=?){1;d~I48DMcpTQf!UVg%Q&i<=2^<7}t4s%PDq_!dyA!H!mW?9Qa*j^-Q847ZH32<{_gB%*WXz$K^rT=3$Oaa;pA zx8ukhSf{yj_FyYxo!e&Q))RuYY?|Pu6vUP9Vjqy%YkpvlpS?%VeUkkn_6b~Ajcsko zx$l0W8J=J14`JdEf6FiOwdsSm_$Q~WnEg4qwL{q0dXm|ZlAH~Q zgUixFt?avPqq^e#eB>VL#!EQjQT$t;WH<49L8B37r1~ml_(AfAZ8sb4`4Hq*8mxI@{Wsair*S*RVcnANj;D{VFyv(@t+A}YzTC1x_feV@IGxbu? z@G|4l>nY~-z!$VIPl0Eug@vHuWyYn~oI~Eo&hU=+YnKAgl2T{XwowJx*=YT&4RY2c( z2{B`ZSfA}A*{go^vBzvGFyv7WeuyCDeuJ#Bmz#n{wCY-6ySeHlWJZMy4#$^S|2=xkVPA0G(q0^w@ zV#eTdJVH~i0R=olM?u5Oj7zU$5t@4SDBuy=4;o%(TzVag(A29<0gup5(C{+j((71+ zrd~A)c!V~BhL;(aUdJLd^{P<7BeWVcyv(@tIu@a+SBU~1q2-|AWyYnKMX2raQkMek zWeVzI&~P#1(&fvRL2c8Uy#L!hsGsmU4{ATmre`N7DRiR#b5CYZ+F-%D6o7Uu_1q|g zc8)SPJmc)k!ZCuwcP9BizSRyTC+e~7gMY<$uU0P4g_@rm*eci*?A(AI>qj1YEExKz zyryjyqw!hpp3VQ*?)h?{1^*76^WfhN8m%-VJ>I6wD)`M|75v7mg8!<|DEMD?MDS;) z+C6W+;~=4jL7haaqAK_`L!P{tZ|U{>`A_V#eTdJor2)mlQ?CgH zJou+U!^@0IuVcZVdJQPx!9NNbUS?c+t#;2gS4oD5v)%J@;IZ2?IiAg|_djfB z5c&ip%IVY1U6uA`0BGo zKP^dapbZxNO^g0t^60lB9{qN@9D?0Wm-(P&Ke4s^t zo01;=ouJV`Gt%axpFI}+=CF!>V^-1sl1CN&ANYHs|I2?*(SHaZqQAzvJo+0!qXIK7 zD_BOqS76a!f%WLG1`QW82AAW}pL&%j;L%?W8eV2xdL4`Y)T=-NkN#rN@G|4l>sa)s zUO5VQ^yhB{$D%*=+M$3)|8CImGUL+gSoEh}TNLo<-wqmHW?Xt5i~iJWg90A? zn?b|Nj7zUo^xIq|Pap;?`k(V-tLV4jp|Aq?H#rm6S<`cMU3SB>&;Bq+=w*;|8+xg- zU3$DH76D~Hfwz4$L1|&n)fCI$vGd(4KEm1;7Dznih-k(Susm_gJK2N|KE{F*dmP_o zk!_a+Ggyn*Ln`p`I0_m)Gb5{;Qs(Sa?1*Ni3D<8t`(n(I<+oc-41{SDf95i7DHJc}M#;|_|fK_|4n z`f4`$%`^XCm&cGCKK;}_tmUa^pUHp8&08HixESBiuoJ&U7S`AJM6BWD-u-U8JQPX? z_|4>CGt1V$<$bx@A7+;0+++RffCbO00~eqDzU0Z)0dD+RiO_;y4rerv8yr=z8lU4e zFh-qa6@FQ;8l!)k{1<*8sxh)6t1-I#cr7RHUiI{1*^}3p(-rj5=FC$fzDuwBK7K|N z2E*I}lEbFQWkUIoX*QKe)n5O(=QOOg^k1SyDGXmSx4np|3{TnDRA-3rkH6aW9@(KeP% zA}3)DzTm)ab#dFw+Q)a&u!TIDS@`x8OFk=QEE)f|SfQa6O13?pUT{+$!A%ic##V~7 z(esQUFG^v{8Y8$6wPjplNqXrT#Q!9ZW+jQ<2Uu-n#hcNirpLaXBXpW$tEPsGdNB6- z##s=JFjw+u=0zUO9LRZj$*vV4=e2_%=e2DP#E(RDu|$2-1Q*keu5uK(f+KTao#sv+ z%~r-b^Je7H1_T}5HPNb@`&u6Dg`6)f^JuoVdX*{Qr>d2p;bq39*RfO8)T>AVKUFOS4KFh; zy^fu#re1jp_^DYTXn2`%>2>T>HTBx1fS;=7f`*qFmtLz=)g9(4`H%F*PE~*LhgTft@3DP)R0HBva3AWCDdmT znxWAiq1m9(6Em{1O>5jTk7f?52sLIEp-=v}BJ}NuTuafko&7)+00t8ZKrGF2^G@^_o$@BXk}#yv(@tIu@a+*MtHdq0^w@WyYn~u?S7Q z1{ClJ9R&?9GcLW3MQG~Pqku`A_WyYn~vEWa= zG8FLO&jt-IGcLW31%K*w$gFtq9|a9BGcLW31%K+bpnwN|5;VNbxb!*}{HfQB0v`PH zpy6f4rPpfrY;%>2h&bClA6~QCJzMas@@Uf!+L^?JWyquH4ChndnC8)DaN$IGzEr6Z zl^W+34v=Tel1pFq_&k~w`A70-TXf2=v7&A3Ulf^z=$~4pA&+MM$D;o} zphf?Hk{R?%&7<{HNz_3!rN%BaLlP#`9=ansD_znweMO`tmo2`i;aW2{@@N^>;s?KM&{(w@m#g+XniWqPU+W__DXvD$dXc7izE~dZCQ2O3 zqgjV(WXPj^!%vXnAdhB+xSD0@c{J13@@N{ge@Y&$g6Dc3&6@Z>&!d$obu5n-nrV5o zH{BR=L{`LdMAo=8kLIfHAf?OU$vIFrvT3CznXhwJ!mw7bv^gNo@cr1_Re#)a+ zp>%-%2YIv-1&`&?Le-W>yY~jqBUy>if>j>PTc0Kw|A%?B;<5_Qqpim1-zGn3Ramak zimb-y^3T&j`*MZV;(4?x+QG%LC(kk`%cI$xeUUucA)8gmqaE26#$hwv&_W)qk1LTn zwbh0^+T2Y?W>OyQ-q(5m?Zk{H8QB>Bzvt09){<2ot>-A@(fUG>i=mf{tw?g_&%byc ztw38>c{G7zd9=Kdh7v2({?$-B?7O!D|{V@q+DP$kF*5#ckBq8(XWZpI3Cw$@w_V6k1U2tzM zdGx?h-8eiqNI4zs{il^z@*yi=-wNM~DSl(9DqX=l;SWB~(`n?vexGw}+I{$Wt!go| zwbUiJCt)bM;GQ|VLITFo`(E~)nd@5F>zdK~RCugXd{-NE;$F?f^l)sV_9_NsK!Z`)!HS4FoB@ z8ln|f4e;iP4HO%VqisiJ5Z|!@@R<;2Hk~PoxkyYw`iAtA(l3;rm!6frC;fcsIq4bc zyVB3S!D@IOI_bJY0FPZJ2p+;*NJMjqcqY-EB1oo9goY!D@jzm~FLAnuu&lL2y^Uzb zx3WC@-6658khttetkfAx(t5!vBKgRx?bV#I=7tCV&Gf4uXS(>0h3Vf7ZMS8t)w~eG zobmRc>CyS7$JR4m8!>%oJ#G#!G<|F%!B^nX$@$q3kpa9&D6+xhYx$<(CE~N3`+53V}?1K~+9r?(` zB}XH#z3j-xIIcLdfv06vM>9t?M{`FFM+--7M~S13qeDkMM;3Xkvk&3}Wws3Cm^D3& z-3B_N7KUpRWbbguxEz@s8JA;`6I%AZV2CdZS;ahQ>!{?Yao1a%WYCE^>NZn>W9rc{sbY$J8Wo>r2v`j``&~YROLer5}#@IVjMf^6x zks3k&9I1h1(;cbt{1elWI!6B-6|E6`vCL7)QO*!=*h=j0APA~$q2U&SEpJoC?uHrp zb)NfWWsEWs^>cKL@159k_^2)8Lt93V*s`9m#B=(2um1x=c@um?%0%?E@`tYAx5M#{ zqt_PMr(W55!gbC1H)CO2v|{WMjc2E7#^ewFOgq&L+N0xyDeT)eRWg#`o1*R~5se$a zg5O`gL_66X+X3+nZi#qHVz?U+S^tsuL?1+g2PNDN03;{k$wa9<+oNyHtAZW}=)G=zpViE&k8zap+)Mo`hUh_jci z{##!Z85I!8^{>>P)@P=kH`5glapc|NemGC>gLyde4{euVE8!h|)8o16amDnZ^{_d- z!Su29o$t({v#Zds@G6N=lt8hAt${3HL4;OATvvnJ?6yJ7;vpRU>Zs(wI^kc_ayc^2zIb-p2(w(e+XDEZl!p3gT3ejdxI=;v%1*IDLH4R4Vc-;Cf3eQ%P8-Y5~*B)UI~ zIMw|bf#Dk@#y3gq|Fp#E*CQJBzhTf%)veY>{gcvv%Jk^}L2ty5u*@}vXC=m;K=3KR z1Bob+h(9jT{cA*{`&Rb}XDOaj5q^E+hyzChM^i^5M-xXA zMH90yn2GFbu_OYp=#yL zs|Tp6wRv?PRn2K$-9uG7n^$*G)q&>KZPcmN)V#WZI&-x~;8q_q>wX16;Fg7kB?N(6 zl(AbdBYSE&#d#T{oJ9S32;LvIa;{Kl=ZH!q|+--~5o? zRjjejgHQ8d*})^XW(a5tvqrth4&hX^Fg^Ny(_;ll{8Ds6+=7P4`vDnterpGE3|2uSA>Yl@YFEsYmjZcDX3~-`pFBXct;^=#XVsB0Sy+Wah-2&)T zX!U;(GxVMezfWlF-5dX(Li^t5{i}pd`#_w&8g#0zv8lgAx{Y6>{vWN>iMu1U?Zn-6 zYcbHeapLaSdUoROp>-C{T72T}v6>30MxMA^%|obV6jqxkrq-Oe+uL#CZndCUzn)rI zl{JC$BnQ?85{7_$bHP{lQ8;^I*~}N%{YlC1HOslZW@&e?S>4%dR<@hPt-WS(bFW$0 zXjZeFA6T(0acG+rpHc!QnWtQkY1ChiY7=MDo>0E!b8L;TJx6V=7fx{4zTYaY7tG^( zzTVy=K8boT;KeVJaqn9to64zLO4VYj7E(1I)PtAs9xut|_xoD7T12x%1~nY}5~^8w zGnpmd8MYF9OSfkQhgL9|AK1x$R3g5~EV6_s7>M%%;~atm#x8=lICq5NZK3WKf{Sp0 z;fAPjR%kyXbo$7u;wpoxsO8YnuA{`!j-v&rS-%v(W0}ruIWrS;v6!hd8_rC`TqtJb zOvagkm~*eUwe_7j1ki?_m`B8PoLM;27W1H(hBGr~YGUpeQ*~zIOhwE+V#>}8oGA$n z`=DlghuNCr4uUktZ3te4Z3xA;2z9H7X7>hxVOiApTA}@-(CMoX#1czJG>-^hLY=3v zu{g5|sd=i-QgxcDlT;n0>L6A7soG1`PO7$3wUMf|RIR3JB~{C*T1wSosuof;pQ^c3 z-A&bay2$2< z&+q&#-bahFUBICS5lp^jR0mO#x@LY zjXTqDW-8`3F*9d6&dkN!A!gxB-=?OFK7p))yv&6Fdbu#7;MqYZ)Ov}}Qxk8K2x zNA3uPq0b2{N4p@j9N!X%T6V1&Tx)`w(d7U>ui(tKGgU`hj%toJ9W~^2k-XZ@WS!}V zIbTfAnWLXlO?@$s0(kA-nZ%iqn1{tooS8c_74v|YnKM&o=3?#>vv6kQOd{qkF^A6d zojG!p{eA0lhNUHMjAG2~NEDe9vth?0p6GWb5n~nc{Q_sy1nvZgvBvSxr88R*siQ}(LIw>&WyxdFJ|CO#hJdNnxmd0O$*U1 zubbr6cBbv+8XzLJh9F|ALgR|iu#Dh~R|4IlsJI{$<%Q}w1QEN7;EPuR@iu~QIH;~I zGx0Wr*R^SgZ%ZJO|Nb;R+?<73ehD?pjC=_rIb)4jM)El>)mM>x2!LsLd?b!SBrhC! zBtIyx5Xm!V`ii6b#e_(nIOCCgkC+h2181i4xl>GtLKSN%_w0>e^rPZi8@CyciuL0Ml0qXt{AJ5G`KTr z44?H8W6k8PBxlqC?%Rs7uJN*zGXnr^>WR5WOvjmtGi@>Vi)lDBbEf8K;i&3J6GR{7 z^`N}U&K!EV5{Q^CB8cgN&^RwN%po{e66o%TinoQLEus1*f|%YwG>2J%ID=?K=Tz4b z!^!9=oOsj1P^2-Yk2!YD_9fH|la)TAdOd#YKQ`O3>(*eHCTw^3kMS zK0d;gWLQ!D3%REv#AWOQ`wdmgSdF zb8E)%CDh$DWB3y4&YCfN33YqT*yC{uD%x5zhA*LRt{KCZP&d|$;Y+C5HRHtBnOQT2 zFQFd&q$bLHT?=1AJzO(}FQF!D#)YqQv1SZkLY=P}!Z~Fo+v`38-WOI(i7A+AQ$t)cap zZ#A;yzN`%f*?kQS>3<;&8`=G`(6FMCEaR|Oh*%2DIg@z4;-H8+GR>j2?p{OiWFCm)a zB1@iIDj@h~tk#>CDax7PwNkHmS7;~^jm7a@(4QdAZ{)#g#`+MQZHXtpER)s}M=Hh4 z$=j_6`ARWSK_bq3IWIoW8DhUjanfZAiFhtCoJowQ2yLy7>pg9Ak(qJn3k8>WAT;## z3`f3o`pU->5L=zObIoOb-0U$2o`&#}T@{JG_4VKWotZ1oJn`e)uX$1P2e)6`{K2gk zH(#>(;^y~kytw&Y*^@lNZf;DNwSh+?B)(v0Fv6HrULBqe)K25QFIqhvXl(xR=MH>E zf;C&kti6NEUa~DQY)Hg4iKuEKx?txw^bFtj?-}wxb-m%cwT~N6fqke`3GS`?Y)$pP zHR;E`+!EY(pdS2=65PALv&u%6Qni?>g;dR_YHq3W+8ZjX@7OwDs&x0!y~}jBY2m3((%m}*2X9z=z-$?aHwDHU2(F*A2<9>)6d$n$ zd$I+=gDnEX1%m76xzPSh==2mp=(MSdrcE3*9E}{+91TD`j{zVv;!MSvo|x;!bet(U z(-w1$n1(Y2XKG?jim5u2bEYEZd1A`W>^M^rbE%l3Gh5CS#9S;U@63iXIWZTC*>xu4 z%#P6T=tkRRJ<5{!N)Ti-A4ZVIoD0Pd2z953X7@gU;Yif@E}{Lt(CIr69Qjx>q8&s? zch8pLai%_h&nm!XsX9&7Nve)gb&#t4RPCi|Cso_2+DO$}s#a6AlB(rYEv0HPRST(_ zPt{zi?xyNas&1$1R;q5M>PD(&Q#F&SN9ph#rfQO^i&UL2Ro*v3WlL<^JcM+&%?YN% z2{9bmJn>!}I{RqF1RqqJ`@$5L=mr7y+^gVq>%DBTlx&#TJ;P zySK%4EoMn~?|@oei)Jq8#0+y{hBKa%LgsCiN(BrtN(=bmSAZoGL55njHYsvWc+y5L(TE z6j8(+G(HS*?D=;zEI8rdqsM(wrh_Mb4DbA>?#E_Uh zF@0z90E;^@SBdF3Q*@^7sO+fWNYg@u%j;TsRh_ANxeACxOBq3;r6e>i3JnVgKI#b!E*&TF&drI5NSH=mfm9yYj*UHX_#6O2n!T z-USm<{rvesKrQ2Nt#-D&)h+db5jyl)tWc6Cashnc1081JOwG~UQNz*9QCnX3%d6we z#F?I$d&Kme88|Z#bElY*Gd*V}Vr~~Rb*AmiOw6rf=FZfdS%|qwOyW$%nL{zxi#c+p zEeu5Oom2`RmlxRXVe(7TVkx4+@5wu9pGw5jCGA0 zh|Z|fT&Re#;ou^`84VOiMKLyn+&*+hgUeCTktTrzwAcW5Cp6qeaIPfK-4+#Z2}PSi^$i3uokj3PAc6RZA>@Y+s_PJ)nJRc)i6LIW zHQ}d#mhL{{pqHk*?_o67)7`psWRJ@_k~eQzy8E{&W9e>_Yw2z~t9<+=>pvmgJzz~C z-QAa34;D*z_tq?y?(Q77EYscXHDgG3H`a_H-CbKVhIDsz&Diraa%IgJ(%t1XV@P+G z){G(DU0gFxe4T|gV@P-B*Nh?Eom(@8bocI>apCLSSu=)o_x74Gq`SA)j3M2OM z?u|8LNOx~p9)UZm#&N>$NbVej9H|Bp+>X=;4n~gDP7>UHpi);jY&%kKN%T0?WEjw+5uj;f9Zj%tqjjv9`7j@phojyjIoj(Uz7j{1&jAbW;b zV!t9WE=vqc2z!QDs9TVT^Ab@`qP~l;W0S;iTO!^|em~cJe9&@vA=nx#)$=X(9wu{zml9~EfF~4d4b6pzrCD;p zr{Yh&el6XdQR(RDwKSmm?Mio>XDH2j4vqN*>NxnUKAB0XiOUf>#Ao=_t)capm!4RX zc(cJE-L0YFr!hhrHqzZCpP*j>nV8$f%$;dFvk-Hun8cZyGlybs5_9BC#TnaN zn(_5wv>|bU>x^w=&G;HI+Wfd3=!`Z^o>C(3$J1q&{bR>(6i=UnT5{rjJ!iB!wqP+< z5wFrXqb3j&Vytl_0Gv^?i7uMZimgMua^l-{+v`ch*dXx2i8DQC=3?#?GjnF(%+%4u z(ZrFag+sTz?vdBPnVFaCi+NB?51nnVgCO1A78*B%hBXA+UR9`D5f_(*qLNU(h~QUH zEJ=6g5&RiO>&?j&?V8|SWv_TgXedESTSbO>xa8aZ{(RD=d#Il6hDu(Gjq%@I8nbV+ zb*X$SwxVngMkaq8D-pg8&*R^hAb1f}g`-Wg@o0t6P;1}@22MO6{%;WER%}HiT+G&t zE*2VYAhb=JLK`}^HH+kAM_XxZ4!j-LH)d!nX$}Xz{o3l;AB{jX$7;E4ZAUXl z4M$T)HBhsDAAm=4oEbS&5p$QAvNL^WN@DI1Q*@@|OhL?TV)D*3oXLr~Ma-@3Y@~CWhmiEPIl)vL5yO$q6VLIZlk`?h@b0=XLyMN?up?%yIBJf2 zAht3KF#@CyVq>%DBTfe5Vhc=?-Xn2ci&>K16Hu#b(cJ7##S9x_hBJAMZz6V;dUDdS`OZ zRK(mTrs~YxnVKV?urO6VM`3otw1oKx6A@;>hdvB?80|33VSF{Pq`7P$NCGjK&FFpr z`)C_j&WWALSTi^?aioDIY3s-awi(?iFAXf$uFh-vO#s-$R#>Hr08Bu3SVy+RRfn^q)v4Q3HkYY5j%$zed7<$xxw-soxr2nF5 z35Zkz<@l15Gg=)j5n~lGgU+Z4v_y5yc?(hyY^Q8Lf_37Go6=%g(3?#IhJ`9I@<-noTT= zu?`W-&LjZpDTsMgOx~FzXL4d};Mh|-qakG<>PSP+>^Rc2FgxSznpjBb$EwligCcEnsO zX4jdbGdVF=iOD;Yccvg_PfXF7U1v&SE*DdFX4{#Hm`lV|o!NAzCgvhB4QH~>v_U-4 z!>LzDdRKMesra#6g-9NQT9LVvJa$GaCV4Ezs^q7n&Zsdw5G=-;$xEBgr~~XT#8}sw z(T+2D0OPtX<|;8;&J>;56mzYZ4QI;EWF1ujz~Qg$wgo9 zNpIVH8DBQ(Rnq$ryMm}+!*w73bY5Nvw#J8;ljpxsN45ehSAxtG=CwdEzOG`+*jz|s ztN7Ply_WROt8|n@BsXs<>202&H0#+l=B?Cm@O$~yGv3xMK1ZT%4Xwxg7Fy1 zXig~{DF`^>bCi?U`SQy9`i_1~>nn(P6u`hZlQ>fn^RSq*GjnGuVjd7vb!O^JP0W2_ z8qSQIX^Xi_OvjnNGd(ePi0M1iac1CX=XY!{wprSa-zZM0K&{xEc#_*0t&aYSv5I(- z+Zi>1+f-t#aXiUA*4or;_RyeKY#riBZfE8I>RE_+Sj^m+#F?3xN5xE?IdW#=NJG!X zq$5oW7nAa`i6AxWjHZu$jToEQX52w%+iN38dN+i|HKAb@!M0Zs>XyaDC84M&R4*W! z<2*}JsyReUp~Q3YGDSNkcpk@MgTMm4=h^)0HhE1`&vb8z9-BS+{FU0A+Vt!|yK8dE zqT@{y{8zY3sp6ZJ;66epxp*iMCkXP(3!&j$D4Ge4r-t}!58^t0AU=|{JCJo~tE62G zjb>Dnh^q*)#Xl)DEDJ@i5E>T^HRG!g*YVlO?~}Egmvy*@IQR`as6-cRe))G=j#VAx zTOpjo8#&)Ia%`iLe9xa+miKbZ_SbTge8l(tk4qC*I8e*8cX>_ws((TR%^mzLztY zR^8gpsn(D(T#jk&QHK4|b*SWJpm7R)hmFy6$F52O%jBQ;sV1ogpRauF82GNL*wC#@%5si8x5G@eQ?;OEA zpPnH(!<@=Go*?qkSHA2`mf4RMcNy}`{wp^X!<)4K>@!1VfBsGzr1}Q7Y{j;uw%+YlaA*aSe|-m)^2BY|=CQ-l zV#q+;5E$1G81HtW!L8^IAg_t|V%$?~uGZS;W zn5i>uXC`896*F?C=FC9MO=9}aRGiTu^A9diGrrbryv~9kTYD9PILZsfdqUk^M6-Lj zz;IjC_!6Q0O`+2lAqWMQ^fQYH>HNn3y~^RYe|@DkQni+<)l{vdYB^O)saj0cLaOFd zHJ7Tpsk)P@+o`&hs++00k*e8L&7|s4+PA}0O;UA{s`FHxrRp?QC#gD0)j_KEQ?-|> zom6cvRemXj%9fe2c?juzn-fg^0WloeJduh=XZNX?AQf-S(4wU|oQN4Kj+)~sh^@>* zi~yN|*x1@2;$$u^w!q}*u@Kj_m?fQ`fLdLP=4SU$%y1xPcqFg!J@Oi7*z(y8PQ>kJ zLF^3g7k7HY_6nQ>f@u9Fs1-d3;D(bk3um?+9Xi@^q-~k=O?fFoqntAqwX82M#v+;Y zfHM}|FhwyI@uU=-v5f$xEXFnrJ{#jq-kGYHtHjitDLT^-bFG-RGi7HwVjdCGb4L3k zX3CLISePoGqcA&RTEcvUi3l^`Lmvh`jCO_7s!%w1wi&h(uri@8Hg#hH#XRWY}TsX5bd zrXl7QF>Pn6&UD1wAg1R`*_pnh(QjIp2Q2BoD8?K_LWXiY0^p2R$91b1tB9NK&Zr5T zVu`WF@w}rmYBtxbVyr_%iZgwH#gLf0#FU&FIa3sKpO}I(Q)lvy=8kfXG%ZB9ydIF( zjx&ju+Xiu%-$HPh-xL~e2o1A{W;Y|yJz`YYf)5dF)`?Jkp`jYj5zXODAf6)lfuib~ zn2D=UuWRJU1j%{rlb9uYt+JEPSR%VMk|V%Zrrfmjw}jU$$wQL~9;USjA z*ub%;bVftUKGadphJ@L1q-kMxzW#h#wL>dOlP=LhGm(~{}M;?gsN7N zd=Fq1$pdG0t$EC(qnx9jqdbUD7RjsNOxu~Fm|Mk^oT)ie7ITxBiZc~ws$#AeQ*)-| zOhe2yV%p9Woau-;DW>O4&Y8ZL=ZP6Ov*XMN#LqK1hYIQZ9%lmFqGHKNs1R8}P%AQb zZc#a-6_XPbV^wmC${96=jG!26Cby`ZQ3u#xh_SA5i^`b_z#>x2O=9xS)SStQxmC=r zGi_&f9Q7P+JJJMkfhw=t<+bU|z{_obi0LeXn9c}|j~E5JMTOv8Nuawx*exodXeLyj zA}kGv;1-oYJV3OfdsJ87OuRzvb@dGKFH)7$DWIkE2kd3jbpE9jT~FuhT91?)MDmA! zdyebHZ$!0pzR9(8euk5ke^xqwi#3IG{-)G=uvj{OW6fge{OobdGM%4UGd4WWee|Om z0AE`zr1KBgj2$nTtQmW5T&x-UZk(?fLpp!9W*m9R>6&rk#>tv->c-KUF{JYcYewaV z*yPuY3wQ6W851{l){G&Y-(E8wdCA6_F{JZrYsQeypWB5$KczN~6Mjc>=QR>Xs)1)d z9H|i;j2x+*r0E=~EA+^bdP}0tkp_eVlB0>&*LE~@)NnL&RC6?URCTm)RB@CzDmyxK zRC09WsOU(s#BRWm!i@uyBZVWU4UQD9oMwSYDeg$@Z%d4~B!-&^Qi>Zw-K<2Mk%*3T zh^ikV*p3s4;X)#wBY0KE0Eua$`*G>~U-%?Pq<64LUif5B=iBDX__9f_()pHoY1VJy zy6;TA#*!%~buw0N=EuKDN46@RS32Jm=Cw+(*3ev9vAHaZfA90x()ksYj>?GSuB_7e z<{3(}o{}-|r;dZo^ci;R7Rh>bYiK>@UI9z8S2h@=^EEWB*apgSUI>z9Hi&zzp@x*C zm(ae3yLH+IpXa)%jL-a8ac0h%#z$bpoD@@VCg)7i(XOMCqa8-u6I5i@XR;mkFd$#*qMUM$IO=#8`(&vOA-$ zvh9koK_JQQjE08;w-_5ZezM_=hLi)hBMm)~=Sb7Sp<7-y5&X%B``56RH`)j>N8qny_1g`^l#fi{R zB2rc~dDhP;uRmfyv=Ny?69-Fd3hBx9O{0%7`SoXqN4&KOop*sh;>}8;de%0+NLg2& zYr4mh(nHJ0a;e0UjYZkoQ<3Fv`O=Cda`#SkmDc52X>7)!GQMo-AntwHv)TN;z#i15 zbv-qzo^{l5wBe}jXwy-{kw5%Bo}Feb&EXWmxK0oxv_~?=1EHudRPP~p(tzc4JZga8 zaruVXq8dxSL1-rOwFvrV1zIXi-^_LIl&^@d$Ox$tb_5d;eX|CfY=!2Gi;NbnD%jqK zcdrq&Dko#SD-`Vr)wdD6dd-qnZ6avZhS?$;aR#Q!ikWWpnh12H5#fTykw%Lcv?lPi zJp^%AK=8RKFJU(NrV^wOK+KV^tE&pQxTZRi^GC*UabgZ^wi5LPf&`iY_F)v{X&#pE z`3N6VyW#^^p1AGaD{Fso-j&?Xpusifry1SElG`QE!ojANUpeZ&ijn#Aj^9_QSixtU zy<}v+JmgJg;1$yox4pOa(0QMJ?|C=A;NZ<1ACkX+0Z}htnYlaRARhsZuLu8+ATSg?5$Zf>oAJ)9iiCE$33B8 zSV=wg&p_Jj6)~KLN4XVSH?6cu2sOb(aS+v54xItYXSQQt1MERqH9f$Wf_{@9NucnxM6nb%Ru{qss&oK!7A7xWVNRAtw+p` zNzOy@pZk05@(#*&-QwmMGVY)u?iY3p9|BYVw1fpPG` zy#PJ;ig4fewV(eSf4JqRiWt}dv7UoZ{DW=m2fxf_bnq~X*4U;eIePmOxudvAi3P)d z$$2O4p0e{J9I)i0*a*-e>#_fvW`SWl+*qm{Z&j#nh1flqXk~ByY-Y9fG)w4E4R=gSA zq4xNC`qnCbQ3^o~1EI0kHy(j#gt>CcZ(c-(Iq;1!FWI#s9L*PI%!s6cd-x1>@`2I*L+_x>*){l zPaq1%wzlL2r!UC#&*SKMIsfs*@E!&sll)f|J5m1|4u%I$dZLYs9lGCTFXCNsFW1HN z|Ar@>z2V?%brGbaJ2OcUj*xcX=M^=U?267I*x>xspx&Wb?2c|ja011WAZ{3lY6A7D z2|mG#-~o5HO{gsS$v^$?BxY`W`q}4PHsQ+?m^j4W@{3QPeQ#kwfLpQUZ@b5~p5&=N zr~}*xV)+=8Fmx4wGW?WXV{I9)NVE?tx!}@>i3qixhjKSsjf9+GR zT?+Vr?Q=oH%Zy8}J+|i&+dL;qsn<3I`1T^ZoSmTIWyYn~Q_Rc%%$<5|Qo#RfzZEpR z%((QLbI2Rn8Q$@_vJ~+D+HV96FEcK^>}VNI<(#--Qw=H-9a zPQ4Ne_g$g!N4}OS9ZmI0M zY`1J%+HKTl5jueP2pt8Do|qBehBfYg8+}*YsMgfn|M$qswb+=xMa%> z8eV2xdL4_<)N6+V9-+HI!^@0IFN;vy<)toLu$QT#?V#ae#-+=b;bK3JAKUaMU)lAb ze&O7M+7Gko*~v{5I#K_*C$lGQuwY#l&+oEpspm!^v@4Xk;TdON7LE}dzB5Vvm+eq; zq8{5m_*Z-%Y~}J?sQI~pt%Ad`og460!+%}=l0K@U@|w0;pv(9ychBa3Z1;RE(1Jfh z=REkcL8Fysq{l_dtb*ShR>5z~D)`@Wje@`TGJ^l#f0K641^BRgKBOrg{6|5f0y8cv zSO&jWV8OqD_25r}hKm`4%kkh(y=D~f;GYK#FEcK^js<_}HKBk9|1@ZLnQ`fLEcjEe z0R=qxM?u5Oj7zU$!Jm5dDB!{04;o%(TzVY~{?w~Y0T2F8(C{+j((738r(QJ*cVGWyFNd<|FEJn<{pFz1Kr_7A;$8Yb0r0-Mi~nszjrr zMC$`9tylr0@<UTTsX}DX+&|Jhp%fF{Qa3>RH-~<(A=MIo=}R3ZYdx4r%JV>FE#gfnJ1KDqFc(x{i#w(WYFBN z%o9p6(Jke1Kl@5qcWLe~f6e25G7mBfUkk;l zW9w0Yrbm-`Ld%#4a9x;CI=fM$F*n%tD5n&55tBW3{rCc5*Vm_lT@M;9?Ap#^N5BpO z6s`Q~%o9K}(FOgKXg+3Fd)%ohcGg;tVr&KUQ{@*xz9KMhRpl2jY-bk-=3_JUCQNz} zC=w+@dprBry#)dw#HU8`7p?eMcbR*j$wyU^fIi{{>HAaiBT@$5(OwTV_vq5+wuSTGZA0Ak`(pr=Uhkk)Vepp3<>| z+-O0$&>qh4IuuHwIl?(X4I_?w0uZxcFM6EFwN3>DQpSLvm9IVrVKF_%O9&8c+MCAi z;d~FSCYF|lwH|=7rexr0cwsff?;zC}_qtr@c#|nb;M?JY&2zE8tFgG^l{}Zu&44cr zpjhskJbsiY3^=@2H-c(o*0yx*2nU4Ip z46UWo12%Ph38&OFKtL(#+Uf2i^cE}AnE;P@&F%_#v(Osw7Oq$ohD!?U0+&?9hj2zV z4hU5`x1j(l?WA1(Q)!45tNB0RV?AI%3lA{{)zG~-8O3Iep_8ms0N zeza+Hjm4HQlls*i;zygMlV;!s&fvA0x!^XsjBl`!4w>QQs=*BtQC_R(;0pKBt+@5! zM`KQKFL8)7yB%LG_-Hsy#40ABQA4x*TCVF`-hy91f<@s+V=4I2SO7jRo%23sfzK-s zJp-Rt7qftW7wBpDBK{S$N@^s?6jwRcGQS6@LWTwW&JC zJOK$NqWbB`BlNq38M0 zq(I7##w_ATVER;hqjm}w1kNO7DOJ8Ls`J% zP`>dvbn;~3&<}7^Q#6MbA> zXsT2#GH4E6V4hHliEb$$ho(x+K?cpCHRcJWnCO=BacHVk1u|$3jhH8tVxn8h$DyfG zGmt@Z=q&SuQcQG9`8YIHY8oP9eDIbTXN=-oq&7o7x6G}1BE#>;rQbmgK zR!=2@<_SfZ=oaz(XzX6~f~}eQ>(!d6wc<_r(N0CCbU&IfAT7dE;)b=0kVpH`L`R4p zZNe=*{b=3}ODMXM*{6+E2uD0p1(&T=0m?{KL%?Dqx~pfy?~50y2Ld-fHI0 zH%}Y5EkXv({B`CDrI_fJ@-cs^R4p=S=3ii*P>P9e zDNj7JuhdsJYfc`!$`j9I9?y?f^AIhGIk*}>npij|{5j=EtHnEGC@*jyQ6nBvV?JQH zezcxLAP;Y~AC2$SuYp6RAB|aZ_|e)?g`Q)@yI5O1&J=Ke*X1ehXL%p@ciBWKL395&^Mq1NbW8cTKUJy_88r8gG*2kSM7NZW`%|R~kU?|*aPx#xOms{6 zxIa}Y4;eJ~=bI;#Vxn8h<9_y)`npPU{|PHS?kDpgvoLN}KiVQNnc??3_Yvb#STEdy z(iwgptT>3+11N`)D+ukg-0>ABIV}E z=0{tI96mo98w@0kAMMJw;o^WFjhQf;#Z~*!_>|^H6QcFUk5-G4>3%e#*tZ|82DyBG zG=nDnXfOQR_=uQ=J|ZHQ@}p_+@T2{0U;5GJ;w1!#Hth`*@uTsDZldc)V@d5t6Num8 zSk;TVbb58ZnDUBhQbE!B@uSU>UvYg~qH|U=iyC5O z_oG#?L9QQ7e)#-ov-lEzvE6jH&S#TG+=a!egaZ9PanSoVJxdGYh-qcm40BkvXU|#E9zv%9sQx>#8 z2v)XLfJi~Ryhbfd01D!ItUevJ?Gm(0yMoyEHgor2%<4*5%Y>G;H3$B)m+>64mIY&_ zbLcs{8qc;>9}Cq7W94(y@ssHGC|wk^%N7J}s}|+)zjQ$`R>rgzylX~!6Vl=Nx7u;% zZ-qPFSxMY$g5$0BlE9tyR-}RZnf2ZRoF#yC@uAsMV(T>&gEc^-9pa|!F# z(810TQvMW61@3H!l*XLzM6E=`ibbs$_Cc+7UR8&ICRlv1ZndptttUW=jH&ma&GG#S zeX81uK%5qXTURg^>f%yrA?iju+R+{bl!;KR3@t!P)#{>4o+lVX-=t(+UW|(1vKz-+ zJXA+sz@z%KbzB~b;dfa*fP*OIAVxVV2?=mil7!!O<}uMli(N{6CzV@Ro7okZbFo(JOX>c#pz?ur}e9G0*mNJi}z57qI`6L(l5wj!u> zB;Yv{HBrN}2s{Qpu&oM?N%>h?0V5AjgupT@L3Lp}1u{hIW)$+cq%`P=fKr_Heu~KE1 zu8Wl-y}5X)EF}cO&jI(=&v-dPR^Cy^(_e`{io-Z@7yp36Ny6b%r zvN)FjuFZ0bH{k{!{A#(y>v2OMAzVX8JI7&rJ1PcQC>S_a_-MuuzMf8`Dp!*QFL_>l z)l5MNs=ap#s3y`tD#FLx0S){p6~%N#IHAP)u%(_id(Xqv#Y7*APvDX#za)No1R{(a zYJuj$6`w$2jaZnITeS>P8Cs?FwpCYEUe|L$YoIfdqYlKv2&71|7U1^++-q^??;3Xg z%-x;iG!v{t3tK;Ci{pc*vL%|JHGoh{GIsz^%nN|FGtU1mlgNwMXsj2=EnbV89iE44 zsKD6^OLFqN23O}~)$ppJT)sy+DUE&2$bj~;G}cvE++TkkPEH^R-W||`I|(qk5;E~O zwg~fw*FR{^zfLyIK{F$pL)+yiQ=IsmzT)fmBpz)DRN`wUFtxcK>3>tLV#DTF4TI}#lh(3f&@Oq zO%Rjvd8<1cqM8~MB>Ags(x3=0DM0yxp5+xXgVhD3fmi6NUv&}Q0VSaGyMoxYgC>iP zDpQl~RkpQJU5$Oee2X{TjU^y7k15%qq(rK#|EDkjET>p$(hd&liM^5cRc$j+AM`-^ zB6SfuT(svv=YWL8qubP*Jgp6DONoT2T0MiR)>>3GD?blsr6Mn3S45<&TjJT#L~Bj3 z6ro)WXuuDkuPun3JBXbAZ!NWD%&1cH9{BU!jUXbk$F3d9pDX1j!0-?gw4yL0IwCGg zv9|RVx0(y&eN!i)QG>?CsH=6ZB$lz@(Acc}6{t4PE}f@_a7TRUyiI{4U%Vo4OjF>F zRgtoLonxccHxcVzi5Q1=4V8A4-b2H!J7V1vweE>Dzy^$zegon>=B$lc_tNvV55_|4 z?_^xSBFWc#*{piIv@T}VfmrpRIf&(Qi%0K**rY+WwN>~lR=Ram1I{z_WDXQ_`71Ul z|ENhr^+-ZN>EGnb+J@ZfD=GP7lL}(j3k4^DBL3<X(L|=EsX5_Er z*i+~GM;#3Vj+-8%&(JqEyFhK$lp;Q3>Qf|h@e5wssE1@ijXxbtYDn(HmInvmq#(tD zOE53Ln9rS%fnACs!Ohao_r<6TQYfVCvW+ooBYM25d~06$-of~UXHS4b=!3sungpW6 zUm^>LxUmx;cN|s8=siXn3)^w{xlh5EK&5i_UU&&WoBM*AU;Xyz+$eG26Rn zKo5ErR(*qznDxO+vC9glnr>f}-^`TzR_T=PlE7W{6AO{L0Mblz`=%zB+p$-Rg{rwf z2|R~pwaa*DmK4jTu+;(&k{*m#|SJs3_8k1NSxR#O~t2U5VntZ*;Ixp}^w_lF_J3 zl8Iv#5ICm{Jh3)tcLwb@RoQaP9nug>AFu2`bd2D3C2>37;I>u3gIl%-w?I$awi36% z6VTVMvY*ur%c$7F`l5-b#Miy8mALLu-}q`zSX(iuG4GKPpsoe!d$h^TkH)A)W0ARh z>!!f&R=fHOeryU9l(ugQ{G=%`vcZ&e^H+7}+2vbr$VW@jt|4R-1F6Iu|hbw1=8xs)yatKECOO7U%t#)kdH%rcS?qjM!!{grJ+U<`ZtVW#G5wqnvT5_Z-&y@uRxF+oh3Xa9WSeP@AC-QQ!#Y zB(L7ROhsQs!hDR%6?v98(D}>R>J>$3v#Noe?d-i$#)<~^hz7PR=A4zQNh{iWy2Kck zxB?|G*>RX8!m!1;1j| z#NMu+jBC|$UMbQDDSj4{%GLL0?&gd@Ay(E3=O$edKbb~X1R-)x;^c3!J{l0(&p8U& zWRimJc>P{>k4%xB<56U+SELJk;_Qy3k!eXN%Qr5}#Ri+1f1n!^wTNp<4Shly!UPo1 zH}O{C+e%2Ik3~C7D6hnMpf1GV1wvRWMGEKjkMso-a@zD6g zE^D_-+h}^kLT&1V0c3`F5#DIW8)ppFqotIjM&$>>jUy?r^fkk6>gcL(;2FgRY@9^G zo7N5-4KbQX-zd*Ubz+zqJuUJr%lNjd_eA+dt6L9me1io)v3u_RRmBl_MzBvc68Z+l zMCeTCVm+^jPpBU~J}hW$5@Fdw6GHN*aEjLLsF&qW0o=M|h%$h=~Uh3-GfnSjxMF3?eJf6)lc zt!L+YqyKaC17IBGoa$Dp5!u~TiYRG(jLH=m7dfj9iM0seBs*OMpdLcZDFQA<2{53D zfGaRb(iDXQ@2~+8%M$`$U+EJ9ix%V(0&x)nGJ-rIzz86b>TE*bS7=EvKKR0m`xFAN z+?6f_j`50kLg3J}r2YwkojG{Z1|Nu746Jesf%B^|O8mfy%%3 zLkKK`A-98sz|UOJ{S^X5Uz2RxE(Au-&MgF7dq&&JuuNcgh61Yk7s7YyY8fW51hhHo z^HhY6bBbYDE!;w*q1`zjdG3ytc65FL!R7o=0CjULmwsw|1E13H=@R)U>7N+iz$a1b z6Q6J31^Na)#mITkS*Yinh5jjo!M6aG8jLSJ|F^cH<}NIr_zgiLulSe{mJUw3vji17J1~W)Cz7}paE!>>Z!cC@yo1)gH%oc7&3u~Rl z+Mc^K5e(M{?rsQ2qwmCw?ihna`EjBAp?zb()sg zS%s&M5F)WzFim2+LflC0dyhZ|oM@2v&$C2=Qd_jjX*e+gIuQ|t(9)Weg86_`2Os{T;f}F zYrkzcEc;S?-*Z8q;yZAAy7>OJSHu(Fm!&23PkaX--e&P#4dV^s`)&cwa-b48S*yZ=_XRT=)g&f~%ZnGoyVX%^FS3ult4X z2#kbn$M;K(?|YxR__i$h-|@A}JFwUvEANPf+SM(POCS`qQakja1?OMK-BgTSaJ$Xk z+bP71FXbU@!+wa74yLzsM%70w#~C8e^Z6XL9Ehw}oegTNK@xrdaVDCT6!!13k<%nf4YEgXVmIMbS!#vy@-DUoq&4t5^di6-HgO6 z=G)0m5a!L*BcNSd?$j#2Lh9D$jSCny9Nol`vMt8Q*^*)8d~S@K&!g7oKHa{OX51Du z>K^Cs9`bk)`rq<-cQ*_k3MkW_BD;LOsz?rmeapoZt~X%o3>H>mNZ0F+W_L!sJgH8? zS_aT8O3Alklt)o`H8u)O)t@ zyaw?U1m>^GUrWXr=g(&i z=}ybS_ZS~(^ZmfnIn7H~e-v~l0(0t94$_AgX$1XCXM&}nAI4K#th`Nqy$9B_-5#~t zxl)$C1nkngPDBJ}A@EF>(pC@Juc%`Ji2s;o)l2@$wgOJ^mXCu-+a|~3F$aL%fA@&) zu6OUy-DOK##PN6%0Qww{@-yXlJdtm;N~M zSCde1KE?-s1r$)Kkfn0D9B;eOXRe-JBUav26aYB6xh_Z6*1Ng77kBVUWd_sMD+wn) zc;i{8LlY2_;l#x6d1L||!57|=ZnZw+6%o6hp2xqZC7~w1abf20Jl>Au(a17|Idgg* z>5dW4Bi*2C15KKQ3Vy^Q%jI38+V3vvvTA1Vdmb-^Y1IS- zESdJLcplpcoRXz&p#ja5es~^ZWo>G~I_VIyPU{gU<`YMre6Y*5s^Vdpqt(bG8{=6^ zbyyV;e9&#t(yh_5uZyFhZ;GSkIEZYilE|!`N+L4`mPDouD2e1xhVeAn&aS^Zu@mWd zy(sF+597Zm?}~*w)JNi!*!m<5U9@^A1{M?~?5WKTtRLQ}+S3J#X_SEneI)jr*s$=2 zgt0?{ym`qJTJD*pL%%=dbY}|uA@e=}Sz!fZh;=lm5ik|PF9vE>L7RoQ6bEV&#UsC* zc`jl}5wP};I7YELvM`kLk9=%Y#>Y|XW1nIb{|Jr3+nsr^q0tDaL7FJq*eu)V?CJZ} zMN@L-5T`&E!P}gF3iXpP`mOezEN?|^eP{^HL@Wetbly-+f7OkI*_U)${k^UGQ?K2X z52*t~ps`)f5LlbA^>LURb|+SRX<>FaDQgtACM>2d2ezi$UtA>YQaA3S7YVy$%@C`E zYMDvNST^*Kkn-@C&{G1hw&y2tGZ^^LKkas?O;0ka$~*MZe_$Vo;g925?B6b}lvNw` z;rna|>}r_AAX!J=jl+O4OhmK_mgs?KpVnJ=2t1LZo00)LOx^jIrkJ+cIvTpLk)uQ4 zpfj+&BUNIfDRG%8fvpK$PTa-bqmQdU|69;c{h2oZ_{C=F7c(0f1)sk(4z_!CeVxVM zzfEfOtvx~4L*{F>8ogE1_c&?c4qeZi&3gAU^{raKKJYyHheBwJTHW^byvXw1^E}Ne z&agK>?A;@D0ZKr(h%-Nzay{-mpK|>G8>vxXDh3e5yxd&n$_jf|u07ZD{xs3ms#Hs9 zT9pZuTsu{yYt>7=BAzd3YFd&}KfqF8=FqCAVxH8eRux_2t>@XTXkbEZ+8|n0-ZiS# zw~1EGT+bW!G4l593tD=6F0IP7JEK)UdzcJ@W_|nXd3U;?`|At3`~#A0+g1lJ$^t_J)4hWW5(q5ec$Bu z{iyXm1{!@7w>_lAAop8&A~Pl1_>_{*FbFusdOjghnYK>H>g|h*+UCR#7yUPyuJOA)wOnjf^AyxJBgT9L{ODJx0NKL8u-gCaC z+Q;g1H0wK{qKL6YJB z{rbcHKuIkPYb1UmNO1&G?RV)q=hF#p5l`oAOiSvY&S|=Jn|01!H1M!L`d@yXGsVuT zbM9u|zID#&z#{uh&Zl$A=aXx9h|W301>Ikr^Vxs4Pv<=IWG^~LdjW24Aeyyvnb^SR58l7?kRou-!^k7GW) zQG}1tFt26?Y)+epLg_<&kXOWW+I)eH-`e#f-kN?nZQhCWW2mP)ZI0X^L;a37 zWT+db&E+tFvN&!2&b)mO^&bO^>_eS$%$S$A-)n|C)4pA&%}FlkZE)IbUL_qu=J7ji z%y|9Z_HTal9So4;{;WspJ+c~}P^Sx$J9NHx8|yvN)c4vwq_;QU8w=6Co%6kxhkP1X z=6fHu2(X+Q_z{%Ac)v&hG9WYOdj~=u_G3Uc-jr)V`gHGrnjNNl zAGynb?yv3*y+yKZ`+Tqb!CrK4rv2^TkG(znH4Ap48r~BOq{`xYa4-M8)`FKyga6;| z*L+|gM*FD-fsJ>jjdlyt9ix4__iH}QWc^8%| zpEdHi{=!&|3fznBDG{qNYBlPBE5=41tmtA7O+D6EkOQ8ddhX?^?{U1h$#L5&-N&|K zQ3b0m0GT?KXXr77Z{VT|)!XIEBoYirSz3?n6N>&rguP(-CRIv~K=>CN681&czh;O(CJC8)BSUu3%K4k*EuJ>)&_xbhga*o^jb$mtvk@BXPs5jWEWSr)Vr*C zu5Hz}{sByu8snzF3WSr?L2N5piKbrcp72ZMb;mz^l-&R6AAdzGFFci07h=EX@%|Aw z&^dxQCDl2218&2joWemS@KHm>XWiJph-;*DgIOQl5VbadAXo);>+{Kv@@7J6QG+!k ztj{HdVHhU`yG*bn#cJ14>Kd^vZRSYlxFF(-e8m%y4B^wLPJN~z&pDZ$%`U)q9;~LB z7dX?ftU5s0I^p0fXsmS2_@gNW|IrE5$~5f&4k%Vn9g4TZzmtTy9jS@4R3#RiHrPfrms!w5YvA` z|K^0%!ALf;I=eAezEPcBN^=i_S4VNe*cZtMkwGOuVL3VgGYI?j)E(y`t4DUP4#H>O zwlg~}+2oD-TkSa4h0gq0&Nt6sNyww}diCW$c&eRZOXJX_hC>zrGe{?3$CV5l@eGL5 zY0uI|W7Hq~cXxSVLlL5os2?CGIS#n-7b93%3)I>e&ge=vTeWIpqqJ*5#F`J7TG2zD zNZ~o^5f(!lf^dx;SeRmi) zuXN7coCEn9Ly$0D(pj+vCqP?t)@f;3TQratb=H|CYqQQ;mX@`dSz8>F^+J=i$=MC7 zH^1r{hyDDwlEQ@4#H`KEi!K8ReGX6O5B0+RY5by=&rkpTX!>uLe$96I8ncd_u)2T+ zIDHKko63)e#e)^9@-?iyUQK_V6e>X2iG+evS4bfIi+21(GqG|GcFU+MGqPN0vJiv< zld7pE14NBfCtU_gn~W_^fLW1XfP=D>Q4QF&qQ!+v4BUkt7v7iFUbYYGOGLh1o%P>z z#(2(jw_%Kn_3LbmaV=ybVHn0ZPv^|a7{4_@4P#77%bLy@7n!VvF-}d(n$8%-CaY$Q z^R|F74vgkv3_}yr1MM%6MbJ@S=yTPS<+8hJw}=_J-U)Ka&sY!;;TXFZw?5;?(3kMg z1;d5|1KjuG9a^{<3KTbJL^&HyQt4V2+~OkH1(iFx9-UU8wU4ncFZIl6ZEwa0zwx=Y zcdtGpyS-ZgQ6~$cO3QB`%0=4rwL+4>w7(Gf(H@+ZrG(ZCsPB%Exu<$YXebTF3!Db_ z?@~Gu9~_ELxB}>?cYmqp_O>(!jVP3;Gz6!YP(O0UiGll(QxvQNPxG%ruoAl|Qud)y z!5>Dg4}CW5vrd!V&|K|2X7DY_g6|lE?=HRJd$Myb%!fz7Dd@eVbD1>DUB8AXPdeus z5@?(^7@Rlc!udZ2=l?{l|77C40gCp|&O882f*fK|xcK|xN$iV7b#?qo>L3ZxLU{n> zl(Ux{xeq*1?*=N^7&?*%k3}8>npuG7CfL`%q!sNPq!{i8gpNCd>_?!WQZJY6V&)_pUg-^px{lo_yG#Cc6-@coI{#JHq zBetDs=A3w}X3hiL5h`4p!JLzvp8(b~Vyl59*9z$x)M=vR%|5z~seN=8IoAq&-Scmm zo_{N&=T*>f>zk(M-;7#s`g(pDx%Dmd{7sB=27=4n1c14g&Mo5Z(Qbq^b4FxM#})=m ze`XHlm#1X!d5g0IPZ*$>oH4FWJGwM@>Du6cW?w{=y3kM@qt|v!lkx)|o_3?}3QMBs@R z-8e&w?9zpS@T*8{U5kqxIpOh>$DQ5u*S|{Z#QxknYCR6(EOanw!(Ku;qVl-&F&Gt^ z?wDoVfSuH{6NR`^N#IlKL0Ak3`#UG0jkP8$bF92codH7{Ev(@-Wx)6nwPUWv=@?R5 zFxhU#z1De=>!t`Iib!_Iq33Mc2KUX`=7xUe{6<|5?n9YK>wM%?yZn)K)L(=xT{ONa zv>PUr<1wd#BrLtfLk@3XvKL0JThP1*oo7)Q;$19cH;qR(&1=N@id&o{u(%Xw2-vT$ zqjeGp5pyc}Kw9Zs|C}n|91M5bEIs-n&fe&r%yJu~O%b-fbp$echZbG7xZb=M46kr%w;BQ(SnBP?EL8}Ko#;lyQsl_(q@&)RQj<4j) z@}ciJKLppN!n$=K01*Wx$M2?Y|(Tygm@(p16ds=};}rA9tRTT0xQ~dX1X2mr6>$LmOlf zMx5zf@$-q}46QIer-z&$kzNlulLYf!Qb#lhl~CQoh&l`Ehwc3_GuXR~#n^nSn+00NlC>0(kVBhKW2^OE-d|ux zVz!V&w;k?Vy*m9el03`m6_ng?V1jo+-l~@K#(9QB9h!t6zNkZ7j&{T3s(nt+(;Gl! zHOjw@gb7@=zT`);fHe-KB=Pf9Rne z0@x^}Z*qhz7>lzBlx_BMu1HI;G}$JsE*8d1sPns6%Din37p4(KA2@dGlj>1 zxUbb2!0|3LZQ|#WaMp9ETtRK7bCCInLh+<&_RLe_7v7}CvGCrX>QOd_?m{+4%;)CB}9A|SP)6*&f zDy~84{fQ#=D_4_Na-?*TF2-@rv6oe)oI1j%Qa-&zB=A%efCQGCx2u5F^`%nu21V9q zux-79&+);3+TGPG`AA6HpvVLcl$}b`HOr-55y~aeEK}2xfFa+YCV|98M zaXbb?jim<4q$Huf{0x=Emg~2T>fY(1S(qhFv)m!s`_?Rv|1_6op=L9h<-_arFp>a! z-->3DeOJ^hF&8vb`k`5Pz;x0*(l_kb*8Ne;ry$IDo}umUP`z?$+~pt~DWyAM2;D{5 zR)faW=3Wgt;o;2Hpy#jktp=UAFtr+VGG55EJ?X9n)vz$sKeRyRYS6Gpz15%x|LUy< zy(Nz+Pgnty|$@u zjMSI1cS{#x1LB@9}6l8JIiZGJ(Z<+OL7M-dD)8Qi&q)BOE>!s$G$Q=vds z;lvv8F34N|?cJ`Su2d4+G@HG9bue8j{nIN#0U%OoRa(+E*t-uP6fKaRLZtg`?_R}4 zC@{-q|79u9-W|-zKo)!VYsucXRN4!;^l9%-xyDE(+Q8q6RHAh&_U`9b8_-PYhg4Fl z|3>0%yS;mBg|~OBFMAiW4RLzFqY_H0Lq8!#z6nwCbKf^1bfWnt z1iq$Vz6p_3;Yx0vu#$kC@w%& z7#bL;bm^Az|`SQ^9BZKyj3y~GC%2IouJa{-S z39Aog4cy=+O8mxuLz1mLM@!CM2;pGi=qX6Q1BQdj!hP5OiiG!(lXh!*T<(q2GUIZe zS|NnwTE0+9(}C^hdW%aM(_aN}A4@#=S0%K&#Dhl)4h()ce>bHLBEKDzR3P1W6nDmzpkUBi06kWDSnf70NTKC1lt zcI%@@j_Kil8LOe?)JMNT5mz7mGKaAo*wd$vR-Gr}yWjfgcKTm(x?p}mEf61k`FHwM zN&hZMS4k&(MLd;sY+6!Il~i3nRPR~&U7GJ>mojPCw&^9tfA#63&(G)2-u*8#(d1nI zmoUorsgLS^VU)(Vua7QwLHAc59nVm=+o6v}k4pEywDr^fGIw|FkGM((jfhSPKVdTe zeuC4SQi!A9>IIghGcC;pGiHmuDcJcLWi>;>`kXNOb1@s_b1~Yp!%(p~*5)PT34Jfs zPAydnB%-IaT=@rmmEHg1;$S>5CVwIIn+_0yW+A}KLkN^ayXS^0jgHh<^=Pk-3j4!1 zAXgs1UJe#H;|eL#(*>g&iMTEv`Pj%Do)<5!3!}oO{tUiFz_&&H^p1f*659tv;pqTr z(5x-$2&eU(|dXlbBgC*g6MojbJ*A7^)WxV|; z=LR%MM@{dYq^CM(f`!KFbr=R>IhuFzK zHO^lECma9t*iUi(eKg0me}9L&pJH+s;OPAw*Ir6GZ0G)t)$=@jwrhXK#~`EZH|g~7 zc^CFv|M1DC|LtmqHt?PEOnL}h$9D#cEx+1 z^JPBwoUf$eoUcyP=X{4SpFZcy$7q;W<301v`LbZobH1aU@57Ng1?Z@^Esa2xP$Oj> zT>6Mu2Xey5kI62kRvh%@V^pr-ttT9Q;(;yFep&NtD@bSWl<^kvZJ9$Cth5w9NRjd#>bn z;;Amw^5=H~1#na+OMuyg`YDP=%Mv=k>`><*D1#8+g@As?g0ChVCR2=W3aoU8d2w8 zD+yGmK2U;n7<{b^3$L>Da(g{LMe!>3A<56XV9k4LF%LQaQV(2g^g4_P&z%5TdbWl~ z56o2y%pZ6&iE;9C^Sgv@PibalY-+P``EIVO|oYvXnf~6>yLjfo= zZoQ;s#H~Ms`Ltr;V>HZbrea~iT#BXhB`B6Z%7S}B9VrN;R%eFP8pVPL62#b5aR=j> zwL-D*F)CN1SmJ{ZKno#|>4;1@LPz44dUn3R%f3YOIWR#nswGFO6jqt3Qtle;Qz>Uo z6v>-)-pL99F3k^`MWysyr}-HR#s`1c>1vjIV&wOTGJ*Yd(b#m&@|;&hT)B+?xhO3O znuTwGmcUG{)8v?bMt>;n>qE0p^XY8>RA}mrP57Bwr1>pj=ubJPEz(@GSr8$8T6@zh z-$D88n#H$BQ*xovEKK`W+@ang&4*JB=xtb}c~A$CBP+EY1dQ}BH}VThxA^=ZCB_1L zEKu*gg6nG!&+o_cA{hT!H%X6lj@ITqr*&}TQCMJ$bQ1YnoUv*bx}y0wQXM0BLojkK zdY^o`k8z^MLz><0#+F~<{1fHr6jaUvEswdspbz}?mWOS^kJBRJcV(N0-=BU=x^4%4 z#ngvB`TqvU1u*bbV;V$FNkPtYmoH65+s^0|S&B`?_AB^sJWo6!118%Dn%aDZOt{VrRDVDv!~Frw=^b8X(!2k^I|y{Y*( z5BAAd3BWP|wXb~ZDxp3z{BO2?^q7jD8j1ukd3?c;QP zHD&Cmlt!9$w`dT51Zr*%$h}|SHb8^C&7zEs)}XR0qv^VsD5G31(4pOw6AAs*yOoHB zi+cL6ih8<0d#a*KsVw4yFZ!%cRn$B>T@@91MLbn>cv{l7s-o`Gq?mY!$y#ka4DE^BTemsC zMYSZWF|FqsIprM^^NnzpSDjpogE$Get1PJu^8U)p)6U~%p6A4QvLecJ2pXJ;7d3FC+>`EcexUWUrp*L3&j`Lh-l+L$C7kd6$q%yh zqdnut^wOR+Q*yTFji2XePaphx#x1?ncX96eF3(jTsP%#aYT4st%9|QYZu|E@Ngscy z&wiHvyLW!y_xWD%U3gAT`Yb^$+cUoGL@)K7n!7$LXMKmKw^#U$tI=vWUZ_u}0nhm0 z>%L*N{voBshSE`jVTZ%6SifQeX<;K(!VS%sE8b+~0uDJZe03@yPL{~2}>3eK^un;3t%ay606 z7#^iaxxN5v3%T+b$y|$3rFOw@w7XD>N_#P0gZ4?4JXu!3Pdwvu0p2H`0jSF^ z>kv(_;Vf4Z@RL5lfk-Axl19hv3MkCmT=)0q~KS!&ERq*kI=-dx>&HlE?pN3 ztz+iVyE8aTb7gsR1wi1#?B;@P^3Vr9XIs zvword`LU#R-QL03d4cf9Y(g6@YPV_CpWx}bSZJR5a5pl^8pIDcydET& zP=QOJx&hyo(qFW|2MMy1GD1><8Y7HHf4>32NjcJA#xq^+w7HA1QAF zDMvZysA&e93OjrQC!cpQja*~TMS>hz(p(+eiY2A0HvgGS*%6?jUFwB%&_^g{d0;qY1L z6S%L~ar%8`j^H8Obyf8P%~A0145S9a53ncxf{WLv%yAjM3K>ItIK%bO6lfsVXy-gN zW|DNCxuuWX%x=iN z%F?7^4m*54u4GW&edIn68y`I2ImpfFogw!%1}2jX%!Te~olAE+C$N!H#QzFi=KL0K zglfJwFVN*YaS*8YBV2NkeKKpD?3@b#|0UUd01!(k5Z+Ak4+OtgmanOG`z0dZO6R0M zp&z4?090z6rE2j+O$~zH5&blgDEHD&#eAO{7R+w?X+MJ*bJ*ciab-X8?(3%zmi+qa zr*SA^`l;~;y0uI)Fc;<`Ha&-da5Ko*`Wh~jH#8sAgX8&QjR+q*T!dWeHYQ0B&;bn? zO!iA9cD;zA4WFfpBJ5iHHbl{AqIT0b_I4RAZg1bgm7MTVc*)*w)Q?d~Ab0G67p*+t zqgI}-$-pM=h)zEYaC__YLcULRIOfoRh={alz`CPpZHjcX)6esn&iSt`8G6J9csdy;f!2Lcro7h%e-EMj6RAJ zuA%sAr)cUhhaFysD=E&qkK#w;uwGvjUw|Tp;x`(YOfoPRsw+(*ao!P3_YmvvMVQv| zeTwOr-H_nblQjvL!w%2Gl_cQZM}i~U`zApRiWn07!N6pafw|D<0rdPevD0h>GrnXG zSsG(p<9{3q)wHxe!=uIg(McoC*B{M(8~A%-lL~g4G*ru9aq(E%#j|xhn*=uvV*Aj= z6Pp6pK+!1|47xF(YB$h{lTb}EE+BEb)PbL%t$rVx@t;vo!hdF$&4UvP?lZWw?DC3l z$Ava0RyI#fl=D`-c+o0)_o7Agd{;Zth^^0``Xd~0j_3vedth!=;4H^1C{f)2@&CaG z2v>$RCstYmd}5(mgmRe-R}h?db?^b=Tb!1%%ke#Me(2k#w;y|_;*8B4il_?+Jr-)h z@-rNO>)-%viCvNeMHPy-Pu5Y9+y<108*pj?T!B6}Ae;a*fst+ivArneZ`13=3djQ{ z)>P!I4;C8=;2*PRH8EYxLZd9mmNdyKIg#(Ai4}2?Ql-bLDD6 zm)Lp&`$j~D64>2tFs{;DLt~s1O{!hGIu=?@zD#b#kg@73%j+x9mXt5?v{r`SQ3s!7 zSi2@xdMjCb2E3jL^;eYgD@wZPxB*}w5S!O}J!lMp4S%DS(Qv4)2X>IrO}Nq#$(amh zmg_;~nrx0p^fq5fi&4%l){>!gPcQS)@sj7X?!}^j+@sy3>P)WR7E~EQPB{jTKg(pB5PkI zoaLZzSxq)yCFskj=f+o=O!+F8U&U5Iu;-wpxP*Lyo!LRpW1TX!<#T-BA3dv6|w{q0iuw;#2S|o#NMs zhqHHzPi8He;zt{>Ofp~}in9al41o_|Wc{r1v zhck%EwTE-H&%;TVOd$LaI;!;%TynE%F`JVj8lf4YopYQf8guk;iMqND-U0-Q#)8f^vgz@xNwaBt4>m0%n_h1aV9p)E zrbWb{7d9Qu_bG}qyP^0yMVd6sVZKiWHXVsy>1>+7819SWbk7)y-)z7#$$)(fYAi|e z_?(f9a3+4vdLf+e%@WSjN-=q8y%?8V0-}&Lil4JS)6cn-0Jcyx4;DY?vRb!mBH^kL|u@@2-=IS9GbLrjYEkrTu^-vp7a zPM=KL3H_4I_}E67lt-tUKrx3l+tZ(}XG-`^jt8_XmF7X5CD zXBue|C&q^!scq1^*T7K%XCtmekN0%+!s77k9X*;K2EB;}ER$>j=j3F|^(>~vK&HcU zF?;!1az%ya3QmoT!}DzvBUdbmg!veis}Tb)9Hps4&^v-1))D1i!~i`(K6*2|q4!Y+ zGv=_vYj7pKc~7VJUgGoYo!)dO8G5ffQa6}M25e4xuVyjvc|!ktKF@lj2Exaa)+hRC ztw-QWyd&1MZ8hXrbXuWcjCJJ-dVLFCLYu?jo z{TR0Wdt)cZlw=`F8Cp*_V3}mVKBj&oiP|0^Db;&$MPQo-rr_IXkI>mo8N#^hUk?BERzh_ z$JA9Ok!bG-)|gpF)d@?%9f zPx1C#?lv6OftyWqGnf429IWl!F-4$Wq#ChR;SR?}JeF+VPc4b9}{6ytNh=95&Ies!W^8 zTIO?n)uSi&bxu{Khibf+k)kMDXIqQ8_0GV^u3NB|Pm8&LDUJPmb$UDs^Jjgf;Q_-ckOg!`P;pK`@M2C?jc{}7NBtlIH#!@ z0x)J_XJ9QGSBu8AUI0_l1CyhD^Gy4WH2~%jz)DppKiO}w&_eZ(kJxqV;knGNFZat$ z19W#1E%qEtLW6ar!SaK9r-5uA%teFD?SrJjRRT~xt){mRk_PycR-ZI*_YEFp0LZ?< zl{ht^eLu(V!vVd%vbCZpFK<9oc213;8^-f=nzt{_x+xI;GaA}@2QFSW^k7y0?mhZw z4{?I(!9vZd8N2t`o!kPIKLrT%6e=8E^V^pp{;(lxw3m?=wX{WJyy^vO1zbQ4%>|i^R_9%fI z3p0m48b;DiiO%x-9$I6#wyInw>Gr13-IVCtR5;|N>R`1b}F zlMFD>IMHBuk!uUp6@11v|!YsW$| z)3LCQ1LI&041Ssb1HKLgdH-)xx-q8z%y7)fD zJv~IYj5Odh!4qQng-btY+#hKJQh1!wVQ0Nu|j7bLAQ(Znq(e zx}HgKK61LoCF9m1iHciYe@lnN}Vf-xjT0qGWXWG&3vEgTxK`8 zckZomXO48AA#q(RBA%Y`I($AjAGV-WSOtwdjJCvAeNC= zz4;(!fDQt^1R5c_uPz`>)y@3xTP zDdyD&FMTByzZEHr-^!G3gmS2#Shz~!w}!UL6!#DVd@DbBfoKnbYMeFWP7j`al^l7J zgAI8G!Xq!(`L6Hlb4s$jvnMe`7KOGJ`uZnQ)~$-s!_m_2NPZ+W4R`w|J)8#S^Z>Uv z+y|$ILH%2BK#LRkV+8>d_m(Ii_?^AVelr+&;xo_--;W!Dql;-Xd;`BwKC~TpqB*sr z3%%WLm$eDnM+n*yYqFVuz((z=d!(FyWGhmC0x#T+RY#rd!{0a~%87RPCZOHisnMQg zpm%V}JWryGRDGFO9Jsx)IR7)G6$kEX)G>e=R~K%f-$ zo6V%uQ9WHxNb|`0?-~XG4NKdD1G3e}^QgMe|2|%^LyCL2=!b&KiXRl@oPU6(9(&^L zKcXjoxJCEGCxTsS_^!arNrvwT3JwlA^*Gwh2P9yF*ecb1MCSNKb=w#Qt0i=dGgjBY z)7^}}!Yw(C>PCzRQ&}@d`rlExGvB#GRqt-d$g{C%7}|9QcDP8pmOB5*;78I^4tB2V|CEx=KCA zjF}`f`3sRB;27^zvz{6YdO^%TX;^tE^^trm^CSI9w~zQqw~qj?r+iX(E%M?55Wd}> zqAq_cc(%Iz`V{*iQ}P#NHL^E38-(3;vnK3Qfu6K6viB92IJXVTBu?T`KXFq0G6mxn z%1-NAj5QtA-T&dyBo-;gV*Fl2ByQfMkvK+>paP-~kxuFLGf#A`_C6%~HeAsyc!Ld{ zFjaPShDWWpF}~}ZHAXf_2)ef&#Z$>$+sGoewN9Lnx`Oqn;B4nt${9ww;J60Wrd{P;(IrOX6JpTY4)XCM#F~wVY?C0eXTseB*3?<+<5M5 zUA42Pl=7(^@OzhkApB)usxj>{5Z*pGqpyAAwHW*jsaJ;mzVxU{$O|1{pM6dz`1m&w zjw-}%0kdL1u-B6o zl=WyIzp&YN`=WzR%0@rR2cn3z6cs)bS{a{X0FsP0Th>8q8u4GEWgR|bP5_zE_`Nsj0W=Vr>~)y?ZO(z}0V&yrFMD4PgHI$FOe}nSw8eQJrYnKI;PGEZ z{coJ^)eoNC#`=}6|6s5F&ir2M&;30K38K`H-^BZU4H8RfRpHwFrUe5)EV0Dr8PHon z0U8@_|IkLz@>*MW$dB(Se}yu8fUZ&NtH9EBHMPYovH%@W9UQ*alqP5K)E2VNqX?o{ZJ7ILJ$rf(+W!3)Cmk77}vJSVq zt8)OtS%6ER2U6viU#81%l*MBs4{%%s(fIRh`8cP&gbrU{I9UGdBOL6`*E1X}Gpbv+ zGHOmjb>PF3ywCd%X)obm$KpN1!7`s4gjLcI4pyh>IOE4LA6%B-M8bTG$~7|_EDO>l zOwYWy=eJn+?B`L=1eioMzlD1LjX_|4L10XGY{@ueRg=$^8O>2xmrFxr3|_KQM1$pH zRIV_M7CEaC3+T6i7&IGe_mfTP{JoJVh!tSc61q1&c#1AX2eEUd#205X zGlRiKpCDr;bOgQ$JP(yE0$(gn^zHa$T&tGzN*e{Tp5nfms}~YnT!-IdjRxJ;%lI50 zy#4_bK1)Xt^hbgnF1Zux+;`Y@;bQ!hZ^1t46)9j6Bf&nBmW1$oe1kFs;VgFX@&dum zMBF?OsCxw{g6{#hOI{|Rq`oa@Z82$;%qN%Ar_8B@#F$lFrvVH}Y*f=aSh6|~St0{t zLIjS9yUDwK>LFu276V2aB3|Mi~@ego!DIIl;oPx0^<=Wp7H=bLgFd0(KFy~1WLIHk6-+AhRR z&7AFd?L+>w_JtP8AW@~5UV3wr9_>5cDaP<`y$-{F<_B8-9H6N#75N&t*)(u-S_3zk z25yR4n=%`?84Y~US!&u-WS4h9ziy6|cSNnt)U8jUW%AgBYR0?I^JxqIVPDjDK%{KF1bNTmGua|B4KcTi>EOg z`(Swd601|R8_pk7|Kxz1UJR8vm%C6s%pHTdL(BzOFJGDw%o*GEK?h+C+Q9Uf4yCh7 z*+%EEjFc{Rshor4smCpi142Wb0&%^!InSU6;2L+Z#ilD-3iew&pjq6d$c8CDat7e? z!!|4D74@rczK{`vIc3sm)&1?)_uCXs_n=>+Zy)Q>Dt`C(bRRz>HApz!lOU*kpWl_A zsn748$hXk3Uq-@wjLOw?vG-kfmI1BY@46r5i~~|wsz8#d69;cU71(uQWV8GKfb&2QJ*TmPJ)_d z38ovX7FAxIrpoD*#lJ|r7gc@*>IVM1-_xfmzxj=HRsP}KZjl1wPgVYQTGBSE@}&xx zWPa+hcUAraXq}WQuWl3Fm#NBMp=#<|m7j#_`&8xEeMQFKA*y^I7xXr$^4AZ^ROKSU zM1J8raaWNi8`bhy_tan1+(=!A!~0vq3ScqmLZHA-Ww5Y_;N&W z)JyoxNMmp%26;Da?lbJBGY;-5v0t?87bn`Uo-qn$NA;?S`EOF8z?Nw7sfxQ*ahIWL z3#poPJ~aJ3s?%G}bM;3(fZOGZ;Za=>D_^W0LBu~aa-cIBn_%e`nAadzI8k}OZufqESyL#lw& zyWGquZaay+S_=P5QoLSphn1=*R;WYCz|z;G*t}=H?nVTCKnN@ib*uXT#mU1Ytsa$- z{agBlEu(Gj>Ff&}yWs{1{OLB7ZsoaNHPqnwP{i603v~cDI77-dsG0ZE%ihu5P!gC^ zU$UhhJEd#If%Enj-LP5=Gv-#moG*=NhQnGKu_gwe9RfX!*`j8jBCqP<3YS;Q(7yU; z*|J!u&TZeay05!iN29yleH`kgqVDctY+lZm!RD03ZT5q0&2w9Z?Z$yWVXrnq)q!`^ zaR$+O87;f#z8)>Bk(LcG1!~YTglnvN_q56vD~JcI$$6`Ag@Xtyx|`(bzQ)QgP$AOh z>jhnUpY77Q0_o|`HI3$GR6U|+)pMl4&8EN{RBcz8HnACT`n2DeUl*e-wxdp1Xk$qdT1oDsY;$UtfK!2 zRS2~C23kc%^*i^dK7IpOLdyI~myt-H+ut$qSuVW&4Ll}fpiyyeCKV){rl7HLvk*e| z__C8^tFGCwi{3iZ^p@;c%0C9Z#Z9&S>n$C^^C+i?l4vweAH!g*zFh0mqyMRG)vye* zg!-opS9O8G=Bl2Jcn-Uk(z`M~-EI2_Q;Z3wLxsJ5eDt<fz`VF8Di7b?gDO*9RCY1NnD9Sv*!eEJXFk&u zVL}E)4(f@<6t~zPO)(}2hfT&qOpHm*ZLM*vztcXb{FEaPi^Z=0ys~W(672HTE5C<3 zqQR)aFhoV$41=jWoq_6k#AA<@7n}DVbjkaGvme&o>Yz^uK%9OT>CB6e8LC2n)#=Pb zoqf#8WSz`I&eb^=ASZWZvD!cRb1p!gi?A{qA3RCttVPcKP0q{wIct$~f#jT^bJidy zIg>C?_UEiY&RWSiR_C09oI^~`0)Ngq$XO#fN9mjq>nC-LBeaK(oG=c(yb^aMhb1qI; z8;ejD+!rDXcq`bY>hi_N;jW^WBifGyZ&54oE<#5~ zq^uL|`HAxjRLn|{f%VHrrBMC-2$&BW0*io+YQHB5D%2G#U;S(W$|EZWp*jvyi+NUX z&ztIa3Wf$k3`suK2%my85)P0^_@~J0?2foL6Dp7o%O{aIlcMqhIQ-d>FA!<8{|+dC ziAIUPRQ-v~Fx-3|N@;r>a|5wY3t@Ko-F*X{eDT+P>TruHW&+R5MwR0m(!LqmNgvP7 z&Yp1LUGjWoc^3p_UV!U(;_d4+-adE&^`@GX{lC$84!Ak5e4{!P<*-hQY7{nm;5=G2 zLy3t^E)yMdk@A&obCBCEpNH`Hbr9GPxCr;1hE_Mx8tsgeZw{S=u>AOv#T48a0e|Yg z`k36DwWLNujr&9^*_x^@SwSeh%eav4iduJpq|Y%dI$jP5ji@V<+UB9QJ9~aO^#WS_ z^RSG13T8g{``(jCfiMle);Dl*PQ^h#+!?+}@y-oa{8n$}YBr2^<-Dq{@qs(xG`*9! zz?FJu)VdS6taet%%IE1%mU5v0hx@oygG?J|kgw7Rm^Tv3_hMOTfKX|-zgd!}-YFaa z5`YgA>OGwLj#yg)D@wOu!y+tn!^oebmf5Xg;DMM+xDv?)a*taS6cw$v;1_y25A|}# zOn5dpiS80`Cm*A71(c|>JYm&KQ4=u&fhy3>Ca;}=71ox7wMe(14lP)O7F0N+qHx`X zZzS07GK=os`&LD&nHH5dfd8Pg5{(t1(E1&`Ad49OD!`m$4*Z?&vggB&?qYY@(_<;- zhp)KqXFwA^<&1t6E*j|Uh8a^;*YBl2It_2o)oJ8E%a`s)w-SgL z;;M+e#mwZ!Avp_Wy&u7rlI`|QKo)DlfCYHG1Yr8QQ9QHdrto4E^~{0#S~+L0R`I5JoP{Q2PM75edAq?l|Ht(CA~r6j#hf`pee?L&p~0_ z7)yN@n);ZKLt#s;UKsJa#YUQ9Ob`ky#}8Z1ziMieowi=_GwVIBVA>A6L43u2p{YD++s90Y=fCW?xNNDWjg6nM|A&+92Z>;hV=2qcQmR+ zXT$4VD_0D~p%8z|`%szhgvwlQ=C;;YFX5h=Db||6Sg35NBVSj#DFGdMb($teOHJ4y z3Q@LLFQKxY75%C!O;oRU5-QXsRMld=sy?|3_>jG8xI?u*!^uR4UJ3TWGZEeD>erbg zSc?}mc!7WZ)?W5@T&8=VYF@ai0_X~#g3!XdRG)bj@%ma6&5^4p78Tz0b5xLAfe&?( zfT?d`iTduvimISSzgOMdGE_?eNbp;65`wxLX#lMv;frGM@+jHc!Kj7Z0%GdosTtpm z*gROlrRX<{_)C0^rG*c)mPJ!#6`lFzQQuRvOB6d7;%+WP>*2$Isx7;$1F=hEv{?snDuZK z&F3mQnXBk+287dcKv)5dkc&@%G6t{J10(y*PLDx3>FSqFJ52C)_1kP`fOsr+D{uI_ z#v>EFmG1z$06f4Z9_348HTkeXr)ZE{5ANT(Hk|F^43aG@M}6R+`uOB&7wV-=Ez?U| zDR?4<_^2=fb%249g}pFd4j74OD&PQX0bZ-G0-%1XWd{=`YKR|QuW`WyZ#y3~Weq63 z*wkMR>UTRlb1dzYnRb}qZO39e102w__uGcIbSIeLt^5R34kYowF$Pq=^zbGRN0L*9 zVfZzMK`q8zp2YoB0TS$_(LXb=fkzr1fLh@L=7k31sc3{hWAX_N!wb#}6KDqnBMmjG zY3*zzfRb>WpY&1Khd0y};&_Reh4feE;K%boc#nTl$~*P^Ruc~q1LSsmL2))T`5d{* zVCf&az+{+Dxj6K9rIACw9Py{$B(hMMocSHlO4Cf}Sl5kiT}**%nJw^JtJOn)W;dvJ z8e*ReLdT{88>KpY*V#o@^(^+CxS5RZRnT=s`vfG4e{W74C9RJ1cDS zdG&i>BYd}ENd`QF$;*ofs`@TPwpISeO^NU zd2073t+oP-qQT$bu-j<7sZD-}L}o$%V}aikF8fH0eZ2@Rz=W}XV-sFN13am1_E6_I zrH~-~}cJNALC~HyX&Bo8MEDl)l02An=r@4Q&)Eaj-`=Zd+75rPDNyk_HeqQ4{mW|w zO`^fb0pR3b0A%d&zcR(h6=f49Oj7LY$-BTJ(_7|e_wS!*NyeW>6h+GrC+w3%)F{&? zv*ds}|EIaQk{yXGLFzT#L!*&M`#}@~vVIChq<^V%p{bJzIiPI0trsZQxW%TMVodlP zgEzyiZ>8feI4uJbP zvQynUpIxJI!-O1AM)d~8?-r{x#h73~5jD+o`}G@?a<|TtO`S~00cGKwURWu0i*>i_ z9x&l^5ZRe-eRZZjCggxItTz}F-C{pB#h4&Ob{c-@Q&0MYQ8EUHh>YkVzl{9C^B39r zn%}{M?U9q*Vn$wQ1~c`@3-|n^-}1s|_yaC}Rd9-c*2W+3MXatOl6d?9=N5jZtgr~h zJpO1xyExuj(1MY9y$@K@kd3GTzmQC_glZDDqP}jRVac3MJbqIzTvFzcP86DAOdz9om%sA> zaQ_B0;}7`U%NjA1P;x*i?hQ&>5Sed^F~NW$%ir?B{RSm1rHnUqG9d?)>L2&Q3Pl*f z%9fXO512qu21sEd#EAaO)Ype>vVU(d(z3}-rkIgU^s$mY{Q+_QxmMP%RmT5sl^U|f zEMVgQS3=_PHN#WwO60RctJFW+<-PX*qyB*vX#YQ*na+aPKuP9ComqR!HA+o9hjfw7 zNl(E7lk+ZbPWaNm=TQ9rbWVB-YX84g>KboOY-Ww8;AEYXo`O_A64bAGbJilK_7pr- z=cK3Lz9wgpH)joUYEQwjIww5^wg2BL_5Q2UecdB&lC`JcD4mm@g8P^{mwR(YkyCpL zj?g*jDY&1>dAFN0+f#5q$*DaBFHZQnN|~Lp1=b^|p&AyYCL?Vq>BR236VHf!5l(3r zx*HcD2h=ZEH{r6k3d*Wkpi8x~!wjGwYBusNl&Wwd7?wYMjmj|X>vxjH!t~)=<@)+@ zuB)%ZU5Rdn>i&NSa;vj!+2jhEmmf}^!tP6R@fN8X~1=ft-#)p!;x z8qoWD?SZqIUPRsMLcaCUb15x}nexyVb%}PUukbMpK0gU&u7wG?P!VP=hLRDts4jZC z@$BL{=U@}09`R%{hd+lohauqbY57_~B$((@@DhP@&N}CxV0h{<-?pA(@~~vZuFO(^a`OeM31k zdnmsi^>iSILe33P@!6pcI|xEwu7(3;WzkmjXxbHJS7p?Onej&*0n~xuK>@ik6nC5Y zplVTe0N00h*+C>SV4{pdC&c@yai5xMB^W*CgR@UYzAU@M_E@Vqw7^TdJF6ke}> zi6dahqwr4iMS7@8JP>y>;9JJ`(y~j+f@K%G_tx6J%Rr&iK%stndTF^Gnpkd!$CumJ zjw!c)P;B`Y+P;xsX{DO-h1EcD!3`{4W5*>iu*eqsJFMPz10^CWwAgMEaVuO`t|Pq5)PsEr zNIi`@b+EiJe2*Ue9FwC^W_x27*Iw+(TS2$%f&*H zi5#Yh*3>@@^|wU>2yz>2v_ebe2qB0ZwmrBn>P7)?duc4RmUu#LhBu%|2APx{?8KWy zIbtRmDB9F(`+GoO@9PNyjChPZmzgmCwf0Z_N`Kn#Cw>p=9@annmV&VmYyBb+5Ko74 zCKw6{nxPaD2{v;$aeC21DuPs(9!W1~vwaT;2FwI;?;A>gRae{N^eBtG~z(lPAT(3kT2JipdXCYV$lWn4YRW<@v&Lx^4b%6^(LZG|_7&<_o zOaVHLeYU+X`)rXP@|S-IcYa{&jZUGOH$x-m(Ix{`qdo>w8k;qkY&KY58vPgz)B`VR zo+S8~*Ht0aglnwOLKy!z3Jd!hg_E7LoNr{#uB1?^*BKVF_jxNT@P<~yg=nzGjLl}F`vpd*!D(PaRXGjqBz8}B&U0?eTr=8%+B|oiLu7&ILR7g8Vf>4*_ zHjcvZbh;d#xzib;9(qR8OqCtLl{i8&cgB2o0+4E_n&nBXc4(p6@(_0cfttc)7vTad z2)I@1OYl0taAXvxkkfIF8o8QrNG6We2XE`6!6n!o!$=J9>hP{U4W7$Q()2+2?FB|T zS3j*oEQ-Iv4}hDFBiYT}hG8`H3w|NeDC)BMqQ)X`QPufb~M_)lZod`twfQ%_q<(Ni8l7~I7KJiBZKd-a^vaphBCm(06XD>a7qM2 zt@g?{Atn)Vo}s{osZ*ZT^wtTXYeKV}2y;)zZ06~hL!2>k!el-8S}XKI1n}R6Mx{#3 znnmDiZxJ$_qkBuo+I_`YBLQBw>wx%5QTqZ|ji4j&+H(uk(X}GOdGMwAGdMB#-@rY# z8(r#lECLu-G??Mk1t{wBPL|(v-eB^({b2^YAJO*J7#T~==W_5va^a2;m*}xtkPhe6 z2KDfRd=4o406ZCzF(iVxg+d{NmYKl;ZA=r|pv%bu++?w9qR5r*((?=RBTU-uR3+fs zq}$4g`E%*P(V4>(J2X@5&?saEzwIwzlLGsA_2C1AAfaQ>?f5MpL_dW0p_E#LRZWx^ z=c8yUR)E-N_|eTD|CS$t|3pD*coq0Je?aF0ZAzY6D7A_>p3*4~nW~-NA$u;A?HWpt zqm5xH#J}EObIMX=MjIW(+@JJ>?a)K8R(+G}FL~xnjKSJ6D^-qAlw-Ftcyh}J@MZ3S zFY`J~-H__LR zltsIZ=QP-5g3E5110^Y4ez@Frnr~TtMLJ=xfdE%ujX)WAuF&gy^-n-H^rA!zO#Y0? zCnm=d#w~O2Urg%;^^QJtoikgmWJ>rNO>1rDyP4ngAcUwS7|pbb&IBsROBRg%80&q4 zz-ym?1156S0I4>@qE@By5b=DA8l2WCuc?ez{}ARVmkAm{j4L{466 zB`V_+Ryj*`>3euXfT`ebh5M;#PjZMFd3x0ry~L!p&~RH!F_TPVSF^DLOk>nLz%{JM zIVl$5i)e)4$>C}{POvrIPC`uWdl={@S}n!@iuk9JlkrOF9-8C_m_&u1+6&Zq_wkwI zDu}_pw2YEVxz(bEB9aq`vmSzp9L&T>)Ww2JfWP{LugXX+wb3B1Xsn^XnjNgcyV~>! zoB1#evVbB_g_Hf;Bz7wZRmUpfghp#bsg(d&H-T2eZ|i0Fw!z$Fl}R{x-=r4kTH1IE zWw$tm;<&lEgcd#spIM0|v(j@5WgAdc?3}AUe1cfUfp=O^Ko6vaPKz342(js^7>qAZ z*Os|C!@`}N`VyRnO(n}&$#b3=@8LJHK4Qu$wKv5*uxj>4VPBm`PEKT#;f=->w?e8orh@c4JMl|`f3{_WUxJ#rXZqXVu(vd{kcZR9qf7GK2 z!o;Sp#Mi~S={Y-mwnU_F)D+&OuDuuhB=9ucEzx#kxjm?SoUaRlr-V4hN>m5M9*C=! zA;6MP3g3{1jSTgmk?tOh`5wfKei$LZe)R_pKrN$S+2J}nv{+rg;tcc>t9xZQl{ecb zV>hpb>or;hxk9t6C{aLv4$lVd!9o9;jwb0_^SvOr2|L zuM$=F!jeGeT;7RXAPUj-4%%}0do%FKYls`AttSmxf-4}zq`BC)PMrq153V{f-y;)! zJ+lWphm!>$WJH^e6#xw@mRKuLll&q0CW@9o?jGdahhII-`VJ!aZHQ>{*yFm}3t-xC z?l$wo=;yihmu(mfCF&y1Y2j$0RN=A!JRsLoAtm!4>u29`ORfa!&Oa*%{b;B?3JvI` z&4ptj(Cv|a^a!A4PxPZjz4SSEHy@K{G&=WUoyyBq>iq68q5)%)FBeUVE&&|0SsdjYdc zJfUG2F2XhK>f{Amwe9b0=VH96b+M1e6&l4l=EEqgQndG>QtC)#5nF3CC9&XIOpqD8 zs3NGa8Pz-LEnE$0d|m=WqUj&kuQse*Q1}LDa{B@lzDIGWL>~-A1uod5hNa?@{Ro7a0lKF1FE+6&C>d279i6fXdj2P96B)%VK{gz zAnoNhh$X2gTm7l&!>m`K#b~bvGqB1EE}-gf0T>Kgs{$w~U_KvfaPGbY2ZgXN2_-9t za*QOEHa3lGi`6_Cg^WxhCtBJeVY+LlyEf&N`|c2O6Yx45C*|%!7#-x0I`SqM-P3Ct zc72m|kQ+ES*c2fUhsTcjYzpE(qUipx^pAGW0`NyGG#|&i^d?JA9$D3N2y-uzZu9H& zNI(E=OLz*kgCaUX7#Qalxk?#I2K?@aTh zXaGTt2p?Lghb&SDpBgsnQ~>YK$XK+bcZK>EqAo@xv9RM7QihpBCsFtuv} zGuKQRy)`fvccN6kSYGfCeaf)92(^Sp;nEY06Jp(qlXH{z0f%bdZw+}cJI@{t#kU>d zr|c1$ICOSszA9ZN+XOg6gjHVXj^s)*A|X%>Zkj;H;*8!u41sn}v6`oB?wB$G$3d%G zpmdwLd5ZP%l$H7CCARHE?}0v`6WE3GgQo~K*ho@`2tfThhIwe48LT>pPye6)gFFHm<_-D z&jV)E-Of z%V}jxPE&^tO|w>Aws8Jfa_;H)z;+jRmdlxI_<{~eDsW6R3G%OdY@p7arq<(3yCj2#AKESWKi1RyPG1+NY?85c|48Hv{xB4d`#5lEFqI5vX zMifH#2N&)K^cG=MnSk_ZXcQ@T8U%j}Z4bXMpp7PjE} z4c^nT*}wU1{{*?JrOZ_!We&z~xX+-yKGXeV9;(WS<{5qqe=tbe*l$8O&UNSo?J2)~ z8>R)%pr_Q0cLAKV`OuZu$R8EKGa5Q!htZig0$7oiA3 zQ?WINgTqvqN~~~ns`V;70pS?8M%#}m>e1uMSI;Xp>25{czSl}pPbyjG27Rn0#=ghvk4#0Ul?ix$)iUZD~Xso#84u01+$+$!rp}I5#@ExO)N#TfWfK8 zav+i_q|nPa$PE|cQwOdQZAhG{=rwRB^aP+gT$e(0xU)Ly zffUFbeM*6-LrZ~Dhe(0S7TV7+6=R_Au@#p&6FgT6JTZA z*(n9C28}2A0b(*Y(RzgOQsgR(&>ta*V0U@RCa}*;sM2~QQ6{P5ceXD^8nx|d)KY0A z(mv)LLm=qz2U_5_^gSzbFI{1TBBC7r$1Ot92(OPzPC&zyygS6M#JlFwb|u2-Mfjo4 zxU75Va1l|Vn8%!YU4xO`rIOc;oSIt+ZfrMldWSnglK){Y4Yx5ZB+b4fi70#&lR*j-k>J_KeNHi% z%a4&*p074AG0lZZuXzH+Br{eA<2A^ZBX7$+YC^U!%khOCUFQ-=D!F?fL-kVpuUR{+ z(6Q)RR{k6+mog7Rv;b~6{I4|{W!1;-sHOd%p4&fO0 zVZd>$wDsnGT5oVwZ;RN1^-0{WU+R9rthC;#PSa~CyoMm3v|$Jm)EpWZj*Iyc+OXM1 zx3}-Shgp=1Y&eo-=X!L51pxWZG}U z1{oK@mV{HY3ntJ43_1cV5K+WZ-E9}C>9_avh_kLM;(6fjj0WFEb?rP}L{mP>3H+&8 z@NKD|7F0ZRp%r~yOs6^##7c z>gGNCEsRJ{jD{G%SoLA(0=MOh6q@0ncE3O#S`zLI;qo64MnOqH&ED79SMWS-`iqXn zIDYYU%s&`-8nXt=P+s;M*K0r>JzsXKViR>MsW)B>9v@Lc0ib@= z0Y%*Iy$+Y(rRNK%IoIn@VsdLg>PvuHiqChL*@fx@%Gk=^Hn#G&^*xaEqc$|fLmPn) zuw79tC#u*s-{w~C&FQRjF&SA>Q+UlymQxmdQG1xWUw2fm7&ifzkO*z z?7YGD*|?sR)7x6De)+vZ-U@MOUgo^+RnH(P>(Hm6pLR%!*e>P?cH~Qa3@ku1BfHZf zJ9?lJMyxDkBS(eeX4>VpKVD}d62`$F zPOs|{qfx*+z<|g6cAPrKv2GorNt8@oxNVqv7%KiUUF>w5_=|bX1l`4+78j27Zl*eu zi3wQdl3Vbteq|EbGe~>=kG4o1mVh`#YQms11yv0ot}k_lQrC{CCTTZv^EZa z8{3OHq-xCPXb>WEqt>9YS`(>QE_h0aZcC?9n}A}R3?=#DZy9r5L^LL%H-VasFV&9_ z1tA)_0zYH&sZV7_#dfMsa_YmFdY(+c_<&W--rG4W`E}T6Cp0I-Cbu_QEsmROrseJ!U9PjpF;cm_q3{WBMjc=>veeD~6_cHMOS^%|>iQP+w6oBl38Kz% z=%YU#ZnPWN3T}2*8#i-OloQ3Gc?k_katEpVkl_aPZYwK)uHj~aC74MLMt-$K(kD=d z%#F$Y@~E34nw~8N{?wgpEU>n+Wgj`q0m;sar^9M~FS~{-JT)+nuEFQl5XjU}=fXBd zir5h*@Wv&a(p%QVy_LTDqG2)9Th%Y8kamS~7_;yu#2?Xs@;!0Vxrt!5d+tPx*Sc-2 zjIjTO%Y?QvxMf9S(-ko{E4o)#RM|2p1MMQWrrV^ZG{$a}M-2$`=>7)X8urT6P~+Ax zQHt0RCh%BSXjS2|IQv_?uuOqf_b_V_tY^XQV;D1AkK*fRtf*)8_*)rK(f@Zt9jy1WM0CZ|=iI`T!SYiv0%}ncA zZn=N`OiybjSdz&W|BB2i_kB0(3X_!y+B}lH2>w3s@qM0xh5G9o9JVvVnPIzuMK5r^ zMQON8+hgU&;XsZphFH6rzb$x&2WlV$;(krJ->Ry_w=ny()i30<)z!`{RU%+$6tV$L z0LOkJDD=|aH7?-$7{HkT3?|PerJ`@0iR?UW z@C&%n<0o9?@riN74OtSixt3@7{{DTo3vbk=;S#Q(kk>O2(swEEK+?O6z(g*_r^INc z@2Z-C;KP(fm^vVl!O!YQ^9M;y5E+;(a;+tyXm7GeN0Sv(_PkK9dc=J9U9 zV@*LOSdk(jFae-?D1SFF1&~W~x1?h;!~E2oma6rx!IkGLckYWg%Hh51$1_I4-u0LA z3z`Sqp4$d3LH-(C|5X~r@t=MJP_Pv@ zzG-d?mIFnT3?19ssoUGh_IAbsJ$Y?~cT@C@`gTa|6Q%Z;Z%6i4LONjJFXko&`w)c< zO(&fWA<;qgK=)bC0c7m9I{oGd^4+**5L*o3kH?VjMJS$E^GXZSN0C?Fp{an5T-YzV z4t&K~oy+uZ7WeCDzgd0bVQhJ@A3SkeL0M!u- z1ZEC)Y@w9;!Bd6uDqN)oJ*{)WZ}<%P$s#zw@HN(*c9SQ56(vT~alvbd31Q!q@U2I!j2R$7b|7o>(LsRu zA#*&X&(x&@nbOTD-I(w#F{Kga$5)r|E#hPHDSTjc0-CEJNskpZ9OMO{7#*I_iZ#l& z4)K$)_mBEMfEtBv5p%!nj3TVh<4|j!T2+SFQP<%ac!Tn*=`1|rvUOZ_4)6KGWnqi~ zcI?-cp`AbnR}Bah@Np12t-4*$0@w&TL@;ob*g87kkIm}}ELh1)I6+-2Dy}EYfV>C; zY=>$EAE5r3UARj`IpF;j-z}BetO@sV2l!yTN6#@BFNQ0=v z1vwLd@XenJ)FuF79Tud_V#uA0bgjW;VgjzHmNmsY|4K2ea#)hnK&x*%B|r~Io{qY~ z)C&`d-W{_*#fj4K_zkh5bd32fHs2%7H@CQaPx%Pn{LD+_HRBT$&1r>yY?%goBw+F1U zk!9AcMN_OF7w{F+`8qyg(|^u@tM1aN);a{`Sz2zrITc64)*!+gYUzaEC^VS#Iux5e znmvC^^qk_>bH?ZSCcIT1<-LZsxfM0bA55&DMOZNP@rRD-W*{9b&*HXp^8RXrb{c7&hs!@(!^pL~J+Z9BeV z)yypW+g0+ifvME<*iFo>BKz~voa`yQ7q_WEQW)gi=#Mw0_&z9_#fV}llk`m_LGJj5 zl#F!p4Mci=xgGMy!7}4u5Aiq)PK`@0wPhIb8tGux$|ipGAbR{5&K~qq)I)t%quNoB zlh+@Q5GY}fkvaIK-Z+I-#+&gQ9x?cot}bULyGe2^W)3?pV9o@?+KdCeXZy#l_E)~0 zXLVP0=36av>!AZ;H;(9ADgR7(ByO3~l7#=^$5SS3ojT#ADf_&v{U+bUV&=CRW}$wW zP1n!SEIYy!tS|8Etgdle8jvjo7LW42%(!)7O0zH&S$^Otoa=!u6Lo*8YO%JVLNV}(p zh0O8aqK8Xw-X%Q@eQsd%P+o?c694b$;o5z7PY+)`xfea0f+WzxI4Rj5didKu1Ehy~ z6cl=}Bb-C9eZ;F%_<|K(_zZ!Q%9*sPuZ8xwR zlTsmgj!PeR!9;-fQ-1<+@Bn?|hIAe-9DC#N=hwhfKC|%qr$Yo;tFPWLh4-Mz8FSF& z1C7rSP`A`k211v?3AY1N7ADtIgZmHmYkbyQ;47aA+&;fX2yQyv=xaaRmOi`SwA)c| z8~WeK?P?mt&n|fVA{1P~f=_!3?zV4x)v|AP69-H!`04fyeJe=x|89NoL7Bcgd11uZUi9!~ zB!M3Glal?Rhi4EYaX|886$vU_>q8s_+K(ZlgS+$BA%|I@(eVc{A1yQT*O z*M;nlEfThvyE*S0qgg$K-Cn3W8sshto2gC+^>Ejzrvz<>nz_@0+fIGC^^!UOEDO)w zF>WK=9g*Qj6?{kE2P=f48NX?|Ict|`yn=U)cA0JymuXb4BTM4D9feZ(?#4H^pwtcF ztT41NWzW0|6P6C0Q4@l#!ikhYewp0LG?QD<6}geAVIwv?}uvmRZB+i>h1ngQ!Oi zndhn!5d+M|e`R-1=wLPY>}@>=lElEGssO*Sz1q(?3VR-6274aF#ePSiP=w-37fFth z&P1qrx8Q}^Ae+&II^oBfRG|2ZPkxYZ9%JK}Nbg>#6~VFZOOE)Et96B)tgvC4xz7q~ z7L;o7$=9&xk4(`=OwkKilldsgEaS^~T8CAffy*^} zLICm6j?v(^h+BOGww(@x4KSx3{+&31 zW$SiX#N;0@^GxE~(eJGQlM~Yq{}T60BENL185bC$+PfYqlDD-ZyNM3gJNGF%_kK2qR0o(p>FS@^H#dCp)}cOjo__;0?!40+0qGqLaq z|6tdqrQA#xnM~5k^Y3DFqPRdavOYt3K&vU9A%6P+&{(smIeF+BWEEscZ1BQ%{OrUx zrf?9W5LA1eGdOKx%lLq(>j{na0rA#*5rz#FhtLuo`gFzk>Z{_L2B+ghHFUZ?_=TyM z38+{*q3jh{<#u(woAEl6kqMlbjQ_X94lhwZD4`F{60s@a66rh~ZRN$3^6P#W5HQp3 zmBUQ>vPwCUCKw)WYV2T*pUeH^_cer)6X|P^Zi-wbeFu7%dLthEr?oM=k zL$OUsKCjjHRDMFvTk%Psm$LMM8e3eJz?IC=8XTax44WGr@d{~leYfPYH@xA4Nvo8* zbn|APkGau^<}o*$ngJGh^!sOVb%I6}5jt&?+N!2qNHS+;y!r89zdk&s#xfb8nzaqD zwY$C5RBx)gSE|#Og-VV3MXTC*fm@?~DV5ftlv>L-s1(f;W_21CP*Ex3DB)6*Xhjw? z>*aW5$N4iK`giRkRg0$(uB-yy@)BYKmKmFn;F^Mw31BTE3;)8AjWTrxAe? zXe?thPCGC>W6Ci>hYU#1M9vt&zB>pK6x|(!1{e&1z|R_lD%8tCxEicGGYC4hRlO2$ zQRWUp6#3O+CigiA6{fl`OLd+>&@Womt?3#)gD{7cUT7+H2jPkGz6N17v#!M}gu=tm z%plCdQ)UoGqVr}Dcwog0!uMzDL111PgfV!h2Vp#Z*hVAnPVf5lsDJ z(8n{vc-=DtksDZdT-E4lr_lqgG4OEV1+uCF+hqbNXLJ8gvkNgD^ z+$mZTSdi@vaHn_!9E#YhG~>V2fmQvOuj^HPl?KMQpv1RC%=nkGVVLpnj7In~CZ8TN zehuU3AB2HMxR8>-5;5b~;vnLlneqLo67Ep=%$V_ieYGA^rVfbpPGogN|AkT$_z6=6 zX2u`y*0q;g7gNNHFR-sxUz;j3rxr57(F{Dm=zQ9%57V0VEgJLbZf6GY} zST^!lu01LD8TV-vQ(kg!L*C9a2jK%j$d%25jC-C>i38Fw_1t%)S3ZSxnn&xlivvGo z9?E!~&d^4*pNC}J&^r>VN+$%WVsYX}7QfD;)ajy><5Tq>(_n={nLmDDxN!|1Hqu!)ZGHjwSAR96j&E8NNG!H9*Zx|oI#I0%*K z$0_;rzSixt^iTGrKE*DZ{&GAZvEfX@eyku93DNT&axdt3UW;z_RrTbz7!eG&6|YGr z;;4ByYr^3e9!7^#f%^0&(zvfPk#~m%O?hPUl)|QquW2vEuo-w8BRmJXAzT8VB9N=Zc_Tj(UCk|H{MMz# z$ck6N?yM>eK4iQlIIkXZ4vDJ8{OMz;I;u%AY8sVdnFVhm?&mf?rhg#r^54o0&U?2U1iqN^JjZFFPSXzKj>ZXXZ^*P#1baIeXv6*yCYFbf}X z2S3O;7y%XKkR$g&FcHhXvfUYhy){J#lteF)Op0p9(6xg(Nt6m5&)38v!!AlUpigeJ z`zImR?XP%pBh!km&eKX88}F3uxpvcW+YxS%X~&%q>_4t{NhlC9N1o5Bg? zdx#(MYcuz`rA0(Q)o`I_?(0M|_fzS)uhf3; zbyVN;ub43A;PmPXc7;ZEQgVSt&%H6#euYwPZAEpDFj0XQ>rajgR@~jhp zI!++|?!<3dM-s6BqL-{uKROqcW!3_hes~`iE6ZNLM{`j_HJtE2XH5Z>7R>`2%xeCx zOZBA1=^4G6XTrp8<19GDIaTItr}H(13y;7H6Y9}#>oTVH^%C#i4y>Qll8L9kEget4 z*=f~MfMy8nzqqBFd9Uds!_!^-2n}%kdrP<~gKdBXJ+B`+!AVcOm(T>jM^bc&z_ngN zT-~^A#)~3TAMvC5x?ccT0x{zqYM+7Hu?%IfwBBGTaY>rBV^pZ1oA3lFqbJxoclizju z;cZ0s0Qlj*UitqfKMV@ot?KVb>^VQYXv(f|>g9*kH@N(8j>c&=KkQ4s?6n^uJ^bIU z7r~b~uC1!+@V@bb`6v4D0Q~MTYgP4v-S0=-_47ojS6EJtKKeku8L&RO6jC4bcO5dJ z8`}A$&&y%HV{XYppL&)uh*uxI3i(8Kd;cObE6zbX&P1<1y3NhhVlqi9S|9yyyz}a# zrTu~GqgT2OT_z3L5hiGTw61rc`e^b=>1NL~;mHvuWL1pe8Hl2Lxm)q?O~p(QMK_V= zQFJ%D8N((c6Ugn;ithQx^iR>f)U9!xsgViRKos3|ZcXn%h7_*?rl6_;oU`PPOE6vS z*2NUm^{RSm2WE&z(Oo%4c2+eYx*DYKk)m6Z0R}5e$LhwFqMmq972P!ei?Ym);{gSx zhgNj!)K+!NzI&IS7}T>c&cSo2jLSipv+9rsjX`IS91q}>Qi+(llvTmF{Zl3Qk`cI^ov%t zU%E!mAQZFGci@x9O5H&yJE5;ZIGkCp!z(+^pP4}ziKomUbmPfb8}c%PuoGe-X9Dxe zAW)U6tqn!^m1}Jn&MG+wt)?6k^dNYx4YI7Jtqn!Y6CcW=+S*`AVUTi4{c#-O<~xtI zp@3Q0$_&#AYp~-?&R81;yO~N%CMKW@+?`2)(kyF39$so|gZzTEf#0+?Y{a*TXj;wR z{kAszv<23NWhZKD!&MrXjJ2T$dqiVx;LliupSjkCIt=uHtPLqtW<|R2nXxvEgH*~P zW$J*|zfM+1^uOb0O^}y~@t&1sQZ4lU3t5t|j1|p}mq2Yc?%6(ZIIyp$6 zWo>9@&DE>i7LS$|?FbWeq}bhC8`|80AD*WX$OL%gv+1}1P`!b_8<>JADb3xIYi*$1 znYHKi?zd&XDY0z|uv2%%P;Q9vk8?UR+zGyC{vSGbAO0T@A)s6GgB$kI$TmzlSx-$P zE3~(Wdq)xB&E0?GK2zV;Tfd_1BYWlAM}G5lL8ni-8kGUqM;fWarD5zI7>Np|#wEoA+-VZnC$vGHN8kq4Q{J;@*_pgA@@dt>oQ?1qy)Tg``Vby!4Pnp*> z9%@#Yx>($5;DQ&8AB@k^XwyOX68LQiSco8v53IJ6k&T>p4;^}!RXVuO7z(4+w7icQW)I3_(yq|M4-1>-Mn$2_} z9F56SWhexn3ocpCY~46?doe*gLly)+@W-2Y@LsL^w~)#66)YAzkq?o}@B+L|zVz|+ zSe$)|#^Jt!o>lV;ae{f-lEmpmtj_Xi1a24ziKWg$)b3Fz&c>6|@d5rd_MKAjFKjy{ z8jn-3$@f7%!s(1dHZHjw%LfkUn2OVda~g{5>~xE8eRd8&(kEF-D9bl)ol6myLEwTR zpqjVtXw7^Wc%h4i_Ro9iWGTP|6xUx(6n|sVHFzUJcZ$t%3Kb(RyykK0TRDoIItaBLE!&<=5O793@OW5P?Q-vbHYMFQEW2m=SG z+s|5g0Ua_E$=N@I6|IC--6X#ULcq9q4Ew^&h=}wTQyU# zeo5d>RLa_P6i)1NQ&s?B=V-+0QmJ`FTzov<>#GvvY}pBTgyoy5v1&fp4P)@B&z6yd zmD+1ZkHBrkg&sCw<#08WhTl*>0*&8hs6}C82^Fe~yVw@|Ph~&f1voQ%uL-I*%jDtk$-;fSYd@{>mP})-0d6znkCpw*Xy$2@yt$ z*U0Tp;q8L=M@u!wr`4;M0@ke$=iL)jfm#V*M$zjO2ipsmwV+#}?#&rk-2A!t8*Vs% z*STzL_xL-_IU9WJn~mUO!;aB>tU+MZ0D7>u$zX4j7ki%??0pJk*g1}r7{fs4qd!e6(HO(E=X@fxg@(KeIQ?LSn-JAg0T zq_@3r8N%Z2K!8v6AkpUAj%Y2-NZIs}Two@Tn?Aa(MHL`)0H!*aSmA^E1nSYwsl4M# z0$W8_6fXOCQVO2A<}$=?T*rBuGZ7hfYG)T=qMMx}H|0TcoM>P(u#Ijnb6!)=pQVQy zM~e}8leU=L0q+ezAQwtc-+?&@k@kE^JspmaIV+vq<#hO(&GlRN~gSy>JiLGW(x5j*1J%hS}Q(_x>cfa$b45|nI?ZE%G3}{*K zN0f$tdYL9ihK1PGbe`&5is}42*hQkgtZ+(7FY(+4Y=Dfa1_bn(3e6Vv*TD zBIL$N&Z)Yq#f-gbLUceFw$>oV!)yP>T>6i5gnCkH`Hyp;+FYW^82ZPJliF@y<-8a3 z{f7-aqwP0+z;m$|9>x(LI6Utgct)q;xqkQXfO@V)q#fZ9LZ9=xin)4Q4b-nd<{X7D zT*L|AbU4ax%X7u&j4g93<%YAJsm@PmPmNE0|4*1q^TdrOp^``HN%c#CBIer?l?!~F z61YJ@wre(zC*TocCLWJKbKK-^)j!RZJX*{oYW&N7<6_QwSM_P)R6roO4FHX~qX)Tic=${*1{d^8CqZh48`tYl-rhp6wZlaukwT z->Y{>eOjU<%0!}+LLyQAXXkc`T1Ck2{1BQ15F8}RY+2IYATwRdl4l*whdyOVw%I>f zlFcT0L$5zRB(U$G5EGhKhl_k^s5xSBmv^{PzvS-N@ zh94AxxUGhXs1fYo416)>kJ*MYHD?>T69E`Po^9wGf8;il8P$!@?~>eJJ5+Opp9&_( z{v%Kl%Qlqx+-<0&VH>K`^fnY4PMNbiqY?g$$){POcF5etHk1XkwxOF4X4`B*uLn5l zn+AZbr*kOCCfG01SNCl)t;ac&+;;UA6lyhh`^%rP2tU!@9~^{~7!pIJn7d<`$=!Oo zHU3`L_+_UU)WjUvffA*1uly8ii!B?${$6LgmzAV zluv=4*F-(g=hfb0oXO7l*#BXR;E#W`{c%j2lA&DF66(N%_56KKK$ARe^S1Q#;IR7x z+;hSY#R!l)Fu5^HmO0BLS96wBPySM$pJ6$Cmi^67Hj6~^#mFO; zJl{b6UzA67K8kjeBaHlWipyw58Or>{%>$N4EVbe?jO&fzM%X&- zz$5qu@JgL~#3NpUys{@eLe}Pt{u?)UgGVrt!#eyhdF0IPC4@|b?r{(HEM* ze~&Xff@xof5YmB)wEo+znkjoAgs9Z_h`4_72z0SWHBL_R2%!frj}ZA_;%2BguoDUI zym?qhzAgkGf1{{!&ag*mRXXKjd*ym-22|F=px*tSDc^@)^m>Bmco){~@#A z`($u-me0V)ACBA;e0((7#Ybhj3p{%C|6Y82^|u-yCw|;NeB6J;p5Wu1GhKYl|NjU+ zg0&hSM|{)=KK>8RpSkC8MiPIRm&YFN!MjfE<2=rHO9byKQA)RHL^P!*5uLDTh$lI! zBXj~>_ZhsG=Ld_kXN;K-MTzrxxGOJl9yP>yjX%T@98B46$P?!?^d@X)eygk~YipC{ zFT3z};CX?Rx&qZnar@RH9QsETA3zs`$M*^z7aR6f{T6R}S`k{Jg&|LH%s?1&)v=n_ zBT8zZ)AA4Q4So7N!z=(>j~>^nE1-73ZjARh9gaXK>MQ3I z&@QZl*9RH7zA&;J8IuW?Vr@S_ZGawC|G0=gp1{X#63LShh!90NVBSkOgM>QrG@af4 z@la;{jy$58uOk}*xQM411|p7#%~qgRJ29}COXPjqJ}?xc+ID|jE-b5czDp==|4>{Q zrqAUC7O6L<^T^&J9145sy26v%3V*dC8vKoOG6g-~ZzKi^`ZZMg6}ZoAQSXcS?lTIc zoj}f`&YGC-H`E>-OnHP(3}~p9r_V~^YU680P$r3BgUesjk()jI73aC^^9Ivzo%97K zGWIY6eZ4)Ss+xNHmkY$E9VvnL5KEjO{kv< z-SAO*_6aoT>1hQgd*=uYLAO1t;04Y-wbA63StmaDm^Z!6g_-t48(%mYr=so9MmbM~ zQ4|iq=gTya@~D&M0cq@{$7ek5Gc%%r%Yq&{cvmdQdtBrF(}e|f=CUC82Wb{W01lSv zL>9u+wd6u+8NrMX?N`EYLL0-QVd(hhec0Ea8J4ykE&*04rl?q{i_q39@N88w?lFHxT!1HOyR{uJQxD3n+AS;Tq02!Q3r-q!|@f;6isJ_md9SkA?*{HqB+<-s6PSMW|Q&&p^ zI4p;u=gIo+jQz@-GD84!5W#w9y!sS@z=_Wz3{6X&C8%=|xXD}O8ZcYF74y9XZt=2% za6mZ1nm${`CBhv;JzwV*sRI#i6-$d5Pr}~`{*N1wgar%h4RoS~@C5wkRZt=Nk#wr( zI7?gtH$)3butWW9usGiBjbrr-}a+G$C zrcIn0cxC{e=4jvrUTz(N)9X@DB0_Rmf%UQA3!=^Ilv|nBV|{8avk^^cS+G;Ruya39 zWe~Ns@u5p&^w!TangIom0o$?P6{9tu}oj$%&4?6Zz?VL!lce2Yet1_#e#Pm;3`yooMzT z)9hJpvz;#S8hp$`eeJkd(h8zyxLXn{Y#T0Ls0?q+3y;PGz!bduUhL!VAFk)$kU@I> zQ9dSuNiXdf%}|kW9raacGttDX=`YIthlWbqJyg2VQ0a4!C|SeG-c%}A#~kb&Pbg-O zch1s!lt5#$8~x0*3H@s{__SHso{ssR292(A{;C04vdIO+4ugl|=(d0GIB24tgr|(egFi^6Brd5%)}(?sRlEaMFKT-3;)z~m0|cSkF{Iw93`=urX&bKENvDUG@dhSsyit9>uuN+X^`y7=Nur%dfH z0BV1Czym=rbC-cAE@|sb9x4@wg=hB(e&R{UaoW`b9HUlk|Uy|g@mfDau18G+LO8tfpCatoGX?dXooXa->n!?B}AnoL@ITdgh z3gAs)N}xB$4|@>1kv{3AQ(ILSr?PcsH=0&6@~caj%oTvQ1xQ^21gdK^)vf%9)x`;o zK0Bsgw5oCG8ud#FX;#ll^G&57dlpkyZ!tlg5z=h2NwgwMnDys)Wy=+Dne#1mc%jd? z{0NcqWSWT%1yV*^?%eXVe z7cwhby2!M|8f;0<9EYiLGo4^EF#$c6<1kdxksweD7OKUTT(YK*!z@5HgdLF-9*2Qh z1IJ-lz`cqKm$g*bz6wk3Ke2uDExGW$MD9n)io(@&3rd+lTqii^V8xwQg%$TVTebc1 zTm#tc$W`K7B>w3(TgUBaEE$dPDJGv-0H1fBms_=>b^}YO`T6X$6b>v3p9OSP*#eSw zRpjUHuGgv{IwH5@GjmcV{~$fcOdSvdn#JlkGEa{%OoJ(?Y5)xA2Dh#o-MW|}CuIco z)#{-7O*HL3G}jDPUVWw8=%(Qs6-+SqY)PoE zU2a9J_+@U{XH8iq?B=R1Y4Miyd6_C5or~*qmW=4i1Li#Wj-{v+`*Pm}yE{*wjz3CN zVIAOC<($F!bBoLa+&9P^=&QqVv8=PkaA)2;{KN+?lZHR#- z!fK;)GH%H&!Iiab&e2w9AY~ONdHz49; zF~^kX1|?_|P?E#t*iCbY5V-972p+C(k;hiGX|u4}5zY}YU;Al2MwLRrbCxp~`;y2l z$mk5S!^_oS|AX6veaoE%n5Iail7-wlDHQiv&69@NeCudwUO%>~TXgeZalYz&6MMLV!aY7mpWjS|?&u<#iu5-NA5WDO7YB*6~# zV*tSg47kqZPfvkQ4)9C?UzhW!ddH-&N{ENaZE)*HTjMYi=4xS?14oIDsuP11#YK>F z0FY3VmJTYC6&(C~OjR;Rd~3}xVPzN>T#Godtz?^4^~Hpp{N#GcZn}VFp8!BzNK%_M zSXsrO2*%h-sMYxC_LPU{bZA>F^+Aa6L5M8DI(*l-S#o9p#S2vJ9PvU7nilos$J`x8 z#-j(ByDc3~A?8X?A>)9gDUDm~IF;l&)r!DR4+kXp334MXs>f2K0qsR)oT>C_3O3Jt zmMpDoMxL^a`<4!!>PAo%w=z`BwHW6@CgMwd2(Ur8V{qe7Ni5)~Mf^1URwK9Um&YRjq9BZnXU@~%j;pzzOJzqNi9v1PR41WbizhdO z=`5{$s%d|X7gl0L*0LpOqa@DXbE&o7-@U%E9VvLe*W8c%eRF}eoYu8X%xJlhQ9aU4 zN{qLm0Ad?7<4cFuwIhv8vg1s`xS0$}^2s4hef-BCmzW&t!a})sYp`>8;eH9Z4j7aQ zMjxq13I0s}9v|lTZ@fcS+9_Z9n5U&QI%GpN2>5sW2;1PjLVrD(n%R= zJppM#O2-e=qrwDBb~4F3@iRw%)Chf6y%k)7rKTR-D`f|k;4qYl%MONV1=l8g%|sJ} z{Xx6Lb?*ed*l=}0ECTfxImVxDM1wFRmUcz3|m>{~Tz}yk0D?&oQqTV+Blp8z{@tCsfWI z3{>KNxI*>Jr}_AqPzQX-`Vgxg?W*AfeAoKt8Pq2MF;ure@e7?gP=iirP0GD;T7~;> zCT#kAv97e1@t@j(>+^BJ9h_kN0WRV;VBZPZ@tFWdaa=Z z)&T_;bJ!HDFa~TLw0%&-+GSTM_ca8z%RQQcEnz9b(46PQhoW-{S8)&|l2tjhb1lX!j zC;Mm+3ASmO3#)4zo;r97v#%LD5NJ?wR5S$*YG?lBe?m;7O4V<4t1EoPYsxA<>hTq~ zmEpp348$nZ+3`G$9O~<2ucCs&9(~?QLO1?3$OmG>-^j!*ci z&?=zN;@z|S9Utv`q}B8KvBo@4Gx9p&d2Kh6bEiumh|+DD*U9e!9;#!j zfE6xYXCK8}AQEe)hOK5A*`5K_G7H9$*L$zx9HtL5Nb3=Gjqw0DGtT#}V zWlwrfpxh%ld+YUC4J3k{g1eO*?eg#A%tMLIR^r-JCho|Ek-O2+`#e7d;iqttx zqU#Mb6BV$SfL_X&QR1v109%wGYqd%%%c7Q=uks? z$?<9B^V46_GkXbUp7TppCyx_0+2N(?ge5&a(lb!Qj19VP(voyBzO!Re$lS=|kO#sfbX6p6V?R4_cSi7@&-3^G6mfzK_XH%A%vSa9VaXIDq!)Go#a zSh%SODsPI=FRLjBFfo*}FBrU6V0+rhBd}JG`uJW3P>g8F6N5wxAl5s;(oBDfX$4~E1?B1~ zWbjM=Ch{cER)@UxC*dOIt6Ia)f3{dc5FXH*5qPXGJNUBU7IC zagI!>g~nln^hAQtm@QM*%HaJwU%#%UOnEuynd#rGbpLeUKoM{$;oTh}RdUJT+3;A5 z`krtOa=S_{>q^g5X*>bAXJJXt2-270H%%}`ke-iu1Dxgb8aU|Wv?9O8GNrC!F1@+$ z))>|2v6Hdy{>#Bu_1W``!IvesZNRY+kOV7I$ zU_~=G)-$}ecZeml~q1cAx2{9nx|o8xUR7s2E+$PgaT99q zH^ih_1>{#@FzOS&B^=aN-{UZ8&cOJ|5Q{vm?T-3xAW1bA%JkU7r0GWqD>4Y;DEV3OiR{rnPrEt+MGFHm^;ZkLQ>)G0nL+HMOH(6n08q_nI_yYO8we zpXjW}_pV8kY9m$2Wb{?99u)sgyXi}xK3Xd#%^TPca{BbWPnV@@)OHs!X*ROblT4+^ z%wp=U^%;{U^emESMV2z_Q+Q>^`7>kEtjCi!X+92<<`~pqOq$fm65B9oeq)=aG3LdV zU0>#;L-v&t(#VzgOmloOp9)1CXv!^NImu+lIZ&C|QpeUgThvzF1QWE5)|fQWg+4fn zwvvjL%a}ADkqUtHlv?!`yGae0$E3N)ZRrlv(qbgoaVDo_lt_)6>2i~a3FxtyG>ZZF zCXgrK#b$4b6}4$W81 z8|djeza+3&ZWXG5HFeLdmr+z{Mdsr(W4%0giykDV4#;{rht+Yow{){6&_7cK#%pG| zb^XDuiz#Bg6xdg*4euG26Cd)IfLJeUpy8bbjDe>3Me8Lsq;_!r?oF3Bu;%J(+!jlu zMMSD(vc5bjP?4jBD=mDGx8y+!XUU~i((OT};0!4^l1;}20J(L_mMCtVvV46@+HP5+ z?Ur1BWkvSL2lQuy5Yh?z5|jSi$_Q#SdZZ{&SbdaZTJ!v@IE#`IrZtf5P zSB2fHe4+Z=eaxRw`DShcgCIULI4=Gy{h-mH z%V-X?3FAx_RNd1s7sD2bPs*NLL{C5?VvLJhwId@4`(e@_DTSF?1Ff)=|u%b6nDOa-a~CiKTA0H zQ67hpJuQ#pbjC>Ck!I9}|4^NJ`dx08GlFxV*6ff_H@EO*1btG?_0p@ zD$1@?Xdzrv?&Tr`C{QSuf?Ns}NgxM~kU$VZt6W+HY7x{Rjf6rVrEHkJ4;z9KsX`$L zNaP|_2n|SRz$ z#h~ichaCoGOP(^9p`$|$pKL1gR*A%j>Dm91;!leT!g6^xqM z(Ydd|t)gtnN^@LWQFb#9yn45yG&xyoL;vennFH#C7e2{s;$9krKuzhg2VqC^&20F* z5B@m3&gH}r{=n>+H8F0NGHzG@%;L6h5;vAV*6aRfaXae0aYJeMAzoPLd4?2#zyGCS z=3j{2s32lctbY7>ieKsWk2L?-eqb^TVhvUjA!ne=z6e=g=tz?cPyFM&CdoR<29s5O zYZfi~J&Xqsx-rwrtU5e11l@Zs5Wa!%sJ_h+)W1SCnwp_SXe~8E`ClL^#Y9OVKBzCd zsO^!)`N#D|Gz9!NXAfTqb9BuwmSj5-C;q#VPB%Z*{G$>rgIZV9U~OQ{pOXqcwC*m7 z@$ok!kmCBD*gs}}!<<50@E*GgDd(lfC~iub4J{THfsBfKIge$Umyw?sSklUitHNJ) z{ky3Zr!;?)3Ww1YUDP9qw7O)e}Cx*y^^Lc?XN#L|6pwH!{py3@#y?Rf0Xt``d$Fb ziQSgO^!r8aar@7rJ-+dbwZ~gmS(p4zwZ{kZMSX>u62$A#?Qy3U$F|4$CGTmE9LqSo zB#THRg_G15<=wyNd2!e*Qsqz4_hC$Ol$Wv3S-FZm{O5UczTdy7eEyTa|EXX9Xw`t!;ujsKLA+r!R})fu>cu zE*^7AM(q;*t(VPxvb4A=tJ7opD`!@oR#{hh>M7ZUt0rM53g*VH^%>62LLJ?gwQYDk z()2~~mn_th7}e;SDpD=$=jcB+z3Ahh#FOigOV|^|42s9;P6St-Ywg3`A~59w`G+Iz zs*K`a!Z~XF6@DwCj$iB2^#U$cQScjG;@|4h`a4~gaN#mq@}h1!ey>Xx)&SuD?w53V z0BdDfE?I`(DEO1`Bf>8WQ^7gXN~+U>SriP){UN!(BK$q!yzqC0xxnkB-W>&h7Jg9f zJebi1-w}RQ_yOS|VXlcq!E3@;8U_BV@V&yX3x8Yq4dHg-zX{(Xyju8M!fy)SEj%oI zm+)J{cM88P{7vC^gzpe0-QfZ*mqh^%2n4=e_+8=Kgx3l$5$2M=)1Ja87$pmPKQBB@_(EaYcX7c5 z!Z`f}7{o2Y`Ka*u!Uqd;O)RnEob1#(RPJ--ewgri!qbI82*Cg0!siGdA^aKP8Nz1^ ze@vK5a#29tbr;MQ{&S_;bPs311+5pzwvl(}X`Se1Py5g!dQzqVRsg^}_oKUnD$L_)Eh3 z2wyC`xA1)7DZ&lHdkKG8cu(O=g!d3`6rL=6sqpT?3xszQrmnaPb``!{xLmkNco*R- zgm)IcQurgpnPwb=Ah6H{I|^Lof*k}FxnO&NtDVkwj52`>wv)>>F4$J!TG&z*a4y(d zAauc20+9>06v(+?3xVrgFi{|OL7BkyF4$b)1{Z85(Bgtk1#Wb~CIVk^!Nvk#b-_jg zH@Toxpw$H%3Vh848wlL&f(ZhPT`*qY>n>Pd;2SPjPv908j1#!k=@iE(v&89G#VB)| z3*H609A$2I!QTbiT(Cyq4i|9$W|aA+3*HvE(*kCom`%9!EXhYyWlqh*hl+_ZcwZKy@_?5s9T<}YQ6)xbZjZx;mT<{Bl zl`eQ*pvMJ27wC1ta{@nf!OsMKiqaKM{Dw1^+G3 z=X79Wl=-O(ek_+~UGO7;pSj?N0?)aCXER2bpSz$(;CUCU6!?V;{tE!QES;z#E?z;` zI3Ug*6~)&Gd_0ONG`Q@MQS1ah7R8~!j3|x-j)>x%z~NDRoxt=cjs*^j;_C$tjp7>w z4vFFxfrF#?MuCq;@mB;6isG*d92m)BgUe2f;#RpF5XD~;*guMI7T7P6?FX0LH;TV5 zm#I^x69T?ah+Vg7{#Xvd?AWw3Vc42Sp}E9Fp4R! zxad^(CR5cpIS zUnnpuia#$fGm5_;a9R|9QJ^l0>jh4Y;)?`MiQ+E_d@_nJ7C1SIDdxItZ4@^MoD{`h z7C14AFA=DTbiTLCR!8xraycQ27YH05#g_?uBGQTAE}M8`LU=>rF5yyPTHB1`jfB51 zysICrlwB@E}jEljb)xpra7BF^0- zOc}*F?yHVs$}Y~`Eliolxx0jS6~0q=H{ovz?=F0Y@MPgO;XQ%#jAFBaZU_-5h#g})|zfUtJh#nXgulKX+e+g z_@lx%3R7lvj(aMj_z>Y6gbx+IUidI!>Yzm0u8` zoO?x>5|VR+!W5gF^TL#+oO@ZA0+w@s5~kGU+#iK`h_-Vt2~$3E?hnEg+MN5nFeN$X zUKFNy=iGoWWj^PACrm-mx!(#?I&|(g!W0>udqJ3Tq;tO(rf})puY@UaI`>QARl@zk zlue!cg)jwH=bjg)6zkm2g(=!P_na{0UFUu#Od;60XN4&lJNHvzip$RR2~&o4?ipbU z*3SJzn9{a$|1C@r+_|TPDVIClM@!}!O9?FH*1Y`=ynUqaaC5({o3Im3?o5vu2mbA-?Jmu|y2cP+(} zoSv6G(&rC`V=nH48x?N^^5MUm+r1B;OS#>9gc$x6F!V84A6TVc~xZOr!<906*Hg5OJ z!p7}32=AnK=L>&C_+sImg})@ci||Fl#_iS%8@KyKVdHkcAZ*<3=Y@^iy-?V=-3x?` z+x?udal7XW8@D@8*tp%#3LCdOSJ=4S^MsAtJy+Pc-E)ME+x?8Nal2;=8@D@0*tp%< z!p7~MC2ZX8nZm~Ho*{gQ^5JyhLxn#re3r-AUNE-5rI$tUTF4 zm?Le%tIAwVLaheI?QSPO#_et^Y~1cP!p7}xE!?DVwi3QVcuV0cg|{Fkw>wb)+-{iw zxZTYK!0m1(0B(0v0dTvU2!Pw&SODDaMgrh=O9jB~ZYTh5cLM=%yAuS!?T!}!x4XUo zxZU*x!0nC`0JmEr0B)C(Rg?j@YkVuXUE^E9?Hb<-ZrAu$aJ$C0g4;E|72K}zt>AWz zZw0q&d@HzJ<6FV)8s7?T*Z5X&yT-SI+cmxw+^+Gh;C78~1-EN_E4W?bTfyy8(2X+S zc8zZZw`+VWxLxC0!R;E~3U1fz7^cA@vY!?jc*0FYkVuXUE^E9?NZ1W zw`+VWxLxC0!R;E~3U1fz7^cA@vY!?jc*0FYkVuXUE^E9?Hb<-ZrAu$ zaJ$C0g4;E|72K}zt>AWzZw0q&d@HzJ<6FV)8s7?TmlH8@yT-SI+cmxw+^+Gh;C78~ z1-EN_E4W?bTfyyeZWv|2?TTw9xBCORfZKga0Nn1A0^oML1;Fht7XY{WgaEkRE&*`6 zj|+g?{k{OW-NyvL?LG=H!tHj_HKBoyN@*Z)yA&G4?NX9(S#Y})FI*PfE@cjv1-DB< z#AU(lHVc5;T_^x<_bLH!yNd+C?OrVaZZ{ABw|k8MxZP_7!0kE#aJ!)ZxZOwq+-^<) z-0pP(;C5pHaJ$zFfZM%60Nieiz?76n2Dkeaxq#dKssOm%n*_k^whDmT{h9!{-J1o# z?NTar+47V}-X-Oc!R_9nN8omE6#%!pL;&3GZ35tSZx;Z!+a>^R_YMJYyWbQ5w|l1m zxZS%1!0p~G0B-kN0^oM<5dgQ_E&y)#+XCQr?-lqTbGs~cal7~N{n9ArSm?4>MllCS zmj$=WQPX9??Q$q}S#Y}?UtJd5E(cwg1-HwQ*k!@(RtSLGtrP&ad$a(!-D3p6?N$kZ z+sz1o+dWnQ-0pD#;C8bD;C4SD0B-kq0dTt~2!PwAXd-Tx@`|`!3Nhk#DcOkIrMM$* zmokvJT?$6xb}221+ocF4ZkKYE%Yxgbu;sGgb}50mEVx~YWiC4><&kHnJTkc5)Ab14 z?im8$cFz<5w|kZVxZT+T;CAN-fZIJ=0Nn0p1i17E7+npeH<90U?Hg0!AVdHj7g^kBJyg^85grG$}kyA(T8ZkMu1%I#7{Nx5ChE-AN5nI`3SDeE|A z+%9Dx=f0`9Q8seUxZO#@ZF1jU*tlKFSk4)@yQ8piyE_RRxBC%c<92rzHg0zpVdHko zg^k(xFL1jgYR7Q9 zRKOL#3w?1{x7JT&KsAs$95&RhupP{LK4!m}e;Kp5NZVueKF&v9?YH8~<|f776C31tPiV`Fr;3VgF&#{8lU(!tK>j%`Pp&rfsi?r8k z4$#@BohatN?W0V~r*p~%3{)pP_O7p&;kUBXzq8TEO_5oEks?Unw>@>(^*R+F!cobn z4JH044Diq?PgV7s8Hcpsi^>Q3_n76}#R5~_rP$FAtIIIiMvpKH;s16T z07?u8kY%1eJhKWrjAc*GrXDby66G4f_b z&HoG$LoB)x-F810Vc=$|uSuiZ2eS*MerM)1tiXktTWMDx2IZ*i-X>-DmeD;!wgDWxSrJce22p&ZY!t0=o^WkvJqwH3{O8n^JR#CUFZmM2=$iY~3@!m@5v zxvZv_1>__LN%&!(@uF_*yI(c927_ACUKg(7*o@-n#@F$eW=5y4L2bxqmEExYG{`Oq zq8~Ej;l;EU4JS%)R&4FKZ}UI?uJWN1H;esQs!UC7J_A=38$w4u>}mM`E3?-zA7E67 z`Os3756$={{%9mo#F5`hK?(n_bA!zAAn99tWGNzw-30iPHNhrth5gbBu0EkA$(|_; zMl4*xJX+^|1Jvi*QS}*C_PBF=VrijH55T40e`l#Ohu`Y+m3WL4_WLPtP3v?cO1fdl zZ=(!?EZS76g+kFsDj$@Gio=zd^`Kf_^DYO zcB%sdY95!BuPywOMQ=PVBQP|3($BW5?2Ki%WZm{^nIFB3YMLJd%+_q0FR4jWc4ob! z()f6i#xcf7{lRHudUG|14AZ!NZD}Eqol4~9@+E61Ji-hcZ+d4Ok3`B^M@{e4$~2Lg zhm+&|UU-1nq5~G;o%T6V5DjbmWR|*YEf(C$<<{f-SxDIR)RXB;GNT_Q+z0R7gIvfM zsaya_{g{UQ7_$9LG`LebBfIJ4W;o|Q{(F`?Q zZ^=|gO?&R-O{dnqG17QixssxM`bpxK4yyc&J)=70cOOX&?qv~?>pOl^IKwU%4XNRl zHsO!J>|`X3^2miI{|6+UCPI)4Q}hn%C60cm9S@7JGH;0eba72LjK)!?evk{4@X#{S z)upwhP!)y7j2~GR8|-Ox++H+(nBzL+(O*81j2|VOXCTsOqKP~@Sq>04ap<=L*@n0j zn=u)QMN#|4IoXge-(;8oGJ^#(s(zI|g57~;UWQ^@+yLRP-#?5ekZcw;ttvt8Z_g8E z<0JEvA?5BVyv%?@v_!LaQz_lmk8fWCboWNf!7T1pXZc{wNkb z8Tb|!_-KLG+IJ5|YvdzlD@pna;s092+~fb=#mJ8d{|bixsU-aGsvjC7P`@Xk98ghPP1?-q{}%-omvd&DiCLBTHcq2AzkUXB;+}t)$iWSo>cyH+*ug#?7(zsc<&w z@-Iw4#|2AcQ-{_kE;q6&ZDkU#eF@z>O!WTVig3akhDlb4ZQ;!e#C~(*z)kdQ0H4Z7jw9|Rk@0dQRfh`Ct2qT@f~~q`flI&F!g=z zqhsoO#%jv{vc7keTYX>h4Xf`HoE7f_ccr!W!`Am7-5T zRz(}2Ov8R;iE6yqjGF$`s_2iC;~#z;Wqu6f2eK+klXu3eV7`bVM*V#Sbr;1~mPhR;bdFmy9Hu4z3pqf*dqFg(wj$7Zt_y0lre{^TI z{~&4qNhbVr?f;H{-2QKVPy2u5|AY3g`i6pdel99q+05>;z0+c?L9y1cs8LRwG^_i1 zZf^J!IK%fZAlnXcu1t${I7I=6z=SJd!vE>2@Tn>sYf%;c(8gcLoM{I(H_X7^-O$*o zqHas|B|L0yIJ0zacoMq5-s0LcQlBOs*qx0xn|)mcTIog_TER&@M%KBks_*c=h8>o# z#o+Jv-we$--s~{?3vr}ZW+-2ZXpU4jL?IO%l1@|KCpVa!P@df5txIOH!90#7;NlqR zxt&LYw$L!p*~b1)q+-AS-A$ldz!Zm1$)q1nE9vJrP#r#nsPrP*-G0x9S$k@FS5`KT zTfQ~vHnJ-l{767ef={#I!e)jGcC4oa&wwzTu-!nUp*cI;4~Xwp>U2_#B`AqsJ=$L< z;FinP@ZIMz8O(+^ zE@l+Mg%lY4D;d7tq(#RUqha;H6(`IGE6X#?Xu58wKX$7Vop|ts(^-U0cn3XaT^zOe+u2#o)r2S9N zarJl+Q_`gVgqI*chE$BopYW1-#rJ+0maURP=5yK4bQ&(LKim7wQTFNlXR+i}Fe zB0r9&iJ>oc#Z{Q$MaMNBJg(S(v3?X~N1A%` z2P2t%etWOm{^sA0bF}cB>5piurJ=9q*zy^upYB8iee4vx+t0V)0e__t`Rm^I^f`)O zJfZ8_3Pc};n8df1@es~=4nrzs7wKl0XNpF?Z=afIk(JoCoa1SFOVx_!D|TZVXAa8&Y3uzN=z3O@6Fjf$KDq^8M13QVUO5RE zrCT`*HE!|q>>)C3=wRBdo&bYxK` z!P(BjoxmK#*XWkJkvC7UH$41#tPqsLEo`O2`uv^1o56Hc>m=OxkAIz&MOIS=?~q6- zuV|B{Xa%63-$rzGL<3GWEaB^0<#+1*9fHlp3=PNj9h9#F1yqWgwSD<5!OPHF!DW1& zY$L45bC}VAr}^XYlo1;9l_3>itH)*j`21!h{B@LT5-i;dE)4d*Jcz1bSg+|^6Azo4 z%x}w;izcx;T#mI1>;3v}A7VF{R}@uP zsFlMb2|alZDk`Lvw@c<9M9ydR}0;a)_c?7Q@0_i8J@@*KZ3SpU@{1Lh{vWyF$HG_K6Pw`;?C;3%~P$OKV zXiE6&^SkL8PfdV$h;h(ggicVVxrb=C?ieW9=v7D#PavhJu@K5L-F_cF7@5Tt#zThE zG+Mr08;%_d5v$Si?XllpmwdY?7IE=03>F$NdJALWy5(CW0*f7zZN`j)Nq^m}%xYSU z&tvpya0qyDwx?naoJ)$wK8{V!#y$;$8v7a*oA-=;2rQ9Ye_BPGHGkl!x7gnfso4MMuZ%QB7H6%fTn# zDw)48(vL13kKcY>ui!@QqT9bE2d))}+w9a?v6N$wge*cJ0aw$B5b*~Mkd67tkr`G| z{NcR;6_w;@8vlNO9daX$f1jefkHx=Vjjc{!JAnJT4PiL>q}19xI}Tm#GT^f2&rPP45p8H*&+lM_mmNcerjzRKIR+{f!9?|@(*uLUCN>%ZMC6`x} ztSlLa_rJdxhvY+^!^Q6cNdh13Ls9o-W9_i@zutwy6-UOoxz>kysmcY9u-i5xG*xz5 zeO0b?1stn#OM3OJ!-gc;W6b7cEwMVML+7h=T|@9vox7VuZ*}g05_P6Jz8+zg+MQ&B zTq0aZG{7^;h@tieH|x-ln4=Jo-Q48aH$HH%+jUxR9)g)KFe7K*m-1Nn*(m^n;W)D2}o%kJ)?YG?KduYG$ghwx}D4ClB{Z#WVK870JFi^Iv?p?nHEAyD{OZBmA z*|Q#ElDgC+ylLnQ&^WOG5Z3)x4OF8YI~n{XlXdW6zpW};_7tcxU-fAnN5Ds*Ssz21 zOKiLw(*_iNavplaUHHOcS9h~c;8q`*asG2xjUAL78YoH-q?4vikZ@Rt{=Pd7Em?ja zI3BpOIDIqbc#L0|@tRvhMa@TbtI!h;Rog1`C&FyD($!W~h7}c+i6mFKvf|Vd{M3!Z z&uJxao>fu~;eKWFQY3=c@ABGNf-hlW6r9UX)t$%BnnZ)_>Bl$FHMLqDi@M=I8(!6k zOHKz0`aR4)$~2wO*PvCW{`<^-FD_4v<7eIsRWtqd*XT3dcnzJmSg-EFYXkOLKQ75R z<7b)wrSOkN!9TW>^fN=|-}90Sn1?+j+zQD@*23l#bL)8@Ka4b zwC=8|@L6;wbf^k{>G#lUSdO*>*~3=08ULzrHidJ_NBGWZAEHtg{ zx?hw%@+>L*UW5=I~es=_T;18dGUK(nV>-Cr2c4!IC zvG0-~b#`xGh9Z3kQ=;lXXgQOz?rUI?S$4#>;p>>Mbq>;i>!WaF++LMq8`geQx7$6I#K z$gFukEwk?Y?jl0*9fsr4QItThL^>9b3oLU{t4E#pT#-gQi7(U3^X_nD3|=qE)nRJS zo@P~gUTvDr#Q#K`N(3s(KY;F&)oKl*;3pzKQI|$B=BfYH$9)X^debnH%=4_^2Ok*r z)YrpFxoG!wZ}@2tBJ-t~tm=7wn1zzOKW)*KwWu#m!&mNubF?Mxp{s-r3it-0NeFjWq zZOIi!>LVv3?x^)XcTp{3=TlIyDB{kS6L6-a6_h^pCh(53bGxwl|e%Q0e6Q#-q$N(Xi4fpJwXa}Sz5zQgXkp*nvKDrtOV@A{BM zcW2|ltGCQ~Yi)i`mSY?LHG^iN=j`E6qQtVDfc%Feke)1@g2}_>{ZljFMpJxZBfR8S z0>e}-Jo2z|?2IOi^oxXCmv1ZE#6NpATHDqbs1!U@r4iYsYq3^5nJot^LCnMbz@H?H zhig3wfrJty^V|7T>~rjP{Y+qldrJNclQTmS%SMxgHH#y?s5Ws^uAwEWy9rsg7!|zV z)jbE(>WiBCN*XvdbD9ruVlarMptXb7P&T9U%jnq1ZDJm@Q#-RsvTdFuU#6rrTTlRreo2Pg0$evZhETuuWOO?im1MH;ad#HmNB3h zU;d_6Gs@q_5pE4v<#T9Z=#`858`LbEXPK}OEp3c;ZYh$FSdT1>u#Z7?L{E(v_4v*C zbX1SR@G4KErTJ#H(ymF!ER^U(U0ON&2s_5(Hy7|%;!{F6OM)_gn8PIps4iS7@h0rx zWX9j7(%^EP<|>Gvo@(`ib4O4iaTjMU{@g1V{h$IERb#p?tt_~N4aOvk{!p}>EFps8 zo5R)t-F5Wif;qx-xa6l=3)Z~L>@WG%3)zB`1D$0n)L#rIszLGD9R@;fT)h6gw=gx$mGtpa|xwJYwv%MPoC8|-)p~=&-sHufr z@XAW;e5k~1x6(S`?XxjjgsoFen5YsI_nJQfS;CAo#u(WcTk&+YE27x&(ZSi4zXt1= zu9dsEkwKgTa+YuOZNl(2;hqohd={c?TfUoL9OsM|&9&0C?2+Wo!p~XYkA@8VT6?*X zfwQCt5Li}$@u32%#ceiDh|t!ha2~vvPDU>u_`_^&BC9&OVz!V0wAjPnvaKMP`Xe*K zuK9QeV-os3a3$})h~~CK=PhX87y|I*@Lo2V-;ZOP*gU^8xhPcI(<{%yu^Fs{oTuZx z)qL;wZ0t#UnTYm1v@)|6G9ywsgyuVx&c{ZHBdLG(2Lp)Z@1o4_B)bl{g`9?fDD74G zJmYu!6a>m=$wxf#YdDov{q^v_qQB^a3d8)eJUNtM{{`%&%O8`kwB?nW?)>JR^qZ@B z`taWQTjuvd3+^82WBxn;ym}yrEqK}c8=quT&UEL0i4HdW?wTB+rIl@$&VpUa z`QF5J%}+AJD=Ro_>3Q$@%It5_^DMa@gB^nF*$iTIcVqp{!d3O?;gIWI3zdN`6UZx| z;+flxyj!$j63cXezQWdiT;}hW-_M4-J~;-xxcCh(Q=KMe6`<4A3s|S~8JLKPn{y_wq-zg`DFt{9k zatd)qOnk-o{CIqFz5M36fZs9p2=})n;&PplLSd%O+V?~%;p93PKYuFX1S7BJQm#wa zBwRp&;@8Cw!4n!lyDnXA3jS97=GSA(B}%A~T+D~)4(1?AXu0-=terx)=ST5y==tr#YY$nid!%0TC-oh9n=U9R?!YZy7XR784?u=*%! z;%^w#?s%2m_>1^RpAn= z!ozp~wF&&X_#FBTJ7($9Rf|g)RO8pGFcDe|du0rB@+0d-D1UpS)!`W`Cxc0j(DaqHEh+m9e45KA3_J)qmxiZ zH;ybqv!b4%N`l5ga{}g6XdGFTf~wUm4c0j5V3lT&W-3NC4o=<+Jv;A`#!;biZk>)x zp>a%;V=x65zaK(J;~+-kD5ulC^G6y7-%A_EPJDL#Og4^5fNC5H9*tw!1!x>303luA zS)p-kjXR~{=LnRIgASogp+TVtct%Xy5yg#zt{9TwTGX>2oRdo^19G{J5*8Dr1$gyS z5hV&|z$m#Ay}gF(lIpmLLYW_<$R$59t#hCRlQ(Ef15%FMy7&lHoo=YkEEf!-L%4(; z*f2|V4_^GucOZn4!YPX8Xc?v2CsnsQ5DUE=(HE+T~g78@DgI^aVb=^0XYW!xcC)cQbi+1MeCze zC7cjCMF_r^Rzrtv|hmcj(D!%QPEC3pM@QC!#$~Q^irsAkK;~>IS*m8zR@8J z&OrXncF8o@3 zBMO5G`H%S!RWqx**5r*^g=jvy_z3llZm4hd^oXTQT(Dlm8>koI;`h3JOnpGCIce)^{cBf0&x>R>v zym$|#3f8w-xS65M9#!AyT&Qnt$P^XPQ}tHg=wJnq)Hjqj3mE0R7#GO^1Q6mW)s7aY z)A@Bdo$Khv1!PgL zE-^S$+}RMAlSV+bX#_wqz~dPd1BP_z8rJ1*4qi|Uun|ofe+W~9SEzvzuGT*8LlFtfr4 zAg~iT1s7%>H;F?Fr4|r(3qTZNC?WLia~9RG0c_akAxfWziEtB?1E@p1ghFI>SgagS z6}HZSBWCVr=#tF%E%jkXEgYc@KwG?X!x-CRk)o^dDPyE^630;te1Kx0H$;Fhp%`ZA zV&UfW6?7I9^-&D<@@esbdUG}CWY8RCNkbdOHiO_NI%*9rh4==9wMaxl z;PEh^CM8H7^f3Y};N80Z2F$WMromC9RoF2_P>dV;6pa}e=jj+e;n+mLW7}Ob?!sd) z2U&{y@Yu$jJ`x@~AE}m0J;z%4y<#4qq8DB<2T+j?ub5RGexbHHoSUr(U@4)o$wz)7Et=UP)V5 zt#H!1vKCg-x+?6hsCCIDZC!j*t&72_b+KEv)}?@~bty*Hx)fEkF4S|SA>@4Z{WNgU z)>z?3H?mN(U%cPQxFu~2thzO_R<r--enGtCGAdOgpaY^ z<+}K0xS$bjQ=mTA#R!B8=AnHGu$?Ia;R3X?&!L@t2JLJC+S!-T&OVKH_US3r;U~-C zOBo zg;FZZDd=RbE*8utScsp3HpO?`DVkxIPItY3#3n(mgc z!>kTl*_opDSLh<+vT5IKc@(Nc#vnwqju?dY#U-a)L0uH)FUpD!(09=rqBD(;Gzg#{ z`xtIWT;qbW;uq0%@%tz%#U`h?K}T?&o>{zeN(J(%+wzb}!(FG{IlEhGcP+RJgZpul z5*F>kx61u4;WptmVP-nQT8tY+w%zVp>~5*uIlF6SwFz6Bafi6mu{yk&O$K*-0e5UN z;c*zM76C>407^#@}a6^n#jB#z3Exy$YWh<JL&;iUk}j^ykZb zrpLJXt||%BT>M{A%UCJ>BlhUpT;1)6K}*eW$Mvl*^f62v-qjFq%yP(wmAQ81l~)#DgJqPoZN?QS?LRvABd0S1FK zeJu76nN88Pb2 zPN-0Du=jIMqH==XA5qBGHNUpj{YW9b1I3TB;97VbjQB&Vom8{Ja^``n{WfTbhzLtk zzM*4MgN%I+%P^)q)aiFa4LlMrHCMvw$&pCQm6fo1k}2(#NvBL(!)NmsB7?ENbz`KB z`(hWatbqS4v>h|Iy1H8sev7~STZ-X{`I%AX9hbQwKbbZxP|>)l4s;`D1nK$SJ3rQHh-(cGPE%&`EJ3+aoX3V}C@dfYUgveqV(yh!`0RcOzTY)!wnZRs# zQr68xhftA2aA_2Z*&t+Fji}2x)QHa8ov(F!4o5nl(3RZL@AM8V+@g?pe2v z5ta9zMw>)4gQusl$k~T=J*ou0gq33?s6Sb3 z@EBAaYxj+?w}Ap0hO*EQM5>-IOIZjR*3>y#S!kIl3sHt@*gv1aB3gXp1p|=ARtGFs z*bDj?lwM$DPRgc;M>oRgUJG@g)BHmpEvN%61IEeWEIp_L;a~#7NWYjO-U=73H}-+GQR`jL66vJh*a9V z&YuCFM#Y@LN1B_Vis*{6V>w9`u-*S2WP+4@`u$;7GkKCN!IPB?+H9bUvZlXm#wb0X zq`$5}W9~y5`mz&5z9Mfvb2tO}ApM?_Z~nia-_wjN$mUv17S(3k?Eh8$o_@wB(eHUe z1yQWuqo?c8@3|Ukrzn3-cmDPIJ=>lowz6CDiRt%z^-Og_|9|NBJktJe)bIHvbmRXo z>G$l6<)(i|zh_&%_pjFP(U`FCN$Ve;@kbx>kM(=5{|@5u&+7MlcZoWnf27~@zig8{Z_DL4lj(a1F|#n9J@ zp>F`L)bClDc?P=v(z(no?6J(W6}B6Z5_Gt2=mr#z+)_O?`@xGb;4jX`(hc%G$a?r< ze~t)|JV0dFbzrJw^hvTUD$&Z(;vks9H_-l59UpIf!2mA)%}=R&AjYuKPpA2CqNV^} zu~7$K8kUEYp(s&Cm?m&;gdT$9y0io^@u{9tZ6hW@rx)2ElwqoxnLHb47T=8GK&X{0iD;(qEV=4(N-hvDI#lQn7jblSZ> zGk|R61IYri(yS?-&wQVsPNsV+{UiENv8Ino%%)*F`)cjfNi}`wlI-1q zII?L!#F3XDwb{gjhjBKs8Z`uyjm?u<;?Kv_2x~dTT0eyuSJC)Q;jY);r{M>~Hs)0r z(0g&LHNyY>U5;}u%s_}xrZip&bhp=Rvw$2X6W zys6_|C;6KJ7YmyZFeH?ZDC;2^N&Kgwb)a!&pj=Wuf&_}_B_Q{ z)Twy0n~&xWxh-sO+sF>N-}<$^s+lNg=%G|eXh|M%_ENXhA1Z!ZMlx@4uVAT)x8^wP zC%q>~l0)Lu@1f+3mV(tNSf7gdbnRa?b-nE9<*0-H$bOxT|KGbDC5mWdIjW7F%gAyR z+9mJGk)$xV2{-9-REzMwa=%WP-G=EZk1R(u+uPRTcQo2v1^ht(Mq4wNlrVRAEW(_@ zi7@9kj4)R~Mwlx`MwlzA|J&s#rGDMZQB1EbN1xhy}6G_$|ZNn&t?R3#c1 zup4l?c|bR)ljspgR&cCUOwj|=CJApOy#m=tzC#%mqNF6B6u0;+tGkmM0rl1JkGHOTn*RRGSSy1%CBY;8#zcULAg7T6I`CB^zE^o(*B72V$UwFcEN;!O{>i zo>jf~Tlhq5ifZs8M?sP%2Dg6mTCy*(1>8H+dx4hH!K_2(f=h{WVz<`aP-= z>F#)|xQPN@y7#1>$xjT?KOz zw$uObYqZtmL?7PP!dd#NnH_2XAEc(9>|c5BGF+h2*O3!}Rba4qw$_c26tz}sB{p~m zR)J{+KbU6u#KIk0fm=pZ;DqEzDsaoF3S3*Lz_qBr^H723paM6d0@tGg&q4*Bg$i7Y z3Y-_0}H-+Br^%+U%_2Erw4XN zHDATH_yaMba?Q*i{QCMOF5uCR`AwsMq1#;~H+*SH{!UQxsWEvN|C2;_Q$exmV7x0? zaPS113eq9W+|;AlsTLg6m=VhQnHN$eXx8Pj;3{yDgID7xm$|8+&Bk@UhS~XZlSJ*y zM4fTUNEYzyY9{J0kS_-}KqeF?Y6{-QY-J>0H#*R)S5XSX)5WgP?8LCx1eZOot#wROe;iCK#s%MJ6Gz!R-+-tgx7h zxMhHb=s4j7;)#seX4zP6T{jqDbZBv|^fA70IQBo#$=Lf2H230xne$m~OJA=JXWG!tmpFJ|C9W(zWiD{#6|B4uTw+*M0EX$=K6d z7L3DM;owI2K}wWKJkJbyJ`T0_3rRtf!}b^B0MDeZ^T2YxyP5^P`Iv&H{;dD<5DS_| zvaz7;P;=fzaCKmg5n~inm`z@z^{ssw<^0Vg_z)=1&(WQ{&kn53fTfIBw}U7tlyn{+I*1*(oM> zhZMK$#dz+6zp%h>rdJd=D~R1iazlZCH{S)p2hV#XjgQtr?^S$kkAW$DYO&HEaGYiA zG{%~?9MC0SfP+j2XTQC6?SZSQ0b`ZkA2OFF1#u8pP3PJtM@~bDTkt_UrlhNa-$(|t zm&=)%S}q?v8Z|1bgHM8HMt}Dn5lBfj?8IA1PqLH&K+zDMkgL2bnm(!u=ChGqmX9FBjKA zbl4l7nqdiRpdsMl(#KP{?Bx0xJ`$pvvM@oZpB{qmvobO6_T- zO0;UD*enJQkaz}oaVFx1n$WHmY7CZ0Jxhdf2kRLH@F zt$}xuf_;B^3Nd#UbEd<81E)~3xPi@9R<89X#?GoM!frFq?R1Q^M;b9li$fkujTbSW z$nRn##U*SV&)=l~PIiOqVtZ0^dXCWP8KLu4#GFGsLT9juxvCZF(i+TSUJz*}0DApl%}wmhl11ss>Q}y6`Ywhf-rcx5^ObQ8TjY1Z z#(=4)1PfQNWY7FTl=+Go)#8HkjRqrG*+RYfdH&~mZN2u^iIF$1!5e4iFE8$a>yawI{vdl` zo-55LU270)+;G4fcjg~jow;#bL*w982#?|J!*Fjagd1=~=P{|W^I9DIJO+Okl!{#N z*(CUD3`TNL@b@d`XKjcc2KfgepD&$++rh8#oym)u+yP~+-7ers+)1VpMsh$9%k#e) ztb#1Aa5liH$cu*ep^yiyp_;4p_DxSFsw9h~N&u2syW#(Fh z(=a)|ca*vMV459Cf?Z?~W=G(F6h4@L%AZ+b-6vmx2|0aYZ+v2P=4wteXceH(Pl5x* z`N7liLAk63d9BL1GP4l%q)fJDl?1m8ohP0ydQ z8VSbWiiS7106%Oe`P2A{zWJ+TM_&1|y>iLm4Twx}`YM>d7yrog9mVuPMq%)F7s(Bu z`d0p4Man^bS8fk-UW)848N3vLU)+zWoLBf_gMIO$LD-NO^~LG@;urNro>a{*GIlQD zU8G-p@lJm6$muw`%763-%cdFMXEw3C6qhwPS3SuPnh3%>R}Nwi$*6BlpUEDzG!$qG*B1sm3))&v)SFqeD3;uH`2ElM_u_-4!883{+KlG>|5#%x3_PthxH29 z{vAdlq$zFFbr!D!pY;Rxtq;T3tMIu{whc7#9>Og)Z1Go*qL?mDj6v9XF5+a21L#T& zWOH!udppLP3B?W2oW}7hXlp#ne&qHw#CkWzdI=eARNlKEWvrvj!YIBHK}_pS%49Zf zkhiaU5W4ff9$W*dR>5pH z63iq9Q_5gYVlXdYBw=YV+qYw2Hu?}o0e=xvSH7R8+bo72ll7OaXW?_4ChrGr!-iY+ zg*teK!CQ;#M7-#afy>}4!|;jb)i5=G6a>{7nVZUP!>7vNf$?TQF5q3HUwrL5c^vO{ zc#BLpk7?7JMCkEdhs0H-91m22kPZTEEPoC65XXF z`7k@(l#Y&v?5>4gY|4#ii|uZ}p0(NCbYu>m$uSYcVBCOS5`~1E1r{3HfYo?=Hi_@q zUft?Yd!VXA+Ytp_bp#F5qC@(E?VSqEwkpgc=$Ynnp#6L0C9wdcttE(y5@x%hZDUt1 znKNjEG$_+fzLl)B+qye4wT}UttsrFTfbR5dWGZ8V?OTeMncA<;-A&01+qWc{g>k>- ziX|)A+?oPp;|B?~kXPw|3_dTPhcEV(I-;k6~<33c2{ir4rJNiMiI1I4XV%R}Co9+CAi2 zsjZ4mgkzVPOvU~rV!kU^=3*po%D1O;4ZTqvtcKEdM$>=;Gv3gTPLspC|MjB?EXJwU zU%E8mwl_lk*oPNq0k>2cirW-MMC!gtEtj2qk?D6DtP2y5cmw z0EKF4qF?|z63$nqdbGAS*|1@L)4>`D<^JSDC<|kpKx{zf$U+w+aYk~31<0#nh4!eG z?zD9$3B2v(`4+715{9H3ZzFZ zzM>d@o8dlqFk=V~f%KZ`YoS@f+*}q`MR{ZuG?%2l(ocT;etc3&_KL1%|Nh&J`f#(&7x?Yg%MlJf+#Cs+L@&L2i}_)Q z`ABIOK9xIp*3^@0M~>CiE?cwm(y%2BgxSlF-G@GL$Ncutm$tbNnF?bi4)4A4m-#=Y z9>*cFN!?3Kiaxj#q!f!jyRtqQt4=+fT)TeVnh~O}bzhbntHzpx_>rVWVrvpJC|f%c z`LzE*LuVsz^3c)w6B^2pzZeC+8UDtp1)#ltFH1_X$3M2o+bFg*fH=SJPi4z~y0pZ% zAIHOB?ZmIFNDqm*D1~IXrFBiRb)Q ze0B++J!H>z%^#pw$Kx}s%MC-zQMYkEVEx}IJbpU=X}n4oeg~w4g>W{#Tx21P&u^K3 zyx^%60$hGqMD{D+Qyx6T3;X2t_OWyyq4?*2%#enb!*_|l#6Gq~{-dZ&n{ZD~a#$*( zX2#2(t7QC0(Ji0KSKgSer0q^Y`^dfQQ`z)WH}7qqdPaqhxbZ9e-m2xF;mgbHW!P)V z@1eN<>AQ;ShG_t&B>`No0P?>aKO{ei#rTX3;D8{zPmj z^5w@`h*J;+d>)n3*B}s`#Fvh>^k1w`(~Cts+mGzmKzMI`8Nc9w`*qQ_!YH5{%6>g) zpxNF+|47EZ^hBwy*;q`WKQDu7uTCewcj`5lc>U^VuT_Ycd0o`SUaF)l*aoBn2s}z% z|FVsmfg5Le15LO$bZK3U3*H{a1@>tmmLliJ>k^dW z0>OTwE=wli0>QpqcO6r7(N13o_S1FuKn1-(dBuXv+Fi5V)!JR7-Oa*X7|iEKgE_+W z!siNKC_GPip74dh2zd@}5LxsJyqjfrjdrK`092Cbh#jfy&t>KT76{=45(6%|fI){c z;s{wpxE$^XQ$dGj5GggfC3S5)QxY)uWQ7bLDAC0ZslY-jCpxgQgA2?zXc81kWejr) zPLRM}bIJuSdj&40zlBPH z7qi!TY-@H{$HIY}+lFW|gHy?hLi&JToVt*!9X~f$54!}7r8ug1VpT4?byco*Qgv=t zc{Vo-+eYiBRp%O~SLfzbROjYp(bltg5zBwIfE9wN%PhD|ALTL!F4IQ2%!A96f=d`r z#tn>eV-_ngKa}01T(&WcC&}gVY_7Q(iNK2!3opWvJA8VyaE6n)^q6^p2|j%lFRNp+ z4=0FDHp;gY4gThfjTYzMUIqP^%S@5S;W6Ap93j_YxUBEAk697v*gIpJn{OP0gT-~%`b zy_;LY05N@L@Zco$vE1GKG^Wpt2&UwW7N+EiWMcWrNCh-m&u7RfCL9gk?n>-#*zSgD znZ~pZ;M43BNksv7v=@YD6PfME8@uaMF1E@L5@!2!3{$Noy%45aOA0JZwU+duP+Cih zK}fBoT4*h0p|w{1P&t%eQgv#o)XKnUOrlAsDL?|iPv!tT5=}v~G zaL{d{-li8u^fMJ$nCfThL!tCD6@&k|ex^Pdp3I7(6on_7e&)I>N;W?7o_2~>9Uc|Q zU$)wg-+g^wieV%2e{zQN@;lJE`kPs+NS^Gxs{oh?tx$VR#3-ym^5Y*^nX&Xo8eT;< zcNDn;e_gdg7|QPg35_g*!aZ$IY4Z=@rr-Z^k5nL(oS5kUr-w0MR-Z@YF}D{dkjkIQ zd1KQR(`WqMI~JWcW{&GPZ*1@g6ETys;8#}cR?<@flVu1W`=6LLZa~=H9EM%yWjg`3 zFgqFHYsxuSTE2cMGHZvA=zS!tvUK^O8^UFHYtGBCmX8C%R#xs>(o;DJLE^F#FVMpq zO0LPwCCSV1bWDc%e>_>sbO^cC>&dxc11dL(Lccxh^yUeXtL7EpuN_zmuO;f|0rmp@!=5}B)m+2eaKvBWf+ zvuYTep-Ttq5sEZfk>5dT9QNcLJ>d=(9?N<<=ol@}Ci%qvhxta?g4bqV&9EyXiLx@Y zwD^pQ-~+P^Q{^-|b18BqcJfWZK3PPP@+vxQ5y`eC&MHyO08jE^BYI;o`W>X-19!58tPGeYT}8d;^xtLT$J? z;c5k3!c9R03JcO&loUELAR|SM;Bv8wBD!7*Hgb_bYnyd0j8<%=3QAW{;sO$ZmT+mC zmf8g9(x4Thb|nbPGkifJR2mS-|NS}7^PTz5G%bbS?!SFyzPIz-&U2n~&U2pgoTnRY zSKg+pu=Dx2vu27rkp%9*{mgn|&STpBVruu4?0r}2a1-`9nikF>eq*9_fr!$Y4a#o0 zA=J#xCx3|8h&i8LY^;La3KpEWrH?PYGRv0Qy4{CAYF*_6JbyrjT8q6Ppq4=ZoxIV+ zL+L?m9iadOwl)0%%Auooiq4`6Q_}a%YKhK_1q#MPsMPnjVlbHfPaLI~&5_%DSQEp` zBfOqk`#=%{Tz$pisW+5&fea|2;*ivS9{^?rdud;fExo`Mzg*_pV~eC3A1F{74dHf( zZ{c<@-1_xY$XqWVJAu%zHiWjRZaM-s*}Yw4;MDQe?$xBox>u$amkt%yTW>b-AS;_QMQ$hUz?$y*MxrlvL7V=;I!frWfyn&^_0kX@=VNFT0CDo*r5EL93OCcq~Qm< z)WCDcBGl&{5Bf>N>kt&mGd?(v0`lJEYSsd2y8*Pfh`!de1K^mneX8} zbBrBKF&oRQOCur+DOE6f(i6(C$D~SN8BO}k)QgKh7{EJ9kwScx6#7En8Qiw?ow+)c ze?kR4UaQpA$vdO2Mep*|r5C3N++Wx@k(cA>@B`>g59WU}HQ#q~{(o-V(s7W!MwaZ!#M&W|0eo&kn`EB2!W=S&TMkS=b6!Z49-SU)6jJ=`MNLSzQe*G zeI89PdvgVTorm8`c4t`ltH|ie?uPVJty7|ApHHTdr5$B;I1VbQyZSiEMXQS{qVnnM ze4<0>2xv39&CT7*21WWQ-!Czd#P}IrlbYYHMiVWob)&WWbW0&ZL-TOEi7{829Vd_H z7xnmU-(}nJTYl#o11)fo3jH9rz5aZq%G^YiwDz%o$T%%S z)q8&us~3tv4W4h8aQ3=)hYj13807AVU5xc7$~xPSSEuFY^pc=YWGXG+ z@ZtW7YI(G8cb;~8#d?JHeh4M7$F_(Di9Zvz5^g1E!tIQ38^RQg9MjT#&QH!?GU4R> z^hORoZJ3&;e|%Th*YA^*8@gDd)O`{kFYBeP)^ajJ;P%o*!;Z|}v+%{KgJBd3e zMlX58DWfs&1m4e!! zvE|0%EG84NZ6Py7CzSRKwMew%EZ}HI`CnBahnjk*{F2L+$w!9_Mas8mZ&*#ZY{z7J z@MuFh44Bs#Fp2$DelJ<*hl430+%|>V_;jD(^5g@q_~0qq)+JyOCcWZnmifIKy?9bh zjcz_cT0#hIvT%@=c;`U!AL0RW&^v#4LTEhe+q`m9QPV3^>$ct=GwAzq8P0dG^U{0( zlcM*qD*C-Maa3#5_vsN4SC;eKPtIS;P&k>Pp#8%&L$!)~=b#65iLAk~eCU#G#iT=z zJ9sBZdTG5xAF{ z!)cnQ?dBCpm93cDCDm(6c6B_d)1&-o#+A?Kt~#&lmf*E%mm1}|{z0bl2&;7g(dm0S zP)06BnA1u)N`19Cp~#;CQ;w%~XnJUGLsE`xcBfF2=zsoTK~J!3K@jfg?MW(hF4$wR z?^(WwwlG7Sl3tyfcL(=n{S;fD3i@iG-Q7te+BN3nUOHagsjwO?iwOOJjC@_+8LGjQU9db?4>L3&nuFpBA0(2S^h zCoibJ^@eon?o9ED25QKCc5oUd6OMmgJ1zg{wETnazqdEU45;JS%F8I2QE`>9V&n0m zq2j*#q9_fGD(&^BVs_&pE76+c!4vA|-T@lJ`kI@9Q+*=KI6v*%r%T8S{U)|Hebnm!vVDzaHFV>b+_3Z_yBc5)~?}0)+kS1X%{yg9b3tYt*f0D z3V|LdPMt8^jaSP`DG#9Ay5Nw;pua(_-TBM}s?=O*L8wm?^#R8?bY%9Kl9|wU961lV zed#pappZYM=5d>$PuzHEYe8dn53-@odoyQ6(8oq6oBKSaG+AWALDz4!vur+SDG4b$ zwJB3X-71loLQ*OY{2joY!TeWukQD zcuoHP8SR9OqukM>uE05txTNRY-#I3iekB^;xt%T?>iCMl{*t6;GriNX#n(op=hX6( zno_snIkr-i)aobTkMHcOmzaPj@C6RiL+)NrGeczE{qh#*KR(acbSs@YiFlcA>Co*i zBNZgUIoE5_uX7FuzX(Ggyz)=jIw}rKmLwsdltV0_#A#jU^ZZuqff*iJ59T<2~)DS#Ii*t;4jFm;+Ivy(t)7Bc``2I z(-e_l(^_}1H3m*=#KgcC42+!!mQJ_F2ZCVPP5y$jp`nUZTARRn#RbIy#ru$v@261&5FiEyC**Xp3nL8 z+UUP|rzM?`%8ue+m1r zDU7K>ca0_hl2dEk*{@bu@`bN#KD^@eGvP?&*((A&B!X1S-2omerP9QcE9kJO1M}9qIfV=qpDY?}~+llvq@5^(h-T z4tnnDnd1LSpJ|jArc5HYr0)8S%X~zmxPLuaoG(K-&ajMyMbW{VLAy2s?R^wbiSrUO z8X$pNRBZ5D(rs-n`rc;v6F*LA7)ep63gHC5s`7WhjN^=nwilY+NpU*OHJ{lSkP(0V zl*t(Arr9r3)(ewhdGa-?Ef4;9^QKB)PJ|v3RkH+wKeD?bp5y*(bO&gJ)8^@Fx3SuM zFGDKXHf3Ptowp|Q#cowDGnzHzp=xg7dplz(lo9IJH1~B0ls27Lv3&u#wK39u^B#9y zgAqHCyRjz{+4wwks#iFK`)VZD-+9-Z`tch7a=1BlO;2;v>%8}4l=CmgD{)wQR(-Un zMGmRkh=YOeb9T_}^V%kM;!~28Wr*FmS^FgY8bke>^Q})o(*5X%eWdHnx2(n^&+CUG zi9wR{L8HG7hVqo#sNpMfs(nIqPX}j2*_asA>VUecBILWPf^YC4k&dm+aB@%{oD4kU zagwuU5&rJ2;N;r3ZHAML!iknFQ@1^$JrMavUHa8co2iZ!`pC?Emd4N~$VrL}_=9Q{ z>T=TF;I2ySF+C8EkoFMvJagW|+HR1#dR0T8-u!r#e=|HabxrrQCf;^bg#8QSLeFQ; z!*g2%guuWBw^J zIPy37M>s*+zZ}6I;Zu7Be}qwMl}>$YP6#%_(KZw9jr}uziZ#Rb<5Q&pcLm&8b)(KE z04@2p_-DlRofPW(`BxJ4^)E-L?=Rjtg8#&qYN`&m*>?Yl?c_i4%6`^#bb#1@qU%NN zsQ=&dpQyycg{DGK4ZkDI2TjF|vcp)Qt*4FPkMKDTB%qPfV0y!~J6yZMwNux4uSKlb zuoVeiLwRFpYdV?ORJEqTPL&!TeT;1FvRc5RPeSpAfsZR+MXs4r901mTw-&eslD)My z7~26CmYY!;oN~*zEk?gu1SgpfZRBKGtzTPhTl{7!83%3XCU!12F{rY z&^OwvDY<>q3SNDL$xB;g&W|?nG#+ij>Z$p6q*F_~W4t}YWX)({wwf+o7wy7M`)zeT z$Wtr)g`-|4(s1beV7r*9gWxqh#EvhvCW=+6NdW8^U?PuuWW&x;Kc0j7~X^^C;kU- zZ91eBiRq9Y{d6eypZK~dp6iRm0%qSdpQ)LObU&n+5d5z$?3=~cpzp&N489FHx^O=7 zaS>#&n6Jot&4Q|vr$rx5SmjPLjT2)YmTyj;=;g!-qy(lC_C&G9%PVw+;AWHVpO#vR zQOyvWUqind>Mo&zkkFpxqLC0grkPdEB3p z;E91w$ESAmGj?M*pxN^n<3*fBt$bimXIge4W{+(X^v)7M*e8y?7KC4@^3E0&&S;@1 zPtA{qz8|g7cRJtaZlUea_C5(rO)(Uw=IQ9)aQ<(zWgJJAS23YbzsM0ds1r`}w!<5O z@8@a6wT>WXZA}CYs#I@+=GD~lK8E{7ZmaY0gL!9Ue=@qG$VD$aL6rZ-l-w)yVg4|p zKS`rcIFdif4484A6Oe2Hmo1^v3yiVMY{=l?RcyJ>eG8q}yehSg7NJyto8-_$ZB;kz zU^nKXC&@*W$%4$)ZLqJCCS*8=E0aH|A&&18cG^&?Qs_{|ji+xmXuK1|*xu^HnWd7zt`sTXY zg!!V6XAT?HgldcaDRUMi{ZsBBPc)nVCI6I}!UttH5~Rs|RO)boQos0(@ltGCKe??R zzm+vpbA!r}T<}|2Ba7031-WNb{Vz?WkV2YW?7jeH<FdE0){W|Xqu#&b zAU0QQtN%)VNc1bjzFGg35 zno>&{#jFD|qPwJD#QrRU1q=^<9Bcf3oC#D0KI;`azs<(ZTSu}y4QFEWOut=xbc_5l zzh}pyOj79lLP=0o?jqQ`?b<0`*5GF2&<5}J?k;*;)9hll*S$3V<)+@jIRa0lbfLF|)@rq#& z{|@E*(=%(cSSxa74oTMfBtsXwhTxf(KHLtLCh-I!ve82Ed_r{>z>ArCZ0l;dHaNIo(*l zeZ=OAsdiZ=!l8ora4(x6GWN9Z946bk?N)XiHTt5IP)4;hVl=-lyI63X5#!|;0I39y z=;?yiI}z+12rm=_Schg0GS4BmBiDJ{bC-FZB>5BFS^WozJFxU#=E{4N+1yH>RwMvx>w*%GN{_1UCxE-#d8EYU7V^OG=+_Z>`g`0*HNhcHbRDvHRD zjZ}@el8d=u&{|}d(tIxdkPR4ty^BLs<^-Nv8iG?AO%eAZZV92cAuV*`#Nw!g<8`v)Jo+B6{OD(HlR~kRQ9* zSg!W2D?%JN4U~sq_6hx@OSVJlgxK^mZ|64QA0&B|^9G2p9~rLMW%ad#Fd*>T?8(mx z^C5m!aHaHk!l+s(3ChG4x`@pg=U!&+Lq}5KPBl5R9hUxl=_>BsXE!p?E331@Z>l{f ziZ1ZuebfVOjlc;Zz6m4`05Rt&`ia{XeAkr?-KstwdD?2UFlV(;0b_T6|C^szsA`JY zXw{yQy)Iq>Rx60tf_IV5%nm%~QkJH0ypW@G$(t1YVIuAZoIC3FMOYXt*n#*T>|j3Z z01;Sq%DII1kQJh_H3xr~U&k^s3N(5hM}eUe_^kz>#Rn&`wW_($*43QTR6yQIgeow1 z65bAwYd;DM%fY=T=LcZA>g{a40Sad!#&(zcEiqH`E8V4Zl$k^J12HsjO8UCgJd2H~ zA4t#km1X<1$g2@abQ`n4h7mbWXjQ#L1;xc`q zRKYP6EmiTyqMK7k8j7`KQ~m>R(0LA;*OSxodqY(yf#+N`E&qpU`A6J+a8>hL(6%DxuZ7l*X*oO` z@YRB>%zt6dYE|{Dspo1!6wkNCYTT8B!YVxHP54*+@t6_)QAYBwntt@=3*c6Myx+5> zgM*2w$s$J1HH@qrYCR)NYW+2_THm(F_2YE_CZyl9o{Brha>#*wA|2_Y#UWvAC@z1)Au~zlZy71pw)7=nvz&813{RveNQ`7&S z{#nsuBaVj={j-h_)!Rn@tfuu_96#1|K8i{3&l6%D}gD)?tvUMKK1;h*&spHuBi(RRyS{J4)l?fIyZnRHf` z3F)jyN$0A6R*h(u_JDqGB{fh|-PFpAxYF+dd#j>(^x;7?zf&uB5@C#Nsm)^Gx{Zz) zQC`DWwDN@ms~nHl1`n^hNe~O)Imq3ze$Wiy^tK-7K1M6d{cOm~<9_iYu{4)KLk1f` z9!uIHkH3Bx`Nb~oi5ZwwV{5c`$0nQ(PndV7bMc#sftbMq0@6NtGqkrtd%kD&3EOzz z#~ehiVRE4+N~3oTJJejm4vD6)KE~2sf^kw`#J6wI--m*S*dyMh&id*qYvpS1A*R`# zy?vCon|p{=K41KtP_tSdVkj#^aVmL{;~i8L(i=dHvE`SZ^2DVV<{>tT273=N=?1p4 zQof;H#`nj`?+VHFLNflFK)RoXmm=h(hnO0G>8=4>xGSJ+O~6pnzt8L;c!+5*#uA|- zUz7e}kAW$ZvuoT23$J0k{PYoqcPyW0B2V7PKkV;MdS1F0xJjVdog=|FM5q1Nb+)TkHXL5`=>=hLGTg57OY8um5lUVUf+t&DYNk z)vEF4@%q(B{$XZoY#YLTDF3K59QUsx?gkOosrZXcE1+9Y<7v6f1j6eukG#Z=_`+&j zTY%9Q{$nc##%=CA7SAWQ?mu?&=a8#+{@VLWo&9G|L~qG|>}yXbac~uCve8=aKepk~ zdjGMbUphve6C94hc$ra1Hy$|p_3TFd!D&3c>)Y zL?>z;in6V&46?GaE-26RcpH#cb$gtea*)_zU^ z;1qCwLPP#2zIF$jaYFr%$7f@`|JixqbjE6r(*{G!Tl7EMdtfu1j^Kax>)*X4|Ff=* z;J${SV*T~a`=4F(c%Ymu`kzfV2oO1Vw}>M%g8$iJF-X1tS-$Pr5Lbreu=q?#%Mi~x zwoXYV(1@x(S^n6V`}*-$9AEqV?PK$U@te54>@^-S|633r_4yB`R#tLQ`h4Z7I-io| zrgfwCUfXgB&XR-?ee8u}sPc9ids_5V3*W9BG25$X}WZ(WOKy#PrS3AK@^e}GLcg9kRSpX5IQo=0mCa?Oq zcfY%q&wjI8u6-SE6d5QEJrNfm zwqL25>A`!zKL~8=%|D8(tNWzEJmz6O<$lK6rwlWT{Kd}8$SSEId`FL7I_1|JEY zKm)D=G*jC7FXzhhQQ;H_bh^sDf4zce5t(YIV%w|k62b7q$n8~DmIJ{^n|;=*-hh1M zu%o$W4G-GS%3^#kRh=G>G~WwG&ssKu+3HI?{-}-+H1he|VLdwt7GLZ-_r1P^Pp5ww zd^+8!c^2UDS;mF*ch8%68R!|MH7H~S7{zM9utXUjH2y(dDhwpl5A^%BbDtp7km+e| zBz;A%i)l*mJts{(eMgMh7f-74mE?D88#_SAlWz2VM7}($A{L@T6>>c%P53(#GW-n= zCeTw8prE>?#vR<_t28cs4*kWf;JF*d)>bLtb0T!jez2v4AuD~bf7S7$hKbKi3N;i$ z-@%#;dZHs8J6ZU!k_2EzmCN?Izb>(a*N24i_irExRuAF^MGYPDF{%V7Ygn-db|IqcejBW^`5|}=L9ez&Yxa=JPq02=oF9gdwQvFYFgjqzSg}~C|I=nlgPES^Ra@<<7mzX6Vb_# zp-A;hiZUzK@@K%1lM${x=P#aEQ@#xVFQWC`;=?7*56>L3seV5M=?QVauW+bM1;(W0 zIH<`ZAKq<60?W3n`!#kEOvWQzx~)+daC!GLrgfD(FDZ)JZ2XpM-## z5kAVlKO#Ul2puQt*E68}ZPtiT|0c?#j-rsvjJW?Q!`>EllB$d^B}2=3Y2fYWn=4j_euIQwPTmQun;=Aw>4%kE*fL5GO;>W;rGbj z=hqM@kTHo9Rw4a-YANdwj6oPFFDtaF@|$y2g)Y>mkpVaeB-N&kK_A@W{-GZFDX?x! zpC8P8d%UIEjA4iG6`>W%Q~&jcJqi>#;D<1zAWDnLp~>n48bx-t@kIhK<|LlTlpnav zADihp$rxFsr0RF}i%i@~SxyYmy33aXomR^U^=(xDdw%iYUt@mJs=+YmE=7H;3{2nN zW8>lH`)6~05bvk3Cc@J8cpxEr{mT*dQ+&!DgMNERh2u@=87&r4>9d5~jfY^U|8%3@ ziVV(7@cWMj+^O%y$aJunrfv04_qk_&gUm4pI+U|EKJ(D$KF3>89vVg7Oe{7OKnr~a z5zl%b16b&A?lNzI;Q@&+73NZVVWRbK zEkwKZY}_8(FV7+)DSg-WLBRtcgV{?To!Kvu)MDIo{=e4|7Ob<@@nmB%G~V%hOgw6 z_Ciga-8*Vpg8~UsV!zo0|BQN=+Hv`z;?a@;zsYFVjhBjhl3P_!h%^|nHdI4@HD-$A zGe=TanP?CsNYalf&E0o@KmDE)Z~fgZ?EPBlJAy`C2(s6?BLyHXdSq|ro(~q@{oJEB zfAWjKt@8Zf1SBI~Js(r!8!NpM$`d{*X;W8|)vQ%p_@}Dv4A|xV9fEy@y#bTkqhe{y z2P9T{zanpDkRK!^5g}>?|3BZ*$8PG6BFoca|^JEk`EshB0-rFSR#w zBrS$mX`Yu6)>$DX<7Pjfav)CGH5KOK7@i}+WbH)KTUPXBO~02gjcUaE0je%7Yq zL~ScAwms$kv^QC9wMrqq#usv;wGWK-xnpnAgbv}I9<-xq{FWi#8^#%(~I5y zORc;5H1@w?x%3#RxnEqM55xr6eibF7;qd>zXi3B6nM%&>N?`NpHSQO|#J^nfo~##< zYQDRFiMoyjV#+KxR8F?ZUd0yt_oy;m0zWkUst#F)_P;xRZR1v zx$dQh0;SF-tP?PGeAUh_%IC{{{OpklDV6G{XOCKb9UI>(dLl?ljVi z^hF?BV5nOkf9FmhgKZgqO`yb~^M-(rits3l5yLAQk6D8YdH};r+!)d(;CYW5{f3#x z_?h$U3?opB)bK)T7xRR9A=MbJyQKSgKvi0I>}!7MV`np^_^49RLH^?^KGK%O5a`^t zMFgW%^ai{x#0^h~rf2+)6;OpRk?Q2bLafzNRz9pfh6ToO@h{{3pH@ifj0et79lrA7 zQ=(7WGj&Z5>TYnwdy&)b@JXrzogtBQw7Tf*6M1vcu!Q(w!^}40(O_ZXI7)eP*AWlt z7)o3DjW|(s+_#o!(i*>_+FBC^z!n1EuffsV>qm>_L2-t6i>P2_vUqy1z*cgK35Qe8 z?H*>A^V~;<^AFDb^XU9znN5#pj$B7r%kE4&6u)p~x}kUKOWi0Q?M);zqCY<_L2t0D zD!~@Ir7I3J2 ze@*Qh_~6D;drH>5sSDCDQ3q;tsq0qNC{oR->qC4S+9D%!>z>ix?ngZVTdIM|iVl!`ycaT)2MG;?Vd`bZ3aFDs-N@k6K7~JGGrtmsYK^^QFW6Q|Eg*W8 zkA7WR8>czc(s=&^e+->I1uwFa-;?OKxRr%`LyNBqh5JKlTK9?e>k=M|)&`X31t`s< z<%vHX0(#)rYKQmj%Ud9An2%i<)H2q?=>KxOQIFw6%BFfSt(gnMS7t!l%YAV=nr`K9 z4H=zk*mlwOsU6*PE0`YBJJ4Yd$#BwsFhx7Jt-VrO2CC`$O7{P zHau@yZ9UUPFX`WG=zg&hPF|UU#4Ue{V6L#TO5&DqxldSJCUCE%-FzG^58R>w$t@); z@h_I2;^&A?SVzr#<+%@%dTV2BYU=v#x{1nUt3-98a)@dG1C-+N6-7MTT)hHX%9{G^@+RsxQS|QTGiaRBxw8H=#QkK$ zfmo3XZZTsIIWRhAYS|4M_|eYp3@f;p-hlF;v#N&_Fz!K{AZ(I)@lFM3W;W6veZWQM z%UsptcC%4Y$$h;$!E#@3V>;LJTW#*!luQ4%kp3;+9Np0xq?@W{lMQF~k}c_z@<(Hu zV52(FTO*Sc*TidzCJTp~$|#ao=jjFw#0&*)ST5A!H zfa)jcomQEOGq-b{I9s6XG2W~1Zn1YgZndtwXWl;iKu~J3PjM#3F1&SqB)Zd<#mFya zpTdsH*>=OLVu8+RFq!<`1kgY}vmHQFrtfq)>zB%XyF)WO#o2rIvWpwKubS-!QUGaF zx@caN{|BNq(>b=fmfI8dYyWZt`}GeW@uV99Pxg%ZqeiJWor&uWxp(;&DsI4&NUb=G zOT7KpGD=&kv;e1MFr^{vS=Dbp} zH$Oy=uCbYh7+p^pdLO!1$ign=`8X_PaLOs5S3{YW9Xd5eZ+akb?;nN~1Ef%KMh;@L zEzTXLtw|)q1UkGXp8j*LgB3Ny5?T$j^h<-Mf|}vu@#8m7fR7GUG}} z=%%BXy)mEJ$<2uVj=Cl#qm8#p$ zAj8wS0d^)i*h+vVXR0daFC#y!BlUbC`^?Pa+MUg71uZIueMM{Bf3b#N3pj(^+`kIY zyWYaGNF(;uk)OUDhiIASFB8y`CZ84{vwV!&z{VI&6ghWL&P|JHO^t3W$~691zkU<% zPXWPfFlo7QS}uD72w8;VzKhO+4l3c?n1UVr*RIa zW#q~s1XCs+)J)4+lPaLelcMZA?dW3O^ zCAm)nsajBGulwv_^hjyvd%us>{VuGva^MJtVL6zy-ARjJSRH9``PdDHYFl_AldwR()( zbDA&1kB5(G9l5mg&D++V?ZC^MXwO8(Z=ZV{yCaEc)3^oCnHK&~WY7C;IvAV%&`i1ogZmKIpjZG>_g{C(M(k9hjA3gSzKH6 zwXigaLb~|WDK7%Hqq}e1xoP-(4%vA4{AqcXXWKdz!5x(szH@TE+Z~{COwpy#XLd78 zJHr57#l~r5O}z5{*2;hBj;)q|!tpIA z>RZFlqp0Uw>7TijQ|X^m-mrd~%^%-*elB|B;J#NGWoQ{FOlZ~|UbMMQAhZv7QE`2I z*E3bo8le;5-$H!XT|2#U#*PX`%1H5D2X71d?BLyKL?imw|91@H!eCQ)TDh~%sO49pudRJ=7X5iGQ9c9+3@x2o zXya#&q^aXVQ*X7}+H{gY4QpJ9ez(m{xOq#iXI-FPh_fFa+2^#k4RS_>!WkgH%H6i= z7|j>uuqUq8e9ryobd`0M^xD=#qQl9?(e+|9s8z5&v)S?7v<+tKS?hy}_H z{*zvQfn3S2iPe^Rf~dBabGG{+}Z49N9_j%CmcKyL51{9nc|fP zyXOIp51J+gp8n4fo?Jb_gL5-^NbMMj<5c9R(z~Z0@pyaucPgy8@-fVJTu=DELf^qJ z6YWuEiq5=akG zV@)wN$(GdxZ-V@V^a}TL*4O}_v&t?O58PV!gwRk=5~2J?b-%?9hm87nG8}P&hNl2^ zsCzPgxqGIx$DW7V_6+I)_&Zh8(jHeQ-{JT?$_TF7U(`%f%+k2+1z6g7FT3nsX`vW=QQ#90M@xDd~Z><5*o{5^vjrTo==a ze9L;xUY{79%l4y_5@olL?a$%r+43yI2gYIu=6-ebVbaD8n7NbBqSdmv6MrYmqKoJj z#g;n@S>oR%v*=*iAfLXm{4>ab89!%KwXw3&%dT{mM9qw2)|a*JFWR*lSeaWytS!yR z2VZ&>D@||oYn-x=j?W0XpV9k1c7BhP%k{}zK1MFl!O^>YxwwzyN?)U2qU{Um`*ZEO zE!Z#l-5&Kvqso^to5N%?C4HkR*+G=zno8c{nv>bT$j0 zs_lTBb-+BrmP|>{Q?qjUG}g2P?yquROjc+gYZm9(|3kRX)i!Hx+^i9DIUt$KqeF4C zRIWAaE1_9)bM3k<*spI^c@CHlBP#FX;`H_ua;O!2ZNH)eYyxdEF;xi~j%#+V>uI4TLm@2&zLWbK(d zbyWWDCNuu@xZycs5EWja8!NvwZpk6yIqZiz|DVazzWnzQ^bhzyyr0P;4enEeVS+rP zifG@|O=dG{ks$IIsklGJ<+X(JUR$?wEGd1p0zPJvcdy&`p`8OKg!ER?3zXJNrpOPB zTNd>PXUi}C=Iw%ts}lMEDTz<*R~~!&sOV7fYtHxOO{e?k4JPqb=??eRKarH_Yc740 zyND0A*MbgI;zh1ciTUoklq(&0Nu$Y-^zV1JPejxC!v+ta(9@{08JS3w0MN3t7D|8sYjf;_AAoZ66%QI@17%N$=~&zDNq;sZ;yk0{~h-E zZRo%H`HJE%&3$${!sI?2Rq`!&5~eTTc8l!}C%zWD#fc(uCmu=IVe!K+w%td^BZ<0+ z+P9i;O1;EST3bA)FMp1kmOtmIX^2h2)@~p_f-R*TYgMefLZ8}5uH~Dlxiz$Dxq_l zdQc=k?a;#rvafbE)u^y>eR|Rxn@y-}q@fh=#(q|lEjgHLVj+^QD#zY`SdPTmF920- zT^P?Nq4(G7mrab9I15M#JCv~whK=;M+^R~wLVX&62aa(oAtn>u-1i(c$}m|whlt_v zcbz*t>h3F;(5I&LCS0Oe9@0{UKbWmi+g)Ft{PM7!!@YB~D~Gck9c)cUcI!;Gzm33u z+(}O!9dm&g-*t13zbxF+++(n^SJk;gmiVb|&!{$9U4sTf$?`(laBT<0?K6Co#{JKM z3EfL-r0A726{HA$GyOiyH4UG}nOLja%6?btE9sX1Tl-mS_xHy0wO=jR63&wQd;f8V z;f(#g0cT>YFgnz0Da&Zl;<^>Q8NN#6{&IllH@9A}rTw!ko+S2Q6|&BjZXmdLx7YsG zBQ3UQqD7Xz+=Dfgo{$ImW7n|R%h*=3zn~EvDfrku9AgkA5WfY-I zuNnP8zRrENneyx8JLMza-RkP~@D=1E3!BC42D6uB&hx6&Rn~i6U?QliibieyX2QAgHk4G*{DDm+ zz4y#M9Y;Ej=8D%{q5D2rYitAdx_rx8y1d&xbnT|$d%j6k*iAP1h19&iaa$hd$F1ax zwi=iM#4`3k=DbIiH)=sYb=#w4+SB|}4}H+m72G$!7sHGCkRTfbe;hg0!FLAu&j|is z$iEYKsXRlOu~|;2^t-gO9RchE0^1X?4mRt!*xxz5IDFn)pP7aA%j~IL7o!smZdnwd z{_!KAWW!oSS@XlD)A@APO#A>!AAENcHnT^r@aDlw$+avx zOc1@eC&k_e0CwB5`gp50d338MD(T$UcC&GgZMSW3RO8j8H5@D0Tj3WIjbFE}-zxcHgs}7IBq%9OQxMxjGcmy=N1$I#^8)#r2zb`0zwOy7 z?LPM6t5mp;d?DXQtK{42$v1ON=o=&7Vo2#8Ayq#8?8wCXAx{Ls|DV3J+ zymAaIui$5H+p{Cm?vkk2{rU$rw0j;qo+`AJjSh@HYgHbBqWhvJ-L7%jo}#VFF-4D9Wl!LLMDw(1Va}>t z&WOU-#4lqCXC_dk@6E_N-!jjd|J_QmVs;)5UA3fb5-ZU6^v(4J7-ZERa8%~dRyIw< zGA0nl5pn+gxDg)8soZ{ZMD{)_eV6c+<6K(rbFjM22SUB}66PD)+`6Lqgw!ba+UT0- zoc=rVecVQl{*w-ndLi|xUi5&I&;v~1C&ofT-Zy4g^OUS~d+#Hj+hc;zJ*)@q@t7^& z+7F6Lq^|cnN+DS(GvnPUsI}H1Lv)DN3>uR~1pHb4lCADuZSj1AEH{0Bi&=*Jn&=ON z4BOrR_~n;}SFor*3UdiToc8K4y|Xgu3*%k!q(}m(wa$lD=Tm!;3V$azAcjz<*+VaR zJH(eSrU3GY(9z@(Z0T(CpJlj3+jiKRteuIU2@~W_du@UgG25y$rXqT=>_*^Vq z4#Fn)&YBXPjQvvvRYdo-6Udgs#9%VB(QMpD%w3Y*iS1t&CEqdyFOa+)0#TktCgl8k zrSKbOqPx2K5;?c3;Aaw_7j>;me%_7G|Ezv4e}fXb9E_!>rQvU_Hcs2?*^G>Uy9aV&4SBe+i?9AaKne?pjk1adHA;njn5%5AlTr#QuULHT&ST2a$>mic(xK0qis)tD8Lt#O> zI_n{l_&8G#x79=3n`q1X1@X&zh$KFC7sRdg5J`NzfUenfOFcvqAAMTBS#~*G#C@lG z$Zzl!7h0L9$t}Pjbnp>ac(wqSl&~V_?d;C-j^g!bGO^RJj~W~uM;6O1iypTWt31xk z=2wgHp~MbOzj?UaAxRQWOq8On#oF7W)tXcm?L0ay7yb*6EGV)8JX2g|3P{UWw9Cgf z;70r4u}dy;lkT-^N%I=puN$38CElq@gjoM(GneJQ$NiZ_bmm{ft782!zwl_9W-|7# zS1}!Yd$CzIr2#xdU8kA2g{qzy(cU*J|8R-j4s^^$A!f9>E z1ii?wa#Lt_PkOQMiVnJBFd(VLly_bS%|dWR;_;dv?|OINtj&|FsfP*f{BtE6A&y8#U&k*%w?Yh%wG@; zp*F`PVJ0MCR!VqyL6|6M&jiHv)m&=oyMF@ao65zD!bC1j2?zxZ4x%st@u397v4ZfT zFadFP0%8wAcu|;u_)-GmMF|Hl3KI|)Bp@CUgcpSgh;Jky6huFW!UV*u1Vl*?UKA!E zE=oWUSS1#P35eMVh?523MPUNsI|+#Q2*QiP1jKa-h;f4OqA&sRUkQjO5e|U@Zdj3E zbw5wQtdIcl!Z4A`jR}Y!3&IP-1jJ7h5Z|npQ%siglLX8e%EgPrL@vqp93u!X4igZ` z_UtAIFAftB9f?x@E&<`iVFDuA-gScT;xGY`Z11gt@ZvB5k!){K5MCT6AQmU;@kK#+ zahQNe;^QPicyXA3xFwOtL4xq&FaeRo$5=slahQNe;^T>`I7~n!@v*|hp+34R38{-c zXiOxYb$g;F*P1v?%;#n@+397ngW%CREAq`7*N|fJ99HlI_Ho#j4U3^;!TL|t+EZoi z1RMI5pT^ULNfy(d4tJ4%802BG`@DYuoORhVdGJ#(A{3DEVhUM=-!ap%;*V@PhSjpx z{yWj;Z?@k&Ud^qnkvTWMntQ){<=krS{YVUQJ;vuMyH0X`F8iizjkJ}ki92v$#>fGt zTr{JV3Y%fF-`zmAv`x+Fc0ceBYEGBSCkpJQIbBTCD75>B)|9#_xysjRIg2Fl%_AEW z5Osud7qOhVfQ460IC+PjVb-^-@?4~P7F!ok<6_%<)>m;@>cU^Wo2@ZgzU?cXvp#>$ zMwV|`PvdA8mSX80^-`zSS^s*DDlbO_nP8cnVy|wMO?i){(Q5_S8DhFI6fag%bMyy=^&&rl(2*Bs)}sB{1ul!6Iz9? zb^M?91!fn6^6Q{eo>5lWEyp{?k?2^bbY15?3!%<*FCBxkK}$bw1w)`7`jiSOSDUsj zm-RK`!F=!r!EUlvm;bZpeVVq)4>tXqwKJL1Q9h@NohPQ!zz>?quV4H?%SM46 z6timsGk_N)S-~Qoy;eLD80=eUb*(PtSrN(n^XUH?#&V5Ni|Np;Q`p16YhqS2iTrIn zq$dBFTg-p6^=!YMOgAT767DdD<7X&lxf-PF2BHRAsE1tuJOBaIBS`h%ru;uXa{lk7 zo1ObX!z;37t=mbe`5HG~2!t&SUn%2Nk2~X^@@pEg1_6KS??Hsvt;)f;@ESMgC+cP6 z$j)u|DWB!l3+M&OB_?9CIItSei0xdPxpQ9gmX;z?rBSaLUykeOQ+*5yhq5PH^PXHpU9Fc zf(4U#R$?`{QlG{ZqwoQ9-#LPiOb?L5kitgDn)<3G)MBfA#I)*PYTf95bF~7x54ScI z+cvuG53^OVp~}}g{a4Nv-9b3N}9`$pML%9yl5e@@hRYbFMLVu7aWW56!W)Y3;Po(2=t6|B(|T846I zP79HrzGS)nS$_Frb7wT<`t-`4=R6zEgPJ6s%=y1|ndF|o?q#nJX&QLZ4v^BE)&8)W z1kfK4=W~Zf%ZV@%qT_SrUs)|eUL&R)_@q#gT_h*TKab9}EWmJFXj#BWM||Tz(ee~j z$S|v(A$2qrOSL~r&gFi72(n*Xrpo4*Oyt*HiP=L87Y&NN*0BwsIJsz_^X=~w(2q(l z4==|%6W?NcF>Uf1Kf#~1b9AU;gtWg0u;??H5?O@s$vs6oFv@-OT%3#A->vVvbnQkS z#gg)57Ty>gUa$`#`Tip%-t%~+JTcy9jmsAB1CKK7VU?@uVRyE6UL{jUw*t(q4X>Ur`bx%S<-&N?Z&faoys z(saIkCtjx7e+fyHJNcR0wqaCi-ko}UIDTZ6tbIqoqDuAp*OI5j5GxSdM5 zW>p1^dKMaC&BL=k5w+H!QHOw}+Lw`|Er{w{SVi|y)i|F`-=uvRiiOinq=_yor0)&4 zU#r7~3KC9tGunSi&@oP}E~2=}g?4?Y_>kWVR(}%RyoH?JSki3>-J%cnq(wEpiDjt(NnGl*5ciRl6T~)Lc-gPf9SmC3KA@n-dVdw|5|9*2aw?NIA{xb>{ZR< zztwydsOC?No1dvr4?2A@d*7kiJ7W(EAFgeQBGu(fI=#$fqPy6mOE0P&zCQl^fPID) zDb`!j5*HWht9$$h3A!}#Qmb#GPorwECMq>DADAm5rfTV-7#y)LzM z$X$A7*pqfBhbEj&AK)l;gmncD4zIH1UyK)TRGE)U@*QsJmQ8rT!wg`S7JrnhX~~>r zx>1z6#mp>@L#?_H*S8t@il)JQq2eS{nJ@RcV~02 z75O^f)<>5~N-=$t`ITO>3+ep{j8<3d2e?w7fmb`y%b>L=YGz{hnT0_bOHJ!@AM=k# z$WO<|tSmMZPbZj7wr}j|)wm!F_o1*X->66 zJzJCBL?r@0pF;Z2mCWxI zQ2ThHfSoE&_}hZLpsXK6zi>aCmE`GCBc0#wJnCFiEFBKwm6%7RQRHN!@UtPAUdU%! z0nQe4B(M8ohUrauF$y|P0{Xog4*^|&yb7JQId#pN=B5`ca+N>Ksr7Tw7uDbz*4_I4 zXiD^9HJPSZlNC?WJ-3%y^CGuu&49lx*b7>7ceK_$^mX4F&o>_gZ>v21rY7{n~=lM`t2mQle z7(tCh^AsD*=#oY{znJmwl+x$aNJO`QR|A%}K68CHIl6b=T+}HF+*e?dbk=q3>(~z<^ZC+-SAZ z6Y%k8`8N4>w=x%h%1z;&Tp3Ge(hSy}Ji0yv8WgqD?Q`+V!&7s_+aDNBY?+%Ns&{D1 z*HDPxIgxpt58nB1GVOEEedA^1-_4{HJ>KMR3-*GfJyD+z@kz+Lb}5!Y$@FSx%T-wF zq@||k6;V#pv!`U|HK%^Era8B%dG^zzn{&&qB#GSbTK9?$fo+yP`0#6N-YtK^`+0uP zH$FXYN_w#Z4wmEs5$#lHSF&8Yo(lF$O;$!L74V{MzD|JdHx$g9l3mZ$_97;X~3`Cl08!M_W|?^ zvQG~bG7Y&b`d|xL_o&P;{~rv3&lRwthbeo|kFX!KG9gwtaBnkk?$6IlDH$ToAem~i zUs0;ODrUcyzId!-0%_F?`AwHSfjklXSW`~2jgzr{7V{tW^0N?+6msZsI9d{R(#Ghg zE;K!)G1|j(q3l{%(7w^h+7k1S!jtQQ%zP-9ez1_1b2B#mOyw{lF$;XX*!#o=B}G`3 zy_hwEF+N)h{j022SXk?BQvzzi-D6m&7=$}SsX}@Mr9_K-g1@Wm711;G?f3g3s_i|) z_CjuJd+%QHf70I1`fRtQy~ldcH_=|v8?;8>e)GA6?h5Up##XIC75#Lv*H6Xp8RY&l zF;iOB#|zhclti70wW7@$iVHXJ9{b6FT}sZ9*EhQ&iuRpFg4tNKbBu}k(+Vw%$OZat9V8d+T?^Y8pccq>nJVc@FKT>l zCPES0lB%*ELt0Y*v;Fs&)dZJ93C(<|o8MXQ!*`;D*!hq2Yr|20c>#lDZrgx4iQ7Sw z(M2LKfBOYUxVvI3C@xV3?t`Z?tn5h1dYQaubacT!1dVb91bai&IZ`GK*-9pBHKWrJ zm(o8!Lleqh5RPga&}9v{Qw=y#b}Ab1>uG9$)qO$in!ikWtfWch-zVF32kD|&h4k`V zyWMK8nrxTyb)Wx;s&uwdCje z9=Am4Y00k9#Daa$l-n|p(JqM!%iv3f3d^8RZ4jiYX!GrJ5^eBjF?u~HzffYvdqx$l zxy!GB10fyGJSB28zp#{2(ej63~IwO+p-v&2FfeNlbSr&7!zeJG-Vv zl|ODtJj~u`?D1RFk|vr=iDY+yGz!w234ilqmWPoB-=qcdq>ldOWs} zzB}B$Z*E)v2kguF`T~XBlWW&)!F~hI?xs)fiykOg^6;)pcoc6p?>NXzB^4VKS&HKV zUKnP+-CUU2Fz02}usOA$r+M~E!_7_T-kZ3*!f67j_A8WJeeY&{UJ9id@P+K+LLu9I zXC70oxG$^v3+LOJ{-hu)oeLXsW82vC!G_gGWm^bMM=&NfpYEQ4QZ?lH1b}=%btXy zKd@xZYN0_Mk@$jy5?|e@TFnOb64AC_ktk$m_t=EjO7gP>AI~*Y3JwL{W%6*pazL(l zd)l%>xD|J`Tfc@t_8LHBZx>(T@+rIu{S)kOoe&u{)5V=Y&FI}R(H`-e`S_FZ=3mO+ zQF#Gu@10~POSP9_%jNyS42Ae?CLQ^b1q#kTm@i4BxIShjpmr!uI`|BwRa6jk5})n^ z#U%pIw|6MfA6t!%yNK0*!7Zla_8a+@n)e(PDZgEW6l(K7)B=4+1m#&TnJV8C(#cEh+j-B4*7aZPZEs49#w6);r5&M}~^j%Of z!_e-vt$0opazE4eh+VuSqz@|{=cOV@(Hq9RH!>E|UAgpajLzHK3x~aq5AmWWsIHN# zO)M9I7BBIHAV%xSNd02FUKblo!z(TkS|`6?94NQ!8XgGZnD-Oc(mWnr?&+c7X@z!u zn%ZP>n%N+DTu*woQ4|Bft|bM_wVb0LGxaTDANJE<8Ip?=-M3DVgquqy(Zpbmv66Lq zN^zMA$}RksihC!;73{W2TUlH8h>k2+I+4{yK$IWiXY&G1Ke1B4I!SH(CpI!?@@t}S zI*ZJ}=H3lc(*3jcRuCgk*ps*S6l?1^{Jl7|t_qfCZ^k9nD5JcE4N1xZ-jTiU;`YJ#)*Brm zL%pexVWu?hhDeSPHp3xlUlm?+9zOKz;wMFAXU7Dy(os41dY$}0ak>6RL zFV6*uWkv7vq9b(V1@y6Q>p77}Ly-;EOpo&IpCAu6u)oex(k+LAELfFW_;GHv9{f4pHr)bJ<(e&gVQ>wf-(2bVoVt&06 zM_u($scZBF8&{orSEWFe<5o=)a^Jyi1-Yt4Oo949la?EQ8Y%tNlPl?=!16}mWBIG| zg5r2l%y%q45X=5dByTO#Wr{AHK5FG=v3OLBnF3u5rjlmNhP$u*ezkqbF{D1Ik#sxXsho6Mo z@cmc)NFl_GA{11t%95EFh4`Iy3f^h0ecl)07K2Z<4^V#jNq*?-(LL$;X2xN9gB*gP zXeGLRk}C3*V%vK6ZFX4E&tHnZ#HYao;VXOhz%e4+V+9>+BP!eo|9u7fK;mnnB_k!i z?){a->uo{LNoEt; z=L1ua17{L<6Ufe$j#l&cC`;*|C!u|{@2^k9qtS5qdR z?pMe~eMqTd_Qv6rA@WCQh#J`9_wE5mFBIYSx9k*Sb+COC&*gn(#wjfm7jgIQ8ARWa zM3{;N0?@0CQg8S4W}Zd^eH zNj*z)1y!5ccXHW`EA+-#P1qSqer3Y9*SLa`j?5K0s_8r9+mb016*pY{5>t;pjK~!%@#%&&OT1OC@N;D!a|J!H>c(${6>P>8x@bh`|88zW|LbjN z4_rab3i$L~;ef2?3Zg!71zS-WTQcv*aAxviJ{fb^bgGBdi(sY-+~6?c{gj`8SKwBx z5@L3RT7g;D)T-i=MbyO2JzS`}9-xZ(Ps)`=3gxVGZgUHN!dJJ~Z)N_|tvCNQMhI!8 z^UNq(xOv`ZShrZ-V7A6W6zoG@-&``maI&n?N=xzUMQXs%Ub~Nh8oX!&2C#VDEf>enCLyP@iSH3QR4X*+5=m&+Z5E^z{4qyn%uq5*IJn zyRBrxf&-`hrk3JM<#RgDjFeiF)HyXnhjorD<*yS8YEr)sSW2E_b zbat002s3qR-s{|y|H)5uE?JA5+@<>q1Clb7DTYr4bt#x%NrHH?F$G5Z7t)X6t4eFd zSZpG$2OL-VrO2N~KNT9?;TIV4$3%OPrwY@`Q@Y>inSINuzE*#%=|}y+lI~!_#b(uU z1-rbhvftOR&)3jj%pC@L>LsskFw@Poi>sco$W{@%@%KWkI6aLNS0i&>+*v;JF8`%d zmw17xvDXnHZ3F6N4%)iyg5tFmp;sMa&(^x(%cg}Lt#WSddq^J?~a=~5`^U2V(D zUu6nJE?uKqCo|gSw#^@vYTuh~E$_<@#dK0rXDIfY?@D^0a(2PNv2|7S0Lb$!p|#6B zVLRKrM)3B4Z}q58WfyIw#z7LqaP`9*e_H|I2$x@CV&xuU$1{WNpu*l+qG&D?u~%CA zTEJV0)#3qqd8)`ReL{9ki>Bklq+B(ii3Ntw4^OUH6~u?vzF1+!h5Dc{VF#{xMfj;u zbz@Bdofrs?XNKd^wIeh?x2k$|Y*_Eq)cIP#{T$2G#`nBU^RCHgmtDdBpxrK|= zN8U99gv__D(!1KOin2ZC2iXiaiajE~3{-KMeqG1g!20Pk{L0_S|j=uuivN7DCy zxmtDsg1Pb9%9*uijC}WieQWOm(~&l<4pLV=P>fyj?X#^SaRE7Z1_fBwUSV=y_*@vq zW1^{*ip1p8VLjO6zJ(xzZq6hxZ`eQtabKaE8-bfODVkQvV2O%#k&x#XC8*aTfL!km z|4epec`a~w8e7H-0I1NLvV`6yLRax@=0_l_;<0q^J;_X3n3n}_K(6i zwZ|rXP}pMwW5kE%!w^>NORCAEHs4OLFJERv#9LoVI4a2bK-!$_4K(#w~ulf=@qa!@Tq`UnnZ0o>#f5StV}D5{w?(sd zigpc2f2*Zd02Wj-Swtqs=tL8CrnYrxv;Hb~5IbYd0lZ5h_KfvvjF$oOAcOapKg}2m z8T~q;!wEm$U-$qJyG4KDCh+HIAAb{V=~Flxlq3&0V;GI-@f+|zUH&q;mdCw|uZ8Py zh3w-TKEg8LKy%@u23%lXPc4OU{Tmgr4q|J2@YVIsGmxnx8=3`g<`BePRJ`}8@~S|C zdDE;Q+;)kL%`g0h&*>F7Os1ChfhlN&MDM%zm0>$P+-Gg;n~LX=5jV{*n-ASK=azie zsMwy|kIdl$P2<>1>6mjKmL}yt{7MDbiXlT~rm--)6#Tn6tCc4KHDdVDe-i18pxUAn zo8E&ONLP6@Ltmg<&;5)*RZEIzX_=U@>mkxCZ*|Xl>0-N-WV)VKG&x0hk4~P*w~I^R z$KCwqetf2?m=9qsEQrN4@410#^Ekd?+MHw{Nu`zi^^)~i11XxT2l;0N>0@LREa%)g zebPIKVA4&b2;z2R@BII`dms3^>+1eL#WKP_6BTAqCUIjUh-g97U_}$im5U}CCc&t5 ztKy%!feW+I$d`=Na^-&RhpW+%S*00K>4>vv5P|_3NNd*ws5Cm1Oqm9(`i{3kV6_CO z^!I$7^SL)SX#wZ<{qFnw=JCjVf8PK9o%ea4bKd8D-l)h9(SgB4CR-ebk4&f?Mz1=# zS~NT6T04FLJJ+u{==qO*d%hzo@2FztO`<3=pCPXB{9Hz9BvUIJ`) z%Igam2*2^De#2oEwmVJp%@~@Kke0Din1274T>}-UcTjJQbyc{=l=K0=JK%>ZZqrr3 zun}^aG(9Sfm3Q)zr??jYTIrmA-rJX!EW70|Bi`ubKMaSxS#)wb&(a-MaQNg)5KW^7 zSFswDWVLaIo!|oM>>v%sLiy#w|B;0YxEp|O65bNpSDfL5H@OlVrC6qI;U6(bq?!QG zl_UxuT`DQKNv-2^>v;*faO8Y(TTK3{-p1+r$Zi;e(3}Z?yjp!C_%e}2@pw>P(yEfQ z`2tE$PR8HHZBy??xU=#pR%TV^>#$=pxALR5gqi2*5Rk!JYZ9+lN&C;1alUvT*>pU= zMvAl~(evjl?drpOjssC;-ocCI*Loa5`841mg@o~+Eb;QL%IuYH;2AZ_-f87 z@w!c(R6b-XIGpe@_1ccUi((b4IFTnQBI_-^Y0;or_PP1&CQni)H6&YbO;>214aDg3l;$&=kuPVz z3Fs+1U~^4j*zZneGp8%V{LJYzIlPQ^Co?C%W^Ng-&D^QW7tfs9xZlj_rsn+2sSbVK%s4N~OG4*vl?lHlSch4(Hf?#6>CZenJf z=@I;UO(<(oZRjMfh=?w!7cud%Klv>(jq2jTpi;>aM&I##xY$$m__4QX)|W%M5{1T> zsXSK}?sq~btZHHDWKMM0yMX836ReRwze5$m1vl;Y({Srj^NGnnJhhsEVPb$8MkW>nTVN<0DO_dd} zc&e;`55A;SfK8QB3S4E~VdeyWZ0sa{DpjDK7e`wWjHC_8w$Qb=G}@Mf(Jnm|nob5h z9@c&rT1cAq4K+|k_@m!q^WTnt8N@|<;!YAodC3`8pHw)9-A2$;xIUNBsZnx9a+&Wp z6{Z3IQ}HSsj1rP``3@w?72&;4F*xF)lRf?Rr{|&0VdK{0K;{rdKvG56jx~ zZ%^v8OFEYo-d-HTaWgTUNkg*s=l+wZXOm47QX~gY-I@H1i&Q47N6vSC9yL zY$Yp#4qN}Wg=1Ny$x5~yTFGv?B0Q?~Ys!nAJ%sf#b793cX0mURPe`^2Iez;s=V2wD zq9lV)_$%>euu?D#yfQTLPA)C)&lo*ovfyiY9~k8i5@N_L(xx8Cr5=GHsx7@w zy^`{V;LpE_c?%tVpt?|X%S3ed+J}~K4PMX3a19PU-Z|zAz6q-U@8lz^H?_pDq^5Fh z7`_NDsMnPOHEzg7^d#P6cST_s?CQWo!tamahjdPj=|OqPWj^La#nJ71zdIujNA$sxwavgxs5P$uo0<&@zi>o^JGBR-)7@bOIGKboJ^oJ z1yM*ZQn=iT#}{yNHsX(chkp2tEoA18Yfb7tRnC6J#$7p{*-bzL)x~*zMfsil#-sWT zXJJ^Jk)Pt5F*OJAu=~tOPA`nH5*t^o_DJ(7G9B-QY~0Ut#>RCiKda(H|M4Vj+z@Qs z)B-kcHSq}>ch)Hh8#fS}ws`o~5uiadB%F;?ZQT8zXX93p6$4fL7TLI7XUa-gN^xMR z*A`&o#I4b0%d{=r{~OzN1_WtDgzI@jmJzl(#Kx@`hA9^3Y@Ef3jT6m{h~9P46E+T} zPPUF{Uu+k*N{IG6N=HJ#?`mh`R7{uyQ3(N-vvC9Ak7-20#))_?W8<_5D}6Z|mn~!C zRDSsT7YI#@l_(8>YG(k9jdLC&VdM78{Gk_?GMBM&1K~5gLYuI0i`uj#Y17w1W(gZN zG|$GRsoB{$wLP0T8-K#a9b^G-Q9EG1+hA$17Rh%#bipXZHrD6v5%YKTDxMeqH zK%LYy?Z?IqgtzQ22e9RB>ld(bf*p-RxRb}_=HYO8pI~hv8~0o4*pH1X8~D?RU%SO{sS<@tk5p%0qWI!i zsgxr9rU>m7R)FZY{R%k82HOfS`b{Y{TKlna>f>TI&IYF(Z&#BWsTaRRHV#BviMP}` z#nCz={uH4h!eJXZZq|vvVh(5HP8>0^Lp5oyd2-kM7#cEPz{c&@o(dJ65fijO8#g~Y zbHs;gcCm%C^ZcXANcEQ^%qW{GWwEIe59Cv&)tek^>n?lwNGnm;ak!@HF+NL!p;C%d zr3g)xor^D?Dl6b0k*y~M*i`v(`2seMvD;N%fqGsXZACEJHYD4^jSrVb+j1;s<7_C0 zwJ(HElT;Xt4b}Lf^B)l#r>On+#0RJZ<8=HkV&m?&(Yc?90&JWzI~!*q(v&S9FXa!{ z9;WX8P&taAt@R-Ujv2pvA^I;ozE63P4)hGzxkBw88osGNt*9?xcaS9B( z0nLT5@t7`T71_9heHlllda);UWs!~B4;+m(v*Yaj*|=<+pQ9fo>SBy$M)^(rIvaOo zHgh|k{m_6?gpVDnvARw1#j#TUB5Wx_uw?}-hAk`LOdD(~z+g)$HArP_9I$nBc?Dws zim;^!V9WZqEwr&n6C%rUI2$LbGrWS41&+EHRg}%$ab}};g!x>cW8oJda>e@($pKM` znd8Iwxi!01`f*f^DmZa!j^p1T_Bx%nBcj=Dsb8YB`3u+@abkI)oAAejs%@2;0byya zDOa3Y#EfNBbfPk4*)M!Z+1ovPt7n&!s7xIwd%3cdl~KjLFypRT)35P#sXeJ*7WJfd>D^(DjD<-D4og&>}~yqtfZRXH_YjuwN}4Og*9J4*XN zlwZnkq8)YApNgy~YDXzL?o)I)sR_WMwuRzoc4K)Y8Ix%!0qfOqcSKp$< za}>jr&&o-(qxPVCU=tzjs43njGT_lEdM$VI!K^ z&CE$PstsH@8{Wr?cow~=1VY@PfHb1+#HuT8l19`ov{dEE*)KJH9doKW=|A?YM3v&j zv{Y|V(^yxBGUvlkX`wFEJG}4_j~TL3lgsu+U8r6PW83B5BsoY@6I8IayC+eH zGM%5P@TrZeCGBN3cv*6ax=`iap1G9s4w%V-iq1Dm7s`~H7O6w6qbBXPQt8J6T4cKB zbY5ZhjMbe5Ugx&T2f`2jM*1+BSxc{xPCTSn7`_e%W+YL={^<)i8VwdNbtu~^zy8lk z{>L}^!YaD8FZll7wJNE+B_6>k9xw7A7bZ`E)=j}x==QEHboXzBQ=#`@`12X z$rD{Ddyj+O4}>3HY}2n?iAGdUg=s|D_=j(MwDvmFhyt4?`fBbh(ugtu31?ChHCszq zHk!eAa39>z&H}wCEnkE#BQ}-e;jab_fZ7Q?pk9>r*8}K9{i_DDq!%@)>V|&404Qe0 zD6**HbR7vwfTtpDUq3$1D1vg-8n%q?oeWn=FUm4WFG|nrnO@WcNe%sM9TG^?TUQRG z7gY`tX>2o~7xm?TSC%@@QY*(V5$%G?v~B*ke<<|`}GAIOp;8P`MUw~{-8W+88H+_LNRmc5;a z$h2L-&FU3oR;_NG}>L%%vV-L*%2jTeTGmzn-6S%}3hp0sc3Q*P9D(v+otevApP$IqQ=-!`0m4WZqG#ZEU~EluftdWNr=jx2d)}RNGj1>!RB3P;I3F z*7!! zGab$GGEOz(@#_$e4@52NqqcQX=hdPKkegp2Q8P;nO+8%(Ji7sP0WXfOKDzmcokdh~v?(YTHVEyx^pNzT*`W zF;QIZA~nxSZBUJ==(6LFN=2)WuWsa_q9amzttb_pcl^>+bj0z^@x|HZD7?4vg2om5 zy;)@N2)uLl^T>V(U~jJNk*ZrB!^BoYRsZ%~W_Z|F)WgCI4>M^0 z_3}>He`P&eJ8Z#Gv%u`(f-Sg*%NCrqXYH;I&a4KvrG8v7p4!SX;mmQXDa^MF#!KwQ zf=zMTm~Pqf8j_y-*=fdY_Qt8b+~tvwe}Otq_dO;Gd|{!6i)W@8N|px-ClyXKtE1Nw z-nrc#3PSzq6|6m(_4wn4xEC-n9#w7c&~g=3SdhUHc5p zTW8ICQ_{S3G%wfk<7~@N-1b1!c5_Z2H%D!|QSi*Q%!1IfEsw-)yHT9AOSv*0Q56Ol z39*NBzwu7W5-2*erM0V%WWK7S&N+(Xg&Wpoxc>c!Yf^h}T;i|jRNA!67Ea}m@YoIT zgZZOhi_@Gx`0Y5tP%XQ|S#J~xG#+Bkv*o@fX}T=ia&B0xRP`->FKMwKd|j*aR&8HG z8hh7v@2%*55v^D|#s!(p+PhN07{4RKOJAIHj&!GtEl=(3G@Wy8tUC)wj4%XTMA^Ig z@WRo67;UK)vzu%sI}3$y4Z;ky_dCa^oZ@(>{=mHRq8=FDP}@%M7Rt0CeuLEiuXvvg zky^$~9ZK6uWrw(HsYdaA&yd8_ZfS-MNizPm#$&A6%oRJPY)AOP;g9n!$SL2CzLzcr zj-M0FX;gTxE{&OJMj#w>l9=;U7_Yco`E=?G{)Hx=3rAUi-g#R1WL0s#RZ^PwqP|KA zX2J}62M`JYfgz01{EQuFzAP^oUE@flAswYF)8h@Co=B8XoN0HhKE@JSWtuZ>=wY1@ zT0Z=0EVhpUAu12!XV;&qj%MM@oirk z_{8Z_%B06NxNpjR_3oQ?-!k_F_tm*?)_t|^n{!`{`y>#dhHCdoSc0$8ebw%(aGxYK zycsx2Lo5XAcYIn>$Q?ed4D^-xw8Gh(`LtSjxQS0|4i7x?Y3*c(=hHe6we|AZpqiq# zET3ur>}if}&@S8@Z4h_V6pgMj-|$MDbY$w%9NM=k(DgetT$a+z=5cl}W$P$;N=j$- zk(vFE>~*Ka-dTRMjtJQGRn!`Gf=Jx#Vchph6}9N7zrWrBM^$h<++aEFDQi^5)evU5 z9fuiKBb(w4*5vpGbpUQ~&bX%J8jgz$Fu6s9Ne4{)kzA}Y35d9Imd830NDqe30Y1fF z@;S(-*hM~v_%yx{r4K%bJamjtF?b}H;B&w~C;41wpLPfiZPjbOQ45Sl{3Y*EOC602 z2v5Xz{UsfZtaG20AC2_7&nk{aWL=Mx)}m;n$9>k+sH=+z>p;}i!RM4JjJj6wIqjb- z`LrR3y4v}i_0ZPlXjQr?TG`MXb=0S$_GL{`YaP+n;HaxM>Zoaox{hj!+MylOM>ItZ zl~L=`s1gQoC6mb&QIiZGh(I&^vS!zini+9(4V%^s(>l;xZ#v3aKiMqyXlE6{iG=u8 z59DGLc>A{|S2j!I#6#H5j?_snn|o8yHXbSn7jXsOayIh3M3U97)R9}SC4wk}T~25T zM$tHh%c}#YmU7aMVonF29UceW_-XTYf^TVs&EW~*Re@pe{DAIwrc|6aY?8!mr2 zHf2&q#csZB$CJN)I(_>0M8k_rEU8|%Jf#Es&JPtXnz@x4psBjnqj>eAzvUaydg@`( zA-U8OXpPNi?TGl=eB0B%e)3*QGqTv!f;%56T%1ciDI&bZliceSmL+*umO7rwrhZ*G zrc}y~g{Ax&Qyz(c`bh@$hQdwo6-mGoI?mDE!I>_8P+^n*Z29$5B6${U__lu5?pn#> z0erALT^ZedhYy9D=!74hC!9Irhj4yHVHxKyD>!r;PtD3nONNfFTH%a4v8s$Y;gd8$f{#&LWq$nvz8p zUs4-tZ2eepd@da8Wa<=D&+G}osPAeTGP6VCa957YalcN6oeyfrbv>^s*RZrHmp-^D z*ZK!dx%NYH?UhZrjzgPrU57R0RvzAzTg4MVrf`>QIMVgYC?-phxrXPvIq;IdDx1l8 zr`7kYnP$!96_ia^=VI-)5{9a-wib{v|e>TLTVO<7vPfo)T^ zVQE9Q>v;{?j)StTOLA6R7R=~&FxG6e4ja^di61z`GjIJKeX?U+qa){>)t{xqmXPyn)p0lBQ0W0hY zDN0@Q+g5ngXTNKej;5o$6!f^N$8VHwjq?}T2mAc02KM@Tc69dnj=HG5mW`bazO_2) zs&w0?Z0-5c5zDSZ!Y{zxIWx+d%il^suJ1N}nTp%Z8Qp}#gEK2H}hGv8q| zrp!w*pG2bNpb^OL%Uk1z3@&lfqlUPnM%KR+w} zk^gJ?z%DNKtiR092fxD4#b3pDovSXAcZ1t~g}T;>S7(NVjZlkV?D4CI%8qo(>S^Q2hB75kU672GiSq2b8h%KPBwEAzq!mW?E4k= z{Y(26eUQs21cgbySpz9^HZ++tdX_oEXX0f08_nZN*4e%{n=k(+b24Y(um;3du?Cjo zWc%Kr-~8$P=Bx!-f2hfSJ>1gJS7m6(S$6uW!Z3MgMd!StoK>6iHsq{9taoc(&KsMv zre`xJ(wm(1CTrS^IU|MKy6dliKuq*mi|VY`(t@GauQg|bse@-nUt_-EQ*pBWdcG8N zz091xSDTZU38|)R=42dtEk=`GpM;a`dxd`UC-R%Kw$KW`)A^zad@Y4C3*NTKwIuYS z81zT^<9fWyH+Igg_4`pQRhhMOtkA3Z370%ilr06QEKby8D?7S3%wcXW&R<4z z)*{)nkC`(#AtY%RNq-NDq*~cTkyP zhWu%!JZ|r}SejCYzqHa!GEy+M`u)Pa8~Oxs zaw8A@!Eb6%`t%)VxLeJL4Oh#PuQAVPEe?{OI-F*(wE6n#&DY<6!@Yg;47Xa;XuJ6~ ztTf*Zt8f^nNp%$C_xQM=g$FSAm@$v(ai4ZOSDGZXMft6-rs#$_KnUsAEDqAIV7_4? z?WljsJpGdvmBil5b)LJx0R-f^o5g z2b%qZi-(${4-RsCH_#km@@GYFbF?DM@g34ZvwcQ?J1nb72czWH&~Q6paYhvtEth!{ zTtY~%v?Rj6R09e5M5XS2l;3F2fFia#h$vAycKRY3#YO>5Bw40cY363F{aJcl)a)>s zZ`{{I(8x(Hm{BHVLYb?SC1Zk_QB@&LyN_EfwmRn*NRLJ8ZHq2t`MlTCWwmth%Q}(A zpH-kEN*@nf@qf0k_}3q(_>NNX7}44nUgO2Dvf@{I@$$rd?ip43r1)`TFiWkUgN;gX z%Y5rsmWppz@%M2y}vu2}f-%5d|;Ha>M$c&!&MkIT*}O39PL+ZPo6By`_?qhC`j{3sRvE-$>s z3a|FU<#BO6g)4bd_)}bQpKtl-g2D&b6`JD~i3*$J6(eycvi(jD*;7dKKe&$L^WJpK znvA=9nq!mLb7xE?C(3YUm4#(`1YzKjm9|>*75Hes)@jtY7s4SCphx*xJj94RXB!Rj zMGrZ3~ZJ!))aOf6+}NxCWe z2&4Qy*pp9c(CeaiGZ8i+Ow1=MV=Ekad46=xCO9e0Y7eh-uu=@_xMD}+;Yu6;(mbOz zIP|s_hrZXDuWy<8`s;DHV`-jY@v@wswVH23yZLTdi6g?x+Mi#AFUp7{Wsp23>oHyK z>v3O?`?}nhwOp$$SFgvc@|blN^8t$)@R)Xw8MK)5EM~}K(jGHnF-;aT<}vjiGhs2O zS*-eEgE(4=198-DzR_0m4X1Iq$7`PcdW-5?X1;u# z`7*UQ5JxpQ9DSN+xDp3Jiq%!2pxA*3Wnj^0+`qs9VlB#3dsa{=VS-p3L9F?_#@Oly zVlB#ACWtkkw>q{yFm@H{7;Bw4?j${K5X(0)vv`Q=- z7PH-A20UiWV+Ji|lf?{q%#g>7SjzBgHvD_~;|k#w$UO*vK^uncC5Gpfih91&wp@OwpZMvW^T zmFBJ4z_R60hl`hGiWi}Eyj;c^OGK9hoo_S+I@BqNiW@( zwOkKat{%Q=-K@uS;R9kjaDdoV<{MpUzTtKp4zbPCpSGyJ2J_|X&6in*1H{(hM18g9 z8Lq*J4OG}`6~wmYtE19+Y6ab9}ipcf4Z>vPamlGWu@ZlRQ#!4{G=5>;l<0t z>ni*fNl0ZMh3{11-~O2mORp84^}^+e``k0CjuvgL^yE2F;CEQ2bG&PDc>u{K1F zHM|RMVYP%=i=)Q6xKAC4&Rs@WFJBzw*T;S8c64q7VFMn9sA8jqL6v5PJPa~FGv=Qw z`LvOb8dt@An=EAqVUr%+)f9cLM*tDsszdkai@oOgoK6tpesw+i;(!HxS#T5G$O#jP zZydn^$0+{BF$?)1`hf?9$WZ@!$WQDIh8a2_iThUWr zkaiQVi&UY=pH1CfczHPc*VZ+%#+{qOIalkh;e{7eb(|k}?nQ_?8#c=jOqpt);^TZV9=z zaT}PO3=G#QraAH9lVN#>hDDb!%)BhIQ&MR}yHP5_uJ|##Ps$&r@o`Y05?yx`WKhlh z!P}K{JhVVdNdI`q$0X5jT(hgkO70%Wwp~k+y;0{?aq22F{UbdjP0zJHS4}xRj#N_*~nK$;smiZ$yn_JT<6CVriL_ z$E3QmW~&;Ymw^P#oWi99#%LH!5ItFnmfogJ!JhqE>Cm#vZb3R)*UV1ce-|;8g?e;1v9O3%Y_U?<@vZrrp ztm+?YB2_N+S?S*BM6z&AsQZk3-yIB(NNN3;G z6rJ4=Q(UnLW%y>#*>9A3)*q(xXMFb)s5Z4fUr2jAOl}phFI1_r^;goj8_c#{PtA76 zBY*G^nd6qLWwtkNTgO71Ysht8?^Y2z(N&+tySte+)y%YUp<+7-jb%ybc0wl!4TSE* zGBN`&RXB+@P)OEB<330TIs>qIpRbS#8eBf-H z_jtV;)PtaZAvBckBLK3=es!>RSV7NM#-7%Yq0!D$1XYF8sChDQOjc3oEPM>lTxj5M z^fX=NmqoSXmzY5{CLBHYwtzcPcrp54WDq`^HrExvfa=u5f9hrX&QBF$Fm^-9o?9*L zou-)SINPHN;@+$|Lt2z+E?1}>;5F6|2Y9;uM2p75^A)>5Lto?5c)l#G^$6;aM`++N zL12zuT#rm6C^i#QW}e+_OtEa(-1|IT+Y|yc%eiKoksOh!@`R^tqJW&D6|o_UbvzAP zXd6lAM{6~0TRHqERfDR9UNOf`_$aszp9nz(!ij6LVZqJmn>J^73I~$$KAdFTmEZpk z=l@)*&mP2}gb`AOe}(cF*eOd%3q{3Hc86E*WxMrnsB?=m(|+EBZY0h2%o-%CazJ%; znX{rtV(4_VVu&N6L3GInnv)lf^#}(0^tQ&HJ?zuJV4vQW7(OUjFFm;0X3&)X3vXaZ z=2UN74~AzLlLrb%2dyzMz;;3wwsC-;?Yq_j&A51>nw&%K&*Bui@%OsFokr&JO00W4 zeop23GU#JzfihB7z8}AZV}AWKg-cD2vFlP{z?*&GmvG#5=&Z0-WiOs%nO4lq$E-wC z(mUm@bX<+DUnOW#D`Xn%dHNG21yTkh8eL5VAafbio(_M37DwSFBiBg3$gVk*UnG2f z;bo!>0NeLA{sr`%fDm;?UYlup@j5r7leLgB|YBtI<_WkDdM)_+m2Z+`hU>y24Lm;pS;a z54!=!l4hAL#pGm{V|y=K2O~N@FrQtecSZDOKVbqnC(&Lv&6I&2q zh3_jnqq;p zNI~gnOZXx>g9+9%v@mJmj$ni)M%=I9!ZdzI8$#NsR7ZviLgq}3c!GAeg*{dgFV3>) zwC0lejO?yb7}UAeYtTWWFwNwi9xWXqy5p0OZ59HHcg9s8g7}02CIfe3AS+ zjkn@yFtY9Z&AxrlLTzuQL5GCne(HoUcS}XU0{6Sa;a>JUCC?IukOyUej>PcJ6R(Vu z5&5OXJdbadu{u~osSu}EqMW@7_rSC zUTFg6@y@TqnT5Om#0rL+OvD}BNHi8&%SY<>Z%=2>Z;IXmcSA!SN03`75Ka)jjmMf@ zy6nhWoJ0j68s5$?Dm41e%<;Q+RKFEfpNW+b-J)66-`}699Qj#G75G)J`gZZbV{ZK3 zQ9+Sm6xkm+6wedSTf&iM7d$_WA6u;aTCNB9fc8*mu1}tLSaJTWp4t@psFD*SKG%-w zw}K0>HSEr6H(+%Bo79-`aPRFVey~=bWXTiZO=f~jHh{PP*b%P+ynFVlLlHnU9tXI; zTg`mWg-5Uo#bnKe*J&U``d)~{?!-yvXq(ms06S}yoNtu?0gG-6m-hc!%G12hhT8#~ zI{|pa6}!SW8qwRoE4nxC-o;@3=n-Sg;1Ig!_H~N={K-eaW>28EuFjr&i#ls-ah~KZ z!&g(#>7WGL@g+N=4jK)6Q|H~73ZErJ+%;5pIE$*`rVc6`XU!IR*{^eBc1O7?eBwtM zL(+|@$3WSvBo8XO|8VXf8Cbr?X1WX~!c2e?wZzFl+lpYBjxuhw?8 zR{WjV))3CM_P2!il2 v11JGC7!Yc1;%Wd%W>zsbJj&1Av{8kNi*j2)h9nXdzyZ*Q1$0Pr(h#y~bWf4DiB>0g=J_CMSvujdajk>ehwkuhr zVjH62)!N?k2jBK#q!4*|Oc3Ghhsz?aJg_Wc3_^7i!YyPa$RajDaE(DfC+CsKvCp`uhvLORL0E_}6jA>xuhrhO!GRR69Tqwf0-USG))YI8qxDcq#pE30z zR?**cp+sPG_)YNhE7Kwc_16O)QsVUKo7vIQBYf)ba{LWd*J^K*!I)DEuMemG^SprL zb$nx-n1m8=T<@Pb3!o!c6$Yvf4`$7I_~VvwO!4StpggSvStB7 z!dw{@U>K3wYJnU)^LB`{8C_Yj;9tTInJ8o;T*U<%=4qL_wv;FHepIBI{`JNMa*%TT z$^P6xb&h)umc&&9{jG1Rq-T?NwATFJAn#bG_Qt&f<_ry5>;EU^9l=`Q@{Z?otBElj z1Bw_cCTqxI4i-k+j!*y5|3-PoiQH8AACh-` z6sGC-k#~GZ`To1*9XATF*KBtDup@l_>(4Fk_z5D5-&@|XOk5}s)m=hAHr2*u!@emkUIR zRMx~2$U4|QOQO(OZ5;lZLU^;TrZqT&f)>d}-90j(`3zDHHb0ZPn3Tg2r=%Q%MJb0w6DH-D;3M4n zLJfsofTb-8l9c17VU4JnPBAIRl!cpc!~8A{@oJ_Sc9(kSfKg1k-7N^$V)vbrT>!Ez zRKG|Sl}kAsUhK+m_?Dy`EhY%DIo#8u1yhuADCIT_k(A?ge*s0)xXd@&L%-pCfy=U% zOYLV~vQb7~&%z%BYy#23*>Kt~fy!>tSK-9hiYuTG#BK>~KU>U%%&efY)m-<~uD<8X&8>;%o&lzFhl51jjwY+?DG!cz8Mq@1}ZswZU zmZr-4b%USfIA(m@XTB@Q6{8bvj#?6i``t(VXBqB8gz22evGG~6tF>BlH996Hba)fL z=;xIf(jve8g|Q>Vk{vwrRpn3k?w7tsIiHK~?z}{8>=Q@re0IWKqf15*WjRM4PPXyQ z8{cm{vhm|${mGzE?uhftGT_(wakV)djIqcA@#E?j{P?z4sgdL1O&jO=aVF-%KJo79 z6Tc^ePn#cNUY=xL?q*)LrSF`dmx*&;KBsw!#?Lts3y*!9n=0>h_BuaAew&%y_xQ|Y z6vE`>C3BeB!lEovqV6W}xD0F=nAT^P7rpx8XOs6#N1fOzn=)~exZUaSQ%1o)-U3Gr z`^)Y!8J;{PVWi&yv>P-||Cgb0!Wi%B@bujYJWd!qx+cgp>``a}M4a)y&Fr#cxp03$ z6I;jhIZ-;@m~Cxpj2ar6qp>p9yPW^lc+Fz346cg~&W5AWV8a$!6mD}Hfg|BQ#Fh#jIu6Q0&t@;+}x19SpKy*O;mXf{& zY)^M@XrIE0=OD2#dU39^TuP5sv1)S%v;u;fLC zCx)=RVa(V@v{7v>AV?Q>R@rQrYGxM#@{ z-7%e}y#`%V;l#tV2C6d0s9P`R$4fvRAsI)v03O@)gqNc60iBel#F}QV0eMow4;Yz@C?;n31G~zr@JEBhlt@13?WO$$9|UER63>iW1NBT zh^ZfxXhW*X$o9a@E`Ac5>dTa$_Y0AAwmiVaF}8$<($PWO+}EIEMEPk3o>OWgXCu21 z5B?}0K&%~*GMN5O@+MnyUg?8MUX5*OiWaPvl035kd^$-pCSyz)#;w)dk*-O{U9|+y zfx2fUPGi*9c2$}Pv$1D^ULR5_&_c{5Zyrw&_;PAvu;u#* zm;v`mPHxC28HI_50TPJdl7M%?ek`f(H9s=s%^L#^nmjP`t%oEy_m!;25H5vo6fIh= zezr5)_A|9D^%iqnc^I*fpJNrEYJk@!s1^; z_AzU{rI{bp1phcBr+B9lCK8gZT2m0&BQ8zZ{2}ON9lE>X6h(*929 z$>^l*TYT}W!C*ejc|iSP1$nn^PG+J^ig(T!ie`|STj=uy9?M0pDiirX0#ToGXFsPX2i(PtYz^oNFc_v^G$`b za;cwXGqUbcc();lYsa!?_(RXcYbFyP$j;1xxLWYfpapI$Yz-gZY;+g{>3TciH@py5 zb<3QFH+*dkgn$*DvtQv(?GrP9qhVTZSxdc8d+CKg&bRi7!>X>{QhF)5^C8Ka&nmPo z=zz2csxqHf=TIcBuvcOiBtX2huk-Z6n{ufKvxcAwZKWQ{WQq{rL)nZzbM~7czz6Bv zErq+n7suv1r?NtgckYfOsV@AO6Fo0BXN9YGQmr#RoUp?3mU^eQYK|&IvM^d`rXGH< ztIvsDXG#+r>Ux|ar_ zL=bo07tZ^Dv_Y=`V`O6tY3Ez0iv=pq9-VMD17qz!!9~oFH z-e|3;=Qr1_^bnADW7#0u#AUm53;GLrKN6q!v^J8Z@)rwee$?!p>wy&8h*)DS<@l#39p<6 zyk!6@{N1Rgq6FTmAMl>J%u4Le+VX$T75<_IGqZ~D@P@VE#UkJq^~HyPTnxTPsQbB^ zPB#AuwItQEb`Bh{xtxzdRRtqw#AY)e=Qp8W^oe~nenrwg9bWWlq2Clt)Go@dNKVjB zrxilJ;dmpz+6JJc-2CSNb0?hvy?5#wa`SXe=TSPSg6;b|;q;=GEVHPvmt3jWJv;xj zuuSTq9Lcp{yd10NlUO=8+vgK|Qco}Gylh4fohM|G2BH8FLiUsP-zJI`6x-Sb)U!kO zvSG+lteGk`WqcHr_iyX#3$JI`PET#Gxzbg^cZCkm;T|f+j+-#Jp?J!et4r4h%&pST?=~*LH6_3^9zXlqruR!oL-ewCs9b z3l~JTNV&z(ify{@y4_doO3LI|KW@3=^p;(h9XvCb6cBfA46i9>A1r3SfYg?~CdsY< zWl!yTUaEKt#dZ>2syWR;g058iz^WrZy&TY+EF4kn*be+Ndi*i`%Wd8wVYl)Y{UMPv zlfRvpnk4kjB!dWKDmk+vC;a*IY*wU*WYi&)VexXv?EbT&GvMQjOk{HHLIhz915`X2 zhKlF;rr94d-JA=q>7MJM)~e5ItJR)=P@xVzBi9L6V1;Xie_>0{-4(`vMVa$x7?Aji zVjEvZ8|fZJO)n_wjfK@=%dI{H%7eE1cxn^%qAH1P*G=3QsZmyJ&|`_dbZJDRpo=|o zYp0JxmmQV3ig3+0_wGA9wd+}%rM;lDu5fa(Sy!_7AgyTD?1E;!*>>ctohT@1dlUt~ovxmPyP+p&hZa%yv zta*ZTJyoCI((_Qo8pO-G^6>?%xlU9xRXPZ3|0-|!cWrKV(sG#hvbjmk46DkIj`)}= z8>@9ZbrqvX%h`jka_-C=gGC+Qvh%sS_C}I+zMcz0-E((TtG@T$h_o+%M(%8T0pP20P>wnY0}$du zZn{u=2li`iF@`I??LAc~ej{Ssh+lYAv?)3Wb^dqU%zjv}`z}&iJK;!-fyAx`QJg+; z83{ks;QSgI0LvfKw(7^^t6#=So`d`b}0jD5HMwV zTa?Cfl_WDI*2|ch{p$N)G&0F9wobdYjv5nUTJ(t-#HhK`?1gwYFF%Y zY1p>K!olKruGuxfwD5WgwG7a?b-b}+)?}y2y^j6`Ger$gY0pH=GL8e`h1*p)AD^U_ zxSPD(TsryKM4098scQe^PG3Mxl3XV z6f4tlL#3by`mFE~2s@s%pk>J2F`M`Fn@>RoKN&rlKIXCL{1}4Fo@;`fu zsnu1))R0K9HZCL%<=Sp$Ky{osuvjL&W~=7U;2?pQR$jkgGTCz4O2~!4pC#S;4 zn7+6z_~iVMmhtdSCyJ7@h~TLi&3GTqtqkYMrnrhe6J@4`Lj6k^XHMxjU`34mfr&CP zHjj({F~bM6VZHet(;oWOnE-t!Ms9^2zWbR(sNK3yf2~?~#%S;yyVxH%oN6hDKcZiS zBgx6*B%$^uG=eG%iIBT6rxlX)ciGy@TN&T(xyxTscs-`A9k zRlj90%?CLPt-l)uG0JG*CJY~7fltwzXo5gD{tzi({nhS3> zl9;JG*@mOfEpuch2n_e%XlKs)Cb_J6g!2fhI=oOz>B`5ORvPsDCdFlMc^Vu(!l&tD znI(_7KCHR->3uUNN2-Noj=Ht7Hew+xV`DvN?dL>9{+A>VJTHYu5*}Y zDYTODUy~5yZN3FYDK>WG{G)ci9937+hT~~d&Tgh7je06bse!o2~)`@lCW-6 z49(&pq4iWwyO+t~xQ$PRVDwabJ!P@vp&_9o$%fP}d5Q&ujz8cB`b^j`8wNPYcYCG_ zgzKh<;Zw2P%n3u*iux8JRnQl{Q377&D+2FDio53~0q-h44S211 zfOqRX0B>Z#tGIdK{Qy4e#TE(`@G2n6tXGHgDsg#U-{ruoP&b}f2E6ZebLy@Ef&E7E z0K&5*1z^?6@IG3Wa~mx2a0O6HujYtARL5^Nf1%Pw!|mpneITe*JPyM8^6Os=W2>df z_ox!Cj+w77ix1#bF$oCw62i#wi-L#}qac!`QWU0UrG@R^L6Pl8|!NQwC2dhf)+sTqUzk4Ha_y@(^(fB(BEe zs^$3G!C`Hc7Doel7cP!8AwJd14M)Q->3N`*m9!`et#|D(F&z63niA#l>-~;{M_@S{yZe z+TyU{SsYh>g~cI(GisB>%`c9l@L4Z5P^cD%0;0@LbvUmQm*@3ezBm->Mw!YM$7!*> zW)qp&6@Z_i0{GRu@Kj!uLcWr3&5q^Xi|rSOdVLiiy2&e&q+-XJ!6e6&+A=(0VfMBR zpsp~$S@QyuK8q8XaTn$`;0YfFz6`1lo{=Qnt-&zSGz@CEV0d0;EvMD;~pB>N?;1e+OccfncXcG$nO}+%sX30cf0?s_3O9dI3QRpebJw(6%e?H?aV1g3rQB*#oS20PST1n(T~B9wqRmB=hjL37>W5 zwUjM*QvjA|=y9A^!OQddE{8XTvb7Tmyj`7862O~6z?aH7tY6?wtqd_O1BizBro)4l z`#OFd-t>jNVoRS_BuUfe>q~O9T8W-wR8hd2!hp99CFI~8CmLQUPu`4sg~xdcVgbBa zv+|Y%o>wV3;}@qD;A! zTC9a%Q@M9urxuouFBA!HgCiR~u;bgp^e@Q9%=(T!$!8;TgjJG2r0a%6 z>DE%?i|cop)-NpEBPDJ}x_RAza zm<`<%w$DJV;hDz6D9(E8?JeK$hp*?=Xadh|-G@D&q`_^$TKgAY(U4fFErE9CTF;+9 z%{FjL`*SVINq8#=SyHUQpIfQr-^!=%p|bE{7Zq$)Z73olUo$! zCG@{&PeBS^`R?Qe^z9ECa7b=yPzjR4fK;0skkZxc>F{nL?_!bj<$+@IpyiX^D)DBS zI_2U5rb6~+u5ijS7pJq~BnH^_!h?|W0b@C+@s=lGJC)MR& z{GPktcTU=K%{kB6p1GUK+H(zXxnFz!Nu5%A>QGG%^^4k5R^MDW{GHmap1uF&^_{e^ zzG?c;eOVQfNANCN@nJ%~vi>Lak+l2i@U|V#QQvf^nXm7Gpcjym{vB!sT&e=36?uZ{ z+9Y3ba?9jv2qaYBzVNpDpR>NfZZs<7sIY4DHte7i<{WAHV?eDfS*KBS8qGea_ z1y}Exf5X=UlQ(=r=?&lM&~_8zQx@rXMUV37x-aJmEHwTh4|KRgG0|M`zGvKR?P9oOnofAr#;@$$L*uvKef9tO@%;HKeLTnnhv%K9f1Hy3`PLQ4BdR|~#{_0cBljw;S*%zm;qWL$wwcbW5I6p4qZ_1)Az3b!aOgp=I5j$w{Cq9mDN?HCg{8FO^ zvKBV*o>J+(bPqhhd+9SbB>1I4XrW@f;?I;F0;hy#blyaOPGqM2#I)2iVfzw)T0MTY zSj~#@vn%C{T+d#{5YBPdb15NSL}N9hyzqF|`cwWs`8qfu@c1g8XjsV;4ejxYR-R}` z^F%`fPc+o?L<6Ai8q9I3F6tA-AGa}G$vwqX4aRgW3|(8%)UhQ&>`;fNDe5~Or#b4c z!HN2hGLP9t;@zO7=G!pG4vi6VDd19Uz(E2$ZGo8wEHFQb6WQyRiD@J8^cLl+_WA8f zkZ-3z1QSY)EJgfkJggFUeBELav9Iw3*lJUA(fsYgK@jZ~xAgE}wmQ^gPk#5;E0V{3 z;(oO+TEXMscD0)~e+ICcuP*Qe5D$rOsI-(H9K!Ujy4e(6JVGngZzgjr&TAmh0w65y zVKB3(<|w2Ml}HkIlQ%_CEtITR$f&1!suQJbY4-W8lnfW$!nD2&*a2TnT7MO3h zz|46Tm`~#X>*g7j43w^$<3=XqyrN3*rqm^PQwb$_Q>iQkpEaA5d3f`R4c^qD1m4t3 zhc~s);Y|%r;7wgf;7y(41uDUtx|zV6`t9(hfpB;m^DyAe4^i4}%_mO)f1)~m$5LQ! z64;vn=Ei_M4*9vhjH$x-gMeZ;pm=ewzZPlweciC`%P2F^5Gsk4)lDqXTZ|x-Wn6=Y zwWXy<&yT{#y0c{(^;O~n$XW$iNZRF#9*PcPs4XTsvyxlO5X>wc;-a@!r=v@2umL8| zrGV~V0lJqiYmVMuAH9dGaetd`ivGN{IeJe!E7)p^{v4FnZ%v5avnriWOhDcr_o-MG zvg&M(9t|Hhlxe^nw=UhcB{4$OH%Bt#lV1n~)b%#16SO1s#mPWKWnsgBRp z8F{$dRur`%eF_q6f&7Q!ODyiA+7`^qJIUjr3L38a;$`9#LPE8ZgzAp*Vd++*Rquf?L*yOYeCK8P@v8s$Ox|hpJvRQT6v*ur*wG zwRAXB*O*B|`gMf$tL00HeBevD)Rz)1_NN(~uNA(ROI;%^>K6kHGoKVh=v=xoQHvQv zAw(91L6q!h43=$$_LGcvb$s?x1W~515x49;aWgyi{+nOf{u!TLdD7WO6itQiwOMY3 zpp~tzy=6JA{P^tZ_!BmQCo?eR)jPehb{DXTlEw}iE}NEZ?B8crkDqC~yvc4#yKu3+ zYcH>4Xwf%0Y(y$}7?8ux1H-N9nydO|V`U<9!$8#^7Eor|&AiP)2BF_1+KKYQmoY}K z<{~TEUHJE8NQ&i0pQuc)y}a7$SdG~?TBip;ReF3$rGVj7xLWsG&(5-EHbi+qHb7(* z{)j1(_lDD7lY}Ws}aPm!R-d z(hV!N-xEJBKB{Q{%-7&E(2jh8juck!X15%p$w_GdcNI5Jhc`feapwBl|3GQ z^I46pkyWUnYzuu9W2^Wqkbp1{`=1KqDg#*60yxK1IHq!O!fMrvN{A&LR*;MmJoMGm zWWNUipBJ)btJ+tFKv2k@KYcoaTveH;0J)jp@vu9zY8bs?=jDC)}lsx&9`Bl`ED4%p-Pyw9rr5o1mYxEwN#0KVo+Zl+AdkB6cU895YD1ALXaKPgYfO z#v47@6rIQ$W0iXCjW@<>{EacTp>vn9(O7BGyP=u;tSG$>5q&Zpo!gp@^jg_UXe%o< zx`fThjSt7e%NR5ck9}+>sWkkXCj3A6n)!jexAFRf#MXiaT_@pgYyMFp3e#G1S`Ulm zk>XF*KFx*LvGj%a>N+4A#Fdi@>EGfZ`=m$QR7>dK5=`|Q_WN_M2kdtttC387Qak3z zL)@RGSY|1-^6ia^^y3c}W$z#i7bqWDOcFp2VqMg}`SrMVS2`Vm1f&%7IJ%9f{e`;? z4^(n3nG28A+4bX{}Yx~wT~uTRJA4NY-Jx;gG@ZHia6H^-}1qAX}uF|{c) zbWjcukQ#~FHp&)U+|#2n*{}$tCK-#B(b%klBPGxQO}Zm)+ZeU3YK~T| z4jM>xQ9GnE)k7aQM-8<+a}9}H9di>%&6G|mj@^??m#yApK7{KM{Izj zHM_D*Hc6V}wyvglMF)nWVZ}P3Te=}*J_s*%F|<)L02;ReO^JP|RDEREgW|Sjge@bM z#?(c23gN_Zt%pG@A8UE5Sx?n`HA8mcG)4X5T+&hh98lF14e!Qj_Lp3nB70-IIl5s= zKlE@E`Em+bElnuooqQ$~aDhzg z3%8gj$zN?@kX2?0+X2;dq8P|^*2KOpufNB9y#~B#fY%hOV9PpUDi?D=uD0Hc&<(oQVIFmDmGwYt(Doj>W}xEl zu2S*J#a*)u)-@IKpX{0%;azLDa_O2c7@lBenJrwXLZ1B1(-WYj)Lhuay*y4zo%pj`D$G{PT8DLiyuhWg8bhIx02{Sp2Lv0K}|_+r|& z`melg$0lvt`}?%*)%&-N-C~k<-EC*lEwf?$|B@gK5(+AKmJtnM_m>z$ZgBgCkc?kZ zK3|ldebBP;#Oe32F!qe{v#%vZjThx-Con#sV=79-^uMqCY*37n=5suJ2~}RS18 zeg?0R8B0Wh3-`A*y9S}=0Xy+|psi^fP}UR z!58&y#S`}pc+7~$th1P#EvDCFY(>QxflAb8n5M7CV+@VNsV)lcwd|=5KC}M0D(bsJ z#k8#?%rQ->9g`gv)=HQy#W)4p{(yxw5N7Kt*7kFrg)Jj2&6jUKO%_&5SiOg_{hVfD zk`3y^`Xt#P9?1rABpbv*HfWyVN{bp@YQ7EPv?UwFp;)J|^3xWWdB6fq{f_O)Ji}vh zkPVv8ETyBTg@=b2DG-b!3X3jH<3l#67=Oqi9#yF{ZC3R=dCpEWr)D4l|K7Zw)NbwdQS!nfiSx+bOm0UK(ZmuoPUqO^#Wg=#sr_*i~JN|cz8%1oK>WNKy zh#h)Tk67wdFE$V~JR+VF%|$r!yyhip86->-#R4CS^O`vbeZp!yOwvvZn;>k$!@yww zRcWUtD7l%%Bd_kW&Li)1p9Y5Q7Eke+=FB>e(O|OaT8s@d3&CSF1yTMAi_zpT@?9RI ziHq{9EvCj}R(VXd#eBeGoOUo}HCk6;G3Qy#96bkW(s+O&11#S9#s_=_8YszElJZ92;wem&NQT|vH!uThGA1ix2j$sP45*z;R@lf#hWlC)L zyTil4-xpb!@b^j&14u5gFyZf34+DQUTbS^7gNN0@QdpSq_c9Lyf4|bgz~354WbKNG zMr(1vfXCtp_2ESQN0`Sh5`gCR?p4$V-6Q~i@4}(jX$!RXox!d5S)je?%w}hv;So80 zpNI4U{y49w68@gBbP4`e2_^hJWidtkt>(_-@1$ZaPB9Y}SH$1yYYBgA2uk={BQuY` zHDdGlTO&#Tggn6C7g$^of7{3x@%KeUmGE~59{MFTMK62Ym*8)k;v)XO%yO;rbiJOg z17Dn9Z!ujSGhi{o-y0Qd_w>m1IgPxCDOICL0H&I!n*h(Y!#nb|Low?W+OVYi)}+GbB42^H7v!agw3Ee zEXMKNZ9;w6QdQ7x1AI3}|2&A(6x}Aw-yD6#F#ngv%=4`Yi~77_`{+wk@^Pv|=BDWL z(@Mg@4!-8-O97wGb_`5)w!;wVY{z0B4Nq~dPjdyX3(s~)W>T&9d{PWoF^RpX?q@sN z3Knh_^Za55%)$^{;{Sp3owru10|!3edHMy4({Yc<@ITANSZmbpc)oLzmhy9*?|kXT z|5wg;IzHii`Lmqw+`vuQ|69&?HhUB4yX_!jr+xY#QoLgu{%+4SheQcP=~{wybOny3|Lvl zkw&(8Vp7RtdOarXzO4IN-Phy3c6?D@n=xnD9@F75t1L#FJ7PeOS?Mud7IT5c^mt6G z$7C(0*ckcrqXI16@r_f4(LZYHZMUA^v z%Zl2r>{=FZ6P$r5b~Gr#_@@$AV8gEX4N4>^k#x(*^UN^2Q5y-`YE-IGDMpu+z>+qp zwMmhssUSpUH7e>8r|U*6H2jhN-k)=xXOgt#kF2||-)kwE``rKco_p@S=bm%!xjh~R z^Lm|y4H9O%zj1iA zz&3HemrTs0#i-&i(AG~LYmcA)V!9#_i9n3C-cO9MF)YuZ#|(NsA}``oM9}9kV;<9M zF?U;@9*>#um@fB4?hD*!BNFy^;w#t~gkr}J%vhpU3{$qiiEnOBh2q4wIwxMTByr+1 z#)(IWRLhZ^Oa`8?wHl5JC}3Rc0mF;H6BS-x(0VEmJA4iPs`zRv9)*T1=m&a6lOpnDZwwPXzsqmOS zixFKOV>agS@zB>nOIOwyP@q(Oa!PA5-T01mwh#F?g_%gVXce+S@d~Mhby1Qvj{|Ta zr&hB)5oVq74XTh+H{I?HF$RFd)YB@9@$D(GWMHc_ zyjG9V3eRS>42R81t3M2bTJza!$i7R#Y|x&;W>sNPMeQe?2B)?CxD3`A)W~eLK@|)c zoEt)2onDu1@~pxCEgcB@rc20_>f20l(tW-K743GlZ%?pmh>GQD*h=tp>M$k~EJnSi zyg`pq=fm7h79$7{W7n7c#bVC+7E|ppb{)5150-?vbrvJgkSFlc1R+lO7UN(lwtI{= zbqdk{XNW}*E!k>i;SaK~UtgnPMMkvO?_zlml zCdO(C>uU<#YCw2)En(KKuzqQwTg^rPgRmaHpsrUGy45*pf4~X!Fc=j#Sy%&MgC5od z8Ej$AgpGNa&e#+F*~+JlMpzG1^=sO6R)t^GPLv97(e|_|{Fe5t@VZ{}T&Jxq6@F5? z9jlH3A-qmIAvB5sA^hYpzD#(_7*1h>x*1+KZb9Fgz+qjwn=p!>R3MgettH=z{3%-Ms7Nl<0m@mAMDtYyM`o*zRDMg_*3hveCeX(H1|aM zDxH=>Cz)GpGdzU8%IYM^q4ibP>=CREQdyCGz)azPOl1X5TxVeQVn*Hc9y^U5fe@EB zY`mt><>X3duP5uYaKAj;)u*t6y{IdyOcP1D%)DKpOBg}yuw^vkcOLs5(iOU_yM<22 zikMHSyrzNDB`hKDr01vgp z_gl;dEXIL|VWcqVwcsl(*ukzF(m@x&&{q)9LExXge0C~v<28Q@EhC2vVjd|Pt=T?C z$#W=~x$=I~H!>7|YJDR=uk-x01|(J3AmCMz{pQ;=fkRp2I4+`Qd(t|} zzI2;K75mLe7$xqD=x7RF})UJat{T&+{44*RorG_ES+X}$K@Ux5a)Afga||K zp&@gAh{lkx;Y7YYMqZ6FVdD}*@>v+TgWpKI8oT+pLSi0)-70ds@_>Ar7{5uTn0`QIy{%a8JbME5I?*T%dW*JI7b2~$9yS~nkFzi_3MxHpoX-mT^!{Nu%OPrkVb@$nLAT`zyR<~1Wk9YlW)yT= z4Pn=$#i-(hQDAb)OxUHR3!#X`X#HZ$to32nu*IlTVW9Pk80)J`pkoPo%qWP3=q9(0 z<>-OdFY>fd0QJ}kmI%?i0*~wTxK4bDq`jRifd!l1o@)Oi_4X_an}Gw&^!EOTuy8LU zlDt7`vzhan1!WvDb-tZNze)GmY%X)79R0*uDf6kuJe{N8c8jsuT;@rEeq!G^`t@0A zp`Y`lgnm692KueDbV5HTM6vyCVklR#Z1;4a-=&sL=-1+5LO(myL7LlWB$7Wr>CHz! z%afp=iYlX@)sUc{m|BB3da7K(Q(m#K|LmPqKQ(flLPZ?9z$`ZZZG)gZtyOC5ws za4?rDCQfGMW$d0aET%Kj;=ObAD(Xta$DaJrn)PUGF)lZ3pUCp8B=}^()t1a-e?Yq3$aq zuZ$24KJoqPx37QZ_p7VH&sb_UU!P{}o)rvy(706_E=}l*EzI*4Ms>%l#Y#?Z&lEex zqK&L9g|_YJjpnmkt2XbB_MRcrJHu96F|_Xg>W5R836_WFEw zW00xJXTK6;j!gwE$E1Sh#i^kE=v2^pRM2!}Drl-q1r0}}g3Pm0LEWOdpnYLo(0X{# za9BQjeUMp@&we#v8t6Ij?JEvVkI%}-*6wM^r<-YG6K!nBug=iMI@-8`HZG%$OM~<` z^6AFnU10kQW` z2L?fkH7KeIL6YhWn%7a)4|HoUeNR69jUat5$kZD>t~HeL3)9y`5Aa>cUUTvYQuSwJ zRcr0`mO0?Td_PFSWV;QUTBGS3+;f9U!2ne>V3~uHM>PlPRUu|9J(%GQyuyEN{xsO@xS)060DFVlPs z+wL!<@0U5b>|-b}ukGMPyqC+?3iDLf4|-W?F@Clnu@08K&z_Y$Ci-fVx0ff_W|j}1 zlAfvhd~#`YpY+IISb9Ch$f)$+M5jEic|97v|J|M^F8%I^7E=1%Cy!LE=f>t;x|z8z zNZ*xD-vuLnxU|EKvH6pgQKT#FbZFT;;ds2h&*J-2J^2r%>RU8eh$nBFRube*9O^t3L4jdy`8C``%3Cf1sgt&6Kv=(&wxfH z6%2jMoQ)qfXOk|C2C+(!T_?$>JA?FKKD#E!-jZ*m$Xl5dYbo~Mm=sqrDQ-*UEj@J( zF)wn|zlC;xf_br(wqMP>7|w67a#xR}@&jH`+qP6buDatpsr*K7%mv$1`Ay!ui@%%C zS##4n^0_P3s`O~pJBF)HNcZOXKl{aeoUc?!y+T5{)2!K$vdG#=VBYe_tKoVT zwh5eCgy&J@!OddZ7(!-pMmsdgpUD=GdpFs&3*_EqANK~ick%)8B04lMws*d$AZ-do zCHmv{1uI2cLs7Na?hrs1X)4TF0i7nAzdzbUX<_7>nJbJulcj^nasiX&Vs_3nYu&OS zz16167Mm_ZHeGJBjiRj|l>H`Sd}EN^6g1wzsDFde|9Sux1#Nw-;9mtdz5*bB&8I4=|THCrmV_SE(w%Z`PE}!kTt@|^7{19c=+17n+P?^t;XZEzlCp&=T!OK~EfMv_uoML<6)$W)buRv_$*i&=ZFR4NwwYhAYE!kz_u8 ztl6W}=2MXnqlOtf3^Ts#B*Y+NcQfO-Imiz1d;=r=uZ-fi8NqJ_t3jJK(5B-?hHMkV z1x`SP{HtNcO@>z&w!^d zNzB_3y*T%V>GfK95DRA4v(#|oGt98qw6NGTv)HsFfNx!Di%nAv3r=;|URlUqFZOB& zn|@Dp`a{g!5$3HxK6glb;>N!Rj!(SbajYEFX~-Xrx8**!jK!ep1Y>pMRJ%_MA$;Nz z;Y_-tb38sfPhsPmBs78ZpM@0cDLf8dcG`E7<=j>w3v8wcr_6M+rz(;Cs17uw_>Fl^ zu$gMi7c-qUEyYKZ`^Zf#YAEMyJn^YNxu;<;)X6=|*m#e&n2cZErn6!faKXDX zW%n#)9fy0CGQ%VLJG$n1@gSY*vQFt9;x+1#X{mI2*f`Pc_8H$?w>$8F)&l*+>}O@m zz&%9p=V|G5a6cFgW)%%)6|82{>FBoBh*{(KanP<{^kc}AA=6G-$&XQ|2@{iC#%Ul9 zPms{#YvOnq)rX8<8plIy9Ws7J91lbMkntINs^+qW17rQZ#@hu+T`b6>V z7JqXmSbjhfg9rE5MIUpBC}g9;*)3Q*X~p2$3=c(|Qs2_1SEJA8@$%@r8{MSx)qi0o zm1nIKCeSM1@3itnS3jYBvA4@kDpdG0u`gChKc3|LOVfv$Hz23!3=c^?j9 z*jG1mpPhT`ZQNsrt|?qlN86CRh{xr3*NydMch`;0*T^^}Y(69}>nt6YPrCGB*$}@3 zco4sc?S}Y8tT@Ckm*OCPX))i%^Ub%(Syj0P^A$4|mrLQGS+D|!>xt$WSZdBtt(-)u z-Yz!AdiBKyTQywe-)}D$22>Ds)h%X7g|p(d;A5pydszmxAh0^e^=pwq3ZqUTh0zMb zTHS*Wg^&PWVZ-%!+;kNSw;Ipw6D_)|-|7)km|n}ZQQbttMC&)2uIf8#C;j+neLFs& zIEXLSu5`OF}-PY ztNHBa7!4J-yRbpbZ7y7OS=3OE`8M_9aA%Dcq0YrO?W$JuTn{KLF1DCKkE!sOVfW3T zT0pun_qo213(|^vh(h?{F|M)V&p8zDvzW+Z#=V4Te4!cZcO7EdFzhiEfQToCEKj9? zhu*TsR9nmq7E|Lfy&h9*G3za6smFAA%rc9)#$r}@OsB`xnJ?KzEzo35O6&3`E5c+_ zD%s^!Rw1+vcY7?XM^ICNrjM&uyWDHo!#e#z0#|n;>9_^Q`ndNgwY_Xd%%sPNMUQXV zeesTLQ1=T;+#j-B8Bb@UlL+@TZcHKV$FA;_2na)?FcPI)6L=*O$Iyjgv1}5Ng5c#s z%+N(>hA6Sb(;sC?x!N^P8Z?obnIuReuQA8&$?{HtdF)jgW>+UZFf_m^m=QP-vYP5{C_Tz(ofX znzJ3HPdngZg`rjlTp1AIgiB(p6PlnnG$@oW4veb~IO|ru8WC+Y4UEowh$bW5 z3ilb3ATD>G5GX93Xt|6~Lul?XM)wtux0rS>q1s|3VqC0X6ERkJ7&4y69#L2iHBIxy z=7Nl8kA+FbGwET-cQF-GY29|vtv2JO=xpkc`R&DU*#2Z$IgPa@+{ zQDqsA)sV<|RB>6xW9>;~JZffH#$&BdWIXCrS;k|1O=LU*L70db4KjW;mTPww6N?xP znq?8AK|M@Fj5Z>Pj7MYObZebJYIJKebZcuf^lK9c2wt{lFl1AQT^sOl8Thy~6Sjhv z84<1qA0u2>SxG|D1}jN~YoCymV-Y+1!N;Nl_x~9kTx|buW&ekATiwk5kIkMAZ1-G{ zVgIiS?Sa!mmX`PdqmW(}7Ec9F3RzlZ#}QDV7TmJ18p4FcgjKVdD9lRuZ<@48fjZ0~ z-boq8VIR=E0$0rWzhu(J&R2hegO%1##(*g&T?{{1b$OVkoR(a$rCKB9*Saqss!%x!!$p}BKH6{hu8kKZ!NQ=@RZJ*}~>(8KfuH8IZPg<=T%wrkMdW{PCBPFbAgr6Cktz1pLIstRdc1@~-r=A^hoSwfquxZCxF7}&T zSVt@QN3Yg`;zz!ldy|xYM)LT++4%lL#SaqbN4860;}$hq+YyE!+$3gnSY zgJkBBI^XDhk`%K|m!*b$N=o*Dtf$vs<_k6(%eEh`+9z+jSo}f*6 z4rxEtu2Gnk_hyy%iMYHQtvv8@zWsf(FFM1!iG8%E7lN>d=61P|L4t;UER1R(sD*DS zMaXg{ukvts1e;}sk#}Ii#)w1cB-v$Ie1iC1()C3rdqx6?ERe_^jp@KfS-NW_7g$ze z4Q(Z}kyl_VSB9#i2k^Dd@-Jk6j#{XpjT#y!X^jR@DH$C-FrZyWMlu^}vH4aLz2Wb) zbjXZPedX3yvCl+*b*7Rl1oLydXu)K}Jzm*jl2N%i{|UZx&z~7Pf7&xw><>D)0;U3~z0uZ6hiqPHLijkU3gt%SttLw=ItlohCi z!cZ3u^j;4R>Y6%Ap|06yaU1&O%iC>BC_NpSID3s*l1<}Eg6f?dKPI`=5h#C;S>Z7e z4j0$?^*fg2S?Vz}a>8P*`zmZXD%QBK(tXwLtB!qIrwT<2F4izKE6`zVRL!9in<_J#EWXCa#&`TqXUrF5TvQI@qEZ{})ta8Uw}vAo+}=)rFFGFJi?j#$ zPVaBfZVM|$=K>fr+K2&u1_$74?}7)i!hCk_z%YV5T=ekKt;JU`5TG(>F|1I5*cX`dNda^*KBkdwq*nOMQd;tw9g*Hyo|D5KmT@h!=rn|> z7luqzPkT>v-~6DcAN9P0VvY3ox<^?3_rbr1~n=2M`G+#BS+u1Y>bNY%|_Yad>S z3D3^kWtFq-=+bG?$3OizOOY)`&4yMirg_A~G^oKEl(7cs_ZDl=h+Ej;J-zDEsd-b7 z4su^EH%bgB8uh}`OY;^wr%~^x38f>W#fPY|#%rvz8dq42`YqRpW|4tF34+|`RNM0e z0)?MER&~{=4i3_UMjZ|&^U8dM=SP>$${VYl8R2NP(#rg>W=pFuOjlJU& zRyQNijgqic}+gz9{dTLrYg*6OUWI`vzwvooplhEFDSDs7Ov zQgs@%ltj>K!YswqyZAx7fS@^5FQaNU49z$=Cd)Ltiaz7IZK~NFG+<*h6E2FS+n`xn z@F`pvXvV{aqFK(u)o#9vJA>TEsfn#JfW5?*JrNh*_f7YN_AIekSdDcn)6gYuUPSZ< zo2lm>}jN4Tou&@TgT0P99fpBL`8W_s5YilhJA#gsf=0IGT30D9dN2_kN0{v)yqaOn6 zrvX+Y*5N?e@(25L4p@DiOu!nOBxY4DTmV2%R883~U{kARLQTaSQ<|-N*9#2zJf)rA|GX8Z78}l1l3@7b?2Ro|?AHAQjzS#*kEZ%KZ82tUM*Z2g* zo}`<0$r!Q~;EQJnI>(l4sg-B%uL1{6mvBJW_zFI0kV@cj1ntrn_RuTI)eX2tmN zZOkGXfJ6(p)h_1WGUU~FiRoh4=NJF*)`5YDMK-A-QUlqhroskwBW!Ahi)rl)n_7S? zqchZJ1-G}u#+%?18*4t83C^lv$R7EPE~pfUXUW|koNH}1UNn6b+9Z9QvWY`%u$klzJE!#;1|-S=|Y>6=WH%J!wTrcbgvkI6onyJ;0m@i;K0re$i>Yx`SfLoL zAVuSpQI-W%hC^bHVSkZdWd0BaRx?KOe1Mu6pw?ySs?GbPAb|B}kh+PHX<%eFShL`t zLFieVm{z~Q2f@Wu$3X&U{!}r4AI7R60Hh*eTaM{!chiWtx1KyWtCO) zQ{ltW7>|gSE-L+fv}>82EaIJHcZM^637BI_ zUu?enER5B|Z|NGFPpmmCliAQZ9nH(ugdr>I$AR$g!$I&TwFLx!J?7iE&U~8!9E$6- zz@j)SdJY+fy~?7TUK@B19lE8?* z1+#9`V-|XG7o+NZ)Gc^*+Ua;fK~z1~7c7jqYtQr$#!4HT>$X#YU`Z%vSGyg?=QyOd zPqJOnv(A9t+&sSjcD)xG+{5I!Gj;Oq^;O+FQkBz~jJId*4cCr;t*Mood?v`fik`3q z$+;CosyO-fs?QHEPToH`th9L4IJt@{Jx4rczUCaQHCS_Z zMVsEQW*c3|-bgjha4geNt4Jr}w(97-9VvpG-hXtWO>qgutx#4}6$=3soqH}va=U_B zwYgiZ=QLkmwPE<=-SyC->Dn>9@(RU$Y_u4#Yk{14qgAerqO47vOHrIb*)rCcbG2ixBnC6=ypv^ZS zCgKMb8V-%);XF5H&ITKXaDy<0`F4{98h;#1@jm-DIo_G-4VZt8C9zq7@gzKqSSwCA z@Bw}cIsKOBnt=`$W#e5T3bjP9m3WnyJL(b-#U>VOh8#(4% zjO{CAZaiN3+G}juM4y2n#zQjPAu)edYWK-l{Y2r7HGLMJ)umZ{-fnRTJ{t(i z`-gxui_Zd7jL#ERgzX>qTd3i)_fhz4vo0-s78Jlz@Y&{@;d7UV37;KuhR=d!jL(sO z&d29I1;X2PeBN>1A@O+yiQGhZ8K1AY)$n;KF=c!{2~QcH6~oZX#pl5@Vtjr9_^dLC zw*tWDsgNl_aMGUWdly4OSy5N{fW4ezHtDF2M#bD@O^`WTUi9Nv`c|PNzJj}nlr<02 z@J?QCq3AUaA6z!JL{+Gsqwk4}Pyj4N(sEmt-={9(xTJ{2xCjMsSC`E2JLUK*85|P% zW>uIWUdsqhRDU|Bh9mfz!;U|Qo~$|YkD@29hg9|TpvP!e(Ua>eOzT0wm#qg^dnD_D zNL=6FL~r~4Ci1+H)p}r*zU^-!Yn^dT^=*4vCOwJrJ?Z zdSJvhOiBwZ9%q5MN*pY>@yq@;BVqr*UVh=B>N_Tgi;AEV2Fq?G4!eEp9#DQ{6hgYf zkjjj01z|=V59@)bG3ZG(o%LWDKIlnxiMFq>xDDzm^kf}AoyYL8zhxAc9}tjO4;n1x zkN^e$wh133Wq=Q+ZnMR0T4!0rL&~4kxg4 z3Q%-n!Hy{5fL6-H3{!m3-yEz{5>v2vS{SJur!(?a4oy>`+%2*y^4+SCW?S_IZ%mnv zznc|$9Ci6S(6sy>T9&t?Ww}$AbHdfzQ(Scm+inZtk-)N_Bg1N} z?WX?Ad{=3sB*d^1aSkKIiDAXDrv7E=4S5R=ZcXJ zA6;4z9odnvC~aF#691HOIO7!Xyt z5ZT()kR*P0y?DJj`Xf1@SO6s1ROq0u$}NQLlf%99Jr zBBW;iN~tI6pgmQahsJ0OGfY9@&18oObA2i*_X~CSm+J7Im)UkVWPsRgi&HfCQYtM9K-~OAK*2{ijukE3eLt_aBj`vy z0)dmKDS9MbX{WI;*Gs(be_o~qBtX3s zrPFnVH2kz|54^N4zs%6-FV(S#Yu$y%)PjR09$%q1YS~WZHwl>;M=kJNbfDZ=MFc}> zc!<%qfT1*tS*FA=>^(-C35L=vrj~E^mliy5FKR62e2b~}JWZabQZWPPC}uz_0_O~U zr|%APtL$SOhCUx$q6%_n+Q;{T+!^+9dyq@p$Ic*^vX8MK_a;6H>Fr_eRQni)?{6Qs zA&0gP*1Fy` zboxhPRyQ#57vQ@t6fCoS$R&E2rOZw&AGZa5<*2)z2_W5f9L(#PClQzV?A)l?i76k= z&LDRbZ79#q3Owc6`52&f@f;wWHn_fA& zm#=ts_ULoY>~z1+&VhBxF`#^Irx445_T3A5@W!}($FtLl)a+CPY_|C96gX^ls)ZIF z&rSoH%}#Z~Vun?0PN22fsa{&RX6LH#qFT6#id&;;$wDe{u%&!AT;mf{081w3<(im} z@x~_;^O6|-FRG8hU z;Utq%7`neWoVWDby@FqmYndF*891!w`n7o4r^Jxk%9{6b@>VGAQx$oyFK?A|5U{2c z;)ZcuG$yly)lk{1Z-?4;Dmx36jY4ag%7%=xCUC9<+NF!976R#L#S3iBa$+(1o7Wi( zH5?fzp{{Lq&@Z;*H)`ald8yyysTCWmh#|k(fqqy$&$Ff~mANYS7J5+nG>f8Yb;FW{ zRvy`|P8I5o<5E@)m$F{SrK}g_n_isCw;rD=AXO|hFB#2Mkn?`*@93z?Cxaly2ZOK# zC)n`k=GpLP=5)W@95V_B_>JLU4-|(3cI@x2CZ0j4lvA{#LAzF(WW0Kvigz#l_zxN}K?%yYDs**f&cCIb2X0M6T=cx~RG-F3}Q8Utp z=f}mWnCKl|>}yJIh4-p0@m!LO+Cu}rCC;dw#rO&1VzWSS>fAb{gA_d*lF9~CB`mZ` z=A`lZqV;Ex_d3E=h=5gB32=HSKP+}xE&j}t1A6K!g8iIr_$BYwTsA86Io8HW@^~8~ zZ=(Vjv?jIjqjR!){kMFBO&9n#5Y55+&K6yAw5wAbSjegChuwFp2-g(Mo2M|KxT?+H zXX#ST=v-tX9L)%{C*%EAR?$ou#&xS^Qqnhdbn0mKK!R*gd-v%(&9*9jKqKq{o=ELr zTTOQ|qkUU789(P}?W@qh%{Wj(zOR}p1w0Gwt57y|N&?-f+F7gpX?CO?4^0WK$hlV!7f?wZ?M!raE+-#Z*|?)%xzZI~-bUALGVDr|8i=>e5tdDwTaeXEA>mUvfHBT=8tTLb3os_M1vs%qifUDe=byQ(@--c?iKMUcDd zAW94origt@eIF~(CN+l;-&8jW8f>cDlTB3sOE%R@VhQ^ttPMPoZM*8(lCazOgzuDu z-3BK-TM~8+C^T?0FK4%K)V0A0xde>Nlu9UqJ$6Vauqq*e-L!MK3(8W}?kMCmh~Y?d z)X_eLqEEg@le_^W_6gJ^v@dom0D^Oja!W5rc2%QZdp~6K;_FK1gJ_B`&tK`^zy@ab zW1%#M(-hTBxpL<$8NK=)sta3JjH8ehv zUvjM22ceF`DdubUcNP>OXd2xvd;=1KdA5tFI*86 z-r$9c?n#c%FG~vlD+*UUjkh*@I-&1ZFH!2TTV*ih1ZitXIb#(m#c|yV#a1rsE|}~( zihq=4X6j~sqW3KpPCCa`+dAwCGP+iwpPpIPt#Z)Rske)Y1<$m1`|oN$kL7@4i$ zu{f3$E5qF@U;c2oJKP!WT6x05Vqc~!$Hf9fp@s4on;M*|++Gq-iFX^l@@RoBpHou| zS=NkD*p+aj2teuOTE@ZFls_D0^WIv!Zz5k*1{mL-u!^fE@26?|G9&x{7OF%5S-F5` zx9+V7XVy+G;GD4UCz<7si|bj}`RfJsl@HgG8LGOPlve%*D7J4z-NPxbwtb}FZ13sJfyyDl)CwRJy&V!ckJqo4p!L>ku-xuU|T{yj;JEia~s!74PZ>w{8VclmI*RIbW^?Lnf`} z?$ioJYa8aWq9_OC&UQ6{_(^r=i*E!7H;?lKI_7-{$Sl~E@S>sMC)B{>OE2FFL0_KK z;wOV?mrs3NSlLx6XvPpy`sjmiXI|M6hf2m3@&Q6d%|3-Uy~mnvZ|bmsj;UH`9h@?1 zEF%R>SxXncH|ePH5>Q^1`6BlVE4Y(n^H#Agyn02W>MdWoC9#%JDsgOO!BgW`GQf}B$7*HDqNl|foZ zoLeBt6l2ZzoLV;ZF1nnzOe=CK;KP45w~f`b5$!rftQ|qJrjOG2sOi+x;ff5@EkX8K zjGz3pil;tCxh|zYP+zBooq%gbvdnJ`+CgR*v^A6eA&~-Za}-x z*n)(^!Z;rI^VNmMCS)5HhAyhx<}T3H-1!z($ElPLQyn;u4`v~%15Jvv8|MukhH9Li zxpUQlIuApYNYCLhW##8`x&`}-hA><3rFh3)4%`-;V8fr8XW-@L_)E#b#+S(#ZmPkd zeWJQJnl8p+F&BA+)+{4O`O`Szz#e`JIsGO&O$muJ44U!AsbWk&4@zA55pj(xW=LhS zSn$n;qQ+9eBtDM7>Ibz(7H76z&?A_(xDDzz67U&(oUsfZvAvG`fFK4(sS+H5vnD{o zX40vdGr4+#9zl)8Z4$KUrOw(caxM5+Q*;hT(t;8b z+X+KHpT-(4`TB@MK!y*oqeuYU?yHD_NvVuwlVG^(db- z>)q7R_PWwZX2A0n)#> zE!F5ePubl=AH;ouB{evwM<%@Q{8d@AYqYL&7n)s!sg4dU?L6~9K< zEQ;G8q+s!+e+4G15_|EaHJZB?lYMC@A&2Q(T8AovB#tY$d(_?X?QI=XR{ zu&1ch@dFk-I$>Fj(aWs?JS1KsC*QqPPGGvZEDRsO$J)s+$ ziS1O$_X0#P-MA2M52cMQEr5Hg{Tc-C6I!aYMK--sb=wN*Q8$i zc*Ujf1VQD=>q^k|+&4i^u2+zdlS>lU*ts(NMSTdI#_Gd2SB3*O(Ct;>J$|2(rL`A- zcstA_eXK(4Spp8Ke#$jRA(lWDh%S>%i zn;O+7uEMZ?ARNqgrMM9nw`pZ~czyV>N*YxSDU4IYsEyOX<=Ldz_`nt_zmx&PWj?zybG11X>Hx4_xpWf*4o!8^$V+t6U4y3#im@L4U64F z?PQJa5?d`yM{si^x>`q9qkjR2XoT6YI*SK8GUoGJ@xFVoF|`ng_^ee9T4JkW3kIME zxY5|DH4S*jI%xhplbe485x^W$6*{_v7>okBvy+rC0fNDtLN+{WS(f+OSB4+Ow!(+7t?)K%E1U%`9mW6|{k&$o zM)TeE?_K>Jf^0lbNe_N#VQFEh7F;-<(V4x4a4BV0OV=!3bwAV6Yn#?iP9gxem>d+qK^2^@Nlc)STrAzKZ zdU6yMR1};TbK-&zHGCZ3(+uAV(j7E>Oo*yEV7P2y>4?%1Q!^|#%!)!f8qICzTSLaP zuY9pc^E+z0p$#On8W{QZNJHf@ME^VEf&|K93eYeQ`3AcuNTEdlC;E%C1yj3A&&_?0 zh|C!h@#gQdu=k2aOXZFEl?rTIM(B2h%8t#A4rzg8UTVb!xaKMPdTLIrn@_ch;`S(x zndiaeglH^{EktY!5ih)gQj$i9w-@(UuK;==% zpq#)IP$70tWJsuMDGta`YmO*{*Qz{!yHWYd4W^r$H#B;I1E7ONMFkOWI= z%&}Vs{w5NAw3_l(FZYIM#4niyG^9c8K?Mm1))c=0vCbTm8OLH|*8xZJqZrnHbGnzA zGq3`O>8D%>>#YpPUh@rTPOc2!%ba}g(rkDxbMhn1$#a>LXD}y^eX==eefscUXv$&O zfG+JHORicDG*fJ7&xTgz?gI^{exjedK{-ksr)qGDUtlq5j+w?Qzd5~^Fot3V2hIZk zjA1d!C$P8=2eMy)L8XJ^RWp*jK&-X}g>xQxEgwvut)zZlV`P8I~RrWZ*my z;HJm?D&Op*6XzsJhvTFQaKe8|D%Me79Ik~vO!rM?XOh$Xti9X#ftwm|485&r(Vhn} z_PPA~FqhVhc;M(t5eFU9tHRL?tWvh}Xywr|1IhwgCk9HzXoWc45XRFGY%^@RGto;t zfQ;$MOo-K+L)qiO{!jJjnGz;cV9Hp|V2+ZgYzCuCUl(1Xcc~FImd!4euMmiSiB#%RW5Tvc1AXg* zhLl)S!m?4AS$J^k%kXQZJ`P4m2Hp)i8#9+}b~GKSH`p_pmJ6hyN8s1W_z`gHU)x?; z0iQFt-K_eG(OZ?fjf7L9%B9jSw&^YlESFRl&R!@ZR6jE5o>UdmeNi@!r~QiiI6wqe z{e?>w%PRqm6>|p3M$;3|qA=ZCx=5`oWKb=s z+(KMMm|Y*;`kF^!d8~h+>MwR)SoPYms!#J8$mdG0%cma?(w{56%KNq0`j!2xUJ2nr zi_hvM7(dfK4sgC!+RYO*I@-N}C2#6-Tg%hE3BL;s8yP#oVk#P zPz=9#4F$cLbxK-2-`G=3-+KDWSD(4q7gsXc_;&r?rdIl~IXQ(-nZlXXh06?rrvaFG zWm>%351Wa0(QvNanQ5xit4B|_SzuURZb*`T?Uj{=&}~Nzg3lFUdT;4Pg952gyXu>X zB`K^)w>`h~V!biN^nuntUP-KD(a#?6=1wc~f5bB&DL=fdGPCx|YOCW?#6Qfv4ddu>`#ZRsV9+)Saha;xTEbk5vaM>LT_+;YE?3Fz>;vO4;`LrVUq zcyE5{BHo)HnLOMk^}NUC=Zu%n-+k-YRiqiD_^84o4s&s-T0V4XhT^#Fl5K0kJ*@+`Ll67A^*3} zI!VW?qhbKnt^N*=c_rI;n7*U!gwks%gFpr);<&+}#?yOR7SX(-x1?IU~# z7z!t%W3==e^|yb)EDFZ`ujTBELRjYgcbb;ir?yp&D`dkq4?(Ts+Tm0!p~&~z9NWJX z7tRY|ZhfpodyKtO7htuzZ;QqjvH{J@7Q?3+Xb45Z zw!Jp!-T%a(_ul1$o{1sxjNXHL_kU@OlK0>kxkJ7Ox9FD-KIwZ-8b1cc+V(=VZDHKD z8?5+e_#WKW-yYPq1K)!?@qTUWpuX)y+QhFq+&6I_P{D7meY_ei6WaJq0UQ#inE~+k zDnyC%3PpuG(+WSqc*i&*eQ<`|>365soi2Ae-D$;vfx<83SGzoBlNll}kjJd2L4)<+ zfmNg;pz-?5=awBXdm>+cK$XF89UyfoHXT**S^0K(R@JiI z5@xO8O%mN9w=3mXbby!MZngSV54Q#Zg{w0$Y`7*ID9{ERzaXsBjXbd(3h%q$2P|0M z-EZpc)kwY!S0n97RXT_j$Wk+`B0|Q^H&rjs3g53dRKw6bAZ|%g?iy114 z-$CvIb*c?M7%J*s%$Ky~kz#mQU)cSa2=K;!!kqfn!v`@v&P63y%0`omBJuZm?HO>> zM&uyWtYQ#EI{B_M36E;`*%}>Nd=GlvXT^l^dzeL|_d|P>JF$@*t8WIKq(@{zQD#8O zxTBb$Y%N&pv37(}o@OlXq=HsdyfOR2n=#l*MoF!G8J2gJ>V+ySz0_bVxf+mK)51(8 z_K;|6NRUsZHQP0}4q(UmdIvL3Z59I*p4E=Jh6P*y976RLMyevbGt91wE*LXjJVZ98 zK8^9H-HI)*xag6NlO)3px3Opk(c(u)C<2B137PO(iPdg7i?UFBYgnbjt#y{zV-XoLUgnYB7*Ul?At z^uhyESovoz^ZY9gjP>)t=$Uo8Qdk#UmZ=M-=Ql9kpFohZz1XvBq3)MLtoVB+wPw~e zbp@NkH&KHZm2&TQ#p}ONV}0NOO65^eLsF5quSqiXx~k1P!jZKK|S?gSc%ZVfqXenS=>I1*lNTwWbHCy`X&7iK5I#=Aj|F`6)@R`NzE2bw}7;d={h z_pwf}OTod}E7l7~FhoF;i$b`!@;3LcDFZ5TTSGlk2l3vXRWwGo@-{X9Q5iLJtkO!$jb zcsQHnFbt?3gpT14(;;sx>Y zcILuYjqRrq{|o%5qipC8&42p5cO>CIy{uCGqESzi|8#;KHlBk2^fxd5zrug2{+UKr zoPpURtl{@8|LI~Tak3Q59dG6%9G?GO{?q#=y}8ej|8#o1WW@ZZ43i z>?x++6Z4;JvO+!G#w6`$g7yKOUVA!v&Qr-|8Yk8-eyeTVP_F%%_kU<%X2I_=;hnSk zzIQ?ajIJDHor?8+cV=JCE*}ophr`(uP*9b8l7iT`D+chS(<2{xia zBMXu!eI7y#&!`U1U5uD2BQX_VJAl~=#>MMx13ZAR@ebh2;+4EiC)%HTe8rA&DvS=Z zxt|_aHI4UCht_8@?PWFAx=aNTqJcu=UgGF0uhGW!zlHjrMf4!`H_XF!um2GI#JT*F zAAT58VEc$~fFJltJg20|vwkG={&79(V469Vzay-!YQqi>+>h<0(K^6e`8#O>$uQED z|Dnut_Ib@sN~roK6f_3Lv(wR@?;prNNj+dYe7yb5ffwt3HQ)zkEd3e{Mg^7tP}wdf zfUnqsrQm|T6`&cjJ?jqkESAlQLfie(D&JFL$iWQ_TdTu{#cb4>aK$W0iO@nDURE8x zV{!OaB6;|ah4dhRTKnM7T{LV`or73(ar>(?q%jf7Xms*99Kz!ClEchn*_P8=;%CUO zU9-o}1|5CcWy8kxh4gx{Kogejt3JdC|C~G6nlAbKG)RM5C5&ZzI}j?fZ2Q3SUT4`- zR=Nv72hpIzunU|E#5KHT`t@Sj9s`8>I7O=N1Gu(VwY|I4tieZJSu;h#qRvQfiBNvO zw7wc|1B-_l%jvLjkFZ+=L3*0~eveNt5gES%t&1`QhC$rM&PW`H(zT@^dclt!Nw13e zyxpbWICbOr{-@#hejEDKcb6yP_jXwdpfG)lA;Tf~y%#4*66$Vtyk{Ig_Q}vgdOG^D zabPOB+{;yD?jcuG?o2AI;|;ULW-Pl>70ub{yvOs(gTE^SinILP=(o(R+0AiwJvxxT z`-)aDWSHCi!jP7@=g)}0`>`J$v(ld@!gplDTN7Pgs^Ae@Syb{B*t%Q{_*0zB%m9r*pnJ<3A5L-@L;5sYhG>JLj9W z5BmA0<4!-{{1Q_S8rtH7Mn|aibk8^6xHri$_k8o$I^R@`8h437DxYr@E)YJrV}2Ah zCNm(Jsq^9g)aRQ&o8OQpIp4szc_@;UFg}mO=iwO$fqe(cvw4twALb{C-(={6Y)%Q^~V`bL{_>^ThDo8rvs5Pn-sB%%iYo*Wds3^Te~`=03yo#Lpc!5_$HU zhUU%KIr40q>r1dlqDhg6yAQb;&F(MD!2c+0yWeHUXc(}Xt?fW0`vRj~v(e!wx|%5u zsB1d`923>w<=~%$>|H*5N_wX1^NDIlO#7ceW_T8*Wzi4Xo%a934?GXlTQ-tT;d-hkI zjyTZ={}R^u!TV`((O+GJ5D>|9$GV3Pi61e&ePP(~NXPMoj>n?=kA8Ijg@x=RRX0CO zHtcJ_E>F*()4-9x;ua2X6;bvoS5b76P=>cX(? zx22ax|Lz6-w)EWSf!#4Svu>X}cE#_LD#>hKSBDD1Y6l9=40z?ORvwTAMu9f(~nkdnUAaN!~a!! zN%So%<-b7HGoc1;;dNBKqx6e>`oC1cEy?*g#?RUITwgh-J!b;LXWkw$2-KdJm)mnQ zq}!9U=g{~l=Iq)sXEs5;4&=q@6#Jhxd z0fOAgianB{@z1;k#Cl~98(-wRc`JhNVyXC0`q2e#uPvQIz1^y}_gh|H#_C(n1s}Cv zH`71ze6t($%F;>YswDzfU5^H4GbV4pl>6<{4uq_2l!rW8;&Qm+LZI2gPVmB>Q>sPO zs}!6u1ut~|ii=ixMv2=?|G-uaPI7v*+g`uU6o)P(JQ}>rHis>p6dV2HW;QOa@v9uP zK;^iwpUdHRg5q2Gt=iHp2Tq5~MAdgrE=UErwb+VfJ{BMG)? zQ^YL-g9)f0m+kYt99?saMuDYuA zqnXplb!C0k7lu=nqs~LjN#Vp8P>%+WVd+JCY)_$a zPju@8HbNTSsppYxc5l>IvVOu+V)5Ar0Rj`OttvXd%?XfG--gl z6WaF67{gzc>R2z3!?Qv?R62*_M%9+#>mVuiJsdPXRC<$@xF5?jLH5DYiKYemU}*`- zPVKb7y|D`D-h6uR92L;9(%t#=gUqKdm2SwVA1W{6Nqg(6wv38h7j*2uqSACoA1@t? zt8v#sI7mNEUFB@$PAB=757#Z7i4E|k9k^fIDd1AZ++0a|&RnCa43-iahtH>me3of7 zavkUXeRJwb(jN%V<4~^FeA#n{SMr4LJgM}ztVfN_tVh+G;`PrO=B=6o&WB=fJ~S7c z560kp5a=BU&W8Z!mrFO7VKHa?>*(80!JTm!Z1AH@QpTQ(t`a0czVWA3n;*z%-_9yOcom$G1zyyx6$^wdMUEv&x`7!~i*>H@at%J@)mL0?0F?H#C+0IC^8zbEwVf z4W~6|v{4z>-ZFg=WVt9fkHC%lQ%9#K!ZrknV%HgXCQXnCk<&P#Nw>9~Mn(U58+@P9 zI!XFa>#l2w-R9VBirt3T&BSh9?5>F2WwE<7c57o-n5}ZFV^_p9e*L0dKOzrQHsIEI z0e&&9^+Cn{vui9;_#Yhfeh zwneNhsL9Xhu3R>(UsjK0%a!3JwKmF32l(34tBQ-Zt=1OU*10O&kqW<02EIn3E4ZgX zIg{LmPEX{e&;ujXG``NN3r=5Ae`^JOONIAxG3W|btmvALJi33YjLu>6&z83x1&?^{ zF@`_LN5@P%{tiYZj|4(E3r98+zNH~JcU5>sCR2Dz1HKxT;ZZL2tI%uTWrsZy)i?3< zl7f~{kKYvKm=jmgzu2l6MxbF;+y-Mej}QqVN?b)taPIlx8O@$Cs`K>y2$(GW4e*ci zNQPkv$LXsB6Q}Grqm?TwYD$^CoJ>lM$06=3R6lfPt4YJz2A<_Bfktsh9ifYaHCkI* z-${Gto!-jh+e;FZ^BIpWP&mLe{MA9@Cyb4*y@J7R>x#NurWSCeLx`n&9mq{@5@Xn$WcSl=PmC zYLn;%g-qos**zWaDqUVk@8KeZ-$9ruJ%?oF>n`cewm&Z|1-J5PsvOT}uf_c5YQK*fbi1mWU0aNv zW7JA^F7&_otQh)-u_JdAX?9{tMsMlf^BmFZz%=)A9zwjvFH+# zP6_F!bPo_vjN7nGM@z$p_uCC*sRA4w0Q+P>%k)VzSj!N!4VIGEw`*)r7CEAhMprE| zP;rBmH-|Jsn(YeBaAs|L)9eEQAoA-iUm?SqkfDrBL%v~Ep*3U1Dbdk5@t()o3yEq?NaJxY?J5vs*L>TeXS_gQ62vkQ9f6LTiUtSgN%n)ZB=F zTT`akHnXZI#UfOK+8Dt*NzoVmpiyIMLec5;@|~%0r!9<`6SieuxU)XoS&!OYinD%f z(&IxP_P4z_TKegIU^<#E_ix1{Vnx)1 zpG9L~>2;-Rt>3;vY1xb~i>dQ#wlxWQ>i3<|gWO3gJy#`&w2Gdel<*g&)mB0w(?pZl zXyI114Myi0+$FQ7pi|Cj;#G>*m6kuvx#bAFf=E(P5$8%*yvquMB^` za)ebXd^Dp@|0r|hT}19kS3clq*U@LEqw46Cq-}lHHV1AyHEM+KWRQEKnXj`Kx9w5G zj(J?uhud}O3ENWdqm`5S#`_9w6Fy_dqK|&xX6$#~7Vqf`0Exf2K*k<}$LLTD4>~O! zV^t+SS@W!(RDuIBz1JGkdO>zHXxt$i=;=L(Zo}+j`NmNldorcBu~g39;~B2X6#(#* zE(lGXV@o+yqAgG4+rKlh>nt+@H@OXxM}zdgmR2%2u=Iw5^tVf#V@Bm-5aru3?fxk9 zXaE}|i{c)145CjKUCj*Tpp#GU(7E>Hj>kBA{cAq`uUg^7A(;9oKhbVzQE_>oU-sm) zBz<^`7%|ZcmEJGgJwovZ_T+}DoX+8P`EM%Viy=B>PkJFJ+Fn!oOEG4+*>^^{Cw8mv zk$JcJ#C^HB^n>U$YZGffLiqLEKeT>qIY!O;rz_Nr&&3!2E}{pe&ghu94>!<3>_)T*b7HfPgzHi!rNC6sG`oFEStVTnD zc>HUb{1NUn8SWGFCQOn04cA7W(?E>rHq3VO6j#hGmpgw3=Tp!j|K0%Fff9mMZ z1oe$eNk=3aeKHWDnFD-=qf7VOM4PQi&4=?|wOQTk7?1AiU|;4bze3v`(W@9YCRfCf z&cJ{egh>go5bFZ@xnQ7!*+_BmA#qN7;>A@@bGD5|&z%uX!17ey(!ccwW4awydf@^0 zWHUtug+|+oPwq^0{@JjF86)Q!>EaAX0OxT+O6U-~TxnIa^blcsSl37!Ds2I`ffI&qr^jqg7jUYnK>i!h{S27 z)AQ-OkisJBKvsl`)7qb32{jwu8)ol_9{&9!T$sJ%NS5ly3LSg5Kqgg0OBOvUV?(?f ze{>W**I$-kgM>XZd_;0fb*$~^Qnico=t%UlL7(qqP+n7F?x{lt@A7?--uYb`P4BIx zveERU;IxC=$a6Z`8+HBGIw?YcC7|5N^+_kkHSMjF>*-{=bQW`$PEwo^@!81w8qM}~ zU384~b)EOsI#U)vqs~fqqDPhCHyvKEBpr6t z)(5MPPY0`CoDLdaln$~lOb6+jbl7%Web`oAA2za<*egjYm|L>ab7Keg%b732J!F01WlQFj7hbmb0RM6G z{Be0TPgGtU|H7w;fALeqAOA%0;bpb++JmvGVPMIifetmiEnkgZ<@!~zx?k9M6*nNA znPd|Ni)H_hF;1S*<_ar5M{l8cKYzWTb}#2L&KvzYfUpmu#Rt}*t{G%eV@vOi?~}7B zOxi&Oh0c6Y<;q?y@5t+hpB?nWO3;{H%P&LH7~`{zu%CB9;;)ae`wjACIblyw)g;@E zZV8|{h+=GhHC#6{c9ag9mZrl7P&$J_nRX1yw1U13pf08U~gYwoMS_`Rt@gYYW{P7w#k55)TV<)Z1dRtS61CR z^I>4FsBo@>#1a`gOOppYXWMXLNJYUw#uSm4oxUT%5%2hTd{cH65~=UdFfwaJ&lEmV z9WO_^Hj>W@XsmAnjKH~ikR`Bx6((c>PFBDP-?OAL9j2C41Evvu$adXqLZproj=kU-!l1b{X^fy-r_Q%?G&}9-%n9CY5Xd%uA8jcE*KtSX|z2> z@QyFb0G9s^eX+BSR!(S_fE*DiEV`D&tPh0=?)i?O6Vps6W_X`ci%jUya_X`!S7PrkG zoroGar_WU!IshM^TL1P--`aWOROrOiVrDMsfIL>`uh)xVdIwDOXK#Q~yc;%eU5HF2ZBblaFYx0$qJ%o;e2g zi45_s62L}t4jwic?Lq9UaP-pt0_NW_Z+y z4Yv)4eNxU+p*Hc3&X|O9lbZBj8(N0Px8z{ZK@N`y;P`3VE&|05daWvCmU54O8JnHJ zwK6;%(|BiL8t-%{nU6xre5e|em6*oEW{&Hbtl2Jj+a7M~ixVQipQ|8r18PE|N*V#=TFtJrtBsZsgH5rG)%Ko=G04uPoG8V`n-z z3)1WKCH3Lk$_=g$&w}*Az9tQE!Xu_Q;`Z9rkf(t!ssBE{l#T~%!jVE|VZwLBHaG!o zje0oaPdF;-6^w_LKASm?qA`ME41*e@tVw!|hWP&}noj+OCdP|JvR)_haPaFI&;n$) zGd(BYRyqaw4wkiba?Xv4;H4oQY-LHEp}`>Jp~bR;etEcY26M90oISv=j!6oeVBw89 zDx&hq1)g66s&IbOt&B1q9|so=~T1@H6=P&YyH<80b7@uW0qkt;E9J-GbJZ)?;^8m zauG3oLn!eorkcaHp7-dnLeAnzjyiZuzoKZUZ!yp zBl~~i{+_RYcCrQ=wHt-q+M0ZW(lxi_F5iz&LG$VP5&}b3Y`I?eHmF_S?(%(*elW;~ zmEHt+n$89cGFL??GD ziRW0V7r(4%oG%Kp4s3J##L?xNYksy*EPXqBq0qq^5r7oefD~OI(lm&)2d;6l6zC|S z8=rY}b&xMfT}Rq5Z5)0ja_ktxZqCZ^C^i}<{prIiuUARdtoStkX3v@eSi| zeZyKy!5%t&iy`A7?i>E$i?-FwQhQ~5*5*3*KHZxPopqm%heWG+NVKNVTAM0lmi&L* zoezAL)Bpb$#Sl$GeEKkiNmPU)Y;-d|jeRJ8Lr6jxn!kRwp*?B zN1F);Y2X~xz?NhoCe90PJhb1>5s0gI`;?rH)mtLJ=njQ zF%w@Wj>eM457{%>B|Cof7e`=JND;N1T2o#ooj3Bg_HVxOFcW+0?!2cPwa<4+=^yXk z4DT<$jAa`-){a>1y|T$8^;h?o@A><(wccMoadPYZ==>PX%AF?PQ@O$czHG$I-0 zDl5KZkx4N`q3Mz0+%6D{x+2jW6b365A`LA>8MG0+{+5fP)}z>U@N9xgpllp~@fbu? zYco@6%_|0%C%I{JQ!-h8sGwYT9M?dhY>k;6J`hkAQByQaR=3hvz-lWL7C5rAmRPdI z5=3qnEZKHGDb~kKoyRpcPP=%)K3L35FUjo^%j*pF2GgSgfig+#i)&(Sc7|E?B~WPB zKFiP1CqqP2o`LDo2Fx6yGnaGzP{bn}(lZCnedv@d&unDqt(~(fS-Y&h_0iIL#+{yRNFXWR-aX#49gVj zpoh|-h+iO0U*cdsz2CkY#TI6Co~~BrV6_r*=xFIA8tZ&Kl24Z}XW;JMVg^V>u0rmZ^`eYcUV zGWLU%=zC+oY7_nKB#54=G*yqv!~I|O#qXUIeak9MEjg*z+XH&Nd(t*Pgq5b^#VBHa zM)Dx(t)X_Yo(95AlHWafqIu^&uPvC4ZBcHQq_N7%dAzhm6F(We(#En=56o$_PHUs_ zal9BbTUuXi6E^`Sd@nE;%N1)QQ)I9xVir)$M9;%WD6SEj3Z2Vg&}f8*$T#3Vl07*3 zJ^omn-B)}``a3^n-l!$9&qmN4kxmd0W_b2EZOo4`F4l?S-y%~;eha25XXZsD0 zh8oU`T0Pp1UWWWm@-k#7J_|V-WXEMOP1}}Ex^P8#?$NQW4vF=A5W6;&+Cbhg2Q|IP z^RoKFXy4@dk@RI&B`-e2W_%V-(U}8zoRfMEhbLa z5Z=saR@`RYWYmh62wVs4FQ$0Sfv@ldBcH@rmP*4_W8!)(7H`XD^kTh=mTP*}-Zrng zeh0NqnK#iv`=A8!sMuZ-w1n-Tty==yh0Zp8?(sS(6QhI5);Z~;*2hcSe!xV2=rdXeHP+$1~45t<&4d2VW7P$ z2uWi|MuO7-@wf$)N|cXjVDP4k_38Cf0yi(kJd5`$;-nx>G6gF8)^}Gn-nbIpp?^JJ z^t4@@pOzhO_i=aGrbxTGc>gj7I9tUZ^8QU{2jg>Pt?ec|;%{b*za>GV6u>&hXjN=l zvN6|GvDk5ISJ#^6mFbuFp0FR9-ux@wn~-;A&&9rj$D^BC+<+|2GoENnQ@Ne``oVw!HG> zp?(!e{NJ!2D08Zfuit)a?}e`4UTtf%+3UAEZqEAcy2bxj)^F=4@t#s}6?9v+@7m)ZFXg>wzs$&<5`3?ELZv8#Z_27{Gw4b*U z`Kt_l|2y*6v8!@XevCh&|10~P0)gw-`$2s1__bDik#h&TOeLF01g_6wWD$WY{arMm zX7yH+8hLR`R8FONK*kRFFDIWdzs7Bso?(TS1v3N7Xu=`vjN2>GsPMZHrN_>$&O8?lX{E_b;>Z;=w zLx@t3#)RBr5bg+X5&Io-c(Eo0(st9k8Gwque2*VUC%t*=^7^5oBFrpdC3?Pho%o3mFJa?-h6r9ZY?Y-LX*Zn8Q84;#6- z$vAQ411C;!agsS{t$arzJ8VT2U{?x;#Y!0~Hq$O5h_wZ%;PP_?YYEH_u2|2KzaAWd z6WlxV3vGZ^RfAv~eGH0e(er8`@2-T9y8=qR<>;Gb5DE^94w{6nSWHn|oa^;=VbUrB zm`NxLw041WiibgUcT)e@l~d3S%b?v`j`0Pmz*MM%X=e0jSWK?RwNrTQ=()KAqW{Xy zj^2{lzxeb%+0pBI_Afp@BRhI}djIGZorm?0UW}gouhjn0qc9;&MUvv84KkCZawMB{ zQ|fEl-*a{R!~=wf)DDH%NR*4>;o-{7#J_C37;>u*;M?T{JQk=$Lv0)RtjS7^wW;Q> zz8LWqjyxoJDzjLW*{6*pIgm*{$2KOLM7~L)S*cvCmslxDTn0O9vs0sst5Nt3*?m`w z2&nKYm|-Yb02Ork`pQ{|dHZ(By-FerFlJ9p)>KMlYBKc2R#mGIK4?Mm6HeS&g&T8C z`)BQCF}uyg^f9-ZcA?C$YD0FMA-JENNG6lu9 zvLT|HYU-@)?0jr$!e)q9>^_0n@?o)SN#qq)wKyxoz9Gz3pZ|)7xWjh-_|j9_8-@G{ zjf4s6{#xK_X{=exeuL(Gvu!B|Ph|sTq(0fzk0!Ta?){9`DE9#4V4NalOvfQ==<1fG^|g=vA4V*+#{wZgeI# zMnR6tBlKir`O9TngW2M6@70VQDMf_{EXmG*{Q~-QOX)Bxe}lPm$vUoxcS)YWH2gF& zZyd%n9g4oiA5EQbkG!No&z*Q5o2Ev=!$J*Xn1%*v|;$3}@UNJmTJZaXgbX*~Uaa zu@4^_lf=7qO=TP)ZO@YKAp=7WL=mW;b$`NnT2R54g9`Ss6-)d_|$A)ZKvSh>7CXQ4xF_v8KE5 z#`5VfwTH-~)4AzW{DnF)7}aL&n|^9lZ5c?ezelQVpNep;F&ah}ReJX|1L^T#zxE;T ztGG(Co|L58-BBQ`msKJzZ&7W&XPs)>7jFhIs?7wbHZwK*;rh-EPD7wqZN9rv?JhXM zt0@!3MS}-LNJm;*ZK&y{nEGB`wLh@cW-zMF+PAK@SyRWS&TOQ{`ORA2&Pd4mzAN=j zWdX$Ik<^#cMQZ}7q|{0p<;CmNmq}tX`3gsUJ#i#6HHVkBs;|La@#;$f8S1+Rr)X(2 z?^fK3L*dL7X}ODh`CLj>Oe2T8k9ven>PIhI^9MR2qoAbp@lkr!Hh@Fdzw&T@z;K0E6c+){7St7JnmXu^rD5|q1 zuHh*fPhpyE%vLM>N00>NWO17!ZaM9{dGRdtMG@TFr%;?LqYcV!jxA7evTZ<3U$dfz zv_Z#Y1Qli&@|KHE4mE(CwA^_&GoFNO-1Ou{5h&eVmwEq-Xv;pLmYC;}k8;z!80j!DzoaR#u)Ps9C3& zDF=m~BZi@-tZ>toZvQkF%#i1(GqV)YH6AQ_RZNYi>X_sSB}JsQMfB6$i1#vg)-I+s2ACS3nZi2MikKW3 zLUY=4=RC8LIkoQvJAsm?-D63J>abQ#d!RbC;!cj4A`gnWC68M1HwTF9tiQQvQ3bP; zM&foOb6t0@lbw#+&oJaFS44M^d7RnnN5WD%#Ey!4I=Jb^Z`@EKG<%JNRPv8_TuxYb z_OF8ZXNuWguYxa#B8K5AQjikA(`Czd2(l|fuvz+|+>#2(x*SI&!%-*bMN<(8w;&2kU3JC#qZ`?!k+T9$-micw-veh=IwoON62ZyjJ$SpO1xc9^8c39QnJ= z+U&8*QuNNO{W!bV8y!k(PJ+FNc`e5d=ta{NaGWJ>e&$R<26q4NyLKov9Y=W+Kn7u4 zLaD9WwxTKciTgl;>KF6UF?)(in>01D3+QN}?Ex2F>yDKn6m3(;L~ulhley^y>^Oe8 zIr=@;$Aq_8j2baWivPygFWbPV``S;kd%cMgqx{QGLQMzsdJTWgkEGU9&jESmAwhoU z?S=T(p1U6j=#mL4&z}s460LTt3!h74Ci$*t>wv9PWt60s>9g{sxw4l zm!5@_SsaHwj2c*kkCh6R+Au_FQwIwkSU~yH+TCaN?F1vcJ}gz2 zYj3PB4)^3m>HecovnIi-BB*q(tuzTrnIV_6C))%~EgS2R@pMEqC37(z z*!#u5v)jPI+@wX;n_OvU5WNj)tZ;j&aDJp|EdToUMpm}AsHYYM#xN2UqQj8&R}$e1DF2#F9ALL%g)mylHc5s%9W%gxBej(_Pa%60oo z|L78P+%TU3WDdQDev%RquFG_VY?aOJm( zo!Pw{WvWWVu~VBGNfakQ=U^fv;Yq*ai^>s%H;BY5k`rE8HlCbpb({F@5xSbGo{eN8 zqtKUL_wVEyQ{+;mlbCH$v1A*U6DAuh^8vAfa|&&He5OzSw&0vrHO%IZ+--FxFvNTUw)nD@0slC>CiBN z=!sxvM%13M26Fe*7oHgDm4M7ELDMbx?b!oK_exT{~RkR7sph{qy9fIRhC~$$j9F3V$xx6}gY>klY*9X@Qi6H|)Fx9cD!; zLvz1<5XVkA7#k1bCCMvGib!cb@{?HpN~{xgn3eNMw$;oxJK)LmH1SI*@jw~!a4He4 zBo#vsnhGHm>_B0M7=+1XkS!N;(WIabx}WgFY^R8F>AO2@=QY3)TALMBYyf;b*R{0d-MkX@t+1-O^-#-gMC(I86PwyuiR(5B+&ThLVESBiLd>L7E|ZqRv4@q&N$kly1U)g@3orif)4-T#E94 zN;!v|w?NmAXnUY7C-|qPRd&VmM?ovv>Gi$(oM+)LkDUnKw1&CwUB z8sAD^gdg*0KRhp#X#WrNMaIfJOsa4)f9k?>NU|H;4|&=FVSPGD(a5ZnGe&*E}3enb33ix6<1M&FSgX1!~DM;2hMb4QuNEL=pN`XC=7(Hi~C1mv7v$Hcxv%t&&GOA z>;&u2vNj7Uhmgj~ENk~XI~Gw#yx3}@499K)&xV6{|MS>?r6A{`zvFq>0v7$c1iQ>Q zoS;Kvn8zZfSoy*@QvqW-DHsC1XLJLeQSUpa)~k)V61m~#A?s_>;2(!?qXc^=s?2We z?I)tc843H?-fPuIxkKu;`St|bZ;n37<>miZ^ieXe;+_3NeUyJfKC4|-I;@Tt93TG6 z`Y3l^X^ZPRbx@Y z!0zqYVjq*M|6KXE_GcT|fKUM8P-pBS9YXPZ$auoN6J=^f23r&`e533bwq?xr2VeY< z`{CQyu|}F9bm3bT^M>Jal2@Y|zzyv$4SU!egh5^=O_K6|=wwr-al&j5t^x%h$s+<-kFW0Rp!4T5OAq4Nn206z$MUZ)4(<1X5)=buYx(V z5mtk+Iw+cdh8ZiOU|`}#{%N9Z&V4sCWgd!;Zsf`dJy*uyh7&vBFw3wrVlHgnfNpqZ zYP199?{eG1R)T^%?md6GcK*Q9pz~JR(U%Unsb^*Wdm`f2!)!b^o9JPrkeb7A`N!u^J=W zUd|3!$){RWs1~EU$P0=pRONW+%B%_%=0w~fwGsc5?Qi{a|C1Lc;q7Q6{wHN?)eN+5 zC0ZFO7+9l=<{Qi=@XUi?e>v|&BX$Ae6+0x13e&-JfzOCo7q+nf|#=Q(u6q;3E-MWFs-O>SUE z873@vgfW-KQ!E}j2H{Z}#2KB=?l=X-9?g|z0-s#mC)mKn{DqH;Ehsb=@=#C>(kE#U zo}}YYkK$L^{_uMUpCajqES_@n4QB1=sMgprHa*ga1HLZ}Me4SRfA@Ys`kot4 zFDcKKN^zcZYg+7-w)k{v!Kc%DY`u!YSa5VcjH|=xo_W#E^P6E}Z3C7jU}Br<@i`6h zQBriVH_kNUBgcM}SiK?ddCBABjjR2C){lR~wzYnb^zc4iHrKw{cAN7(^1%cDSH4Fo zF62%9!|xG(4>~gv9Us}b|I6PaZM@?C&F_)ZDBujfM;_z7*2mKM9^tcV7J9K|*UO)O zkJ#sz?<*<=Q9pi_*$Y>Q!iOUsX8e!G_;;IcHgA6S{(G3;&1>9JO6wRW@zUe@$NNoQ z_L%szsQ*jRsSDpP`exolcqY;t%#<3Vuq`jnG<}04C;yDsOVRQ6^>WYMjsmdgeQUMeA8p3uOH7jOJ*zm_=U6$&n}6LI@FJ^ zF;v!p+jrap%mv^;kh$X{z-+;J+JfZErs;g!jTd_Jw0U8jc-H?vGhZ9yU1rnswILFN zU7(69H`yDp-*L1?3D4KWUZ>2>qIJ&0ruP@~FW&#(DZgtt-XG$?v_K}h*zz5LMR>eI zR>GpTZLT%uC7DyPAIfBJQ(ZFXFLu6!{dA%E(v8<{=6va}wdgdtS+>)(oM&&)-;WVuL;kYa2x&qw7k)RRrqef=eH-xW6#Ik#BIgr3XB%gT8`Nhy^JFo2bq-{+udis zS47qvt(UH)`G+Q;RB%2_iUIP%^^9ovQZa>cp1J%^5M@4 zf(1yMAz{Eu3Lr)>j#45M!th0#8nk(bp$8UYu+|czk$=dn;o;t!kL9*{U|BvZUmm@x zn5_fJ6s|i3*PRs2q4mIM{|^sL(;_bEuyh%@ZZOY73A8tvc0 z!q%y6QI@crxh{6zQiz#zqC4b3j)0y~PNfb!>6A9VpG9lH%RHZ7Z;LoCzs!|6%N_`s z;XQUX`!WWvGAq~NByaRWRv{2R2koDSLRO$m|AqOUoj-3v{%re-&i6LRJAL!z&%-xo zzW4Q=|5xUFHD}s!_z(6&7NA9(9_>GGco_c6^SvFt;{MI~-lN`km&%`8P3VICkQ{qV zr|_ur=kvWGA`f)s&k#L%^1vF(pjV?QF|=@9k^%{_Zv#^-aEyt$5iOw^$V#B}%{kMc zm577Ehm%Ky<5`D%vU7Iy#I*kKGli8xiYYfHj+XIoqw+yd-q8gQa3JrfynGYyZ@wSl z88`dlH@H_Gg6h=kdn&_m|52x848V{CD)K3YISlyOwbLh;?Zhpo1-}!cZmv=wLZv z^~qbTxN{0RNO2UV_b9VAw4#rPl*fB3-LO=3BTT5}VbvuUi{=Op1d%fS$o#k6AI*RHJi@{oay$qI47LmW8@q6DS0TaB_$avO2!Dk~dzm3Oz3E zaNFZ5F|p-$`rn#AFTu>tpQENre_4}#aXoH%OLm9np&Yh08?%}G6E`w<4$Zg1^XH}{ z$~N*aTedD<+5Xo2xySFz)_U$d^@P@Q=QWpv=gw?D@fYgZb>rU$1m@iQ`Qq3OZRoOn z`|NnTvr&FKK@>6RmI8;mu&uzWUD!_G%`V(ZV37;A7C6a;sRAEx;Wh%FaN)KBUvS}e z0%yChy}()*ZZGgH7w#bNBNuiMXk3^k@CO&}DDXEIb`-b``f8{>cM{mig`EWM>B5}_ zc5~q_0uOWHt^zY%*jeDeT)3OSGhCQ1@WKEVtT(6UVz+_+nZT|t|FQp6i*n?P(DrO) zED$jy9Fm6=bJr%ri#9-c$$P+q_|z`ncz%1WMT%0JLgHiQkYYZ=u(R>_)%*-L^EVmJ z_a{2LNk_C;!FuWt=3^sB@w`pc7xB~aT)c3k=ei!>m{>g+xjn{V&Q(m)t7wq9hhc_P zJ(X7;{vuzNGR!qsUkH-88HXxqmFb9z;jg)xu0a!@kV6d|`^l9zl5y58kZ1e6xAK$7Z}52+hreBZzC@x$G;S_3K~OF{;}jm zjH$*HVnuRButL*$Q;W5SwZ1}lGz z{Bd$APk-g*h{tNk` z$lK=MRe5iqL|<}5fd07he&olJOa5!HV@}#3ll(Yx{KNh+hp!lbII=}m;9$I zFC~B8=aZFRgUcnZ!@=f1O8E`sw~$M{hAJOLUO+DS4^Tddd^$O&_@=k=XUX62<9AVB zPrl6OZI!=6{+`cQZR@qe`{dt|qYf!%x$K9FC-sLF4rBbJVws#tCsgyKA)WHK9+Y^{w6sWfGqE%dC{3i1IeLhfmn?1lwaj^C3r~DrB2g#*gU6nsfzQK>*UU>?Hhl#Cmu<_U6b4L1q z8u`vXU!gpme1D%WRNj;P2%k?^o=G0@`DEp}9D@;veapAS%8NIt>m zy_HWQzt`tol$Vh|>GQVAE68W~d=(dN`Tm+k{<6=PE3YP>PmT_jVrDB}K)%qAKTY`} z@>-uyR9;X1w$Dc@f0z6{pAS~vNdA@2`zv2fzQ*U>mH$M(*5{p+Z@U-x4mfz@zla4< z-wxzE`Fy4F9^`$=<-N94c|Y=_$=k3UW+*>_{3M@GRelQjIC9u+!2Vg~J-dUSkAux; zgz^i?FCmw99;kd6`3Q0uANnc3hMb!aE$^y)B>D9|Z?F6Y@>|H;usmx}JGt+p$v^kw zuTZ{{d=)u*4%P>ie@p%YxwOx8mp5(pArCwc>A4-0WAHS{gYsqi)e4_Hn2Fh%U3Ah9lPxlhvH!QLglBB5A^wThsCU z$B;kZ^HIuYkyrVAsPb3H=a7S>m;uVG$rt$XIn9&uze@h5&$}r9ntV&_mbc|^t9%cj z#1TGUg}W^IoJM|y&ym{l@#GKte717ByG^|9^J&VzCEptR&g^w3D&HF@ag@(TDnEn# zYM&2QUPAu3&-*K%PyT_=yDMKo{;AJ9DPK?C2|I~xdDf#*rM|lWCH~>_mC6q%KgH)u zmFJQV^7#zqdE~`DpQ^ls{0^UwQ~oshe4md{zL5MipAS^NgnaKNl>bcZ2sizd?*o)L zo*XrWJ~?^3-A4!Vo0js>J`n3s!mfhm(Dy#Re=`x<0H61?>y9-!`n!jy6u%)KTnhOh zEO^HXL`V-YVoOx4^mFAkA4&<-NN6y3Ps0TrQ*pjL0p{s5QK;ygw)kX+ezLb2mZw-= z+g=-FtEL$kqL#!Ihhqmn;*2N6L5K7}_c3&5LA&-Oq7u%%Phc;U^ zvJ~28SPg+-IwsbdkBY3gZD(u{L-p{iq(mc-&rU|AlY|>;Ja6AchQ-)A*}jRbXx8+z zf@xATQ?d!I5M7I9Ep~WL{8S6wsl++i<89c3aa#kKQ4Aw zhlikIT=W&nkUY91a+mk>5VKBd!NTONa6(w(qQepqRLCwX%KB z<~9aCZ%1gHs{d+v+xiHK&S_wQ#moV%2w>0Q;mM)g9g9CynVveslnilmoOnHeF}6jS zg+FbO9a29nYLkCq@@8va8h3z(B)GBD``J@}#>D_N7D?oaQz77%-f&=~S?~CAT(d(F z^?#aH;6Te2Zv!=bjz4VVzKHyg?q~Xndk*(c_J!>Wy+*A#dy^~2h2nB`$Rc@?cD*%B zAFn0Dc7?Bsi}6pmSmRX zrH=lYNzpX5(lqI7GYi*lP_G4PC}GoqIG6*El#UEV&pE8Gd1k^oSm$FsOXP?}Ar2m` z*9%(7_e!y~`p@Kh@9(!M`QGE(t9)+~+R79^gqx=Fy)2N#IXKvH6>D**GQJmT$lvw( z4CM{vANzc&@)T4eaX1e4Jw8r(U-A=uK0^7)xl z@#N_EkpC#3Kpyq^nxDOTm5|5C@elGJ<+qdH>GOrk?2 zGPzuLx$;VK&U(D>U*!wQUnj>56Y?MBZ<2pVF8NGU{xSKtJ|C(4d-65plFwk}KasbP z;~(b#%GZ$}g1l}1-IX5+lsJl9;&)PhH2E<;U%%F?Zx;FS;*y@)GhIpZ8WikNkC?cTrwX zelWfTZ9Z+4_X0|sK`!N4MI%KV-^wWWd)1fwEmvMk{yMpQht5`BMtR_mzB~|)`)odw zx_~Eeu=&HBuH|#c=lUE52rN&byl%2DuY-o6AyyYkND|MYn$ zM?Xr@V#y7oT@kzQtbPTjOBm0PU4;N4`CI8}`pNKX~nsM&8lqE0pg{ zz8g6@668P1cPIa+AAh>?uH@awrF|wVKal(&KmI7?J;@LC`B3G@kRR*w0m>ufW66(U zd3q~PfmkDPFb=j}U6c6GmA^_}OD_4ZY4+OTHS!WmG89y{74*Z{DsO>+Ty!=e;h2IuDpW$ZJ$q8Uf3S|MI3DWQOe6YgU`jm@}bHz zA&N>|fP>`&l&35Q-wg-Ldn@lvp5yZ_%7>GW_IX?7Q^_A9mv&o4dp#WgA0~gCT>A5J zf6*Y8-4Em~Pnr=-0+gX{9D3 z_edU48!1Eziq?wd9H*~Lk)tHfuH+4g77a%3bkc}xS`$l#csbQthFNzLmxL*yAvEDR`F9sm|!m%Atxc!qy zz-<_QAC0RPVx#iW_j;KJpCug zOLL7>Yya@TXAG= zvKO>2&08Npgn>W0@{gJFM|E3Y#xxo!sI^$$Af4`r}b_R ze}Bo4Xu)i_l7h7-b0mt6vTc#vY3@m^Z~knvYfov6e(9+F3Uu^5JJ9!S&|hO2BMa~U&@)5lk&EV*l7%!ASx z2GlbE((f|Kbq;=2SZSW@8uGPKz50w^Rfc5IIU{lNt!)!)N6g&%zE`(Qvn7iet&PoO zB=aL0ln<`7cq1NVKEj(EVh&B7Y#k*^>GYZNo(^6v+3j{@m!DHYHzst)I%*9zk{{BgO)I`g16}Ctpj) zFEipR`yQ&I{#^8p=;EraF;bdA9uA4!B>K_H1F@U%eKi}3-6R{FQ_K#Exp^|cYrpg^ zis@PiH!9xB!LKP!b?}Rdw{`FXiZSI2yzHx(c5;7Y}P9sG#mqa0kK_-F@Tr}$V04_2Jz;E3Ym z9el9jh=X@ke4>L>6rb$irq8`L8Q|cz6rbYYR}|+uc$(tV92{3X(81R$KEuHmC_c-< z*^19`a4*G!9lX2Z^BugU;vo)R^_f@siyZup;-L<%Ry@qXPbwbn;7N)vckoS$M>zN* z#rXCMJ+A*!oaf-)im!F>KNXL3@K%bickp+gdX>LX@dUoy8Wi8880Qo-Pw_1dep)dX zDS|QfZpF7L<|?ZhrFgXBx0v@OipMC%ImMi!c$|ZeP&{7o8;qTfF3$+& zl9ySexJ)t5SWj2{sDq~{p61}uil0!-rA~9X;wKg3oMKK_{FGve-B0m!#S(j8#m_00 z*gGiZYEW>C*M4j(U;P4b;zb;)-sd$x@pu*2hl1#Jif20b1;sBb{*am6ueee%&M9WB z;@J)!p?INU%$P9$QT(c6$>bQtwTdP7{)+1qOYAhoixo@kpFi?${Sw6z`!mH{)CwxU zL@^h(0z5R!r5tpxlQl-owFN6sIe`mAAN^;=L8iE&dkYw^I484t`JZ zeh#itoZ;Z76nAs*U5dLq_!h+nJ9wz#o(|4Y%oXpT@`o$ts<+?+yP?PKshI2FLF`n; zTniU`9^2&m2Cwp59T%LzOg>P|74jgH1&X<5F8F9>GF>s(%>_sJ?35~wC_a(+R>fRk z5AwcLF(sD)&Q*M}gZnC`ZfFpDZ^c}s5Ab%1BlxZsOjFKg&3j(uxqctS{zx%b^aH#| zF<12i{JdhW^9OlPQOvb|!Ta%&qdi>B)qlIxzc2Y^8l6l15y*1{{)x&tBxf< zQaKm@?Mi<-`QFNdm44ydYWDLrd+GW=yz4ap6#(R_qUXLsG4~G%#?*O(c~voY6bXi8 zVS{;2F?SUS#&XjJbFboe6@N`!sF*qg5?e}gnc@!|e464F4n9ip#}4kQxY5DeE2i<- z;F3SR<5iw&-vRza@s|#+Q*0dkg5s|oe81vV4j!wRx)Z@AM=0h#E5VD|RD%?MuehH0 z7{%1Kkk|`}_gBnKS%Pbb(-c!JBe>+x%e~4|HAC>vjQyEnDr*F>mw32Z6gD;>tV%}I zmz1Ya(V_zmRk`ej4=7I~7X=ULhGRARA>cvwBNSic;6aLqI`|mH!yLT7;^7WXQ+&CD ze}3Dm{|EX%9lCVD5eRSpz_NUb8kz46N;a3@MDV09XwI-(+KjDpvsk;@#zEJT32cN9?RRm6L9 z_$>!NrFgl6?^67(gKtsX;NYQ(KX7o4;uQ`)T=B;a-cxa-gHsiM=HTz&@G8I3!5=98 z(!mQ98wXEU{I!Ei6|Zvet%|>O@TH2I9h|FpwS)UAUgO}s760Vm?G(2-c+Klx<<~j* zBgN|-yh!nH4t`#73iJts?lVR477iY*n0xVp*q1Bb%E6~APIYiU#oIb~U&ZYmyo2H$ z9K3d^SNSvtH!AMv;MWw>W>!${7ZvZ~;0F|UcJMgGyF2(w#oV_TtyJAPhTR3>#YhL}^I{0(NTRC{C;#3FERJ^T&A5z@j z!4nkk;NU#PX%0SHaYqLqr?``Y4^+I1gF7ki?BHJ^@RFOqyMw<}+{M9fD&E7vm5S3H z{D|Vc9bBTgtAnpoyq|*yE6#9mL~%C(0O>rLw#}yyx;OiClbMOUi6 zc5t=g0S5B6lyp7^(9lRQ% z0~rcNI`~7y*E@Kj;u{_Otm2y;e2?N$4!%wCtqvZpxX{7>Ry@YRM=BoY;C&R2cW`^f z#SZ>)fmitw2Y;-1qJwJ{-|pZF#giO-pW?e5JVxfqxQzv1BSit8P`v*NcL{2Szg^2{%H@K=i8b#T4n1_xIu{=mVHDqi8>nBtEeJW_F^ zgU?g^nS)PIywbrv6o2X9&WeqL+bI6p!C%ky+GLf3-&XvsgJ&ylcJSkhS3CH2#cLdV zgW{hYJVbGegHKYt&cTN$Uhm+4DE`gCZ9QC_iY-%i|CoFvtg5!PukK7P`^SVYSDryG z`^SXOR^EqP_KyjlraYTm_Kyjl=Nmk;t3jkR#!xS6NjqZ<@;B8u!&8+i_g?-xQR{5DA{Bx=C(G$+hBRe z9H5w6+XV0aJ#a_G-0UWJH^%@D}8~Qt@RDeqHeu4xXi$8|EaFl~`*r4=d)T zIl)`m>GP#OEmH4!fX$$1CQZy8w6haJB5ayA5Gg^O#E~jn1uj zLG)h}UhTOZFTh_a9_QdU6_0mtrQ%`-KccwA!6k|(I`}%pw>x;S;zZJ z;9V8p<6zjuvv0pC4sNRQ@cj;cOYu|(zoPgd2TxO6=HR&EM;&~<;%N@PK=Bg}&Q@IR z;9iQKcJS_sr#pB{#m_l-Ri#(?3J1TV_(ca-E1u!tCl$|f@Fc~R4!%io!oe3Qp6%d& zDXw;KZ^bnZ{-@&k4&F-fLI;2MvRC;<4sK9f=iqsY7d!ZA#Y-K0x8gS(JW6rBgD+A1 zmV-}GyxhS@D1O($>53a1yp7@y9K0IuKA8)yaPWtUKX&j!#f=VrR`F*JzDF^4_Xfkv zZHl?yH^9RcuXgai6>}GG5c^2Q+zA}ueH8b1aC^lkIQYkzUgfhL{ITMb9bBt;fP*U( zpW@*A6z4j4jN;QAe1+nH4j!oZ3r_$&wSr}!KPcThao!7Veq%AfDxPZbYw@M6Um zIrt^TLmfO-@h}G$DIV_Ns}x`E;4>9-pLcMJGZk~McYqI2JjTHt6_0c9FE4qOAMfCm zii;imy5bTC&r&?m!4E6G-ND6*Cpq{U#dkUQ9L19ze7xd&9Nb;;6bJ9Dm^R;{6<4r8vXEk1Fow;F#j>4j!qPTl0gGoTr%E^8;@%GKq4;nI zcUIiT!EF>D>EN$l@Y)>xHyvm>E;CB@dbnsloXE?ZA@mUVOQ}Huh#7y-Ua@e~K2rucpbAEkJzgS#qz$idqy zE_3it&w7=A)WM%9p61{>#ZNf+1;ynKzF#qod`K;4v#G`^rlAkPFA$GVJYDfj;z5d^ zRXmsY7{xRc66C$VVj2q({4HarDSkomyTm_F_bUIQ;w15BieFM(24z39L@{lUNZ#@Q z&QMG{BmsUo&_+ux{DFJ?2G3}-VxXi=Vflc6^!;yKh^1!A_I>jG($^)A!8RTav z4{WLk&r}}RRLNxg4CR4Mm2~nn<$+BV;Vlqjapqr5vlP|_#omnHNFHzZ)Vuvs7`#y% zs`OU^`=;DPm>r!%labMxD{zES0saxPZ~Ew&Xq*3teN!5YjK*m#@lWiVzG>FbagrET ztd?%N{XVpB$_xVgruEEdi{#d(%tkLFXl37&buopfp$31=zA2kxGwqww(`sPfw3AmB z(#^GRDuw*;-za4KMs)fAfqhf2*q(jUB`AYu-&B5v?VB!U7%XSPzA1l}$kDUa;Mg~1 z%1zogU5LPq**BFMZ6h_pgYzG;Z(7L$i+xjG6lOAxPF{h|O1#5n5K&!_g|H6!xNfz2+NP_yjC*9S(50 z2={k%yVyTE55F4e6VF_V#E8uyuqQ5*pf!!GN*Z2(13epY1tP96#{>~iV#L|lT9Q?H z6*GokJ;@R7^>P}_&OyXxM!Z~dr1AA=&T<=ZIU+7Mt6&5u;$3?Zf)g}1Rh5cER%II; z&5}@r3PyOfRfMMz!OLI*>Yum-hpfsmIKthny;MCeRc}TI5%0lTP=XDWRoM&K!Q{1# zxD*kWnzMq4_c9_k$YfQrOt6GuBi12eo#_!ooWh7VNW^U=;zAn{&M$KonyrF}_c0IpZ6nS`#Mx#>5b+^Kv^TdBx3p4x{qg3` zK+GAYB#4>I6%n>yR^?7o$O@Zf1tM0M3lULo#c3L|iV?FaQ*bnyp$G$8MUZ>7XDGrM zts)%99DakovsXRwUy_1IS(Uuy@JwjSG96`^Zr%wZj%G$}LJ`Yt#BxL|H`9ZNV;FIZ zP{e6A;xt5@X2u2)$1>uUp@?NRVi_WqnR9}O;~24RDB@HbaVjECHNAp}MU2=k6mg1; zI0X@>nA9NRct+eR6mhbRI2jQqn@`}BOS>{7ZXJp^$wr)nh?C5$AYw5ihTCzXjW`hz zCz^N=G0KSHb}Y6LixIKd(BGJM=@Lc^x8pb)aU3F!Ge-pxV~iMX$3h#i5D^Pa#~|WF zMhvxMd=y4JiCZMUVggJf%rJXph%-f~LFI*RQ}ET^KPJFD7o@nIDMBqPrp#@Mkv0WS zW>k>k4yFh-vA8LWm+k$U-^CPrhf)mnQ^+rC(cIAAnAcW!GsQlk6hr(J@+%hS$&3k7OlFF%p%jDt z6!I$;=gH&-DN31Q-%yIP{1oylCKkBN9zlwGm}0+Bih+I#`4x-vWL9nG*Mm-r#KV%d zZmyp~e#PQEnM9Cc3R8sd#{fTt{EEeSGQ~lP`7Uetru16^rv^YJwCGGDY})^zl>3 zuUMQXb9<2DA*Kl5kKTR?`4x-vWaw|q>sJpm#r`_( zQ^>DaoF~(=jem_tnBu}viVQ!6{EEeSGK+!~k21wYp%h*H6!I$;=gCYCQar{K7l%@$ z`zhpCEY6d;C`d7lDTanpbn#QjuUMQX(=$l%I8$5_O3~R*A-`gAp3HBle$Ag?ieaG? zo%|H?D;DR;EDcgT$rP7{Ql$AQ3 z(`Gx0%CA_QCsP)rc$O)`_k-UTHii6($p?qIDoF7hQ-tpa&C}Qv^2>S!G5vxR&of2% ze(*EJrjTDTaY16X4N|po2C4U#d$K{VUq53iup`25(iDu;HQvZR%l`71Su9U#moNXtw6+H zgQ5{k5qL7OAjLwacrKKp-oJ+Yip6;{X9p=31=p}mLve(?hWv`fc{2MWg*HvCCJ8qU zw=#JZU8><)(K&i}PgeLkexWuQZAGNh#I1G01W?!$;wuccaqJQhvqa zJed=M6hAPz$gh}4Jor`9UG8TozhZHo%y~fyao9Et-=ERaX^a~y;wc(0 z^ApOim;ghAAzta*(4!j@W>sFsbu{ckr1}U_@ zTOvu7ly0%TjG@gb4Q(3^WtN5p!@R4tM3P6JSmYQqXOklVXye zLVm^KJel+$g?P0aiKjlR@_HPj@riy4`4tmjzQy&uQgz}rYzj&+qVZxsh5U*MFtdXc zI|nJQkQC$m6!I$;=gE`=DRyCsTSKKP^i#;MSez$wR*-^@`MgqHDc2a~r;uOxa$}19 zkOJbV33GohDIdL%vMY7pqyFgg;BTxlnm>a^O8MmK`4n9?@HnY)!PF8Mq~ugHvP;ynUY({X8prRCc_eWwPYWpWwy~>V&vv@WM8Rp| zHGjI<*-$*Wx%OSRNbVSeLnCDI`j_kIWgP})%|-Y&@^Yi+HsscTYr_#3jH)*Lk+s-8 zl0A@>mERZm`N1Wc%@{up^sT~1%Jct`Os|bp;D*r3Zl#>#kqU?c%aR9}IrXw4P*85h z?zwJ5ZKS3Vb@bgk!N6;LP>tA$jYZ1-qA2q$Oxl`;;oy0evnQ`T)6qMwnX@V3<)Qd^ zvi{X67&EDdv3WLbA9lcf62AyEf83RP5SFTd3HztM#m6*AUe`id~CSw<&fl zP7PP=nwI*vV%N0Pk&0c@Qu`=&Z85c1?Al`bG44H9t!y!U-NB^~qKIGjf+F?^g4iRo#O)!x8AHiUwNy|>Q8Gn?q>D76}y|&NBOzzgu;A>Lsk8~c>ISdZzdPN zO8A0?|5xR$_Ja3T-fAy+7mrtQl|b4oi@P4$Y4lXi3p?Oo_iTI<^ZG$&@?iVRJIXW2 zgY7SKl=mSIw!b{CJexe&{u1|i)!E=uoEF}~>lL5t;0qMH+h4L3yW3xSdARlVm)(>X zvn-VQ+Pbz;E@DJVyDV=i@!FuA@%fc+`7-5|DC%_APK;@7a$buH^!qS5P^ zO|XsTT8+*x#31^)8ohzh-^an0=6L0;cGn!J+%SHyyJjclt#;S^67_ohD!r^cR4YAP z-NI~s=4A_6`lZTS?XH=j+3-UnDE)(q-Ay;+6}y{mu2$@Bx;aa+yXhv&!>u>n9H6|_ z?wTEyr*ub^4#uIXCm*Swi@g@O2uO-9+h{&h>~5o3qS)O=Gefbv1Li@+S83j|17^Hp zcL&VXirpPBXL-2wo|a6F?rO;$pxD(->!{e(!}?`{S9@0vYo%gW59@Wst{&Db#jYOK z!-`!!tYXEk9@aIAT|KOG6uWv@$18T#oVqJ^)tq)#?5a8aHr{*G_u7CiaU>2^>Fg3; zDsQEU^oH_Qnn<&hx6(vzwr18pIX(C;vyp<->8RYSHJzo6%_tn^i>H6)$8Fy&D zy^X}?OuDtQz<9j)<{pmkx$2`>+teYU`F09sp@|+im}?MArrL)P9YJ)yqP|4gME_EB zGSLl0eH7h9bSu%mipCHX5p`5FfvA{>*7W3xw7{L1NJOK7g6<@`i|BntG;E!?k7$vi zGNQ+cUQ+ZVQ8^Ly_aracicUOB6jwxp(1{A7n-#r8G>hm`MKs}@s3IDuh~}FUbBMAO z(MEG(5z)bl>WE$=`iCM~TTZMXqGo}V>tmwth<=1PMG&PVi64n59}+~Xyoo*Wmw8hW zt+*x*C89=##G=X5L_eaZ6p4$^f9D;z}IM){3~1 zBk=&y8a$X1Ywst4df;F_Rdfi^)kJS75-)wDh+a`d9qGgbqH;ylVNOgWDpf>9<;2}Y zV-!&vIq?+H)rzR=nwU#8SP_*@6AOq=Qbb+R#A2eu6;UBH@e|QLMDcbbpXCsi17*ro z$UJ`Uklr7^;H^HIzcM8QwT`kRL!Y4(9R@XT)g&8PAzvdm@mG3$MQ^N&&E?_iXr=|~*Rv2(3H zCRfBfdCt#2Lm!hF1p1g<{Stl5G#g!10o|Z;9!0|BzdBMxf3(L zyIRUxM2dEygZY{ugQok@Fiq@5z|ly!REhIhDmbvGmmz4i{6VQa{mNf(iDciB$fLzY z^7CM6=}Pe*zm8$h$a}1~h(Al@=;>EJ3O7@Q$=VW0#g;xB1s4$%ydL?!Y`X%d>LRy>j62lW|;AWQif7n&WFY?2k8a%2XA zt#V{fDT1tlLpib$*YcDjxti={maaeJMWo0~;?*J8-u}Lj4*E{wzw@2M_tA8GnD@KI3;vq6~+sLLAKWQLHWA0foDOr=*i_13p=K8=%Ct zi|xKv0i|5c<AxLq=>B=Rsi6BZC`3N)m&^6yft zzS+&XwpR_WP~(Wp!~L=EQ*M6@+B0)5SGDaMl z)nUB*my3p}i{>w+Z%Zng(!V9f^+vqtWG$vr)?ylC1z3cM7=*V(3-BK1q6^-_css8_ zE7#%OWR}2=KW;#DkhikZ%4MK;z07FAQZ#$4U@02jOkg4Z!s^O4Y~ryCGvO7_W^e|& zGBViA1(hw5P6oy>wPfdiKZX1|c3ZS=BmNy%E?LKp@)!I&t{xup@A!`Vv6=oI&1U;| z{CJkUwExJz<0}&7f8gKo92DL2@7N0sN8gM`R7+!Qo_|M~E(ZP`FT=fO9zV>HJT~Fq zQRZ{;|CE2n->>f-wiH9%U+96lzW2>ye|>LEGqaG@!W({++%~g2hS&F={ZRA!d+U22 z&CvC|$5Q{>>w7Oe?v7X6>-(l@T6=weMsc@I#%_FCz47Woki^Y6R5fD0U`Al~8HSSP z!2jb{n39=696bM=Nh3|IO$7YBroD$s0{p7I#q0o-3GBCbM>=cTwLr*>X%b zOrzpLjlBT5nb#DTDrOzbi;C}8{21{AiXT$U4=poJ@m$4yh_6&k@qrW&1%W=QVu}y~ ze5~T74$e^gk>VGa$&QMDP%L?`yUtd=`dBn{A`^$IW4oa!pLx707f7zTC-D-+|5n_E zc!uKB6z@U&pyJaNAIzeRS3FShA;edExcUs>#F;o$9ZG(tMn7AlA5NU9_*}(@5g(v< zu;No6M^QQ|9-{bA#{T76@7`ai_+N~@Qt`!#dolLwiZ4-|!Pv7D4^!Nq_+iDv7588! z#fmRed=T+9iZ53znVh5e3dL&=K;FkI9-%mkm+Y?iYQ>WG&Wf*5{3|p0?HaH0*D5}c zCHYEmzT$4g^@HEMQDA1y0hfB=$(f6BKu2?DG^CE0)+N zD2^(Ag_rE%;p!6LL=1*B`FYBz11j2bc9@K4 zHuE)`PZ|ASjlO`CIx|nBw;|lNREUiklTbO?;l>?-f@NpP+cP;;q@ZJrw_-cp_tW zR_wcjDI;#<;p(20ES`#kZLFrNyjIC2zkpmWy3FHMZvx4k{+`(+H2Q_@5PdujRrTbL zDz8riUx!0g4fI@0iSl2`H~9Qo<*m$?pX2c=-)#9^Um^SB75iq(?V z0>xkM0DPU|+ZFd=?7@nCbFi@9yTL>}T%Cf?N!i3xmC7D)kn%M0opG>yXXWYS`}_RY z5#GJ-Nq&USzfhh@9`X6>9@3BnJNRM6gB)C}_)G_1)5J#bhm?1dk?}FK$4A&C?6@N+Ha8iBE_fd<>8g= zmCt*)IuAH;8xB>?VUf%yfK{jC5M690e!F189W^o&-avWsFqLbX|DF~Xg=p6os_ zPlkeI3(dWL&_vDiEhY)w2-!b!m4?3EDpbmo8_M=wKY|qIFirTL&#ess3EfpgWz$ON z{>nvv{@QB<*|8D|m5Y9eP_3qHS$TwYk+!V~1}2~59+nr1XY&JMh}pkDks(QC;L>7ZUWhJvOtRZy?}3m7KK%*SNl+q%twbKSKGYbV@{?ee1zA!%ny1u6!a*AF8708 z2?agIpey{KvQW@8295B8ib6q;Gw4b`=<-m|6AZe_4>~mz#Cf!}@h4Z{X#+fE=b4=NK$PV3R>z0HDeO59f0$FJ1k48cS1qb za18||LP0MwD1n3RQ4fcLW-y3K_cmx;C}=)|7W=6#3k5A?P}EO#N+@VGgQ$gTGdwgD zBs&i8@Kbe0kjw#IW)lB3omDASTZeB239V(Q|EBgrS7_*3hWhU*FSMGW@pg0Lo18}L z{F&?Xc^4rz*XJjkB0miMQM6v4|Ho$=Hf(%-{yw?N#^&Ekk&Ru_mXEeN{Q3XbdmH$= zsw)3GEiDaDyiq~Ii(`r~R6#5+YO$aR=Gt4$)i4sMN~I$MQ&hAlSE3S{8lv~)aL39J z?I<1N42<<}8RAGv5DICjNx%vz7Klz~3|M7nZq-Pu12!0EK z%%0Qwg3YPbo2#vN54kU{*)w_C-qRiqwoe5PED5CHb`8NmDtG`8jJW>WPOm@@Gcr&+ zmwXii75Jhd0Lv>5&@t?oQSEU@`7jv=45xxYbfF7ko6>mv+Fk;rE#ow!WnLMeSKhd%7v0+kF^3GIi|C{BdY?X@U&a#`F|SP|lMb>jWUw-PT-Lk?7ouOo0;Zcav~*K)F=f6_f_ZDf-H)@Vr?X+8;7+6vqgxcj+iTywc)ymQ=~ZE9WYy z&huL_?AKQ+JT>7S`6K}l#vc#!_iND>FZTe>Z%^k^?vdM4ePxAemYyC=pBY$v5ax$Cz zMo01+k&)O-0Oz~;?H$Q)%0lcYFmUv9{E&?Uj*;CKHV@c4^a3o|1pzEWonri{3K!1` zk`oS60ZLE2VRPa}C9Nt>T9&@@O9GTOM-e%+L_$%&$zHlE?)s_<%q;A`o1 zNtw}jga0k#?jahkK7BJhe7v+D`9ubdHs-XO*^%X!Imj`{rthD7d(6-==GqBhCoF`~! zM?jcp8?Q**v^jMNr-h%ds7>4e4SR~P+QhnkA2?Z?`1(L?%}a#K#!j^D{hfkfM7Ko_ zQAPK1B|Z~yfKs-37S0hoM>yAs4#GKoDR4yZI0-_ z^|)8$I~V|+)=`yFr&Ik%rANYy+3ec1$DN)Ft=TO@vcO6OTU_G1r&r`>=4I@pzRSiZ zIWajH&!nxHx8@fKew+yp`Z3IMKc|4HVK1>qau|0xWNa1ryYt;{%inr*-pX`j;97o| z{|}H#{qLSJEj}b}>PubnV2TAPal@9%AuuGdZi^3@tV?{oufB%R^-yg;yFVJ0&(IE9 zrp_&`PgJnXX@LFww-mzcJ8iI@eY`fYroVP?KS`3#lDsxf5|6vuXX|rV88*&hx&(v4 zQ-$XG^#ELm#(xG2|9DY!yk5XR>}Ci@u-w||t+T=;23o9voPo!zn#1to1{j^)?z_xm zmMu-6%y>YJjkAKv;`y|osDc9ifQ!j-cQ-Z#ATsnogPHmcNL(_D0ubn~5aJK2O z!kRh)CNXufiQCoDuD2A1*(5TX5m5?BEGAvWqLTgGGZC;k)rS+07PV?O|?XYp)p>RtD*bFg1$_ zMK>3vCqVhy?4z}%{=Rwwz*2Vx3+Rd=Ft3WI+D+3lfTT@V5YwaL*tt^XVXvQ z=SE+c9jBk@NIpS|j^r;@VbuSc0zWIe7s#Odm-Zrl)(1|*&+ffB=4Xw)?5{l@p7uj3 zqKv2I*eqdYCs@oCM)fx`8HR$)HZ%9%{rwr9VuR(ovGL5$fn@Vwum{hf7MK(uWp`W4?uyK*_x>Ep=l=RcYtImiS>?TNRY=dZ&}f{HYI*Cg zn^)0aS2H7DNuJ7U-kz_cokIh)V(cphYPAB3g&U5ZBleV!h_GoS6*MkL1*!R9Q{%Gx z29kS3%kzhYExX;PPk#YJ{XMqGCvHpbi795EHFfLX_@>e^9id=?4!JJ!MvbB=V>Q># zH#=!!{wa#d*3~G8(b-W*Ta|x}@6M&Uj(+=|t7xx1VxGMdHGT;n;>C zl{_{lzP`C~aQ%#@6R%A6T9Zz*CXqPV`*h-zKD8uUH*Zu{-|=ccg)ddT0<2a%7QE^c zc#USQ#&h*c74VbL;ZYc6*yhg6CZEsG>7J!WMMv`aZ1RQt zuj2Wj{f~8t73)|!RWxNHe5p#@v$!U4+gJqDh~$4N=Yd+p&_(H2LWbe{t2ki7s@Vr= z?5z))ZpUj0E?1NIH(5_#x;Um_G?;H_aJL<5xt)HLdo+2XE_gcxW~c!MwIO&kY})3| zq{*Vm%1BLG5Hq+jefQkpg3921vx0-csa}AzvZybDs@nGf9G08SYt+WhivW2l=xMY^ zdx}SW&{=PfT&+FY&*l;27V^tkhy^^tc74FKum^3f|V5Vgbd(=920vjfrS;GjdB^Fkwg}IoKg=bsKP(@wh#{248e?M8*`pX&G$z={5 z&C;z=^o@+tFs_rCyYQ&&_-Ns7e*)xEdR`xx2h?CwGxR0s!9ouw-z)WNzD0xf6}*Rb zV5GtO3Z;pPZwS{ZODbHqz#9DF>W1J0RSm&=D}#dou*NX8daFkH!`k~9DBY*fQ=Tc~ z-Pxlz3V$+tO2L*2o(N{faQBe9n=C~KL`sgaG|~Wy(TSE+^cvb(5{gg&O;r+_x|By* zQ&Yhg{!mlv;gBLk5r6MyeKs2G18w+0*6^CBT{LlF;dMdbb$;|3wks(OR{#xH5*n^d z2i9;_3z1b1=zbjhu+8tDVZ84#VP;z#GZ)9$tSxOVgOgXy${#CPiO=#=j2yH>{SVft2=Z)JVDy9i{*6BV-*WE!=FAk=0$sZ=Sf<1lU^W7oa=S(+_ zmL%#(1y9z8>ojTWgNv)`g9|HzIdLcDZ&986l{(46g?N&?rb7)K<8)ubDhl|G-bE<| z-~~OW@a;ZmvXh87CG<4=O?GCjwb$ZST6_cKwX5m)eLa-T2*+hj9x?Uo<7{9 z0I)(yzzStLFs#tAk|t(Z63Qh1R?w&o04R9BfRfv^oYwcY(D$HczBDT-t zhW?t0o?V2fVOJMME3`Jbw~JOX-09oHCWaaJ<4FcRy>-AG)_WpmZV+k1Af*I7TlL%7 zr(g5P7x>!+EIlLKO9Ze~Jg`)j1BK<(Ecy~sOyS2jCyIH6czsK??XH19k7>`t8rhLL zzDVK)>%rn8hUvVYKF9hs-qym-{>IH50`*Mbp}mYQ5iWl)>?2RV5sjG0c>P?;42{DM@&(4UG8H!UX!I4K@Vp)61e&6tM3^E*>a#2A4EJRH4) z&(XCns=4b62b@K5Z0B*uYLBKyqLS-JKSN3p5B_O>LqCxBRv)zZxOflcB|NP@8@zTw zWDuoqgccO>`cNN4=sGpHvJ%7s6}GuovA<)B16BZ+Vc-IMnt;zTkZBqI3}NHh1~3w1 zLDO!I#o*4{Uw%W0GWE$J-oZk?`%q#)@PSZ)e$NQA+9`yo=mXQ+JUXII344?$$m|GPS`pR&D#}XkY~VhF zba-AR-~t!T-D9{6pl3+YvU5qWD;ZpKLRB)j>I7!baVIq7E`_Ck()Lw1CWD{3QBLmq z1N9strO=z{{CW!8z&LFMgr#f{Sf^fnxbC95kJMdU2K@p)(bsYJE$}QQIeT)ClYD}4 zE!QLnUMBBjXT)@>a38<_x#{+!y-)@gAnk`!lIU-|a-JI*c&<#E71h6bcdKekvK_rU z$n=s8Kbv%iZsAt|nhAem8&TfbPp-F(=ms{TG`8D~PKac9G^8pyU10iOSQ#Wh?Y?`& zzKAp6q-gRcH^E*S#P^;yAzfq~0)9KFY&VrT@6#dn39uU^Cw3R9Mm)_>(TQMjrD}#` z2br}nMckory9Zr2^K!Beh1nLN9+y;+x}go*DE`9^nUbViz9(8>nt z9oHD))jmEwjpuQ!t3A-Q93a#F00Yyx6dM^2DN^#jikL-Wi%0>=>IdYB)P2wN|q65@fH z&}BRs?JRS)V~?1hD*6keTn%vz+voG)Z=CSk`LO3qgNkvv!02oPPRY8nUjfWDR+iQ# zGG672(YoZB6EOmv=bhz0YW4HPx>viA&&eV zwT(||!}F930GO6X6h*&@HAk6#Vq7OGAz#);>r&$N>?2P9$|rd+FJHhTw7C^(v^V8oxl!I0vG8& z5f-TTP<@esV(L&%Po$N?{^$~$sIJ7!r2W+= zpPvk5k285cx`GFShwFl&CBgmaH*Bs;bZ)7aUT{k7x8&-GM2-cUSv==G5Xj?nM8%5N zC%7)FLQ79#&k)5XhlQCHF@KwD`>ZG3yJ&lnLM4XJ zWPf5!pE?axGoIL=XE_9C2Fm!ILbs=Q)Hr_`eA}-$aQKd9ULL+Hjpxa1kaSu?_X&(R zY_Sp-k-phb`P){Gxkj3Z#v$DeV^!m>z9$-o;{j5)*&CoG%WOz&-0r@~XrLo}7~IGv z#|k4tPDbz?pR+Q5CVfX1@AIdsjEQ0hHYDzN*bQ%-porle6mc0KPkD2hwfXt`q;`kj zp`?S4lGN;G(&)_7Ye~1Z#F!=j)fm7Ld>7FF5pD)RNzXd4~gC&@RF6 z5K?6PMIn}d_3l1levh_jtg=gagzdIp1CX$TxlP)lu{J5j{fxAs39b<(h)5FAY>$>! znlXgjT&?aiCnLSo*_V>;AB_~TW5gm|$J`ERYlFGGo(Mm0W`QxKi3VqsInkBuOxOH5jB(sQVlm^10hv3)9Uu_lP zDFU#o@wY)iSNh1}>5AZ?oyL8?gqM;kQfY z7yPpiT4M&1sz8nF)zfe+4P-D!GRXMy%4IJS5z#ia#AN(l7$af%V;_lFp3gBfBCU*o z8W>t@oz7Cnl1=kHMs$^>+ElGa(6XLU0EX$cUWCFJfn$V(E$bV+#BfQ_T)iY%S+xX{ zy}F-6HSU6G)DwaCh_b3K=U%$U#0I^B)!?eX1nnABEwt9bg0? z<2e9StN*s`qF((rkrDHl*3?RSvlM9~@rNNNc4A8EWQ{v%ObA{BEDk{G)Ty=w1agc)9>;qO%oEf!u)Nns}}V;B{~{hW3=XVLWp(+QT~fg(Y>;9DYS zw;s%<2QX~2N81FOBAHBdm4cTFMjEK|)mWP^K~IC;P4XAm#b$vibi8B`4OA`BFd>>B zNMtl`kjMzeu|#G{167I+rdaml`v9yfBR@KWT%NvYKCO-C(*}Z>PhIwCUu%y@gJ&u_ z_aQa}ZR3@z65yOtiDSnZoA_{jhCM35?ctz@*B4rv&sA3>u9H8@(JS~d`Kcw2pK>uZ;u6=DnQp1&&)qm!o9Q4Mi{mO{OTqJ z^Gvn60ZyYu_r2O}F=1yf!C=JQ_V731gq;%Q!MztY>P=l3L{7Q;E0InpRns$MN-X+krT03hqmCY37<`Dy~&2%LreMI9IhK)I|=8_k|E0$lV%FK zk>C+TPan;N%|NW83Z64e)@S}S?n*EoSPJCjp@5S?88wB#n=MCg&*dCob^#~%#x|g#DCUp-?1RvNndx0mC2TUqOX&{xN z8<5KBX${R4m2v+tJHpyIiNi+MSpl9V}EWsg`Xc>oh; z^!?-*?boKvFsLwXn(3)co6e8rXX&f;RNfoFNDZ^5a4DDj2&! zh;X0^dxunct4WoKaBL_|syyVS%49RCvX;9E=KFBn-gA!^clQeP$!8@e=nHqH`FsyD2r~oqKV)A#eS) z#fH4bPq(xG?kn(NERL)DIP@Y3)NlKm(R~Wo8X>?&@$Eg5sU9fH34q))Q&Vmh}b8@C%sk zW!!GZib+f&6xRls?_EfMZIF>Kb6r!PA7t_+_dw8x8noTq={^PCX*Fru6=t-wpxtO1 zqsBc2jYgqE(s$gE@aMlju|8w@qTQ2jx+`oNt zm!%LQ-D$`&jeT-UoTS)3Ih@np7bCR#Q+GkE>!DX+#;bc^Tx3+0)RGTMWx=KEKo53= zX8VMiQ92$N0TeuN1Za0)4Kh0t7xpFIz@9tWBB2!kZ*GS*=>>OC$u8>)mu(G}?FK^~ z#fqGaP^^r1NeFjCaV4zx*Bqs;f7!@nqgh#{ccUR*iK74kLP{Z z82GJgeQ*I2?tM(S5(B$6Y`?tn=OZ!RS^pz_mzmemd!`fWHFVo0mVnE;Y3l~s%4RDv z1w>tiDIg4EH@+-GwzRfk@3W2sbJUmm;Qh1c3>{jwBV0xo(Xs|tA7O?z7tfVQv@EtE zZ0Sk{SI?~rF0M=l7tcxtM>T|(_BI3~(`&3Ed|Xhl&oxxQ0`yfMDzeY@fz#OMUhuit zK3690*ybXfV|V!f^t{ykJ}@p-cwFidhf zu|`vwh*Rgy6fWu2TgsxSF`fa_(wiE_bWD2Oj3Xrz8-ax^t7D(#W3fD}NR(y;#qgg# ze@aTE4;n<}(YW}S*@PW21NXPo2lq1p+(*q!3aj+@&zeLk8EMSY!?wQnd^Cc>m`(uL z5wit`!cqMzslS`r{%4&p`vokaHR=G*mmSGo50dkT&zBwg&Ht~QFB@4NQ}`+IvX|fe z&pcmtTGU(wkblhivYFA8eA)A5Hn*?xWGJ57OrB}kr4oHHtc)c?q$XjxoiA&e&}8O6 zV$Tvmc+quoY#za^7}8jBxQvWb=}njX-*LX|LoWiZ+2?w2-D*AV)sX&? z=gV&U^vj$tdvpFwfw1&^nLkq)JGy2w)8}R)eaPRJzr$S)Z>J&L8XYX#YzNDV@ZrDa zeA&#Xn*H-{BNwS5LRs^5mYRlt+Y~2>S1*lU;e1(8c3LPJU-l0g|9v(Oh4HVEiK0YE z>0Kz3OlicDw~HkYKmx8k?gz&EYu-fX$)=w|1$<(v!Vhm_16tsR$5-x$A1>$blP`cY zL+|uR(`=pQjO!nBo-F+Ev~z449{;rSrs46`pL@7z1pl-AM2D`5CY<8m@NCRIdw7?h z&nl0{VLgk9RcvBC+vlxZp9D zUNeCNOXnHTJ27nN9E2IQF*|GX8*2`Z6+TOKe}CPfksc)Og4$oZcR)M$!)e#y)~@8Z zebmGsEZWKFRAMx~@E4gu+Bo3yt%quj9!Fk3-jNpo)H)jv? z>p2qbsTN}Zg`m@&kvps+e=_=Dy3_^RMuA)g}?y#>MYEdm~T-Oag6(ZF~>{VGfEj9eNlpP(lQU88;y12ftETL_P=~z5yS2Sr(xJ{xguiNE3Q_)B2L}9ZwFNck7%(|eTJVAhFJa7P1_kO z!A`7xsxmcDE6%?RTO#~~P%uisI>Wfi<%H$qn+3+ykQ~y4Yz!=}mfKe(tn)ECuJOe; zl^k#N@XO79u4IyHa(Z6W?IpaeiWT< zZAa!Y#^XWF5P&dj^ik00XaYr_%O)R51(LOhWA^=jn;a@!$YD#Jxjdx!%w<%6t?IYF z&bF^?K5-p zk_7e93g)T}JQ~&f?!;m7#EhO%{VS<|NOR6tfmJG^fA@aWz^UBfy?X^bCeDK{S7SIZ z6rQE(+)HOYBV_CY7eC|E-d;%imzGw=GX0KV&Yt#g3JP0i4hQNJ^;_!C+Cm)L+~fuc z_AHzoF0Fqp`f%S@`U&WzAZ_meT}Hph4^iD@1fS9_J_m`BVt%GpS)iEiT2wcyp75LyTb*};##eJ-Vm27&S~Xg=bnuns>BYd5G>G4 zAFsG-CMNnbU~uUExY?(ta5EF&asVR%jSS+atNx5}(in|N!Nmv?(Zy)4j%CpCF)_CW3aV0b7c8w`)o%K^b~ zEgfAGG+l2ne1LWs472X(zc3iK=HD2$Tn`#{(ciU`L-|)z{u&hD+R1Cw`X<>M{ zhoNcQ@qvxJ!Zy!`9bq_*bB6U}Y1?)_ahd0R*FHqt(t{{_)n9ktF_A505l>j%DNrUa-{ z^h5Txkc^50@%K{L-|N6gv@-hzK;=d27c?IOmogUL>NEa+)*s^UA=52m1IYtbX$dD8t}QxBqpEubhav@Q6Ni0h^%Z=H79^$T-xsZhO5Z@MipC zn5UNp<|>%CrU42FX#}lXUG-m`UUBdD4pknTf$le**d)RQKy%G!6Ni6Xhs4t9G4f}z zzDd<(8|&+W+S&1BuNHNWr7SU17~wb?9};&*iN}0mrw8EPV9nD$`P3LXVpE&)LxBha1rNm)~RCsR2k3+fh%M}H9s{N8( z7tTdi;~aG%?PchRWevbHcP&qnOZ|_1ch(;3WPRdICD2!_wG`2D_MY{8HH2n;(h%O# zYhSnaSrW4W0MVBFuOU6KR`OrN{;Sb{jqnIM8~BY*CU&OmeYb_z+xwWk*V_9Yekp6A z9{!{vUkm(K1!KX$GN3+$F~&kYb{^0bn&SZ&GpvlrAf=IaH9(#jM03e+~zmSq{Oyc~QhJL@R^ioKHA|##TDH#_ zsd&9}ucuX~-G2{A4^_$zx^I5u^olkoLv_Sz*}-_#@bqCA#T*>sfi2vyrSP_JVUM#wGk9a#joa6)9`k#et?Hgi)e3d=UjjE@EBsfr|61<9 zG-ep|@Zk?NFiGwG6bnD!-WS+=qrIQ$bEo*A%^s_JYW4WnRs3)0`@m7HhTsa8vrDrLK}%~x;EjF*JGa>o ztXo0NOtR(n@TQSwNlbo&2>wTi(u8}To{$?JK`zB_Xr0%-M82Z#cgXhkF!n60uHp61 zz}GPvOG$@qs>-0nK9hcPs*uCXs-6K~$pf32W_v7ybS%TtEQ4QD z)lI2k+t1{UVgpKmW)NnXPn$p?9@_OC-h?g-uzcjVNWpuNgI%;Jee zl}Z#m0X3?yA^6bzhTt!1NM^MKpReZCdKi4ZD%_-Y2A{7C zH>s=gGqY)}UbeW^cxMgU^>JC4yU8A%f6s&5T|B~`_51?)4fbg7<^g1T?Xj+p2j+W& z_SG|Fk4?k&xMjp1w>lnxV0^-g9P?je{%hQSIsa9`{0Z83@e#IH+WUyT&$aiR_FiT0 z!}fjz@02{m2aT=vUxWTjl!>@*J($W03^uLjD`>x&UoNU8DDWnG?J7EGzsbT?W#A1` zLtk_d+of7FgH2gqrgb6M)XEoYQL{a6S!oZWu*{6*N*SzMYJuw-?P1Fu*k8*RtIydy zf}Vx^(oBPq_q)Ty&BN=DuVin4;BV=9#)Qyq*|${tof zV`Z&jid&#>Y3SP>S}%Z8pTHGb*ZAu7U)F6P>c7^IJ!s#+2e@PJ>+M}Y1jP27*4 zk#%k!onajxM=ohwN92L~Y8<2WvzGir~#zb@V#hG zi5hfY38nfToVOX?+3rMb8=OUAk}Sey>Cpw(cjCHrX2QXQ_2pkL2c)V;$ML?yKjmCC{idy?Nxur(66$kRMFC=V%i`rD{gzVMXZT-u`z$3V^>Y%?!{*rMef+- z*vYtSy@WNOWH%Yf$FpO#*{8&ez5jx2a6j&HiFvbsKZ_x?@hWlidz{AKQ}6Hhq~Lfw%?loGX=^ z{jm}8huR2BI`3Htbr-F{mm@!kh+fC|#Pl&a&aKmZAkp1H3qC}83B8-pK0=2H-CpT!KUF0r$1@O^CWa)z-3JEO%XYFcNfq2eLsu zVyiL@`AZO?<<80e0tV~@ntWva@zKw)$4N;%pnt7wPL()y)@DX5)yu2?t>U}L@%QQZ zx4EaQ_A-_4!R=Lr+sk{lU1rI;VE#M)wZj6K0oUid5{J2&^h`<*e`re^$hMa5Nqn`O zAh{mgsbILQT}W-mRI;7#q`b&R{wUYxtJ5~aeVKR4{XqUAZvbsOOUr~5VQq(Hv^jAj ztYJsfjZB8MAUFynJY$%{w+vObWS#C7Vz6e9zK@m4P9a$EQ4q%bt9TuB4Sy*xwJ%WD zB$oX-1Eml5x7EO{Vt@J?qvzo9P-?cs2m+~3nG`?dTGW6{{xf`xyQ)4tx)Ls+DDRzq1y2cR~-^ zXh=qEd*W2sZLyL?VcJZ?I56W+Jm2^>pdEX&%Pmw<{uDU{&*uwXsz!m{)e|V^j92L# zu}9A^4|us9JR+rZ=b**3_wjIlzDP58lin$zS3&>ycB535#k>8ZV=9KSSNiIG*|v9~ z6~4j@6VA4o;AfUbX`92*0Of!;5#iz>4QZA^EtYjR1k2XrzObtSG)FDBrmba-NN|50 z)VU7oT;~b!(Jb|AQnM=sx!F|)KXcxde>)%B(5JYN`{o*F$@g@4&+ZdPFx z6s8vnOIcxxw89$sOy%sn8rY)-jDAKz@MgSAwq7MvhZJjuaKHVa+*WA0!r?8z2uys( zngrcz8F8oLa11}{-(-HX1W>|RgN1{gugL!yL|bV4;X3SrMRau>U-|xA`JT{ZFXDej z{;TE->(z2USr)2qUV=q;g{MK!3H*lb`VFM6%PACW*V47XUb+21y89MMlx?{Jm3rCk zi>9(Y=XMXM~pbF2e1|!c3UitbEv9|iG`ZXAM5$vt8HRw zcxjA{Pwc!RqQLD{)~rbA)LFq7`=JS-9Z#h(-WhAn0QawNv#I1~gB|R0O9?`e+pa8r z$)qL~186iq=y|1mnI}!AlCRL@6|vK)=_V4gNG8r2*6u6I$egX+PO&kG{nzgpO%Ai2(d*J}k)BNsM#R36{GDpr#z zq8(NZm}C(w50FDCzHNW&-u!py#J%uW>d-E$NZM3cmk$wRV->WoS2N%~Cf&bv*yt#H zujvWIkDU;WYQNVUzyWN03=UxX*I%SX1McsRln5p&&GYZ8w+bP}bqnA3E~uT;hYZ!S(u>G!cOF@2IuV!VCf(hiKk#UhsR{&9ZvH??5vNVe%0S`}h9 z&)|4^NSNQz^b4;{0ahdKJ%+}9UA^i!g2uu4v5q7M%pI~+#%;uXY18wQ(m9fs@C@NV zkG%h^yhXd4srjw?Ng^F(rCD=?E2~j0)(}iLpot&Z6z^#4qa2?wx1y~z+IcP=Cr+Gr$|n={X#YJOU<_T=|d%BJ-WN2Q{n!2{v7vp z%Spc8d(dH3xRbh+9C0B2J0oqB*U7cDxar1kUJQ&+J`FI_V^f|cjNVxbzpHZJZ1upf zY4hwETW$8SvA_j{l!Pp(CIEGh08B=qi^IRx;G2M2SD0Cw*x1CYhgse4sZ7XV&Uf7x zudys^pjMXUdh~@IO_&Lou8hgClRXHqJQ-&rkfabG*#Q&0skV%qJ-!?vhy z=`|O{RsIb(V4DL7K^W>Jy5Zj7+uG{YF{-=s8p5f#wZq>0nHt+<`j&qgFinkip{nq_ zr6-@)7~heAELN?tMJw~F{84cm4y6tGWAjJ5$4~Q(R!xIv?wSC}|~Ga+Wlbu?2olI<|37(mPbuWH{rnSU~ISi~<>^*+qmhqIs? z-oJ{rAIJ}?;r?IIyPYTwvshV2MrBpW*9b{IaWqNty+d&l+qjIo&SMDP(fd$Y@ZT$V zQ}2Ui!QWBvKlT2kEVx_2U+LX875oaT^1H`kJCgxmy+1CCS%pM-^uvmIpe&|cF?EW$ zzbqzH%t?wFEQ{Ix=foVYn1QmG0TjTazlRX@_Ls%{W_Eao}I z+@hHK%3^-^24X_RY$=O*Mln|^W^-9g{*A<3sF=R8n5PtTj$-aDi+S>7VqUM9d&**N zo%6!v=pl;PR2I{AFfqSFWZHXoSVtUJB>dv2-9KAv@ca+7lAZa zSj*rrvDnVjU$1k|$yy?;)U<isF|0DEY2@y%BaxIhhu;y2|Q$B91biu$! zZO6jLm`q7wN8A#PsJA|e%3Hm=i@ewuQQ|+A*ce?=!*1vg+Zf&c&N3UL;L5TlAanii zurd0}gT(eXjR01-Mg7@UBs;B*(V0Fm45qkH{lUAxjEzy(308r)-d^(Xhg@fWHb$TE ziMvU>p2Ym6yQ9R?c3|=3^qAJhsJZkQ zk^RwmKi|LoQ6op4L6O01(?CaZ04s77H!VBdZ?T&43K^O=7}*Tn|L>ENvKdMbVlcE9 zo4m~1^5;yitLe?3DZ>urkT-Jesemuod;em+`RWcVE0T9erJ)D}YVR_b)FPn!=>Er#|{7=mhVE4a&E4so;`HSs2 zQixu#=Rme4IU{x#Yj}j~vi#PEJ+1a=X|4}1Mbmf13Ru!C3j>uc=T!|Yys zUFly_ysq%CwY)C(uM2ry>R*|{W+g!h^Lb7A(3+s9o;Oap2WC(aW~zdovlU|DsA=EM z2TI$8JkVY)u*bUjJc4y6@LM1B)YxOwarU^Sng@F0Djrl*X@R*}7T7)x*$;a5@XHq8 zX^CjphZhT=`Bf!Uc{dCJ3gD>b$aY0}k*DWjT>lVpi8p2xzae8Pn zm?`5Alff{8#L>!XQc5u6ziRkGkirL=ZhIH3BFn6HfzM0W5p&tQb^wyo@8{ zf7SA3CqPWapLl~wA$hdYQXVV)W4V7c`bVvQEbxyS9^S$Uh@Zd*p#F0ns!>ssB>^W{+sR0FVC~_Ft|3Ysi0P`C{Do z@WNCsV6gWaEqtrJueEn6sY5elpk%4KDY?s+B^@|l>+MTYp&ko~4TF>uX+qep;<*0< z*Fp9Ib@c^#!ys#sHw?0-Vi<%q5c0B1k(ae(8v+E?fn8Yx{%AK3Qi(Vs*^`6;^t*_M z_bo`t*7?XHDCqPCK{*)&afg7aH#skI?mk-Wy=T!by>IeZY`0!e&M;vBf5aY!sQ`b> zzDy$krh25jMc4>#dNhp0+Bq2wup<=y#kLE=Kg>gj@Rtx^9%AncEPSoK8~z2kH9oiD zUy#fCFX11(y^gQ?#2sc>24&)l56xS4{LM-kJkCh1v^+gN;QJzV^vMbezAuu;d?7{f zebGHEKlOfPbJ(L61y`2M{a?t=>& zf)CDb2+pe^nbjR!SsnJMt-+O5!RIQ&o}2Z4T8c}RG@WwZj&ieWHvvY9zA+~>PRt37 z8s#*q!;$~HO&8gR4LQRi1Yk}G9T=8o`^vOpi-k=VcoSZ+78tCcMi}2NUYGmV^}H_i zuUKfY%kUOjjrM|tR)f7@p_Q^1EVO!Rd83d)UKjdTIE$VI_S)lkfR6L^KqzisUlVxw zQtF1_YXWfaZVXFQWbkebOH@hlZVXFQZSZcEn@&~I5L_U`5;c$4<-DrVyaMh|0`AKI z_qBlgvw-^}fcqmdEU}t{3otBsUv+RTo<`nXMd%8j5yO%TFf4iBENt@#(am15VTl&Q zGQ*Pc^|FzH@#|%mb!eTIO}}cgUixKoQ!8OCnax0aC2NjQlvQp8uby_=>L~<|R!_|V zUbT8^YVexkwc5XG^{n!*T0JZMt5(kn|2p40%?z7r0=ohOS5iUe9#CJm0@x))-cKb1 zoNjVSR9m$O0=&FAwVNwy&HhT+kWY8}Wg4 zkb;bsfVR8%pppoCeU&j1d+KPo?A2|aQi0cMctpJ*_T%;ymBeH7efE->iSt{B8BG%-?Hx zGYiXRdtv@wWiQO%mG+|fyMni9{x0{gn!ii!)f?LeosE3aCt6-uh5l8Rth{+kR(p{ptG&pQ)m{YW8r~u} zSNm7NxyoMcWC7E!k}uk;zyh3=x){zX(%`I049*MeMRZb?L~vH~A~>tj2It5wF}MJ7 z`ANv-Wsu8j7eX?jA&|@9BSt3+aJKdY7Zkx+T{Svc3&fDkiU^j`$#{v?7-TblWyxW}agE{_{KjPksnkXvpQHSNL5D<8| zO84w+^0!J;8>P9_r#UpA=t%xn`FC(CAo&|5sfv=ETa@HC%KnIMtK6+5T~U(P6(!lN z?2qVP%e<1bMoA_vw{}`Zd1Ze@o4fx|lD;U(&x(@#hq6D?eNZ+znxE4>M-R4vqssAw zfoN*~7A{_%y0gOnYfYi|#=7TDz^i{)_Y4-Sd)N(*o2ue|{SMpjhbUTalS&Xp>$9)b zKyW;pl=leX++8XHNfQUCbxtytE=BUC-0URTr4ng*VlqD2R)teUpIh|#C z>hJ^cH}Dp#IXN;=@psCHMIId-Hz@+jD>v5yV|B=s{H!XKoBjBmYLlc51Fq*OJDARU zzdJ-(VpXul$L4Y%n+7{^Nd+ij|KIgT&}41xcjr8Q;PCtY+yjB%Gbd~01V3+Rb>Q%O zsyuyJ4Fv* z1w71f`ABu-VAqbdV!czvz7%lkfPjF#l@c#1~g2f947B3|U_K=I0>uL6g zCEfS>+&}gBczYJv%SZ6Xc5i3d7<{I3e`7E-H3oz3j+1N*2KN~Q*t`N2E*%4gW2eKx zg~*Op^4eku?E_DlGH^g*x!dxRP^o}FEH+K@hsem45+X1VD4lRAmfL@Hp zy1~@-x+|M&*GvPlUegJ^LpO<8uyi?FX6)XDLdI_&j4o%OR?90GT01{_)<{x`ypOAHN+Y}d2@9t zFHBbBs+oRa(r4aWGi&HumU>#*7c@_bfj8S8HpJ3}c+c9VVDUDravVHmG2ct=t#p?b zU|zji$5LDC5;w@j0(be4eR5SDm&Vt%-d~Zd9E>jinB$&LL|o-s^jv6ng7++-psp0R zz*9hN;s(r>pQHc=-U^_+!HW9IfyhhM9Cv42Kv!JAnV7wooKmoZ2(w3ju1@D>&;J3) zk~_T49!LI#9;LRCV?Y7C&WsQ~!V_8~JeM$4re4}*D@+%-CkGh?pcb76k z!9^$3xF4VxrU?vIzgtYd&~xTyzwckHXMe2+UPOokqHAeom;33%h4kF%r`wf;1LY2u zZGQjh>Ei+wI~A7M^wC3xihUlJhYuW=e*@1* z0lC@Nb=yd;(*yHPoQTV9)73g9FzAO>$T#dJhHO~-ga#%in1-Im`g#w~rkGmC@H}MZ zfxt68?+?IpEQ06DukXN=83k-@lf(FOXR25R*CxVV*teAJ=fMX%Uj|W)*2%c_@13!~ z*26_ayvnfqN{zLCcnTZTh;bUhUxtlZ%%kj&KdDjuf}iJ4;?{fK#P1)y0YPy;hk)0#Niw)(k4BcvGw4nb-GH*>6h9$bg^-PFGtE8fXfY{my_E93K2b6mgA zlAFEkpXpcb@XzW2-N$)W@M$|q0zPPI@O#dk?$W)6CPE!|^n^j$FZ+e{d_VBbPyQZ< zji)_~ucOtQOJ-X!eBb=K|GDt}JGfb!lm`yq%Y2sH>=!o}d|z|x%fL6ev;bc=>B8h9 z_~vHMRsq2N#fPWkPp03WT=`NFi_Zhxa^_n;n^9*pEGUz^zi!r^9KU2XO52H)$zXwUblSL!|P2CP7kj*{_ttzr-#?- z=MDs3KdO%5mHl4?uOF@V@Op9EbnpTmWyCHszCT!uO>s5O-FcM3!VOe>*~0=B#d9^q z`}>H}mB@RmjGuvjuy$!%$&pUkNt(Pi7QT{2^K+l`JAeB1<451|@VxcM)4?-0JC4sy z8^15SXFq!&@Luwo7~Ws_BjKI4cK`2#ch5h0c%SpYbnu>jK7aq2{lU~t;qZui<_Lo+ z{LAP5*UV?@uiu+8Y1qGHocW(%b2E&qUN;6)kai* zGgIMTR8Glh%Jx51?gNY9NYIpg92*fcAm;*f>Zrmg!U{#@&S~1csKPA=oSg7+=acMS z^A<~m?lQD(_e$jFcJk)473je}{>V+AwbQLR#q4jRF6kr^r_*q~P_2PdyXAdA$6*(r zNl-72BuwyZi2a zR&~<m@}4Xm`3e^wfJhy~6o4LsBWPbdvM%mPm;4V-I%Z!8Tw+ydWJ8u$teTv!^I zu)uef23A?%yGsLKX@N^h17Br<=a&Y)+5#^w4LrgEKUNxeqy=V517Bl-t)+oSSzudf zV6_E)sWk9t3;b$n;4v0>Q)%FzS>Sg{17Bx>|56%woCR(w1h!1L#Cx#-FU3JyFBhYH zj_@+ZN08C=z3my!fK2%LlRM`Yx2S?G&`nh_dJ2J+zQ|nK>nqIv^Mq@S@()WOm^-rLQ z#a+~&8s^pZf285L!=Hbv2vd3t-@fCN$`;g93R-xZQs~Ia-nWp(2%^E~YC2M^Z*SY( z2)(#hbj5w)cfY4Nc~xb9m}=|i0<0u=VyPTa4=71fAH<;7ebEY8C>dY4z@31fA@j$K z$R{GgZIcyO$>9uiOH2{IAcFT)rh=I?{jRj8_#uAD%1rOQJUwpdywU7!P`3J$~$lvN=+|qzJEcf?b%?;J>cdvpK zbZ_!G+>yPLlm3o!fotC3CH4uFck2_20PF&p@SA>ostr;7D}$D8F=WD)ZTA?huR#!D zOT~K`n=u=ksWFP6k~{Lfzoz6Vz~o}U#ODtr0EaG9ru#M}NUr?@8o zP8{RC(fuvE0XY^2Qa1n&vJJ&vq?LS^gjf{k@@G+BVF`%fvAk&gar28?+~@9pD=n@U zMyka--DssyC)u0-xb;b@8*ZEU04<|}K0dnKm#Bn~_3kHo)!uws%iugUAvgPZP=-WB z_%HJf275a_CY^dPG}n4CLJuT#ugK2@#d_tLJ@bS758NGR#*G2igP`k>JAxUCdl}W* z=jNz-^Ly?2@wZv}T5${3U-aiA1^gHVlI8eOqqADv&+%K#l@c3qAI90Lr`&Cb0;i^n zO%$e1bdW3psg;jE3baxwJjDHuE(bl`dJMFW^DwO9Qt~m7x$z=75Xd=#gZ2@A?X2)F zB@QjLqf;MPgY)Z;3#&j^eZvcrCLXQh3Ph8u*CoESInoi~drqm_yQpdOANWZ{wLS4+ zt8JLrpnZs6t8E7_VdoxxNvF`$_PP~sm)T5ikS`oC@M|fzDotpi9i95X9VoxPUFxCh z?uEs`22=?z*<@wTc#eV;Fgiy>81E^H#61G=ffG9wmRFuC)a0ODIT+%^SC)`Aa!eKB z=K`pL3o^U7novI7(i8ASZ7t&!E%PLu;`l$r$*Iez_-1U5eWLHgJJKQf!`;9htA<+< zljEoLElQ3j{(f`z0rjfsS*aq9&YwXsC?xZ5cOU+Sw;5{lGc7KChdb9w-(h~8vQ0nL z$v3=^{j?+bQ)otCz8_{)P0Mgl9B%|C2=e=i=MDdQWos2-T-3iR{JXgt2hqOyF~$y}-4KE5kGhZR;@=C- z(bgP>+K$ba-VeLmX_F(up=16c-X~Nt*JbB5wceqBDZkICNo}l%+PL1T`6KT$y6fqE z+BnT!Mwik|8nhqym-*v>9!3oFlzm1O_{u(DzxRRF`c*FD(2sbWZflvSu;J*qiLM^` zs2`3^*4o~4=U{$60Ab8gl`TwXOmC*^NCN&F!f14Neaui_0OI3)#u_Btk9o*?<)`mF6m6f zKPT?k>uk0{l$1YlM?VbZ=EtER=;x=oZ>S&-@(Qkp+%vn1WEVa#(!CVR-_Dxlr}{vx zs>2BCcq}z8)=;8awymyQHXQ8(V78z1wwX0ktMkl0F===DT(Gf8F+s5A|}6KqDWe1J>r-iG|t+N466*!F*G* zICqgf2D#zW>fJS1HGv92=PWDA&W@#G-*20o85x;pw8X~LyvUK>6EnO&nGXykd!vR8 zMbE+L*{7#CJAYD{HbAsOUtVx^HMd?>rGocYnlsrkRkC`kS|Z;bksr3^DmOYDnWi_V za+@mEzR=niT4UYYS#87U7>;+N7rDm6ZM1bpJT@M^y>}Toufnwq4O!2abmLK5om&z# zS1$=xR&n117bpvaWv#J;o}oGBbE6{G5hq~b?haN6h)d*^@)(mH`d8obG{gl1_d=yd=P3!C-;p7{mvxH_D1d57xWj|*U1 zV9}9VEb~nR_bT)Xa(|^?!xe9B6Iuv)6io{}GI=u~Df5$9>#(T9k74_RiXNjhth=9# z+!o>;*aP4=fMpBXXW*YOw4+ZW^vMm_DXfn{C#Ecf%rwZKPx5D$V)umJy`4X4N4c^M z+GpGvryIATfjH9-(dbe}yNJB{^@IDOV*I~dSQtd7MePVJG+?a)z4K;w7fo&(uUwS? zN!AnI)?8h2)tmBfisHi_mEeAaxjs0;B(yZ2tFA~~_h%sL=&}6d-x%fPf*&}gAa|p( ze3XKh-s zu~)#yGP<+!v)BZ_OHzU~hp)6{6LW&x1F5L4%uLE&m31)f*gs<=5&?^oRt7Ek6Q!8B z`H#}-MajFbx+s4!0#Gj4q%d$S!__>k9#?b}sA)}*z8<$vx({n=ipamcIpi+Pj zk4+*C}D8LW*Xce!;*9dIziOxh7r!*wOiE}EIof8FdPIzYIIzOJrH z1&b?#3ugt8Qwe~|q={4fU}HUNjtCI;#h$%tx*MUV5jp6@-4Gc_0c|sKK?;o6T6Q61 zhVBg2?X5jtE{3WQHcP-&{cBEH;Sl5%(RZc)#y!Zs4T$<*L*24ZSMxhk$4A12NzcpU zK|E~X{%l;3zy(Nbfs1L}v-;RWdl@()T>fAaLb$2Dum&b7zZP?9x;6}#G6bBpP2<** zB){}-oA2FF)H@Pc?+^rUt!Fp4gnH|;*bzU@&24Ef;beO;Qh|%2Z1TRyh0lE*$@}PD zZOr&ZSP|7zzAM)vskvPYR1uNd^?#e96*ZOi&pw&Ziwtwmg6Zjnfq9b;r9#u?5 z$v=*un}ip4`P*FE6E=C0yJ&mSh9rj1WItDGs?**-oty}sXE{J*TvYDy`p&|p0 zzYMFwBR@pXh8gy=;sV^N&*~1Uo z#ECJ(+KYeqm>;?d0wNyK9(I)$=Gsf`E7xd`O({K~j`nD-bW4sgVmdQ_Viek6JMSRc z<&Q*u0nUgO(id1)>78BKZ5*LpGv@Hn%D{+q@+E$*$~_52K%QrhhG2t{@LcRMS!u#f zYbD0xd_YarJa-25cn*z{x~*+?0}>>^PhSzE0~U87fiK$@Xtp!U9I>EByj9y$hx70{ z#ENy=_{_;)GWtU;kEM)?tvnI0vIgL1gEX7R)_6r~YK8h`L7Fu*G(|)9WmlG~d3eV+ zc7^7ui*6SD>zN)1GUPL0 zNAtxOM4@6>^cp*2_D+?(Pf*&dOb6Cxh_+<89=y+>8VZseS_aK#=Gnoqi20aBxP3y` z($+Gh9o(@ZbUxzKY_HbONVMNdV@7|h7NOq9Z-_>ZU6Tgw-f^wg3h^8};l>1V!H`k~ zo5UF~yDE7Exmo%(4m0$>7D66HQ>#xbb9XdCEO{KbktG3JYmU`~O?OZ6Hku8_+gKyM z@tm|?iS`k-^Ks4Vr~{8{e^>y))1(6gqvLAsRR3}R#JBqq_mV{UaQvk5x47-tMiuf; zI|(0T5|&)gwt%kC4x!}y!mD^Dg~raL%^?ldDG6h$Ob0fmY&%R!v#FUT_GWPrh-(zJ zw%@xm7lQCfVMZe^MsDOitA{!HE}+U*i#CoKLMK=-Ok+HP+;08aW`O*Pp)|$#D+5D| zpMsHUb@!rohDCutVZ!%mvAdH&);?=hP?6iaFS&N~yp5xo4AAx40}D zxJBu$@n+h_8Sm4xM=zs>!hX6>>;lq@oZs|#rzY-S_h`fxk}}LmxXgSNi2@N)df;lF z`Pv1|G^lnY? z=ey~ereZX4b_qTl+p<{z0&2M3DYVdE4S{bk0_bP)EJbKQBi9D$8@YV}o}-Hvt__>k zgy|beX~@u{a^20=5UUgkx%%N3DL*xIU2IEhkh_K&yqjge8c{|wK_qXbaJ++ph3A_1-a9Yc)s=SXU~%x{`*{O&v^RxSGb61iwrNuV%En!(|)rrTAma zD7X(kOy5q%UNZGjO)*}yZEY?(lorol5{|@Ror(f*4bA1z;nRqAW>n!Epkg{#OM(XMGlhMXZSE7;Rw)_t)$;S(Y84)&3KwXu5;nU)D zA@-wDRnmgwt?h1A)b4>=(}YB7n34@mJl-js*lM`p%bm`VYtW@(DMFo+^+IXgL#!e) zOsLAdB9%Mm@l_}?k9#ZvKPZ!$XO7@&vk&3{XB*CcMkGrXxuGhP6)YKL!LkpQF!URB`6xVy`U9`mH%E$`dU z{8+tP9bioqHSJGM0^P`w80w5;$i;YLuG*h`sUly+FZ{H>mFFEW3{xgamZfMZRblZ` zYE*r}ZwZ-_7>n>r*&CPjDq>H@6vFqgU81N&``4fWqigwbfBRGGt6wjY8~j4CD7_(G z1yuucjQ!a^7nZ>FEL0Nj`nyh8>eMDT{2MKSwY-KVb|l=^zHn0`VPFnxLMB=h!lYjd zrW9t7yG(D8zFikyK@{CxoJj&av+}P-S(0o8+oaLU>WLzo>eJm}Q!%Y%la?6?@b=GP z!Q_s;$w{qqw~-wE*rMcy#C4xxEJpQ%>?a1!i2w(#9zhgbJ8B6LX^|s(rsXVJ0kvK+ z&I@T$sX)`NxMF40vJWGqHHpz)spKVMNV{2$bc*rr#A5lOjd#RCtc6KKI3@d%A$IK8 zuVfC*pR^aefN;ExHpZ>fy(Utjcx3rYWkdFqf5dCmY%ET(j%_16iS=2W^s|JvjqBz! z?%?xcsUwP_kCJ&#a$EiGQFaA@W24_BrJETAn#?pQm088L5Yc$zR00S0;2|2tJtA5^Jq(1< z-F>UKYO=*7zjVHezG3ct6p(^^YR*ouof9SH_50II-*|mn3D$PA(9K!pyf|hdDlrQ;*N)1_LUP9F}#B!E`$9@d4I=iQ4yD?cAG5e z;G-m!!C=mWKx;|2HmppAwJZTi_L9B%uNtwB`2ny01_Z4^k619SXSb0msK7I=|G)nG zzgPcVtZ}}2RP$tlJ=@U0;BxiS*_*#0Wk()-=N+T?DxCQhdUf8JvLG%E0SJSpTAMgJ43 zz>jve`IogcK(cQb+!0WkWxdbdcwR6brk=N0gXQm6#05UqMFcMJ6J%_-tij17qN+NY4h zb)cRoa48y#%wOj}Fk@t=_8kv(^9S z2mCsvT5YSZ78Pyv^$7)JtN#h!3VcpstKUd?w54}ryM#>&33KQBaDknsEZ5^dx7GhC zqA}xhq&h$UkJ{>|sMWUmf;n6L1|IHvfSYpX=CAbo{Hs2m|0ElH8mUxHhmcX8XtOT^ zO%_F%D=)4Vo7ObNre%p=L;PCE0lRp+Z>T^HV$3Q5cRn{NwQ9*OTQUM$Enk1X9|{F% zm;DuwbJ2RO^>%%bxmoll%-rlwWWi#US|6sWC-0BVeY>onpAV`ai$rvvsty~Eo7^&W ziBi)|mZ+yF(M>_>I4&|+)Hv%Zoe*0o>!Rd(Ls_moQys?zsac!|Fb0O3qNC7Rg#~|Y zrjm>AEU)`eQPFG3s3N2X4I5{r#K8Vs5RRBsSw2Z)Dop~4CSy`bH0&N>?%O6{-@0zh zygFY!kR0@LA~~dIzRmq|pwR6bsW$&*o3Ro6YJuNikl9M%e(&wxg^V%YYU6lA2RdxK zr)x^5-D(epnXT?{nQzCsAXT99r?rQaJ*Anz;)+E)mh2lt147s=)}ji$8DA3ABBX4F z3^mTG3kYUUU8*Cq_G8a{d7o_f_BCm?_;xtgKF{Gr{Vld{4z6S$y7m8fgW69RnAk7M z(EO&&DXf#*p2zo*u2p`Du-e4Bejix4TKOr@5zld}`UT_2zFF;&)ohu4^Ihfk&Gr9! znozaWzPS~)8K2CPdEs0bghrcGV) zU`p1BH*BdK!U8_AZi^3@#L?FOW$#_U>#C}L@3a&NSWJ*xMU-&UV!gD8+EOkFWwyBohW^dhW{RE{ z*%{&o8W1ea^IvvXgPr9WVyID_Hh)nnG*=zVx#5H1ju`Cuh^PLI~b;#4dTS^t~vq>?TW zw-cU|W~8ngrc*t$9?3M_>GpxLms>j+;}F>gqvS>tZOasYD2Lfk=;oD>hg0b$S`cb4 zSKr0$&&yYY-TCcnXa*f)(`Ff8E8NP#SrxNz``#Sk`JKQNKjH=_8E-r#U&%gUh)=2& zbF2NQ$@v4_huZ(C`?=9mR=BfyhaAtyzsr4WvYkD0cTl^#+5b?b`yzTWeCQX4l-`^_ z+gFSl?4zG$=^S~XKUMNsBR}qdP|3$3!psT!`EBm7ef_%-zUGpNYHP?zogSFCK(A3(bKZE9kFq!S=d3h; ze(;sW+PnAlfG7b`d>%au)QJ8=&yoXl7{`LddKW$QFLv}{(RKxFs;lm+({a0sHM$Mf zeP9Y_sw~=A-842KZ8GOt0VkSi1!~-s%_k-w)nbB~-*s$Jaf_8L=E`|G@`}}oOzj^XsI)c>ndVR|*oar9-Y}lK*+c>1? z>b_%2HNGe2KbPOz{qivD;&4!s&NME=TTa-X4IZtrZ~H0LEj_Hv7CjeF8#`B{o={V4Yzssz4}+<&-N{-AW? zQGMKxMgU*apgWcdl<(=P*QOJXsUsJ%Kyp`Tm1sx}`xW_^fu`#G{^0C}OTpO-)`|eS z^cp=ZE51h!`}t1C7!}|-4|t9g)*#MWXoDw#yaf*S7%CWP*u6%hW>wkJ>>M(XjSwiS z+R`7Aq2gFlnS#rY$rs}oUJ{3GWT0^`q16{%P$m+T3FB#dZYqEwtV}<}W7; zQ{sSQMWqveX6#2rC8*0)d= za2H+*CwVpg8a@h5e()!cM2Dh8GYsqmSvuUusg6;0@T1K=3F`+27Ai8ZE}Z6~mkeK0 z`Fao2P^Y1wTSmnYdJ`=Qs=Ai^QKP7ML)OS$3n0{)l1S_%Wa=mR$N1gSu$X&zFK3N% z@NmXa|ME8k#{C!vAE5u9_@D68SCROO6{Tn8#DB@-J0t#Q2s8!aze&XZV^+YG5dTY7 zTBd>ViNC{}47?dj`AhKMuRZb^!w#{H>Y&e-LF>aCJ~2Ixip8%C`aU||ho@ddh94D+ zKhFP;wgP)(<*Obl9-<2LAdX)&Tb(CH=gQkBa(?QC2fZj!c7EytRiO<;%U5)F;^(KH z*@F%EATch82->*(`KiiVU)}Rl@Eh|)Iisdk8DyJqGzLogA2xa)I8>G+^Hv%_NCAhC zbfTn#%*#`CoIAqz0`bX`=+0M~KxP(ZSms!evDppw>sViHj%(4%i;Pg1f@z%NN;8T} zZ;<{;|70?@^$r&d&hsdt)q+w2KdhaVLbGq~ub|)~o;RunMaWC4JSbzEsS;aa+zq`UywSoE_ zG|)){T_p`j+i2DN1(Hj5+M>oKc61_@DcqIq6vPwaWOAgAXCQaRgF&q%aJo$thsI9k zsK042tY%V1F%^0>|$7DAb3T1q+yPWuk(0%#zRd!b}^4f7k~DZPyU z^#xP#seMKM*PQvIAnsD;wW!ZrNK(@~@<;b2RE3bK zGdyjQFn2O3ObkcPIDx_^w35^A(njJvLg7vDJ)@Gj$&In;)f-y|U{!7n_;4bc9QFhx zJt#oR9q3W3KWbbLKde2qaXn4+Gry)}f<{ZpGz3JMGw)3_7m5pN>p)O&&5s(lAn8V2 z%>i|_sIMSPbBf7tL7u$M{hi)Yd@7d2#K7Fd#>-F4pJaLldhi~4Am%bjkw#RAU18dT zCD&A91dhP%qcH6J-8rdSsjFxayj;+eFZJ##JxG**sF<6=(^hz(r`6+~R~Wd{3W2Ld zl|W2?nM|?Q%pM?HSSb-x_7H#@*L&w(?;i>t9uK7x55+r1=%46izw~v4FV?QO zzh)E)RHpCjHPHO^4r4p?kyE8(^qs3L)2~W0tulS*`dHsN&v?!Lg1(bB#?g0@TB7gl z3HnaTx=Tx{?(zE0ego-(Degf}RAK_6*jJy4IZtUe%WJ*UYc`GAvQUir=5KU+mNamu zG@CaC+8*z>;XJkGb4?my)E!70Oi-9fDH_pb8!k4pMmCKbe;C_;I6k8DYmHhp!UEn6 zhgmyPoypJcno8Bk5>S;~flIWVN9&{e-K_G#dM#;;pQHTyf4~+y(eo2~{wz%JE}x%R z^WuniC7A}ShvV}TM}22U=O?cB`6qsU;@Ri^wWISB@BW7vzab145GKw~ydPFm>a>ZU zpV-Grh^5)}^Am}#iNp8S?w5h@c=~O3IMgrbv&~FC!ZkvkSX9SrxqzP*k7LSMO*(}MS2!w$N$78FMC5FBDmma4l$z-HJSIJ*)AXKQ zhECGZAXN>x8i9<3sBS}6;rOC~=s8*lx|$eXrf&?o#!^_u-?@&Vld2m0;rnQ%HU*k$ zxp%G>|F_xIK=&5fNCCJu+%4I%mI1p?5ml+A?39|~Tj7-`jiqfzyu*KCjv=?vU2>0* zdy9NEP36Ev6%uc}k13~7Xx2@IFl&$Ivg$hTnWQ7PoE+QeF7Ur!pFadEsQ7>aSL5D$ z8@~`Mzy7R3Z7cJKwWesw?AVH_^|-s$v+0rc5kgcSd8Ib7WM{k=ReF`bUX7; zM5zf#?L45MD=7{|;UKato9BkwmaW@sTb`bD{6`_Jk^vBOO&D04sOhh38QxxBv%#*a zcx}Gc>xLI-GZVpB;U=RM(7Q=%QDV7!5^2W}564TC-EPuB|JrVDtx;l`X+b~$(}IBX zXhGhQ{|IQK{w}8)_Kg*8J5}Dzgje9?YiEs+JQ5wbMM6fgPn2f7_>Xcq98!d|x10v5 zy6gVv!3IUP&zk9`Eq`D!B0?`^nPIueiWS8Btx^VxrRz9KMA_Q(g33iNs3I{F29KKO zYg?Y*UR(1briiN63xIj9i9fLSj3aj{uUaSZe_=l6Yd-SoB@$Babm87tJR|<9z<)AY zLsOd7)-Vp>2aD5mME+FUb)Z|Ov@cACI|s#YPCjq>KMS<(F@7I|8pI%0)OQ0g*+Uw; zb_6h6xw{CkFR58?8x@QUJ_Y?)YRwTMA&=oZX5$cdh{&+!?Mhv10FxXftA+N{L@MAm zHbEA53sY&#RB8h#?`fQFZfF1~$pL<|qr|ITSzk&2t9Yv3Wtlcw-l}6-)#4`6W^a9#98PO)8u&FMpx zr$)dAk8zE&9|VT7#P~9+x9=2lpeD)26X~4tuw~G1j+d0%8>08cpX2>ppr*+Ex0-65`nKy$_OJRsZ)nf4>|b0HDCp#<8bc|00twX>>>Nik4!Lm_WRuD;f$u z*J1p%)IUJS2i#{EqG9|SM#o^xGF)lsk7nTH1%$9C5_zSNP4>DvN+LCAuOLS+d1Ked zet!2;fM}35m!tTNhRlg>KTu0IYnJuLZZ48iDk#TUKBAl>aTg`R(39EpqTfB|Q)}`w z);ur0+DSrITkDhJUeTlcyD2jg(#=1Wu34nY#z1DI&y01@F$jt*Qj9MgT~~N9Lv|c2 z8l8KJazN108Nq4DJ*k9J*)_&r+A!ZMd|wsTfHKUi!I=KhM-!T@y;1mJ^3ySs z3iux6FIs(-@Z+45%kX0ienwZ6ub)xtE4rc_zsIb{pf4(}w+(Cx&faaJQr|i~H8GCDa2Z^_T z-;0G#YGFK8A$fC8n|k$ureRDD�Rk@+UT-s8TS;7rz$-NmI27XK|kqrBPiTi^Pg=aNy5jQ5`4jb{uXZZC zTSaEU)HMpi=T`m1n&?7XUfq`%;*)fGPEVWNMpxkSRXo!$6~BYKHP=*MV@Y}+x2@mxFz9585T)iOw_UR@(=;Qo zEsof+3?GEU`x4#i7#-}fXV!RvHaqO#eirJ0#ib5GzH7#5Q(_MmBIq=IK7YBv!volT z_s3!AnJ?gPZj|uZ7#gtDMjR6@?nm9k#PKR~8a5>k{Otg;i)5huyZp>{&8V9aX13L| zd~eOa-5nCTw1i3Qnp-!exh4N_EIYv-=YGK`+>4zyb}NN+rmUGWr_N~HQs}zHUa>iU zFys}lY2*#vw{>;c{dPq>8oK@kR*M&{R*`H%v?-k>g6&m0M$0H~PWMe^M3QAc=($~G zL_E9jW9v)wnl%sBH49f4nV6P)4`s*zdmnb8SjTT%QSp!P(c71H!5(F#WXJX>Lc0En z=I!F>Krgi44w_8DIXia+aJ4=6z1o7=Kn7gB9q9Hy*ctlW`z^s(DCTk>wvY2@mYruL zFCF-xHss7c#y?vH^7k9HKp;9LJFg$J^@siUI;t<-e{Fwz%{WWvzzs7xzDLnvUDPWc}9^YVRDq|9Sd09{p~%xB#yL z{SHorvw@oIfj{`>MC^gNpN(S=oUbapY{58o$sYK$DBM*XIHf!wj_rXXOI~$*AdZjQ zTs1v~as%&(9m@w>wfQNWkE_EOG@wO8(u zKRUM?3?W-Qu4oVojC8u00^v3aq0~B{z@4IIY#{!`5}GFU%`G(X*v5J?@CwP9c8w#G z6Z?pPb&K%X7AUi%?_jg3u z24E4j*Xyr8Z&-5bkkAN9Zw%+@;mp0SWH4r`Ll`p+H%_54IZE9M_;Pi|$NN@ZqV*zV z-1X=Q=znf5W&Pnn)e`wIkl!#2v~oT$WVFt`8AV#LeAx`{OVwpj4z$Z?{s@I}Zg`DD z8?-9{>{gb-oGQ#B2hAch29br7BdA3wihPCj5@lyoBx*lKe=TlCeTYraK9i(ORv%*g zvPy!#Q9lQ@ISJ`wbr|BdPgfmw#y_$%cyVx!_8O}rtM4V9D@^TG0cfu=J8n#mdqjKK zlsI4RrU9igdQi?^?kK+2qNhh*v3*y3Qkg!vG-zC4K}rs>h?9wpz8CZEegKjbjlQyo zd!uiQpTV82NHvWa?eGrI)~Ku*eN}IX(N{m&;~-??8GSA6f$2xM@}X$Hy4`6Nr{<{fPEtL=tI$Dd>%C!@At^JJV2EolktW!d>hYR-04e9*j_9|j*X0d=-vQ?SW#f; zgx}bU@jiAktq|Q(1~EjCO_)fKv*4cq+?*!3*Buy(hrO}*iC`>#BAs|*RQ<@8vd2h; zg1zDaj{z7ltet*q2hVbt0dKto{J|cI4h-YvgYE{=4BtT{)baTxmZn<+2*pzDN<4|% zo*0Q^Qwu1C_0C*}_0G=Z<4M%~d1Oq0>X3gXgLBw-JucG+=Z>Z`hH6-JQR^`j@r27t zC#5)2m5?*+Z~O>c94caM9cMdOZiX?PONBA;fKFz&hG{?|SkVg88TY@2{usAd7BAuu zP>q&$9xvk9mY0hcG3Yy~YDUM4`1iH8LC5hTenQU0BRh>3kttR-PP~ZE7QeoF@glll zsWqwMAY(cnLol9yk$U&HvUm|cJrPsV=6DV!6fff0Z`d0D?~E7muSEsjR4G1>8!zI6 zp?f6`D24H7bey6*Uc}66b{H?B(^iWS%MdR@RM~j8zcvS+tvp_YzPq0wq7~ysC}{_q zm{Ij1gqh+dCb}KsMOa;4!nv2CC%My;mnz&xlRJ==|<7bD!BwJwF*uVPSZSVig*G}2>XXwSXm8y3H;_PK-%(>gqR}QHLWP~ow%!e{ zj+Qa}MU6|*ML=3Q3UQ0nc^_fQUB(a;t3i?g&JI3S!{HXI;ZVX-HsLp-O%e)IXn2l_ zC{Dxg<#-i9aSWYmA4{t?ZhVcuFYzN>&gb&@8hyVD^Ds_) zjXbll@Tt>l-%EQ>umPTO`rE?GnWLQ zyrT21w`2s-po(IlRy164A5tvDWAriCBNvT6=6Zgo*F~`+NAtfHZ^?Y6I0hZ{M}Hs9 zzuNg;B>o+p@74X9-aiWd)&lu7ZX^(n@wd23!AIka1iACxQMZa3%ZRZBf)ml=Je`3x z(ZuuTrA%E+Z-A#*lBj8mUBc7)K49ARIS

29{TN-t`0N9l>;*W3SI%%Xy5VvuX*y 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�R9wvSQO7v((tnh4HH!f+ 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 I=%byX@4WB;~-CyI+{9`iwIp$dX7JvT0-y6=K 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 z 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 TWn>{M%(v)B9J+TZvhJ0q*oZQ+MnXAuipNzcn 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 z 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 F`Klx`_-pbC;sS|72(h*Mc;dxH; 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�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

%z!2;NtEzr+%~TUzvN;Ade0yzjWy8m{83 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%0A&W3Dob7P!W26L9X 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¬by9jrEMIb>^~b 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 z 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

oPs_-H(<0E! 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 #7{ru~%F_q)~~wZF|>`-}ff@mpc_OUJjF zesQm9{}aVmR=;+9o9U-NG5#CHS61J5e4FWK;(t_pW%WbHx0!w^ej~oJ`YB&v;c6P+ zY^ERl%;fJMYT93!P64&ZHFA`sw?=yaaFD~S{{9ODWi?6J{-Cp!;We`Vr7@);(+@_hYB{59e$s~=nWvi>%+{<--7DZaA$rQ_R7Kl-)F z|8|WptbXJ8Hq#G&WBh%eY3i@6e&F~vck#tvEq)}de(3l%(@&-Rd&E~(-;OtpjW*NI z#osQz@_hYL{6)`_@#o}k$D1pDE#)Kel{LOyU-~vPfA6=Z{a+)#vijXXM=>&en>+t^ z#y=o3`Fq0Z2T-`EA9Q4xejw#Hh_9@^oiF3tOg|R?J>n~?pIPzf+f2U}|4#9h)ejus zX8Nu8k6vo(udKeEFXP)xKiFZ~?-=ow)o-1D4`DNXzdzQs?K$Ert8d4fD}E&Yo#HF2 zpF8!pnel7!pL&?7zq0z79+>=JCcd)z50!r={K6ru=;`H+f2We@_Qd; z;w!6fw>Rr=GyPNk9Wg{x_N zvzdOphw<+aUzz23|5Nb=7Ov>qOyA$r_>X_K)L)q8>HGNNqQ1@a11bMH@s-t2pUPJw z-)8#xbH=-Ue^Y#A^#h~N#J8D#xzhNLdXC9oS^cPsK8kNM{Z{;!i?6JH!53J#n#MPq zyZon3{O^jN3#*@Z_Q%#{mAic?%G%UTKrsCeS18z zeQc&*Ncp{|P5#R2r%rsE>H9~U{1fq&XMDcE!WHAY&lj`*!`Z#S%UaL<|DQMWdbNCWs+W0h%pcJIo?czo zkLfpkMeJWKUuN^YF~9MeSpS>p)$+bx?B5%{Nq-5wTE3ml_lED$|CwGb-_5)?eDT^? z|F*5zzgm9H%zMxK`QY8@`TXnWW2t9-{gj-)^DAS%TJwu+zW4O{(Z8R*$(Hx)y^ucX z4d3SZBYL%bna%fx@6tc(Rk40`UEilalU^-9%I14xe&=;@|Nc#{mM=2zJzYQjOJB|P zv*ml4_l7U_i229UtL1&(0?xPRgD>g7La&xD?R)$i3-_2S-yRIMe{B?JW{j24ln9cW|_w~D7dOrX9-6{2~ zuixVJvHo9hzFPDBdgK0iPxnv%0DZ-->pMJut=(h)>bky9zcIa9zR0ehH`YI(-;rKj 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
  • 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�nvQ&-olxZYP*w1~PcjWNhq^*#KGxi)2O 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

    5F9g6}sm%?{Tkhu$lhul^EU#iCT= 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¬dc;07;ws45b!^){F+>LnHgS-qdDiMkOT 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

    Ze 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 z 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%0Deq>xcW28=P}cba%?+Q-=KWH1WI$Rh*B81lnc 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

  • i`#SXn*%v8u9YWOKLXl+7`+G{mMc)bp2OfLyCa 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%0AoRW2zB8v*+S3$TZ3En-+K5PJr#}r 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�jPibx95~RI& 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
    !`P*C)zn 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Π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ℭ_0Nf^)TS_8}pZGCF`oTw%1*q2NY^po7|vSeMUpNjfKSGF?GSHb(&?77oj3wSM+*4J zIIf1Hl=3vp!`XC@k7 z`ke?jsfsR1yiXGAhdMf6YH9`Ta#zYzw?MUkYtEWz%$;r>=1OQafd6y<)c2FPII}t4 z{x^vP?x+N_*&P)ZA0KDm80A|R6>pAz+^|A!y(arDO><&N@3amFO436T_G zMpBy_IoweIjR+hn#mqY@oa&QF|C&M5a_{QHS3%471F?1Q|fr1&^* z6w0*IKj4P`kB>_*C&b%hP*6fbd?HBWe~NeFFY$`fC_OTGqv?SwmgATTm`61ziw#d8 zA+!C*!eBfYMBPwLh{b01#h@IoDL&2-4NCY!0sf)K^KW|K|AQY8hd&tdi^@d_{IA=e z$csYUpKvzfSN|h*;E*H6g$l(b#8XWjQMQD*q=cj-JK_>uQE`Y!bVnz|Ie+5#D{oYS zJ<4T5<-8_mv^&ZkmFSIfn0!%*B-eNd*=|aTOR}LM%w|ti99j}WNdKqK0b-_qs*I7qNvBylAMw z9%{=d$KZsdxVU&|2~;YP7~XCnjrI^c%z*rR}6ZPE5_!H zcK=13C)R25ncRaCyq`k8F}}ZW4uYP1;`xzlP$HN~O2p$q-sm`YtZ%SA%KNG3zq$Vs zHTl2dk{myB|20y$e&UICN4x$qDajkRPmt+HXo5kB2`-b<HqKS6P51Lz%kFjUt} zKdDhD294`5alAQ+n$;bZWKK$qr$&Qrk-9icPDmvoF)^MBG2@>&C^;!EiuDbKsyU;~ z_D|yCTu5e*q9%_sBj84lff|_23FvT0KG+PsaGDZOM0|o9YUzqH$Jsw|4R#Oq4W=<8 z9%S87XfnIW2m0uWcBn4sd!pjveI~Or%4Rpk#XC$cQ&Iv3hxm9G27`E%=Z(VXfk6Z# zr#asDH}Q_BBzshRQWAJ1hN!RFqmpb;__zccI-$>$kOXRAG{NkM@c*5$TOeNB$j%rH9|;MFPe_Dxyg!b2BT+&ESc{8y|JWYugaE)eag>wT%J=Oyqk43&jXgN5HkN5o-XOw4<>&NCq)Xxiz_eBS#A=b@aFb-Ma5A-C; z`PYs?@rjsXP@s2^15&nOHv4OLRFdzf=mw~FQliUD!T(MpDYbAMSO63FN3_y|WG<6q zFiJ$>Ce#uC+oKZV%}$JyH2tx{yYUQ398okiIv|U|G)X!?;go@YFis|+c94KO*7FI~ zl>Q{SqY{!5+@G4Au^8^4c@7g=7`o{kl;DfP5Qyf1WRswciOB66+khQ1z^2qwTSio&!7twlmu zDhWwGjD9g_&KPq%_yjwNagZJQS2URW|9Lyp07WW4wo{#rN6%V_0ZT{dy-_~hURe&dep%o$rkW%4{#Ttd4Ai zk)1yrZ1I@(ZFI+JHAs`%PH=W;ZK;-~%j3chpvl0-2rqEJq-ncc^l^qCTdB>lF-Paw zqkWIZBkL9G;%vG&U9w9OyEw4fZkGzp=4J~nQ8wF_Vw+uiVbz`vY=&9D#mY`i*3wYI zLNh9cg-!dN+w1@wHwR3YCrfrFzD+eOEJ%0NV`mMUdRBQd=qiso#}17VO1GBel^qh+ zhc+nVs+Z&=8_C8l3T(FJ7(pAB%FgPR(WpCMY*S?iY-a1Z%@9nmwpR{@S!1z_#bVJK zWrC${r^Or%w)xOS9aep7(WH--B0^z(R}Y$AWlGggaFWC2vVCo{MYlv&)(Bhk(qb^R z^wLqAl(w{F;|zYco9V#PHob?#3#&7wkzF!bAEe_6wv?8$odFuFW#_#`%Lr2^Ev}o} z%FrG-T`c<(JB<}jY&TABV7d3F`!>5}(+xQJ;H^o&-QMhLlVsc-!WNs^**Pjn>>G1G zv1P>8zO8w?!JZ4-Uuq%j!re|S)yB-`mK`}}_9x5rX3J=74Q{bk42yna_3eG8KejOl zy@oDtdx@QeFpI2%%4M5#hg&^c7xKDqN8_;GW?e8Wdv&k1?{b5+&#wCW6Wgh^(RN?k zL|V4FyEUtAidx5XhhUiGw&2?YEqa#t^2oBZqt?o30_#ZE@uPNgH+O7EtdF?n z7g)BZy>fZF*z|2}vO}}#2E>|CSgk3}&Xvu)a&c;{vi1*c_l2De^J-x0p!I*=?cENN zd}zyOF_>6>ZNI_tXRCmHV*y3q;8j<~xj}=q8Z#iZ1nqOvhQvEo|ViIW)EUduJ$X%!cXG#5dIf4l68rJhoj8t3|$1?|j3C?7+zed#AEa!XSpD zHJ@zBiw)M{wlY}9TZ%YVYy0pOdfl2+E?1ih9IKFm-ax)%yHsCF%gq?EX2}k8TRd#C zA~-^gt#OTA%i717YKu+8-sB%F(zx8i2BO+%T~qf;J4CE^s{YQyW_2+eWws=39JY&% z&46OiZkTQ^2Gb3deYCP256A4aqMz6-%IyOvSHb`WxBFauvMqZ zZFKC!Z3nR}YJ<^qA3Ii#tM{GSRsN(mwb_t01H0z4X)s;PMw!jtQC94iRXqz~Ck&fA zw(=&GEf2Y^_T8MZy>$}?pLuK+jVy(+`F6M&S(UDm?P1&<<@iu<*|!_Zezlz2cvrR% zSbm!)+iWh6n%&whlfG58eYFW*#!K*=+$wCC<)iUfK$ojA{#+ z4HKLyZ4FHAnsTzima4AU>Bo9Fvrl7Y+b2^yRP(am+DMglNR5)*HkIhOq*)x5%e8%4 z>!pn?c6LbESmo3H)cPRpo^87&Z)dX9dc&G))^uaNd$Bkfl$)npo4u^7GMiZSz?xIr z@tcnAgqRkaGwiNfthbbVHkOC&(QXzD%S|>ULt7XyNhj7xsjV7m(KBZ}ZkDY^yJ6TY z+B%z3yXaPsI>+XD!+eOE??6n8m zthjz_gIL)8vtnb>FYF`5w2$*evmv#*{jnYYnO(7rZQwWBYs|jP5}Nd_H*JzMxG7Zj ztp_cOL1i<@(i#{21k3Vd(WtOxMN5&rS1pcl`8u($!Ww`FknPH@vF))th1-Ko;tUsK zc6$cIlIw*%+kodITTk=67+4S6+zr=uxt$H{^xiY-F7r}5Wn0FppLy)^r0cA|`+>*a zsFp0(l*>hB%?=AwVaH4;V>?D|sO+3msZFN64WS*Hz1rqZ)=ieGXP5IfmeCcCx^r?Pjfrst($c`59PnPZAw#!)Tel)D@{p4E5 zpB?=CV*|AA!FjE%t4eUI#bU_@t+JJ~JRq|}AhAQ*Ce`w_Hjk=B+kCAZHob|tMbB>Q zR?8!kS)*B9CF}#cw)(ZB!Bxz)_SY`k)^;(gY(5r??Y<$W(yrbH6T9MV`t4%9`>}wb$-l>xOH8t+(@fP}=93>e|WJ2ZChXHzsy$Z(h%^ z<$vAHgYkNs>%q9dY2aGp(QN42d#&wL3@~Tcbg|mb5wSzF9oQ$oYt^p?#n$!qZwGg~ z&EB$w-TthXK+h)1I@`N5TwZLowV-k0>V%!x>9^Ui-lUzl`fe(_na91@iDSBiGkbhg z7QNQK)=R5ichXD;R<{lF*IwXouzgq7Q+AoV&c$-Qh}EoG@4g?-WGPR9c3G0yXKq_~ zY%V6vp|%9sBD^`ti)FmDb4ilg5y<7X*!f|>E*Yjv?QUaR?ng-#uGs8!Fvh9Dmb=Q< z+#E|@ZY!JBvHc7uyVp0#n+^4HWj|f0uWKPU7DrVZ?8j&JCLU_LkZJnmF_SIz9_0ac z`rlsIWEgd)6ic`5SG(CvDwoIO)K>I;x;JsUvG?qxYf)|K949uGxPMLe^Q!ar-PJvp zHk75sDD8(mb_KRnZ>rs^)p~ffx@WzrEd5|l``BhTn(fv}wKIFwTXij48mrsFzHv5D z{nlE%>+Jttjn(aw4VC@Gx7uuNT4%qj^;TaMR?k+4MYN*m+Zk%9+^sQN+uC(rm0i0r zT6X8M-wtf}YrFKx$Hk&e^w#coREusRm$ut-TfN69wred+*uo};U64=umcgLy7mJmB2Cxfr`@mvHj$K^Z=Q%qhvT@!4TsvWx_@Ug; zCbT``R#0NkxlKvCq_8N1rk~iQs*T|5`csQzowPNxgDSN|Y&Ms6IXJRuZWr`f(a*A} zUEqwyN!!oU=~A)W+D|N}TM7$V*+pMvx00Lww4aun3ae1}M$`TXLHc%RRhGuU-n08v zc7Mpaqu5;EX1aU5IBJ*MJ(|8XZfunguKV_;eN6{bYh&GS?dOJgWji0#y~LK^<`Z_` zbeLHSa8*?G3LD|H*`q<6G#y(7>)m#fg|C*ba`C%M=g%y(ypq;jSYX@vz5xORnuy>QMKIQbz`60E4$fZH?XWVlf}t?R&md9 z`2>Sgtp}#PqSq`=td~ptsGwZ7m21g5!7kHmko)#o5z9GNfr(v1|5I-5t$V}T#;C!H zS@f$z@=34QZCveDSpLN=t*&Z}ZFwqgS=`d*RJ+4MZ?MkTt=!Ps57CN#y_eOTY$z7X zp8YssucnhxKRBtquo3B5nu94mj&8~-OTsSWOFIW(!X@RP-ewP&fum~C9@DAaqc8i# zhOF*q<>A?6kTnOlOYOn+;q8944N9Ih%grFSj||P0^5AA^dfnP?P}loR7bkX0ptc*O zZNIfcx3M0`t&#S}etMKn7V~Mp8HWBJR?DTG`s{pe&-O`iOVvwTd&_#;Qfts8OR%uS z>%MhaRt{_?*>_eCYP&r>o@}vo)IPgZ_E8h-agvVgD6xxWyVkRz=-IU|)@kb%Tj+;2 zGrFs2TbYOW09X!iFM6&kY3tsxxi}?bzdJ9ial6Ql)uqIaHrz_UQ)36c0Zs&sT_D)c z{YRy}nphj`_-Xo?4S|hyGpOu9Zfy=0i*{YKTnxtcVtY;FEy4Z#UyU<=5kZ})ob z%wk#CChH74)Vq_UZLF+w&^=jhnN0@e2K#hnrRin4ea279MLWo?({vujkMHbrA#Nhr z`6;m<9OGkiW~V^wpRq+jNpfq-xUwF$*1ER> zl(3A7!gFIEWZJ`vqt|v7Mkb4z+FExeLmR)`O<+QWYS zX77ZKvkB9)?o6;(d%{cmvs$yUM25-G1|u(Q!A92=i}fHK$C;HjS~fH`%H4;E3Kzqe zQsJ?|yH@a=psKyk3d8c$I>*emGl_kow}UUs?QmW5HB78VVMneV{dQhD(vJIMGMjH@ zZ&dc|EzFkyVA}zFTaZzUz#F~fqF&S+6NL%}OX5sCKPExCEi`^8b7^`L(*jdyL z^I>~fYctahCHuk=fRk`|nN01()!4bij^(vqc6cSWj}g+fmyPvNQrmLdSXBRIm8>^x z9!yWinE0>6ddwPu&MnSvp54Pe5)@0!eh!Ai%MNLKoE$d2vE|eii(&nnO!||49eqK- z46(y(XKj0d#vub1JLrzAj`15>Ye9X)^yqHe>QoM|Y^R4;M_0X6zO{B|e`y;Q%x2V{ z(V$vm3#9+D$RP!{3oJ;;)*9I?uD)J>>($Te)q}NP2~N*etF)b$N0oL%(|#(0AJ*6(n^=yL?r`s>1&+z?;N@UW9#=gF zdr7*$7S*<|{lZkhF@Q?NB5EYf5zR5z8ZyR6u`+Z;QQa16sC5z&1R zZCm@bJr;Ls&g`0nrtvGWvqI6wQfdt;?4;zsY}lrEp56;V1@=agWtJCW+x>3)9G(}}OKZQ7Z!`zO!iPrg9Qlen8CRCK|4Le$$a!w# zcf%rW`)j{!w%R3NJ+L+-3?JG%SNCdc!ul`E61~?w+0xvRT?ybuu|a|uAKF@O7m7J%g8kfXxg6v+-1ckB zcCkC2+V5rAt@mm}yU~6r(hkV9J-i+?!`v3fv|Y5V<>q!{v((}@dhPJ6F`?|wXu8;J zt87&tG-Xm@E~RVqqVqCidCDa!$&v?Z$Dl&63+@7n8%Ru&X7z zY%Tk?fZ2tWZM)Vcn+{eJ=h?!}cB8UC#X@1V)79<3AscCoNe?X7(T58vfd+1IzW#n07J-N$#l9bDKa$o01W zy={&Cc1Zjl5-XN$C9!9HBhLggvYU7||I*avU~A)@TT|=@#siy`!*VgP#oVTCvs-09 zBdBaSDwnLc_iPqzZRnR9>*d0JLwjO}TWK9{zXI8}!v&pT$46#+v_ZpRge!M_VMd`w zGVM*#!0u}@2+u{Y?%TIUn9p_38em`8o_EVF+^I1-r|hqjsNJg!dD>l`D9yjqv|Sk1 zusI~V=`m<=vbWn!6I+C;ep=eEC0XOA$kTGivF5*$(ng_6KHJ&Ll?`}qzn+im+r_E< z4)B^j?)uY0bf*d3BX1AGUb~~Z-o-s~bH-yF%2-)TJC9C#&8DF(68_5;5F$pjvH)_i;e zmG;*!>>JNZ^-;O?{t>w?1pRuz@FTnOMSNmm4f4D$RlUTjcSnUih0kGjpx|>|Zac7# zRmC8)%PPAQm0G)OC9LgFFKGtV0M``jt-1E`Y3G_-*k@>rf?s#1YnEASg3DQp7SGF5f6$PTmaBeAVwc8j-P_4HK^3+s%`=G=PUxoyWch8DlK zZD}?AYwy4||GhsWyO0=XW7`Ejt6N67y~Z_i(rhS?oG#ns!?L;Bq{>| z_7_F$&ZylTov2BZ{=}x{Y60bTv2TOgt9y+-rjx$?)@L%F?AzL{%yeoOZ5E-lW4Ok< zsM6r#BCG6`WtQ3HQ)RO%O%l6xXLl>?sJHXDwHep(Wk1W^@L;0VcAyuyn5vd0TZ_Hy z_Cjq-e6yH0w!3Ms-7l%OmiWb>)~;+)TwbKjCYxinmf*)&SXJ6V8`7|?TA-T#WMAvb z$rjt;q(8N5ku|%pUkqn}+}!<43wQ5x``zifU)m4Ua$8r9ZU&7_j}4aQFli1>>z@6= zSJO-J`@wekg$}c3TZQhBwdUI8ij7olBi;7w_fV5*fAfuxe^LMYgP-+&()-Web9&jO zix2%s?`eaJcl&kkGmBfdZrQwX$H~v?ZQXkO@^gAm*>UnkcDY$EU9r652LTVFYN?0+o2wSS+d_J+^tZNI92yL0aIf{@#_8?2jA)4c5F74fQ$I0LA?>PC07x(M_*=IlK&AsJKKiIf!+qV6S z-aC7*-TLYN=laj;y|lm2fA`Kk@Du&N_V52Td${{s?7VZ{n|p8W|E%}Ob07PS-dB5X z?A`jx{)2zfd+Ok>ZyWr)w`Gs-_xIRi(*IWP2G@UE|AN6DTWp`#Y+QLuFFWmio0j)K ze0jL%>8IZ04o4k(@V{QO^r4NH+77&TVCG0dCSeMgP+~IWYcr{$6jnF%Okfx@@;)< z_?G>4oP56>C!ciEp2ywpw1*!3@PGM-qi=tg8xHr_aq^Cn?=sqP@|G^Pb+Oty|Ci+~9yq z2FI+N{H*>#2fcIfpnL4GM=|)?V6QE=d|CgvZ}*NH-TL@v4TeWO;p9K}Uf;XIQa!)- zo54xn>g~ASL7(ki&^zlgJ6?`>S?{Eqy|TCMz?UuB-;pVMPdV-u4?5?|y^DG$e4%&J zefPiB{ttcO;!As9?mhYyz03Q@|6A`tpX`0ScemkJtj6A7T->znz(fAwkOQ~>xqnH2 z-{%je{iiNo*xT<3=Y6|>Y5$?SKWh7N2Of9aaocy6>+F2BugdoACt>3qcfND27q`9E zmNgp|9(0r5!YhwjTo_+)>xJRM;=+#ChUd@y`qm5k8*ltW;ET3zT{vrDwR|w*PZ~d9 z&|A1icGa1vW&hCe!qN7S?Hyj9a=_MwLmlJ&L+yLI!5*xDSM0$v{Pa5Ey))>GfnolL6+el5&+r@i*P}0< z*Kg_Hp1xRq8pZdF_`}0P|J|RySbh`vp5agEKa;*#eir$jyZA?h_#3Vh`fo^5JtzQGCx`{zr!V|5f>u<@@=vVjDffPgwu)^u_Z1c)|A!e?#ye*tp9rYV#W9Q!uO2$CH)W67t3Gxm(YP=_?|oeiJ|{4lTVgEzVlk&GyH`w z1poK+#qwvhKc&CtL1F%hMqfOyKc;^geX;x| z%HK2MrP07{RQ7M z{F44J>5Jtjwht6A`~+YH48Nwo?{&lYi}60<=SSOv6)=3y@P}82_l~D8mft|OBERWq zHU5PDedvqjC$9c_`A_M8mcCei8u^})fAZIm%a!!S@_m0JzGwI;{lCx`%lGl%dxoFW z-{;`a|6=(*-g@!J^pBx0mha=O7r&x^C;DRfv*OqEA4p#;zlr+aGul7?Tj>86Du434 zetJ#tKSWON5Uljrpp z7K8tE`eOM>6yG!AC-i?xUp%j$(f^C`C(EDJe`r>*0a$|`9c>3ab{n2j0ujq^ACkvr~ zk-ul;Kc@e2`eM|_`sMozzGwI?{m~6V|B2=Mc-||Gq|FEZ_GR^7oARDgEEl z7t61s{5^O1)8BMB=RaA#kGEd@;ntA<{`AH2eSg9C+~rUIF#0KZUVp^;FQ6}$KaSe( z8SxwX2OkmIFP87~T`&KZ{;~AM@@Mwn?xFu~OMgg~KP!I9`gf);mhan({5>CST+#nN zeX;xkFRb7RzGwK!Fy#MB`eM|_`a7%rBl^c48Twx=e`NbW0VBR=#INX|NM9^}*x9ST zXZSV!%jt{dr;+a&eoOz?^u_YWk?$G)Xd9288?yam`99u?ZS)MkVEvT7SpG1I?-_nc z|Hbsh^2a;E4#0@-8UDh(L;e@g7t61s`!}B9*LmQT%b_ zdxoFiFXVqq`eMZ&M!skGWBRYAFP5K1zGwIq{hGd5eiiwi;b&)s{QpW{EI)~S&t3cJ zAAaM|e>qvc&v(T(dWK)J{=d){%lGl%dxl@re=>csd>?PU_$~dn(HF~a7D55T_l)?} z{X_pv=!@kiLI1n!PecD|`eOOB@}JT_;%Lraviw=`hYtw(pGaRUe^&gA{#o?J^ZH}@ zHGT2CentP&^u_XLwZEZ%1%0vnVKjc8G5!w@7KYnD${~G#Y`99u? zZS)MkqMxK;{)y#}qWGTSPwC&5zF2+}`JUm|9epwC zjY-$d)D=Pv*Af`1$OQ?h)YFWT?9%l|3Czc2lg zEZ_GRe9!Rfrw9M}^u_Y)sQ)~}&z}+ex6l{MAK`@+JR!d4F8(uvf2HD+=k*t!9sK=| z4gD{czYz7mXT)E4Uhr=vpDaJe3oCd+{+{9I&kz2i>5EYx$A50$C_DXt9m8+vzlFY7 ze(LHYzGwJT`d88y%O6I*XZQ;*2>Bm)Q}!QOejE9o;oDz-?Ame$eX)F>?|S(UUl{zC z&==3^XY{{JUo79Z7x6tK{}KJoH{<$AmS05e_Y8l+`nRDkmOrcg3oi=ozaxF|ynagm zEc#;kzP&59(KGVT=s$(NSbh?<-!uH2{^j(=@|(!_3_m$Pw14@y(EnojKHduIyZyn> z=$}bnEZ@h2?-~9=8REZ?zF2-@RZzg|#ZTyeT=|pb&l>*`>wk^DSiT=G#P^K+bNWA} zFP5Jnc`IP}8Ndn{entOk`eM94&-F_~|3)_t<0qD%*?v&K>&0Jqap?aO=!@mg>c5o! zW9f_KFGTnMJfr>TOG5mQ$|uXukh~S}dijr8|L63@@@M5=(ckwLq5s7469l)S_(?~r zo0FP5J~`FlqG8U2^j7t5cO|Cs(~=!@s|EBb$=FP87~#r*Ny z^*{aHZ^iy6%WoD!0mJtUzj%4*znjq)%TI#-cjtda|JC%x@@Mtmg#IP;#qz5tzGvh= zenrUt*0Dg8gw7tiY_ zuMh3tc0%Ysv3x(@(SM%Ne<}SV>5JtT3!#AFdxl@rKaIXv{;d9Q=|6|QSbh@1|K0h& z@P^R-_tF>7>nHTTL|-g_R{kUUKc_F2@B4eb{?F;}c48PmvHT`#zi0G+^2X5qf1odx zKQn*&r_djf@x1H4-ge*Uce9!Q6)_($hv3wtI#Ws3|U(kOkeet}0 zMgPO}#q;_N{jbv(%P*Eg2Y`{kXXKx~GxYx-=!@n1_O93doc{Kcc>Iy&&zip_>)(OC zSpKZ|HT^T`i{;OX-_m~`eet~h@Li$*-cMgVubrd(bnZ9^lfB5b& zf3}|-#!o!2pVGfMeX)E$-Yd4z^U=l`{WIx{<)_j7@eF@V{~7ef@_oGZ;urM)gT7e4 zj|bl~;@9-Aq%W2~j`H^mKdD3iA9bhD|6=*G=8ydgDBZDjJbkhJadiLDbC>^nga0P_ zHCeuI?|SWTS^ul_#qx(y`#mH6l>RmJ#qzVr_Y6OMU&#N69ijik@^ieff+ytf8Gd%eULxUBMH4&+zjPg#5onUyS*0jQ)G+i{;Pi z{}KKFp)Zy{EB}IidS~_@S^li}CF`F}Uo3xC{D%Hp>5J#}r}QWE#qww6zwnVTet)7b zmha~q=8tF0pNxJo3jHUR@8{ck^RN17h<|7LV)?WBZ$kg^^u_XLwZEl*A$_s@S@DM- z3;BPQzF7XO_zC^Nzl8o1%byj0ME^MYV)?V;=ky;;Uo3xC{F45^(-+I16~ChYdHQ1c zv*J(a|B=2}{;c>d{TtjR^uJjCtoXx^hw;A$eX;ym@e}&br7xC0EB=W72kDFD&x)VZ z{}Fw${8{l!`g`9s^q*M%toRlE+tU}zpA~;X|55bC@@K_w>A#M?SpKZ|!;8cCUrJvr ze^&g2{vYX!=k-(ihuD<5Jvh zia(|QHTq)tv*IV0gz?|{uc80M@@K_Q>ED6ASpKZ|IsGTo7t5a&e@y><^u_XL#jogJ zL0>F?R{Wa&hSNg-iRI6V-_n0DeX;z+)^QXt*8c=x1&sB7;gezfUO-=rx3K;v_KgBw z&rj&r^u_XL-GPH{-@}R<0kGrq5sA5XT{Ix@1QT1KP&!-{uAko zEHB z%%Ab+L;SbW7t5cOe?`BgFP1+m|C;{(_YUnB%g+`u`&Z|`XXHQqQpo>F^u_XL<)8dl z@ZUyXEPq!1DgDdni{%%1;qv#4{Od1=_{W{e_LJq$%D-j(F@5p8zWrYX-P-aN`r>*0 zjQ;oNi|6(2pV#l=@0Ex4i{;Pi|APJ<=!@mg>c5))bLora&x+sBzm&dM{;c>@`q$7G z%byj0;VYs4j=c}p53>AO@l)16lfGE~toZg%-go2oeEMSfv*M5Gzk|M5e$yR2tH-}* z96#w-L;TMxfAYNkl=Xi?Uo3xC{>j%u{C)2m`d>V+Kcas}`eOOB`ah@tB>H0cv+^(L zzn8vP{;c>F{j2DU<rLjQ^7&x+sD-$7rz(~r)7L&umu)31l|`_lbGe6jpG zntz_*SC<8U^nl=t<@@=%VjDff&%Y7;F@3T8S?wRw{~&#_{4C1fGve3uzeiszKaG6P z@LT$e4-D-W%lGlne$Vie%R~DU`r>*0oc`_Ui{<-#5#KZ7m-Nr1FP1-w+V2^DOaEN8 zpDh1rkuQFk)j!OxZGKq(W4C_3m3%e%W8^I_4)0IM*CGFqd{gqDj1$Jf)Ab*;mTwyI z?IJ!k;`>JYh=`vU@rxpUeZ(J%_;V3o5%DzQjSpVio?{}uYs8O<_%#uKHR25qS-bz^ zBYu3uuZsBN5nmPYJ`Y{H|9_77ff2tX;*UoB!-%&$Z0-JU67l^aeo@5li}=cjw>*69 z{%;oX10sHT#2=0LR}mllh_(B_eZ-H5_*D`AXT(2^c&|rB`;YkH5x+d*&qe&Jhz}aC z-T!G3KRe=gM*OXaH$7_Y{*H_Iq=@ek@k1g$*Z8pAZT)-N3Eg`0vgrNSNBr)HKNfKt z@zoI@^yszu-#p^GM|}T?pAhkLB7RN8?~VBL5&tOSzeRkVv)AT(bi^k_{I3y@BmTFD zKOFIu5%2z(web&+IE(n65kE8Hiz5DP#NUhfml5yw*tPi_8u1AcKQ!W}Mf}!?KOFIQ zB3^#n+W6Or_$CqWi1FA4&QTGvePxeBCFm&F_?m&y4tS5x+3vw?+KXh`$=~Pa^J}yEdQeMEs8t-y`C4A}%9- zSH%An@oyvE|4D1}xn0D0#7~d-eGy+3@oysD>&a{5-7@0)MEs(N-xu)}5%d|bp2iTDi>e=6eNM|@PVHr^Q#zck`cM*PQ!)2FW8 z-@_t)XT(=Tyyw%_`lm$vgoxiB@uwpGX2d^;_*opC9o%BEBTz%On0}#D9u-@Qk(X+dbm#5g!`yF%jQ0;%7ws_K3d`@wR8K&F8KW zKQZFhNBq@@7oW9uf5%3gNBrW5FOK*Z5&tpb{!7|I+a{!~L(<+WUvv z{>0cdettXVKESwt<+;26ME?u)TeAEt@;$>(z7^vCjlNj^F!DXaPwA&G3i*rW=aKIj zeo6l<`eON6rcq5oF;V);Jaif#1V<^S!_{wtL~d0xL{{X@?W?H9{07D53dzGuWA zeka7g2Ys>pCg|N~cKDv*Pw4*}eX;yesnToK}5OkXU&j(pEueEPpoe6svutS zvVKzX{&D1&k?$G)_`4zhQ|XHpe;oOqyZH29s`zC2qsaFRKmA^a|3&&@`3+uJ!PAO8 zc!oc1gTM8~q5Wdi$MK)pH;VkMqrhGKD}(<}^i#6@p{tMhp5bS#|3La;`Bn7)Cwqq9 zUKQe3^u_Xrk?$G)^jE?ElG;y}-$wa+hCi7GfA@b2{U?^6MZRbF!(Rvgmh{E)i^%s3 zzodU3`eOMhURc4?iamIS-~1-Te-V8#>SO%!*2jq!0^l8 zhWLY*aQ!0VeZG_?{7eLVrqMEPoXFp5Z5d3h}qUH1wZXejE9o;V=9-_@~ep%OB!} z6+9t-&+v!;8~i8J7o$G@*;^)HI=>m$Br_~q3h|Hsf5D}EZq_YA+Ge*t~5{Bh)ahM)d5#GlX?%lG-Nm;Z$R zU+9bFcLQfRfZ=;a{K?-!{NrBE^^Yw7R8vsod*0Rc>w|26X9cx;e7x}k2EB!QWLKT3 z{dMiXCd41UBE(P0ia+E&6yG!ajP-9%Uo1b5e9!PJ`cI)RmhZ=F#Ws3|KV0Z{ee+TJ zV)h*Jc{ob{*?9KM_(*IjeO7W zlYYqmO8Vk?{Sp0*uL|uK%P*q%o)LdSe+PZBe4p=%ZS)L(VG#0v27R&oJc{obeop_R z^u_Y+M~+>CC9L;M6_1q^>-G4%f}=!@|d{IPwbfZ=n}fgq1)=}M@_l<(Y@=uRCH>pc z7t8n8+weWZZ?=T^XVVwUZ}Gwkp5S|iU+o_JOX!PHALEzWH;R1E@F(%{PYgNZ|RHWS9oCsPl)ds z{^X?KpY*zrzZmt=e}#Rc$S*ny41aXT;6IMOSbmKcR^*F6ZT0c{R~dhQ3h(b~J-XcL zpVjRtJp9;rz4d6}P9dKsR-rv&<>Tis`olBYGp7G0`eOM*<^YE88Gb?ki}c0v)5!M> zzo!3J`eON`$oC9?VMl2HDHpQ+Wcf+tdxoE|{<-wU^2d?y8GcFswe-dE)5!M>zoGwe z`eOO}M84-;&7WV}{`~w|e*OCMr)B&%+xv%FP_g3s_O94Q&&YptO6dQVzF2-1r`zeBWR2J;N{PAM)l9Uo3wdwcj)RDgB4h7t2p0-*cD$DD?k_=qF_PN#uKmpRxYc z^u_Xrk?$G)i2g0!65218@AF-;jh^8b^dCT9Jg;BVe>Huv{5;CvGvW{bCG_8A^u_X% z$oC9CrGKlphW3l+^+)tyLtiX^62Fo{|4V`O_E6Pb1$m{Dr%Q{(B^SvHTMv-}A28 z{~p_)Z~vE#*K7ZX@t^P?JbuWE|9~jI=Uv7Bg6+@8|BCT?@f*gw_d7y-vEmP-_@2A| zr++T}NtC~@zhXP}48LXlSI`&F8-GgwBKl(aqbPsRh@agpjQ@nbcwWDxKX_;8Ke7BK ziticmN2iAPN6;6`FC*V`*MIa+q~DU~^~ZM)@z0_!mcOtV5&*B@!7<{GPY?dT$tTNi zg1+sn)Bgs2vHUvnJ;NW~E5z@=D~z95{wVT2ck$_8kA6;; z@8hl5M$cXRGeZ0e6rU_VjpBQTpRxY$=!@kik?*<7pZ>w`4(-pQ_`}He41dh}H={3B z{5JAE!ynx{wEwR3#qyKL_uR#&Uno9VelrL=0I%4CXZY!TL;Q-qSpFpPJ;S#}wVT_Y zr7xCWh44G)zi0Rr{U6g8&+BIo4DpxhFn(hBWt6{X#GgDQ_}8T`mVa!Nzvo?@e{OC2 z^XH$Fjn_N>3?CZeU&;7l#Xlp8?|E18hwoV%|GLKO#UC^NMfU!o7F4YGe!j2RM$hQK zg8mQai|6%A`uo2(#23p?qxO47{D%IW=!@s|r}UppUo3wV#rKT(*~7y4y_ddN{xI@A z!ynQAF@5p8eolY?_i_Cq&+Cs_|DWiK<&UHMJtO~?{^RJ2<&PrYGyL@7q5r-`Uo1a~ ze9v9~(H~wE+CL)C>yKIgZuG_T`X&8m&==3^*YrO?Uo7AE*NScQjP@@)BJ|%O?+@)4 z&+CuqKZm|}UcaLM3;JUDc{F~WyZj#+^1s&ym_K=5KWF{V(HG12{k2~I)%1`1V2CfC z*IyWi{9jLBJg+~Zf7pjOf64Ru73;rDeet}0rT8BW@x}A{Q~Fc-;(7h- z?9l#)eJsQm&+C`;FQYG(?~ivJf1WXaru1+3@ep4uf7blT9uxAf>5J#}OZw@>A-;HC zzoq{I`r>*0^syoTtLcm9^$Yrs|3t`NJg+~Y|1sV)=f)uQ&f2`Y)g_mOpF$4<8@$-}uQ8Up%j$ z(|;0u@w|Rb|CjW|^ZE-<2>Fjb74jF)>yPMPOkX^&U(rAG(;>ciUVlpe<@Ck#`q>jh z`?q{1#23%&m-HV)Up%kh(*Fg0@w|R|ZpivP-}A2Gf5rCa<6mXGUi^jgLjOPS(hy&)_!IuZ0T}J~jQ*Rv zB>3N;FP87e8@^}wE&T(&7~+fNPowyrch&y;+Wvg|$HwcmfAY4F|MHhYe6ivuQU7~J z{!{ulr!SW8+q+)-7v3J?KbXFFUVljcCG^GeeZGkA8TqI5KTcmfuRo&yEBa#jv)Z52 zzwUp9{uj%?U)2AecQyWZxBdC?f1vTYzSM%qYR^QK`R~cjeoEH5)aPh9t z{#$(|%pbAxFQWWCqyHA(9sI}87t7Bg-!uG-{s-ub<+qXV8GcfS_`jtup4VS^Pw z?-}{GtbZPT@w|Ti{t*9licgk5isE}l{F?PYMqey{82O&zH}ro?Uo79pL;rh*Km0(* zf6IS|{u9f;LlochuEy_h+n*o5n;Ne>evJQF#?Q%$Uq$gfBmadDhWz*cI_EE0zV9!z z-*eY~)<2W}F!GZqzGwI;>t94)toY-|_YA+H{}cLR`Dx^PhCiXd-({iwV);Jb72D_; z{*?Y5>5Ju$qWGTSXCDgv|4RB|`E}%b?&8z`zT%VR``?#E{+@R=|MvLC+WEJS@p|)b z_~DR$W$zzq`xh&|?=QsnjQmsjAEYmqKaAS%8Gc6pi}c0w`Xl;R(HGC_=kzyR9@;OK zpGEn5M*bE38`Brh>$mhzr!SVDMDaZ%{=!GX_?<&vEPrd{d*0Rjd716cuV1e*UU&X5 z{t@5g{2?oT8pZeAjX&$3LO=UI`eW9AB7L#q``_1Cv5lS)KfO5g-@E9G<+oA(p5YHa z5&SFEezJT&-x1$4{Dk$dp)Zy{-53%8!}r|9|6GWF+_%{OWcgXp7vy_}KVtn6eX;yD z@;$>(KOf?sMPDp`iWgS!)aCCOesXE>pHE+mYKPjlpD*w|!ynPFl|Na2WBWh>!*2jq z!0?A(4Dr89UySz=Kfwztc!KX4e)^^0Z~1oUe=+LAAK5pGe9!O;`bW_h@ARX84`SpP z{^Y+y{L|@+xKv+0ZF4cS^%Wv?)3Z7Q%!882!N5OwSeKG2H^B1xe`AJ8C;V=9+`0t`GmfyPii0`?JPyaH- zC(F+w-!uH=Cn5edYCl>22rsPQ3GqF{A72&xW3C9}Cq{j=zlg@)GyLh#g8vBmV)?o4 z0|kuuIlu}S{^;kyKcBuB?<4+j(H^XT;d_Rk|0?(w(-+HcAzP8(cC;Eln+AW+?}qk^ z<&Rx`#P^K&HT{gfSiX-3-!uI3*CGBh>5JvtuSawR+{Jecf8qDRzm&dMe%0Bl?e`47 zqW=f_V)?_!_YA+LzxjKi|HSe~k?*<7{|_Pmo6=t(%TJfW4!|q+;2D1Um*78uzF7Xy z^%s24@Uy=K|3B!9<)=~pp5c$_e}leQei_C041b}&*v-vNZRkI-{49#^xyzsajp=7( z`3YWF!PAO8c!r-3Li~Hu7o&c6{6n@PzvyW7_-W}sj=ora5JvJ zcwq%k@IAvXwg&&_^u?%;{1d#ef+zT%yZE~YfBTi8|0}ZmG+O^W!=KoKgt}j$FP5L! zdnn*8en+eQH>H0yeX)EW558x_PxcD&o9~DG#q;{3eS*LF2f-K1AG>@J-!tMj^be*l zmfzxq6+FTB48Phh#6O+B81*rJO?3QwhMyl4{CCh7%OBc4P{4@q8UC357wL=TPonYn z3_nXk{GZYn%TMsa3Z4+(GyME|!QbzPq5s9GkM@u8!U~??dxk$bB>1D8IQSg7H_+AI{hr~M^v|a+mY+qwXZREP@1-x6pD%_TfLH9nGyL=)L;l~PFP1-ve9!O~ZX5iK zKMwsbmY+ub=edi2eDLo?KPAf_h4gpMAJ6a$)_)*E{-IZe{uj$Hy6ji;_YA+Le^>fq`F_1!v5lVL4^Ip6A4Xp+ zf5aP}VECTl=MM<}+vtnsXUm}h@;$?^9v1xnqA!*|YyM8@|BSwPUO#(yh`;@(q5sA5 zCtKF$@44&0Ck8*KKP1cd^9}vy8Gge0kEbt|pNH@}=dWk@1^rjh7t1fB_1ANk|5HN# zA6Ncl`Ppu3+wU3v=sCf^jJ{ZY5#{e0{)GPD=!@mg8vo?EA^yQX3*#r2Uq_!mJa_S} zLs0jQ^e1Hb6TGm3rxknf48Quf;6H@E81=FKG5Jv(wht6A;^zP>VE9w|zoIY3`-q?0Hwt(?fAs1Qe~+Js{uj${AzP8(cC;El zeNFIF`eOODtB?4ek$+47Ui8KC%gFZ(e|$lR|2X<$`E9iRdxk%%g5Rk9WckA=zGwJ3 z>t9J5Jw2{(|or{^*RrJO3$9Q1{Psrah{K@x&{|)+L)JOhhl)vXL{*Qvc{dXb%oGd@V z3oCd+e9!QU9|!*o`eM|dC;srK!LR6x<@@(jNk z27d>Av3#E|;(LZa*%ti!(HG0FEe8}Ze9!QUJ%j&L`eONhyx@E8;?sYf;*;gKcwq%k z@IAw?_YU#@o4y$J(SN@FdVaZY@DKkpkAJfKI$A$GBYw6$_z$EnmOr!{P{4@q8UBd= zv*?TEPda z&y(OknZ8*5tnteZ3I3;*KUsc;7gq4JVh^4Xzqo$ze@|bG`j|f>`$m!P8UBR+4gM1P zPb|M&T00;?);-d{A=Ws<@@tJe9!Qcql16q)nWX^^8I=V z-!uHtF~NT_eX;y;bo_aS-`phlU!*UV@7H_8_Y6NdF8F)>mHCt9w|K#BgYOys!YzV- zDt)nh-(L8h;itC@{`vI9JN;<=NFBq^Zyo$U&=<@1^A+(u!=KPU@NYc+$nt$W_@3b} z{8Na3fBItil~q9j!><5V!0;>jZ>BHC``!5)m92o`=Kw35Jw2>*X%KTaV!n?-=sGq5V%G-QV9J%lG{S-!uH_$-y7f z7t5czcLZ|@xZuhJLG_s2VY&+xOm27h}m)U_Y6OKbcla7eX)EWZ@u^<`ZpYe@e|9> zqWGQ>zodUx`eOOB;#c$^PG2nF$3y;}5x=GXLi*x){p9S>fA6I)mY+m_f5tQ7XXgh0 zyY$8KXSIJs{~G#Y`9-vTc}D!n(?a}oF^r#BzVEN~`fvF3;NOG3SpIk+6fk_xh+oiu zHhr=D0xzuK3BG6e3(pMk|4d(uw{ZST>>C9PKLJ<)!%yfRv=rJe#{2O7^%{K7@JG*L z`{|42x6%2_GyL@V!G8yRvHT1#tl$apJ;NWrAo$;*FGhXj@9)>b_YA){Kls;M4(%7q zpG51IXZWL+1pg8A#qyJ={hqu0UlIKG(I1oLkE{(SVC3%^e#82g(ih9O|6aQ*c!Ix^ zH|*a1e?l*v^WQVr$LgOIcGW%ZZ@k{$N38xmwC6&5AJ;=-#K(9foxR!~&s}@yUrN6r z%O6I*XZRD=|2=*2ynajnIvYd&V)=O#-!tN8uL|uyiN09A&llt28UBd=!|99V`*`p@ z!>{STg1%V3kGEd@hW;1mi{%#!p@89gM*Qs6q5Z#7`^oZW#UHW$*4;w?i{f1da`{mbZ!<>$5^6folF04w0G{q#5Q&i0e#C#Y;ie$vsZ-?Dy2Uo1a& z_1BA^T^QPbE`725S@VBH|1I>z^ZGgcZ_^jc_w7agp3#2={loVN{U@H+ujoIDzF2+} z^`B?N&tD(+ zqA#A;Pw1adUo3wd#rNFxKmE_sFUj)L$oJg!KkNU2eiQkl$oJf}|4pI)ZnS6U{~=lN zhmr3Ye!}|qr7xb>PwBsczIa|gqyH)TV)^4Jf6vIjrhg56v3!5NTd|Fv;Wuv%{dfFc zq5s74t0=x_`1xCce;$3Y{5tYI!ympi_!rX`%g-X;GyD<#KhPJ;A4R@r_!a#d?H$@L zp4Xq!zaM?E{4|R18S#_1h4x=aUo3wZ`JUmY^uJDDEPoXFp5Yhtx9k(zFP87)t=LA- z@Jsr)pf8r6Me#kupU{64eX;x`@;$?!(tizov3#HJdigKBJ@o&V>5Jw2>t*EF@pGLlC_&NRM{n>uLic{gVEx=!@moQGCycpM50c z{{i~qdHpHZS%3Ef!uX5jk0ReQ{FeSv^u_Xh zf34U?&t3eFh5X;7_+hW-=F zucQ1u!!JG_+Mm!D%WopzGyLr0;GaxiEZ^t5Uj8HcWBOwGSrp$h;+OQFPhTv56#1Uv zxAZ?wUo5|he9!QUPlWb=mA+Vh68WCtSM+~MUp%kh(BJDiVf@ANvnal2#K%7vgQpwQ z7t5bDena|qpf8r6*uGJ~EB258tbh?erT;+sV!V(0Z>fEwfZ=7X!vV)+RgZv~9@CjcwpuKn~+r=OGYKKjqkcle&+ z*R20$`eOM*+Xo65zGwIi{g2TX%lGlti$DByX#bV;#qtxpu!1M}o)JI&Oz^L!FGhW| zKeKNX`B_J+{Wqq+-*rR(i{&S-eiz>{;+OP~qc4`*`eBa;jJ;N{PZ%#u0i{+I`zFP4A($oIUf&;L)h{hdV@Pv;x2_xZnK{3EXy+Ami8TSxId z?<)R1ZGS%gdB*F-ZyEpCLqdG9;uleT&*;DWyP^L|`eOM_snd@uOFr!SU&yU6#v ztM(sv{k82s(RjV~j~V~F_CD^vh!wwx;(JE^Q~FyD4Zc`@cjB>qfLHKHmtpcwWDvf6xth z{E+1jqyF=Z_SdYxLSHPuhV#85~j6Gh}ODN%_jgh&&L5JNweex->b5mOPR z!%&h+jYv6^|9w5*>)QL;_iO&s{5-GM+G~B*dfxNB@8_Ad_S%PbZ=zSrH!8i@d&BqX zKSi&W_dhSI=HmnDz$^H{-Ld|ipT*}dTfSlE!+XPz?+L%mM&Z@+Z465X8orH42O7S- zH~cR2YJ42`uS_pE(C{T99ccJ2{gL!)d>r1d7rZz8fc|WHwR|T%1`ag5H+=EuSpTi` zYWV^<9r8t0i`QS$ue)(vKefECciQ?p^!wAR=k z?eq`4;@lH8pDjPmyf=LLm+&{ytL2N#dsp-6SJ{;NXUjJ-?+xGM`Fql<<$Yc=z0(_h zKz}^FdR{-G{|UW%UO%CKlwK`g-JEm{&{)4W)<1b5uKzik#r0Fm`+leGzy8( z`}KzR#{80g&F92?wftkvZ_~e?UM=tQrp@osf0kY?Kgs?*M{lgZ`v{-E^lJIXnm?dl zvl07O%lFbP!-2;7y{qf@Xv{y7zGTa{fzu)1t|}V7&+{*$SIc+pe9ZTTFa8trAEH;w zKi2+R^e@;v_OF(2XY;)=e?WgIy?S0>uPt9)o7?Es@{hItlKv@M@cGM@_v_56AI3zmHTY?6A~ z^QX34tp5k;<9Pn4HNTb3_s0HP^iS9_yjs4Vd2jeO{nqqq`7-m~@O}C&y;{DLd2jgo z^0EJK(yQn7UHbdz)$;vpzBlF>2 zdbNB#^WN~am16#h^lJGs^WN3^>95oJ+44o^z2VzD{}Fn%d@u9f)&A+9y>(o_Nj86y zd2jgf%CY}_>D8J)%DgxHV3qJ6p;yayGw%)GST+2G^lJG*=Dn-+(?6{Bv*p`M#{;07 z=?8E4a`l-1qHXy6W6O`T`QGrw6T+WCua<9R-W$F{e!+6Y`vvcf`Ni6?{?qBz@?#872O55iNCz6e_N4GP z(5vwwtiPLHaG>G4h;*RgyYyRZAM01+c3&^6jb?&mYo% zpI$w$FP;+fSKA@hub$U;=}UUGyg%Que{WpB3H>SbYI)x;yf=Jnoml_x=+*KKyI%0# z@Ll>Rl)Qgz`C;b0;mfDS{DbM$^2KuT0BFqjhHtMI{=4*Q`9|iw;d>i~fBcTIezklV z;}<=Dyx~XmyU?rU$C>wrA3QVWpFyvduV?G`h97Pc{@?U!dH?&px?+xEd|APvgdnCPjUO%A!61`g9uQ&GZjrqmqG5-d7wR|^Qzc+lJ ze)*l^`l;mynfI>tzeUXdGJT6Zudh8f{4eR%^8IYSceQ@{m0rU2vln^1kq*3SrXTv& z@a6Mk{>$jqI1SIAc6z~qhHoR%fv)D$e_r$1@+D4AhkRMpVn62jH_)r)d;AYpC0o#Xnc=k<*j#r(bK)$-kJzBkrCpg)aXEkDk@H+=8KG5;s@ zYWaHRz2W=xkJ78Cxoq2EgVwae|E4^C2lX>rI{q#rE z_t^6F%zMN4dH(0=)${rR{blrO`Sr8;-m`u`?2hz!e*f=JJ?;LFIlueTxc+L*_v_V6 z@ASt0TMOg*pFyvdZ)EHDhVRmUk6tZb&%8H$kNy^VwY<;6`n}^`^M~30AIlr- zZ@0LAdbNB#TfaAahyDp<;%=_!%yf(^lJGc+rKw_{Z+C52k6!EjcmSmwSW2*c8mL8vgLif&Gb%h_%6?1 zK(C(H59xQLSI_Hfd-M56ub$VJ^l#Jt+4A-5`gvpjEuMcmy;|O{H?E&|b^YkSMc>Wl zce453@DrYY4ZT|P{eEG-H+*BCxPE`6SIf7u`QFv~=~sMtJb$`u`FiHP;d?xPJ$kkL zAoJev<-W20E$P+r%Q z=tpe%T6X=tD}Q*b|M~K4dB0xG^iFU1+S|h~q*u!iv*({T{P3vo2hywMyV=)&Z}{@) z@b95l%lEVE=M6umKZ{;1@B3}0cY4Fu-y8G4N3WJIv-#feE&3bj)$+Z}dspkHUv>9* z{*2l3?aX__m+y=9?@F(hFEj5A-=%*8y;{D=yf=KG{v>*}yzjS}-suhBcz>+_YI?PN zJDcwf-=nX$;`*uQ^%MFX=+*LNHs8Bi{|93IN76Ug@~zB!!*_Z97wOgW`Vsw*UM*kG z=6hrQnEqaRwft(C_n!6r`_g+X`ThHZ?rH|v+?`qBOXY;+Q``?Z0|7-dl zdtTo-Cj5$f#(cHBU$16*r#I%8^c&Et<;!gS-tb-e?da9=_3Z1XceVdxWBo_a_t^9L z{)fVUlU}{ZFB=;`SNpfd{J{y~Z=_c*@{h6p;Ys0FdPQ7+wfs_<_n!6q+cG_#|N3#~ z)YG1SqmyI)Eu62`{7!cNys`iCW8t6i%2>ZzevCKLfmgVG-ta{){2S=iIDbKUX`~k% z^4{<*`uEYR+1K@4DBL*Z+Xj)2{#Ul-U2{Ud8** z)_h+t=6hrPBc9)+SI_Im^vBby<#(-izj*)Nv-ba!^mzXKyDjy!{WngH{U5V8zy7c_ zzm?7R#{RoJ|A+Ky`9bEr;TxZb`K#^2`E2=m=Dp!dp1%{ldS2h6|1iB;zLm}Q#{540 zkLlI&oy>c~*FPEiukRcCSIajt?_KSmzDZxQ=k*<)e`TSic^|a@2NAuIi7o?$T&F5byU-b3Ed)EAAU%lk~6;n@}-{t&IrH^C2 zTJ!yWHPbu2as3ALXVa_Yi|qP&!;k2%r&r6jGVcvvoEG=*etNZhJ@el14f@BwhM&J| zd0%f6^X&29TRi`{^lJHroe%E~-=*J!UM)Y!yf=K~)3N`fwSKnzF!SE<6Q2JCdbNBn z^WN3^KNIsW*817=`ubd)B4%+Et?1L zjrl{K-=|m0k2CKL-#;_vUrVo+_j%LiPw4NXSIc+tMmq2c-W&5fXT|(yyq5Qmjq`E+ zN6Vxi(jo5+U!EO)A-!6DSn0*y8@_f<_(SN`@{P=U!#C(ppjXQeGVcvPrazxvJ+JS5 zCD#87dbPZ-x0&AQjrl|R+Uw%_tL1yy_4kHveLdzsiC!%~&i3yO-}pxOo#@r_^~`(2 zm-HQawY)!Hn(3Y1@by8=KapN7|H*8=`kZwBhRfD!Kb!N<^S_tQKah`wSJ$MT_Vf9G z>v>B%?uT0I>16Bi#(s)#$9_ITua<9Q-W$F}e<{6MzMgq+_%{9B^lEvZ*G%v9hVRj@ z_xjksTE3Od_l6(Szl&Zizh>sWXMI2R_4Igt|E@?q?f%ui6W9NZZ;17)HNTV1_s04= z^ykp4;KjC zcz*q_Nj>fQ7o30Gfw6wI=GU|Jdt?0#`rpy3b{|JB*QZ`|U%z26-3)tcYU=6hrPBl;`o z)$+s4d&Bp>8`p2EgJQl~zLj}z_%Zzl>DBV1%zMKRE{OSe)2rpT%e?oj>%Y%imc0HS zNDBU`%zMLk=%0Q_%vaCr$MomXtL2MqzIV0$ zi(>uj9vbs&Ya z%zMvT|Eh;Ax&Ad$Ph0%ed3`~D4!wF_-=M#gUOlfb>2IZ1&+A+COLyY_sps`=`Zej*@b7#^qbPF z<^6t7yZ=4dR{-G--TW+U*e5);1%}ojrsK- z@%quLasGnz;{QJmc=fUAeEfR+t~q}_ep)*J!1Q=J2C1k0d{}TjuX;yZ54G0Q;RB$t z9&hZYNBmAtJvf*cazpzI-->=VG zQct@+jjLjPD<8?{3tQ{!W$W|C{)Rk%XL_~#OS3=!_MWx=ccjPj^&gdb+WPB1jrA}6 z&RD-%^UG}g-qrn~UqIht%hxmS4d3SZ2hgkK+nM*St{?qb^uuia1P_!BylSQ&yx|Ae z#QyK0SL6Hz>7|ukaL9YZ*M1&;<9EgNQ_Bx3z1VwK^XU(!AF$;cnfHbt^Zc{v)$&E= zy{q;ABG!ME*3XtNGw%&w^8DISv46F^@3)!W=?y=j-;G`^@B4-KhA&33{&&->=k+c6 z^XS#`zF*Au#{3@rFX`3t-C7)IcyIXnwXyyO=+*L_%zMLk=~sVuTz|EEFZ15j{Oe-= z4)k@ld^h|0;|<^YW%v{5)$*fkzBhdPSK%+DSIf6D?+rhozm;AsKhDMW_qVL{D9|wlwK`A$oB7D&A&P3 zU#a#qvQIk<$Yc=z0(_hK)*h{THfcud&7_Ex20Fl z>+83~^*e-KJ+Ck6zeKN=pR5=c5RLVFWBrZ0V*YLPYWaS4{k`Ew^u>GQ`m5zz*`I%T z!x#6){C(-w^68IrssoMndsp)x2!D>|v*nB6i+=v~hM(~Ko9NZ@t;~DFmw%1<&v;+# zUoG$Ruzqj&HvJy-YWZF^-@95r{d?#qZ258Kz2QfHi}inlUcJcUjdb7@)<3p}AN)Q1 zjr3}qhVOs;`z3g9`2NG;7rdXJzijzYdJG(BcyIX5Kf>=xua<9Bda?J0AJQL1ua@_( z_n7Yu-~V^a|BlwrmTzS9z2QeZ|5x;C`F`fT;X9AS{71Eaw!H5b>-UBq^8EEb5Z7NV z?_clXy{q}P6{>sl8u|`feweM_8@{nr_!H>W^1aM^SL>(0KzdxOi-!I#ZzaMl8dmr|f*$1&NWcS!tv;T*E3;Q?h3Hybg zj^BS;=Gd6`O7>dpqu3jd2R4&&(za?f2X@aT%W(DkK@m?)Ve-B zJ_Z{1*BjTjzG3*Sj|;Ds@8gYh;1#?#{NS145207%e0+WEq!%3W-tfh-)$*;( zd&9Tr_oG+KH@IMQGyUKV-`zLnzmHxmKg{NP!xVr53VOACBb)Dy`4jqePK^7fmiP5G(>uN4`$xq3 zKTWS*lJ3XF%{oFD&zJ9(Y`}>^3561kTa=u#g{rQ6V-dKO{ z*zoI}9P3xhmsor{(C{T99ccIw{eJXnd>q%`=S`d6KQ88VCevr-ghOd1z=0B+y*H0~9&%8H$oqkJtwS19zZ}I?@tA)dy&C7^ z>rathaG>D}L^{y$CH?*MYJ42NmtJt7;l1HU^edeb_g_7)Z}(#T&!kt&`|}0!y)nN- z{~~&|{5bph*Bid|$(Vl-y;{D&=F@@3`~r~ z8L|E*eZiK0LiY9Bd)Ch%?@f<)V0Go=hhFMwKYx^G#r(}a5&KtbewUAd#`?Xn{vrMQ z>DBUO=Dp!-UyS)z(5vMenfHco(Ep2GE$=_yV*TE;uHSP$x#aa*n0ngvYjOTP>EjF1 zmSj-RF;KYCox2R|3=_|AZ~yO7{#0x|x3P#{BY| z;SZ-*%Qq^$*n7iw=)Xa)mM=5!4L_h?;R~^TwR|`8-tdiY#rhAUSI_GQ^xxEc_Po9^ zi23WD8S7Wex3l$oWBon)H_)r)hne?=Z+$!FpGB{hFEj65&8PpJ=CkG7nfHdD@ca$> zeEwzL=QY#$-tdj@#QKk*S8INm{r_XU;X48YW)|-{9n*F*z%q97&y?F?+xGQ`Oo=c%va0%=Nr5?{D}TwdbNCk;psrb7l?GA z;V1Ox(yQ@t?BC~2n_v8I?EemWwR|r<1`ag5H|7uMU-qTgzgoVIH`0Mu@ZRvlOJe@} z>D4%Yp7l@Y@1j@BcQ8C1Xw3J<{Pv|W|5;y-^{eGe;B?5BRYk-1>5rsW%NKS&=6k~r z>3=}4mTzR<8-7B+(%G?o^}N3Le(Zl=dbNC!{d&|J^UKS_e}Y~uUuNs~hVRl}L$8*f zWZoOT^Mjbb`Z=+GwS19zZ}=Yle)MYjPUgMgYd?(nr_ihAH_W{EtnVj(njY^!TDS^D9H8}sguf+bi+*Y=3hWxXD{;E*YA!seD~_`PyZI5zijz-_WheT{P-8)KS{5a_vb6t?_I5b z6#iQJI$Pea7rZxokLNcAv3|9DFT4KU@Wr(;|8w+ed7n3JexLppdbNB%o9~VJ<#jQ? z_3c={TE3lmZ}>j_r|H%5!_0fbx37=+zoA#lmznpj=F>mrJF)&gTfUunZ}{3TV}6@n zE#Jz#H++l!yYy=LUiRP1c*BoxiuoI#AM01k7ukI8YW=?r|7rRfTi*ZvKr_A58@_jI z_~L)~{AJ4zv-#fet=qyMN3WJ|WZoOTOMf}NTE57F@IXv*mqWGriLre#G;4 zpjXR}viaWC{Bi96YnsoN_g`;dzBl~fcj0fNSIhf);l1I<^e?}F&mXpYCtJTaeCziy z|Ks#(`7-m~@ICrl>DBT@=Dpzu^qXE7>sQPBew*o?-tc4kqv+N1`ugp$|EuWL@_qaH z3iG|I_1_tO*^9V-w!B|2cyIU#&oAlK@{{cPdBczY81s*(SIhhL#(Z!1+FjwVr&r5& zviaWd9r~5O7yDPs`>!`J-+R{gKMT|2`L92YOg-)UpFZbra&gR8Ykoajzcf{!rmm>4t@CDC5oL;T@zFu5EZ}+`@fi8t@-WDd&3Xt8<)m>wR|J<-tc4kqv_T1{_BlqdZ+iS=ikrL zsM?3rrG+vXU+dudOV;1`P9?qcQ}8G%VNG-^Xu7sZ(P4F z{Tt}j^ZFkB@$~9>eV_h2^lEv(-?)F?SpSIrPI|Sx?-$-1eoVjmFs`3kp8vUa4Gr%- z>;CPS9?$RJ>r+p=e-qAM|GcsO^4@ser3GWE32pAP3Qb!E(7)M?## z{&uqUdt?1$`lryVwf=GDz2S#{iRR4!`J^B>%Wd(E${Q-z2OV``{>p4`UZXdM{)nv^ZJs0GkW#BzD2(W zy?S2XrhgZ`TE3OtKW|*W0sSZF)${t=-{SuLj9x9@$>w`weuw@+dbPZ-7x&*Aen`L0 zkK_KS<(t`j?^$0zo}V7izka+p^|Y@a^#^1BH*vmN^BdWGZ>+zhU-hb3zgnLEIcfDZ z7W?;}wf^nX?S8IMNo9~VF*Zv;&|9E<}e35x?_=5iX^lJGs^WN}n z`oGYt0a`+nBGX8L}{oPTxt_=2wZ3%9?$o`+%IDP`)B`s zRhRS6NFT@k)tX;s_rn|OAJShzua<9R-W$IDkJ$fR^lJHD=Dp$j^lOb`{c8D6=Dn-= z|BU$y>FaFyR_49o+dRKRua+@Tt57mUM=6qymxi|>6gEr&p)=j z@3)!W=?y>P`3vdQ@?|#P8@|3mtp7NAwR|h{-tcYu0liw@=VATc@O}DQ=+*M=Y`!;q z?QyaGr~WdopIW}myf=JF{|b7w{9c*&p7rzBsp;|j=dW{9)brzs|42tL2Mq|K9Ku`aS5?^4-jP!*^DU`}Zk&wR|V@ z-tc4kYw6YUjm&$)*H?=9kNZvRUoBtHyf=J7za_m|zMXk*_%8in^lJI_GVeX>`EyQs zJpcT=AoaB8&w%rHzcKc&)_mV@GriLr>mSm;k6tZbWb5~aAJd;tua;jg^WL-ee|LI3 z-~T^TPuqWe<+%T!xQX|lt@*y+Y5OmD{^j&)dEYO*H}+rBKSZyVUpL#o_pJSI_S+@* zzfJ0C`)_mpD197XKh&E4So`nLKTNNdA7|_L#{OHY#P#3c=9sUR?`GZ`enh`Jy;{D^ zyf=J()tG+_y;}aU_FvEs=+*M0Y`!<j_1Ex^UG|$ zH`ZTYJFfp~cZ65V7n%2lZ_w{Rua@s--Wz^E|1)~^yuR_ISpPwPi1n-I^#l54?&SSv z%lm$t>7CwK|A^;rM6Z^AU$%emS@-|K^mzXK{ZZ;^_rLYz*#G{2jP2>-S=MwY*<1 z?B5%{MSldnTE3Ib_l6(Rf0JG<@9V{UZ}?)JSpQx0YWX6Y?+stlKkrX*{nYdNHvRkQ z)$*fkzBlGKo*L`_1-)9no_X(T{q)P<&Gob8*UP;3tk1u#)8qN)-^)`^`~2&0-d&up z*8D~`-y7@i)31I{tY0nP%e;4W{nm}^_Y(RBTfWS^H++ZZznfk?uOHB#MX#1GviaVa zKcfFBy?S0hp`XyJ<@?!uZ_MvKEw0}h_r~>C%lrLmrgwV759zn1SIc*^`QGs5(_{Vt z^lJHb=Dp$j^rz9Q<;R)#hVK?J{|0)sd~2C_0CY3`;0-@oKm784j_aqEFN4?Qz2WN% z!f!#ZmftV)>iyIC`18o$@XsUP#=c|DKc74%o$sIDA4)y-^PB5i^}g6&hpqJ$+4{V( zzaG!ukX}8nAJ8}H)$;XhzBlF%=?|t?%Xc#G4d2)x?$62eYI&d6Oz-rDFX_KVua+;f z`QGqd`Wxug@dZy5W3*8Oq+yKMO~^WN}7p1&i#THdc$GriLr zenfv1y;{D==6l0W=s!oVmiKwn=GUGX`@e`@E#J-Ndt-i={_pf^`Bvt=tNqh&GvU`4 z_PoA$R;>Rm^lJGso9~VJZTc_JtL1&YxPIR71N#4^SIgJ4`QGqD`a9{>^6kuf!xtOH z{@4CXTtBtE{{N|HtY7`YbUwbmPUif2x@$V$zn;D(^|Y_24X)=wu1Br)bh7<;V?TZR z;(^$YTE3BaZ}<`Yi|N(!^~`(2kLeGiSIhf6Tu*QK`o?iTzC^E_Uw%z`Jiq^kq{jV!ZT9zFCY-nQ-(tR6^L@XV?~V1B z&yMT&0(!N4J=?!Ge2e}~^lJG==Dp#&^vBby<-3{phOccB>pzcPE#Jw!H++ZwR(iGk z7Mb^+b^rd69?$RJ3J*@de*@0{Li+fEG*qqm&&cL`&zk>>^mso1rvK0UG3USa?=fGk z`DHfW8`rPcG_HS-UM=6wymxi~=`W%0vgJE?BOQ3vOh0(TPd1DB|E5>t`~~Tym0obj zd&8H{3BS!lv46FEJ^S+pZ}`^c;g63T~GQG>ATr{KfjqC)EmCX^S?^3*8C!y?+rho|0TUzzLj}z_}UBN`mOlSxPEGR zU+=W_*Xb9~tK}!zeD7-hmN9=f&1cK|elg!0zTo-qp;yayv-#feefsn0)$#+pkq*4V zd~f*HRD4$NUk@Ma`nBno`d3{4MNQvGuW@L;H|F=~*P&O>JHJoAHN9Hi=VAZe zm_MR_E4^C2U9Eoc`n};BTgUY~mR>DiWZoOTMSniMTE3onZ}>L-)%5CleTV+9^lJHW zHs8Bi|2DDz_5L0Azr~jK^)}Nxy{q-}{N3r>|3}~9`R|}t&pW?Me-gb~zLD+U8|xp? zf16${Kghgywf}A7`rWGiv*q>cK{T$P`k(21{Crf*`SZ~#k1YA~(YmRp{e0Bn{O_iZ zas&)$)^-;{ni^?+xF7S*-sf^lJHj@I_yb zz2VEe+t0v7ZKgeW}=wTHfzJ_TvrTrQeEPE${Q-z2STGd(x}r-vwGGY1gmTjO(}l(y@QF=D$9h?>%e&tJ357{MV+&{Jpc^ujp|8J)E!B{9ZQS z8`rP4d#r!WWw?H}d^hvn)&1l7JJEMDudl~=JlsF^f$4lapAVYz`TWjwzF&`{Q%}1d zJicw;{!`lr#W}V*X3% z)$(QLz2V#R2h*$P^?mwJ)2roc+5Pjz{QhfW{oj{o%lGj{I`FEA^R3~_cK93V)i`ZI zdKsk8IUHzsZ}`c9;a6Wi?w?w|08WQ|QB^d2{f*%_q*u%L?R?Dlh9A)HNUxUft`HA^ zhWCbVyfx;(jb1J9&v$rl_%{8i^lJG@wtjE;)?qRKQhK#~hyUOV8uPv3hew6Ko?b2A z&*pnq>wkCnhqQjSd^_{r)qI}+lojIs4>RA*yf=LLo|wNmy;}2onfHbt(eFjCmLF!{ z-+9CLJ{chX{<(f>%s*fA*_vO^*6)q=7d-!ZdbNC! zd2jfV{yuuOywAh_z2RH*YpfL4Pc85B;Jx8H^xM*_<^A7RfcKtt{r5_b=hy%Bsd4@H z$$mZ8wjH(JYWCesi&>K|NVIWth!3f zS8IMdo9~VF*DeeH5_+}#-gqM&c!m9Y&szU+>G6F1C#Rma{`N5DKW)`mzgqJP3{QvV z7ga6(`qia>5xrWzVdrE0-q`|d?< zyJz#gXU)GXJ)Y0MKJ~QuW6pnjJ?5)5zn9JT#`Wv`AlCm4dbPa&`3|nXH+*qL_?zg} z@||qHH++wN{ndH>*z)zvd&Bp6{%h#f^ZEh(N%U&@ZZ_W=^BY&j{x7Ci%O8???^*Z% z;q-WZ|5tm$^!wlE{BNa?FGxexn(x=UncnG*_1AwC>%W6uE#Ju2?+stlul&TAua>W8 z-W$F}zb(C5-sfTc-tb-echalnTiJYX_!0dt=+*N6_oXo3d)ED1evKvX-1CW=aG>GGh;*Q<`M(JNCCz8c7dSZ`@(W`Mj<`?M& z2O7RWqyr7#r@w|?jgP~R(hCkWyf=L3uQ7kcC&&KP@~uiQ_TKPA`W@)i^5g95k9W2H zzsLNK(D&K$jcmR*{D|jYOs|&jXWqNo|3fkV0qvhH@B3}0cY4DQdH#k^iR-79A7uOY zuIB$U<{w7iVapG*^?SoN{uTaf^lJHD=Dn-+)8DD}v*pXod&AfM9rNG3PV8SjuP^EE zrdP|4viaVaUwXljdb8u6X#pQ7mtSDnO=?4@cC0uFF4SZuPPe8L4Pp4 zTE1oH!+XPb>Cd27%eOP{4L_#8gI+B^%)B>z|39(+P1lXPE#Jz#H+;El%zp>HTHe3j zHPbu2tM#uC{!*=DBW7 z^$y;V2VP;mH+*O1@Qot&ug3ZK{O{n6bl?@d zH~e^&@cYrLaXx&RUU0~lRW1JdQLGyN7J9Y(#LmZjZ_KZ+7Jl>fV*P6QPUgMgyYwf} ztK}P+_l6(P|A1aC-^Uy2z$>iZ8@{!Atp5>uHO|NN^Lg;z@Ll>Xo)P<3%NOY}aG>D} zL^{y$efmS_)%bWdKl|@x8`kinHDdi=r&r7O)8pVkV}2iz4m5mc&G2J-H9n5{gY<#} z4et$KtQCIE^<)2PdH?$k@ZQz@r-na>zQdO9XJ3E4;p-QGzKci)8ovI_n7_=1v3@l^4)50+-W$H8-;rKDukX-*gkCK_$^QOWoN{e46_(D1eAhF|}gv41r_G|&DU^!w4P=k;y+6Y16R?dOGwi`egF-^~6v zd)d#%e}D5u_OsaEW$(tmioFl}x9o%1Sl_JQkGU_Me;_u(W2KFz|9(vUg>gMDNFT@V z2deS-cs_LK(YPMoxSn156*dm9mak{t8@@;XYI^m&zEA%RdbPZ-ciQ^vTgCqWMX#RM zcj+1Jv-u`VK7U@6dfM;j)whZHx1^6( z&mXqtKi2i{^86=l%IlZ;Mz(%$Jbwl}e>Zxy=C?BM4PV-Wa`d-R{CSIajt?+rhs|1P~+zMgq+_!0eY>DBT+ z57*BdzP4Rl|COE-`&Y}iviaWdE&BcF)$)G7FyDLD{rhlwJimWuq{jW*H~ael9nRmO z5$jiLekWVMH`YItnCU#7LzirG{ zYrgMy+Wvd=BYL%biN&Ww>o2Q{#{Nh28*dl$)$)G7G2a`0O#dc&wfxZj{y4lhe1Ffl z{@2p0<;(2vLwi^A_X)rK_Obpkdy%*OVt&5=V&CvzrB}>sM>O-)~$$Z|uKA|1iB;-me$DH~ffx zza9DfW6O84>+cO;wqyO5(5vOU_V?d0-y42-Q20$=6!X>cMK<3XeoX%ndbRwy+0Q@T zv+m!`>GAyjJ)C;l{p%eP>p$zov3|AY|F_>i{3$)2&#&z?eSV+wzmz_XpFh-^-^#9^ zH?H4={tkMzd_D8t@U=r@|Id0!%vaCr>-4XsSIbZEMmq4SnSSuD<{uXG&((ake52Bf zy*GS==if)Kmj6NKy=Ogt7VNy_{o5+_wC7LlZL$7a(#LWC)SBPOe*W~X*8leK8}1Um z!Im$w=f5|6>xl60qF2kGiZ{}MSIzW;_pJSYBR!r!e}9yE+Wsd;#{5GU#`@Ko-^$kS zjrEsDh5rh@THc?pSig6*fBN6jx7hLpHlGeOe1S*@8otBxSAA)$UyYA1NH0Zt!GWIU zd-OZftLOCt`XlMp^ZF6}*XY&r`U(B5^y+zi{oQf@p15mVKlQx6LBBJ-dS2h6KZ;&0 zzf*Ph7T-VbSy<_~!OtLfG9`tuhw*6%&*`hPY(o?rj-Q%}48wWDMI z`@THZuh#rp_Wg@@b^VSF|1Ej8d^h|0?G4{OKKx3}n6H-i`-S~`!}sV*diA`%Pk#ix zTE58cpEu?Y>CdKD&+EtZH_)r+^|cSj^?Us8ynpO@eZlj$p;yoAOZvm;)${r`{aN(t zd3~4udU~~dE4zQ*xPK%1|In-F^~Fcx`ft>V>#vsg|9?E5zuvPxfA>g_=byiCO^wgr z{qo;`=lmz{5%W82&F^RX_s0I~C&c=Xq*u##GVcxFrN4|`Enlt@4}ix0z2S$a#r%KL ztK~b{*AH*_#_8c(d&d6N@}ungCvW)L8R5T4ua>VbyX5-4;p=CGU+EPwUoAg=+LGQI zesWp(L+I7=MfUaAyPAJh`1>@UEua4P*42S-rXRd#J^x*{PAM^!=kZ{E&X-SH*m_d_D8t@FV)O=+*M=%zMK(u8sY_ zaBn{U*z#rOz2Q4N|NHc6d7sxz@AR(LPrubZF@KcJ_w%Ru#&xm&@6)R_-~WGG@ZPhY zKhN8D$>+}-Q%`&Tl$`(6{bK!U&G-9-`QF%ni~baPwftl4e?Y(5t7E=ezEg_>jrrb~ zUtAy8?__$ld?WMT)%xk5`I?yDV#^nq_lEEA{4?p*@~dXvd)ED1ZT}_j-}6&XyMJBI zzc+n+K^m&oeE)tA*Uua4ul+i%-wv-0ua@_}e+TakKl)Ah574XS{d&QB!%yfhp;yoA z>o>;y+UsKd>Un*GzNA;r>s$24)2rw89r|C>tL0nS^T!+4Z%DstJNB=ZuV>!7x_|U< zrXR88{eDfoe?0%|^ppRiuiq5+?@#pVdFMCiH-3HWUp=pH(H}~$miOz8{d?p3_36){ zSI_Gw^uMK7%eS-p=Z*QT-^TS@`wg*wwY;x)>iX&Tr0=um^%I`|aeDQ7VF>tO|gEpe3^M~ z_yPTm^lJHb=Dp$TwnIn zF<&jecILfj-TyD7$MgID_0-euf1C4nd~3{CYkoJI?~V13>EBMTmLF!`8@~UC*#Fn* z)$)G5n(3Y1@DutQ=+*M|Y`!;q?ar9L++neQwR}7C-tcYu7tpKa%glSj_vw$KSIhgn zCg$1WRqOv_tp8hDKYL!^=J^w?Kl1~dhxy)^U%xBnKlN>K{nVQ8zg~s+p7s1~rpNQ= z?_Q~=J%0<%|2^lcHNTOq-y7?1(Qnm>^{eHJ%zMLk=nte<%l9+yU0uIF#r69jeVsk8 zAMpG>y;{DW&G*LqA^oNFYWank_nvkCZcLBo_wWAH)9zpW?%4k+hx7Tv*8EmB-y7?1 z^ZaY+)$+dIW_qVLe20FGx5s?-yuM5SQhK$#uNU*ZF@HpVD!p31$oB6&>-vw<6^8DNA)$;Ysd&7_DpYhI^ub$VB>G!5r%lq>M z*UuaCi@(P8@6)U0{qM`dd(XQ5H>Jn(>wjnJY1hBx{G;C$`&VoJIJ;D#g z!Itmgjdb7@*6$5Jcrg6$>D4%YL3;7~1@8?%q<@57EnlX`z=4J@5$Qm~*Zv;!*E}lr zuf~Tkf0+IGn|C$;;qYzxAzR-6ybbfc;Ya@t|519id@Y;rUHM1D|5%-QG-W$G8zc;;FzE|nR-n*K=bjwntO|DW|Q7xRCWKE5Cg9kDgPfj82DSGa%PSbuGW@SDAtpFeDT2=~98UU0~_ ztBQti^Zdi;)$(;aAM?H8JM`bASI_Ia^!L-N=k-1MP2Ly#SIZaK`n|FK0sZUg)${rh z{TJ!g@_xOhUB5B?UG(aC{e*sl_s9O#^ZMH3;`wtRy;|O{7uN5M>sQeC>DBZ4l739D zp4YeO*ZV;1Up=qyYX9_V`TzFspZC+_`RD)Tsi%GY>T&*&T|R%=nqT0Jbl_EW{jG8R z2ak{Y_W->br{VK|v-E;P-h0;9uYHeMa{b4op0@rm=fCiSv3|AY``25n-@97>in0ES z=m%{17T&P+d&AdO4!`xWF<&iT0;dCw`6VJ9X!w%;JM?ONe4ekLefp;#7xUHg`r0b7 z{?q8y^4+u!9B8b+i%16=>+jM(La)ZhvHoFt!GVS!BGQ4b_P=V(KlDSf{*o=mSgsbwYTxd?)kX@Wom&|9E<}e1SL8fmfLC4PUMuex(y*z8dG_{uk*5 z2fFfAMZ>r0kEB=2*X?|GZ}<-V&Gc&d{WI@9>;7$j(vtUY&(zcI--z=cN*}Mj|6^-@ zkGAye_x{w=)?a&4+`sitj`?cM_x0lXdt?0t z{cGvf^1fbp?^)|VEj^yE|C_0?{#R#z|FyySdwnd{uh#rwEeE zd&Acj#QYoR)$(QLz2Qsxg{Q`RwR}7C-tc|;Z_%sg^|cLR{lzC@zFK~}Y`*ub&!-Qj z$MfgUxv8f;e@f18f0FxWYkobO?~VPpc>d+|YI(n2&Gb%h_yPU1KNa)U@||qHH+->S zT)$7ztLODS`qfX1`D*zho9|t%pZ-Yt0b72f%zMwef7hnR^ZR#a>S_0H%y}n%I@Yh& z{4U-|2VUX&dt?3WXT|mVHN6_==Dua<9R-n&{q{ry@$TmBXGcmOo!d(XOm$9{In`*(WkY4@+O zP3*rsJ+7Zx^XtnjIo})WFSieWHoaQDm+jxX+CTjx^dq+X=9%}Nwg0z%ZprpR5yxA}bRU#KUq3ENJ?;53;JmkemHW@;*R%b5WB)^*{~LO>*6-H~>-UB)c8%+|>$x#sE$`1) zcyIU~{U!8j`Bt`mZ}>6&PG5`pYWX7b-te`T#rg;IYWXK*-h0;lTjT3X-oF>5o_7BV z&c8c-9H0Mc&G-G{`gvph9s1XOBfMIk|2gfV&mZqu>%S&Fo=yPUuBH)Fn9 z^E=t~^Tzro^qYJuyjs4@yf=Jfx43_=9E4ZPH!|-H-=;tE+u_ynzTRefr#JkFe$Dg4 ztK~=8d~f*v%VYf){!e(dyzdwDz2V37_kTCMTE3ml_l7T|ZVKKi|Q7&$|8_ zrN{H1KekUj?fSPl|7OltYrbD^%=gCnJM@pztL1&a@ZRt}`t^Pk`&Y~RylM0M^lzY7 z%lo`(^M~}u)2rqEdc%9qy8d5HkLTBakb2tnA9Mb8KaTyYHNRoc7tHtGEOmXac>cYX zUM*kae?WnT_pbbb;Xf_UmTzbCz2Q4N|M&E2`PQ=W0BFqjh94dj^EbLG_OF)r{la_0 zPw020SIdvHf6v4le)P_me=NOPzLS0ad&8IS4u287TE31q(t%f4zc+mAJ>i%7N$h`7 zr}G!2mr;7bA@2=e93B2;^lF?BUqSQUm49#e%jDUMJpaH#^J~_X|6cfi%d_R%+5Pv1 z?_L`I*o#M`F;4$(5vOkYW0iP?_JHO|CQ#m+!Mvt*__$+45Uv^Sx(1e@;t}=g*&uQ%`&T^f>Qrzl`~6 z&97(ky|Mp3{nhkp`A+7&;p;2L{x|zo%va0%^=_tjdc$|qqp<-4OHD@S_0{zEWJj*Zi8-kFEKBy{2A2p8sk3PUc^i z?caOW`hT7t&)5I^)YH~K;=E&i!|R{TUn86EJ!}4t)8qO4zo(uyf5Lg^-5B%Lx_;ek zzIXNfTRE=(^KS~@VapHjMmq2c*WVkyST+1-=+!uXL3%0D3l21Vfk+1$zNFviw=rLh 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£|3F+n_R0SK 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 z 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�S(z3;W9(V9ZCH(N^tSlH>Y(T1qcu_^D9Wvw$ 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

    D1| z%$Z(7(LY;21<7&0xFMc%aSL}%;9zQjZ~f2UJ7m!EMV2p**Ki1PwPU~RHt_M^ub|rT z3w(y{oIPj~I=O%j>3=E3PiN5NZkaD2^`30tMC{puSK^#4NPW<4Qb3Q@u2?KlF6E3M zhknHuzz@2LF`=a(u)2l&?hfVRCM(VW=4P|l7w}>#G&__G)p`s6gfE-jZjUIsfsES* z0s{hmfvWIO3E!F70BHCE0CNbzas)U99QY^rHyj_Aeo1fEn~eSdOE@^9dbq)U2I_Fn z76nMP*e+H@o^RGAq6|cZ{&ln5eEBH_;r(=B`3+uqg?5NOut_i`d$}nYgB;GYmxtqW zxdZqqaCQyxf`CUFAx!44KpuL^q2dFf0qsyOvOAzt0)AcWzLDA+`PU-91{OgL4K0vc zUFTa!PHaFjA+3?1^RfgnTwlY;<*QPL#bIoARNv&Ux4W+vjWk+V`(CI2T&$2rW8Fhk z$o;TTP!m$Ir+-?bD=My)9z=zAU|J~3$6FB00rvTbGJ=FurE-2I6gfW=nw*~@4o5!3g?sG(Jn?_N^nZp$g%9@( ze`b{F#@PIw2*UiGNB{-_nI-xeqA@-~uzj80(85OeeSw#Ncs2^7;c2s2XP{Vc1&beG z$X9JBsXyE94(pYGE{n|4!VUu*>c$6xQ)faapR8cXCr!f$P2`iNUGgVQv*b@itH8p3 zOA5F}hK0{EjgF6mO2rQ8iBM~?<^DE= zJbxQPrN0dkE7fSk3ZrKUMGUH|OAa6n9#L@-;vYo>#eaw42Uv#jQGX+BaO-?~$09Go zH2d4Q;K9){$6e_DUA6M z#xVT?)&v4X6fVg9ScHJAO!`I9!SYz{QHV)7LmpP{39Etq;@hrJ<3ge?#?LrhVt`QU zONQk5I55^IQ}d^b{>W%{(Vv;WL5aA&JQ*1^a`JD8Y#hkdgz%(Dev zEut9yE2?@hG70F1_3iN%twn34<~g2ne{9TevLjJFM!7vs|QK&laEXB78nij|Ez>|F^^D>wiP01_yKCt9B_` zfiJd)8!$%4ErJB*_=r~fc>!kfHi0q*SoFi5A}r-#{RxQ#D9nRY9tsxGU!X7y>?WAO z)p3i~dKd_ND{pp3$OynXZv$a8q1Q~OI2r<~Eu>c9D@m5XDsqdKfQL1pzfM6y*t%lG zdss2bblJXSYp7e=6(Cq7HjpgH0^L_je;_FymXRTe9Bh#BiXZ(A@Irxji2B%9#k zU-AJZ$v{uQjgY~|z6A&BE5uuSso!b#qv!sp5|H&iwqXz zz$|=6eIUkM>~{rC6B!{Q{sHB&NXST(AM!1?FeEJY;y;#qNS}R8)*C!nEJtt)6BJJw zG)Dj{S|bzB{L^Y(fQnEz4e3M>nfw##2ZCn-%^E)AAE@}n-|4i)KO~!j{GI)iHsPra bMbSu1h^F6$tbWcGkV+%z4W^A}=zsqo%3Xv~ diff --git a/samples/client/petstore/crystal/pom.xml b/samples/client/petstore/crystal/pom.xml index f4b890f7d802..29b7e4bc3516 100644 --- a/samples/client/petstore/crystal/pom.xml +++ b/samples/client/petstore/crystal/pom.xml @@ -34,6 +34,10 @@ shards + + install + --ignore-crystal-version + diff --git a/samples/client/petstore/crystal/shard.lock b/samples/client/petstore/crystal/shard.lock index 97567adcb9e5..6a33ec4f671f 100644 --- a/samples/client/petstore/crystal/shard.lock +++ b/samples/client/petstore/crystal/shard.lock @@ -2,23 +2,23 @@ version: 2.0 shards: ameba: git: https://github.com/crystal-ameba/ameba.git - version: 0.13.3 + version: 0.14.3 crest: git: https://github.com/mamantoha/crest.git - version: 0.26.1 + version: 0.26.8 exception_page: git: https://github.com/crystal-loot/exception_page.git - version: 0.1.4 + version: 0.1.5 http-client-digest_auth: git: https://github.com/mamantoha/http-client-digest_auth.git - version: 0.4.0 + version: 0.6.0 http_proxy: git: https://github.com/mamantoha/http_proxy.git - version: 0.7.2 + version: 0.8.0 kemal: git: https://github.com/kemalcr/kemal.git @@ -26,7 +26,7 @@ shards: kilt: git: https://github.com/jeromegn/kilt.git - version: 0.4.0 + version: 0.4.1 radix: git: https://github.com/luislavena/radix.git From f7b79e9a26a5b8b800379d18fb03048ce08c0158 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sat, 15 May 2021 16:27:13 +0800 Subject: [PATCH 111/186] Add @lucamazzanti to the C# technical committee (#9486) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 97e01df1c970..4ed127498d80 100644 --- a/README.md +++ b/README.md @@ -1010,7 +1010,7 @@ If you want to join the committee, please kindly apply by sending an email to te | Bash | @frol (2017/07) @bkryza (2017/08) @kenjones-cisco (2017/09) | | C | @zhemant (2018/11) @ityuhui (2019/12) @michelealbano (2020/03) | | C++ | @ravinikam (2017/07) @stkrwork (2017/07) @etherealjoy (2018/02) @martindelille (2018/03) @muttleyxd (2019/08) | -| C# | @mandrean (2017/08) @frankyjuang (2019/09) @shibayan (2020/02) @Blackclaws (2021/03) | +| C# | @mandrean (2017/08) @frankyjuang (2019/09) @shibayan (2020/02) @Blackclaws (2021/03) @lucamazzanti (2021/05) | | Clojure | | | Dart | @swipesight (2018/09) @jaumard (2018/09) @josh-burton (2019/12) @amondnet (2019/12) @sbu-WBT (2020/12) @kuhnroyal (2020/12) @agilob (2020/12) | | Eiffel | @jvelilla (2017/09) | From 2f70e6a5bc7542d0d3199a4e2b45bf283d0947b5 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sat, 15 May 2021 16:42:35 +0800 Subject: [PATCH 112/186] Add a link to powershell devops conf presentation (#9487) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4ed127498d80..625c094352d8 100644 --- a/README.md +++ b/README.md @@ -813,6 +813,7 @@ Here are some companies/projects (alphabetical order) using OpenAPI Generator in - 2021-03-31 - [使用OpenAPI Generator實現Open API Server](https://www.1ju.org/article/java-openapi-generator-server) at [億聚網](https://www.1ju.org/) - 2021-04-19 - [Introducing Twilio’s OpenAPI Specification Beta](https://www.twilio.com/blog/introducing-twilio-open-api-specification-beta) by [GARETH PAUL JONES](https://www.twilio.com/blog/author/gpj) at [Twilio Blog](https://www.twilio.com/blog) - 2021-04-22 - [Leveraging OpenApi strengths in a Micro-Service environment](https://medium.com/unibuddy-technology-blog/leveraging-openapi-strengths-in-a-micro-service-environment-3d7f9e7c26ff) by Nicolas Jellab at [Unibuddy Technology Blog](https://medium.com/unibuddy-technology-blog) +- 2021-04-27 - [From zero to publishing PowerShell API clients in PowerShell Gallery within minutes](https://speakerdeck.com/wing328/from-zero-to-publishing-powershell-api-clients-in-powershell-gallery-within-minutes) by [William Cheng](https://github.com/wing328) at [PowerShell + DevOps Global Summit 2021](https://events.devopscollective.org/event/powershell-devops-global-summit-2021/) ## [6 - About Us](#table-of-contents) From 2342396465ccc9de1fe685117207158d7c8a755c Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sat, 15 May 2021 22:59:15 +0800 Subject: [PATCH 113/186] reduce travis ci job runtime (#9491) --- pom.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 01940dccf7ad..fd2f7903af4f 100644 --- a/pom.xml +++ b/pom.xml @@ -1188,16 +1188,19 @@ samples/server/petstore/python-aiohttp samples/server/petstore/python-aiohttp-srclayout samples/server/petstore/python-flask + samples/server/petstore/rust-server samples/client/petstore/ruby-faraday samples/client/petstore/ruby + samples/client/petstore/cpp-qt5 samples/client/petstore/rust samples/client/petstore/rust/reqwest/petstore From 97ddcc2257e77cae47f90c08b5491a5929769c3c Mon Sep 17 00:00:00 2001 From: Steffen Neumann Date: Sat, 15 May 2021 17:22:48 +0200 Subject: [PATCH 114/186] Add support for Boolean in R client generator (#9469) * Add support for Boolean in R client generator * Regenerated with updated R generator --- .../src/main/resources/r/model.mustache | 13 +++++++++---- samples/client/petstore/R/R/category.R | 1 - samples/client/petstore/R/R/model_api_response.R | 1 - samples/client/petstore/R/R/order.R | 6 +++--- samples/client/petstore/R/R/pet.R | 1 - samples/client/petstore/R/R/tag.R | 1 - samples/client/petstore/R/R/user.R | 1 - 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/r/model.mustache b/modules/openapi-generator/src/main/resources/r/model.mustache index 1b853ec37302..28b7ce9145b1 100644 --- a/modules/openapi-generator/src/main/resources/r/model.mustache +++ b/modules/openapi-generator/src/main/resources/r/model.mustache @@ -47,6 +47,9 @@ {{#isString}} stopifnot(is.character(`{{baseName}}`), length(`{{baseName}}`) == 1) {{/isString}} + {{#isBoolean}} + stopifnot(is.logical(`{{baseName}}`), length(`{{baseName}}`) == 1) + {{/isBoolean}} {{#isDate}} stopifnot(is.character(`{{baseName}}`), length(`{{baseName}}`) == 1) {{/isDate}} @@ -88,6 +91,9 @@ {{#isString}} stopifnot(is.character(`{{baseName}}`), length(`{{baseName}}`) == 1) {{/isString}} + {{#isBoolean}} + stopifnot(is.logical(`{{baseName}}`), length(`{{baseName}}`) == 1) + {{/isBoolean}} {{#isDate}} stopifnot(is.character(`{{baseName}}`), length(`{{baseName}}`) == 1) {{/isDate}} @@ -185,7 +191,7 @@ {{/isArray}} {{#isMap}} {{#isPrimitiveType}} - {{#isNumeric}}%d{{/isNumeric}}{{^isNumeric}}"%s"{{/isNumeric}} + {{#isNumeric}}%d{{/isNumeric}}{{^isNumeric}}{{^isBoolean}}"{{/isBoolean}}%s{{^isBoolean}}"{{/isBoolean}}{{/isNumeric}} {{/isPrimitiveType}} {{^isPrimitiveType}}%s {{/isPrimitiveType}} @@ -193,7 +199,7 @@ {{/isContainer}} {{^isContainer}} {{#isPrimitiveType}} - {{#isNumeric}}%d{{/isNumeric}}{{^isNumeric}}"%s"{{/isNumeric}} + {{#isNumeric}}%d{{/isNumeric}}{{^isNumeric}}{{^isBoolean}}"{{/isBoolean}}%s{{^isBoolean}}"{{/isBoolean}}{{/isNumeric}} {{/isPrimitiveType}} {{^isPrimitiveType}}%s {{/isPrimitiveType}} @@ -218,7 +224,7 @@ {{/isContainer}} {{^isContainer}} {{#isPrimitiveType}} - self$`{{baseName}}` + {{#isBoolean}}tolower({{/isBoolean}}self$`{{baseName}}`{{#isBoolean}}){{/isBoolean}} {{/isPrimitiveType}} {{^isPrimitiveType}} jsonlite::toJSON(self$`{{baseName}}`$toJSON(), auto_unbox=TRUE, digits = NA) @@ -253,4 +259,3 @@ {{/isEnum}} {{/model}} {{/models}} - diff --git a/samples/client/petstore/R/R/category.R b/samples/client/petstore/R/R/category.R index 7c74320d1acf..059b64e37482 100644 --- a/samples/client/petstore/R/R/category.R +++ b/samples/client/petstore/R/R/category.R @@ -89,4 +89,3 @@ Category <- R6::R6Class( } ) ) - diff --git a/samples/client/petstore/R/R/model_api_response.R b/samples/client/petstore/R/R/model_api_response.R index c7cdbb76c2a4..a1c16133557b 100644 --- a/samples/client/petstore/R/R/model_api_response.R +++ b/samples/client/petstore/R/R/model_api_response.R @@ -111,4 +111,3 @@ ModelApiResponse <- R6::R6Class( } ) ) - diff --git a/samples/client/petstore/R/R/order.R b/samples/client/petstore/R/R/order.R index 3218835cc35c..d3e2e46b4937 100644 --- a/samples/client/petstore/R/R/order.R +++ b/samples/client/petstore/R/R/order.R @@ -62,6 +62,7 @@ Order <- R6::R6Class( self$`status` <- `status` } if (!is.null(`complete`)) { + stopifnot(is.logical(`complete`), length(`complete`) == 1) self$`complete` <- `complete` } }, @@ -156,9 +157,9 @@ Order <- R6::R6Class( if (!is.null(self$`complete`)) { sprintf( '"complete": - "%s" + %s ', - self$`complete` + tolower(self$`complete`) )} ) jsoncontent <- paste(jsoncontent, collapse = ",") @@ -176,4 +177,3 @@ Order <- R6::R6Class( } ) ) - diff --git a/samples/client/petstore/R/R/pet.R b/samples/client/petstore/R/R/pet.R index 509d16934e1f..1960b16906a0 100644 --- a/samples/client/petstore/R/R/pet.R +++ b/samples/client/petstore/R/R/pet.R @@ -181,4 +181,3 @@ Pet <- R6::R6Class( } ) ) - diff --git a/samples/client/petstore/R/R/tag.R b/samples/client/petstore/R/R/tag.R index 56b89c6b4254..ba2def34c43b 100644 --- a/samples/client/petstore/R/R/tag.R +++ b/samples/client/petstore/R/R/tag.R @@ -89,4 +89,3 @@ Tag <- R6::R6Class( } ) ) - diff --git a/samples/client/petstore/R/R/user.R b/samples/client/petstore/R/R/user.R index bf88bee40277..47ffaea0d88f 100644 --- a/samples/client/petstore/R/R/user.R +++ b/samples/client/petstore/R/R/user.R @@ -221,4 +221,3 @@ User <- R6::R6Class( } ) ) - From 2f6bfb0dfc59c2f84b02fd6bd3475941ed69b681 Mon Sep 17 00:00:00 2001 From: Amal Thomas Date: Mon, 17 May 2021 11:08:09 +0530 Subject: [PATCH 115/186] Update plugins.md (#9499) --- docs/plugins.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/plugins.md b/docs/plugins.md index 691c5fa85d1f..c9fbbe5b5484 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -45,7 +45,7 @@ For full details of all options, see the [plugin README](https://github.com/Open ### Dependencies -The generated models use commonly use Swagger v2 annotations like `@ApiModelProperty`. A user may add Swagger v3 annotations: +The generated models use commonly used Swagger v2 annotations like `@ApiModelProperty`. A user may add Swagger v3 annotations: ```xml From 69e8e07cab703d614bb15ab0e58246292de09750 Mon Sep 17 00:00:00 2001 From: quarantam <71026957+quarantam@users.noreply.github.com> Date: Mon, 17 May 2021 12:10:29 +0200 Subject: [PATCH 116/186] Update ApiClient.mustache (#9492) Fixing #7209 --- .../resources/Java/libraries/resttemplate/ApiClient.mustache | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/ApiClient.mustache index 150f3d3ebbbc..032d398f6cd2 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/ApiClient.mustache @@ -39,10 +39,11 @@ import com.fasterxml.jackson.datatype.threetenbp.ThreeTenModule; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter; import com.fasterxml.jackson.databind.ObjectMapper; +{{/threetenbp}} {{#openApiNullable}} import org.openapitools.jackson.nullable.JsonNullableModule; {{/openApiNullable}} -{{/threetenbp}} + import java.io.BufferedReader; import java.io.IOException; From 08467928de51b2e34e471ad8f2d42fc1ffeb3371 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 17 May 2021 18:25:07 +0800 Subject: [PATCH 117/186] update samples --- .../src/main/java/org/openapitools/client/ApiClient.java | 1 + .../src/main/java/org/openapitools/client/ApiClient.java | 1 + 2 files changed, 2 insertions(+) diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/ApiClient.java index 11da16b2e48d..ae98ba62fdcd 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/ApiClient.java @@ -36,6 +36,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.openapitools.jackson.nullable.JsonNullableModule; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/ApiClient.java index 11c1b8349355..ff33cd2248ff 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/ApiClient.java @@ -31,6 +31,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.openapitools.jackson.nullable.JsonNullableModule; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; From 477926f0080ce4f10a6f76abfb444b6bfb7ad8d6 Mon Sep 17 00:00:00 2001 From: Yusuke Hosonuma Date: Mon, 17 May 2021 22:24:30 +0900 Subject: [PATCH 118/186] [crystal][client] Support authorization (#9488) * [crystal][client] support authorization header * [crystal][client] update samples * [crystal][client] update tests * [crystal][client] add unit test for api_client.cr --- .../src/main/resources/crystal/api.mustache | 4 +- .../resources/crystal/api_client.mustache | 6 +- .../resources/crystal/configuration.mustache | 12 ++-- .../petstore/crystal/spec/api/pet_api_spec.cr | 11 +++- .../petstore/crystal/spec/api_client_spec.cr | 56 +++++++++++++++++++ .../crystal/src/petstore/api/pet_api.cr | 20 +++---- .../crystal/src/petstore/api/store_api.cr | 8 +-- .../crystal/src/petstore/api/user_api.cr | 20 +++---- .../crystal/src/petstore/api_client.cr | 6 +- .../crystal/src/petstore/configuration.cr | 12 ++-- 10 files changed, 112 insertions(+), 43 deletions(-) create mode 100644 samples/client/petstore/crystal/spec/api_client_spec.cr diff --git a/modules/openapi-generator/src/main/resources/crystal/api.mustache b/modules/openapi-generator/src/main/resources/crystal/api.mustache index 8b8daabb5f38..787189be8544 100644 --- a/modules/openapi-generator/src/main/resources/crystal/api.mustache +++ b/modules/openapi-generator/src/main/resources/crystal/api.mustache @@ -128,9 +128,9 @@ module {{moduleName}} local_var_path = "{{{path}}}"{{#pathParams}}.sub("{" + "{{baseName}}" + "}", URI.encode({{paramName}}.to_s){{^strictSpecBehavior}}.gsub("%2F", "/"){{/strictSpecBehavior}}){{/pathParams}} # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new {{#queryParams}} - query_params[:"{{{baseName}}}"] = {{#collectionFormat}}@api_client.build_collection_param({{{paramName}}}, :{{{collectionFormat}}}){{/collectionFormat}}{{^collectionFormat}}{{{paramName}}}{{/collectionFormat}} + query_params["{{{baseName}}}"] = {{#collectionFormat}}@api_client.build_collection_param({{{paramName}}}, :{{{collectionFormat}}}){{/collectionFormat}}{{^collectionFormat}}{{{paramName}}}{{/collectionFormat}} {{/queryParams}} # header parameters diff --git a/modules/openapi-generator/src/main/resources/crystal/api_client.mustache b/modules/openapi-generator/src/main/resources/crystal/api_client.mustache index 6831e51bae0c..9852faa90f9c 100644 --- a/modules/openapi-generator/src/main/resources/crystal/api_client.mustache +++ b/modules/openapi-generator/src/main/resources/crystal/api_client.mustache @@ -163,7 +163,7 @@ module {{moduleName}} # @param [Hash] query_params Query parameters # @param [String] auth_names Authentication scheme name def update_params_for_auth!(header_params, query_params, auth_names) - Array{auth_names}.each do |auth_name| + auth_names.each do |auth_name| auth_setting = @config.auth_settings[auth_name] next unless auth_setting case auth_setting[:in] @@ -256,7 +256,7 @@ module {{moduleName}} # # @return [Array<(Object, Integer, Hash)>] an array of 3 elements: # the data deserialized from response body (could be nil), response status code and response headers. - def call_api(http_method : Symbol, path : String, operation : Symbol, return_type : String, post_body : String?, auth_names = [] of String, header_params = {} of String => String, query_params = {} of Symbol => String, form_params = {} of Symbol => String) + def call_api(http_method : Symbol, path : String, operation : Symbol, return_type : String, post_body : String?, auth_names = [] of String, header_params = {} of String => String, query_params = {} of String => String, form_params = {} of Symbol => String) #ssl_options = { # :ca_file => @config.ssl_ca_file, # :verify => @config.ssl_verify, @@ -274,6 +274,8 @@ module {{moduleName}} # conn.adapter(Faraday.default_adapter) #end + update_params_for_auth! header_params, query_params, auth_names + if !post_body.nil? && !post_body.empty? # use JSON string in the payload form_or_body = post_body diff --git a/modules/openapi-generator/src/main/resources/crystal/configuration.mustache b/modules/openapi-generator/src/main/resources/crystal/configuration.mustache index cc2e15e93fac..eec2509376d9 100644 --- a/modules/openapi-generator/src/main/resources/crystal/configuration.mustache +++ b/modules/openapi-generator/src/main/resources/crystal/configuration.mustache @@ -30,7 +30,7 @@ module {{moduleName}} # @return [Hash] key: parameter name, value: parameter value (API key) # # @example parameter name is "api_key", API key is "xxx" (e.g. "api_key=xxx" in query string) - # config.api_key[:"api_key"] = "xxx" + # config.api_key[:api_key] = "xxx" property api_key : Hash(Symbol, String) # Defines API key prefixes used with API Key authentications. @@ -38,7 +38,7 @@ module {{moduleName}} # @return [Hash] key: parameter name, value: API key prefix # # @example parameter name is "Authorization", API key prefix is "Token" (e.g. "Authorization: Token xxx" in headers) - # config.api_key_prefix[:"api_key"] = "Token" + # config.api_key_prefix[:api_key] = "Token" property api_key_prefix : Hash(Symbol, String) # Defines the username used with HTTP basic authentication. @@ -183,10 +183,10 @@ module {{moduleName}} # Gets API key (with prefix if set). # @param [String] param_name the parameter name of API key auth def api_key_with_prefix(param_name) - if @api_key_prefix[param_name] - "#{@api_key_prefix[param_name]} #{@api_key[param_name]}" + if prefix = @api_key_prefix[param_name]? + "#{prefix} #{@api_key[param_name]}" else - @api_key[param_name] + @api_key[param_name]? || "" end end @@ -204,7 +204,7 @@ module {{moduleName}} type: "api_key", in: {{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{#isKeyInQuery}}"query"{{/isKeyInQuery}}, key: "{{keyParamName}}", - value: api_key_with_prefix("{{keyParamName}}") + value: api_key_with_prefix(:{{keyParamName}}) }, {{/isApiKey}} {{#isBasic}} diff --git a/samples/client/petstore/crystal/spec/api/pet_api_spec.cr b/samples/client/petstore/crystal/spec/api/pet_api_spec.cr index 23bdfa818477..5c5f56295acc 100644 --- a/samples/client/petstore/crystal/spec/api/pet_api_spec.cr +++ b/samples/client/petstore/crystal/spec/api/pet_api_spec.cr @@ -79,7 +79,16 @@ describe "PetApi" do describe "get_pet_by_id test" do it "should work" do # assertion here. ref: https://crystal-lang.org/reference/guides/testing.html - api_instance = Petstore::PetApi.new + + config = Petstore::Configuration.new + config.access_token = "yyy" + config.api_key[:api_key] = "xxx" + config.api_key_prefix[:api_key] = "Token" + + api_client = Petstore::ApiClient.new(config) + + api_instance = Petstore::PetApi.new(api_client) + # create a pet to start with pet_id = Int64.new(91829) pet = Petstore::Pet.new(id: pet_id, category: Petstore::Category.new(id: pet_id + 10, name: "crystal category"), name: "crystal", photo_urls: ["https://crystal-lang.org"], tags: [Petstore::Tag.new(id: pet_id + 100, name: "crystal tag")], status: "available") diff --git a/samples/client/petstore/crystal/spec/api_client_spec.cr b/samples/client/petstore/crystal/spec/api_client_spec.cr new file mode 100644 index 000000000000..18209417eabf --- /dev/null +++ b/samples/client/petstore/crystal/spec/api_client_spec.cr @@ -0,0 +1,56 @@ +require "./spec_helper" + +describe Petstore::ApiClient do + describe "#update_params_for_auth!" do + describe "oauth2" do + it "should add 'Authorization' to header" do + config = Petstore::Configuration.new + config.access_token = "xxx" + + header_params = {} of String => String + query_params = {} of String => String + + api_client = Petstore::ApiClient.new(config) + api_client.update_params_for_auth!(header_params, query_params, ["petstore_auth"]) + + header_params["Authorization"].should eq "Bearer xxx" + query_params.size.should eq 0 + end + end + + describe "api_key" do + context "without api_key_prefix" do + it "should add 'api_key' to header" do + config = Petstore::Configuration.new + config.api_key[:api_key] = "xxx" + + header_params = {} of String => String + query_params = {} of String => String + + api_client = Petstore::ApiClient.new(config) + api_client.update_params_for_auth!(header_params, query_params, ["api_key"]) + + header_params["api_key"].should eq "xxx" + query_params.empty?.should be_true + end + end + + context "with api_key_prefix" do + it "should add 'api_key' to header" do + config = Petstore::Configuration.new + config.api_key[:api_key] = "xxx" + config.api_key_prefix[:api_key] = "Token" + + header_params = {} of String => String + query_params = {} of String => String + + api_client = Petstore::ApiClient.new(config) + api_client.update_params_for_auth!(header_params, query_params, ["api_key"]) + + header_params["api_key"].should eq "Token xxx" + query_params.empty?.should be_true + end + end + end + end +end diff --git a/samples/client/petstore/crystal/src/petstore/api/pet_api.cr b/samples/client/petstore/crystal/src/petstore/api/pet_api.cr index 7e672a21a613..41466efaf1b7 100644 --- a/samples/client/petstore/crystal/src/petstore/api/pet_api.cr +++ b/samples/client/petstore/crystal/src/petstore/api/pet_api.cr @@ -40,7 +40,7 @@ module Petstore local_var_path = "/pet" # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -99,7 +99,7 @@ module Petstore local_var_path = "/pet/{petId}".sub("{" + "petId" + "}", URI.encode(pet_id.to_s).gsub("%2F", "/")) # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -157,8 +157,8 @@ module Petstore local_var_path = "/pet/findByStatus" # query parameters - query_params = Hash(Symbol, String).new - query_params[:"status"] = @api_client.build_collection_param(status, :csv) + query_params = Hash(String, String).new + query_params["status"] = @api_client.build_collection_param(status, :csv) # header parameters header_params = Hash(String, String).new @@ -217,8 +217,8 @@ module Petstore local_var_path = "/pet/findByTags" # query parameters - query_params = Hash(Symbol, String).new - query_params[:"tags"] = @api_client.build_collection_param(tags, :csv) + query_params = Hash(String, String).new + query_params["tags"] = @api_client.build_collection_param(tags, :csv) # header parameters header_params = Hash(String, String).new @@ -277,7 +277,7 @@ module Petstore local_var_path = "/pet/{petId}".sub("{" + "petId" + "}", URI.encode(pet_id.to_s).gsub("%2F", "/")) # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -334,7 +334,7 @@ module Petstore local_var_path = "/pet" # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -393,7 +393,7 @@ module Petstore local_var_path = "/pet/{petId}".sub("{" + "petId" + "}", URI.encode(pet_id.to_s).gsub("%2F", "/")) # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -452,7 +452,7 @@ module Petstore local_var_path = "/pet/{petId}/uploadImage".sub("{" + "petId" + "}", URI.encode(pet_id.to_s).gsub("%2F", "/")) # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new diff --git a/samples/client/petstore/crystal/src/petstore/api/store_api.cr b/samples/client/petstore/crystal/src/petstore/api/store_api.cr index 126dbab7bf42..03f45309463c 100644 --- a/samples/client/petstore/crystal/src/petstore/api/store_api.cr +++ b/samples/client/petstore/crystal/src/petstore/api/store_api.cr @@ -42,7 +42,7 @@ module Petstore local_var_path = "/store/order/{orderId}".sub("{" + "orderId" + "}", URI.encode(order_id.to_s).gsub("%2F", "/")) # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -93,7 +93,7 @@ module Petstore local_var_path = "/store/inventory" # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -160,7 +160,7 @@ module Petstore local_var_path = "/store/order/{orderId}".sub("{" + "orderId" + "}", URI.encode(order_id.to_s).gsub("%2F", "/")) # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -217,7 +217,7 @@ module Petstore local_var_path = "/store/order" # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new diff --git a/samples/client/petstore/crystal/src/petstore/api/user_api.cr b/samples/client/petstore/crystal/src/petstore/api/user_api.cr index 2b6d6acdace5..0b2468c50d36 100644 --- a/samples/client/petstore/crystal/src/petstore/api/user_api.cr +++ b/samples/client/petstore/crystal/src/petstore/api/user_api.cr @@ -42,7 +42,7 @@ module Petstore local_var_path = "/user" # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -99,7 +99,7 @@ module Petstore local_var_path = "/user/createWithArray" # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -156,7 +156,7 @@ module Petstore local_var_path = "/user/createWithList" # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -215,7 +215,7 @@ module Petstore local_var_path = "/user/{username}".sub("{" + "username" + "}", URI.encode(username.to_s).gsub("%2F", "/")) # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -270,7 +270,7 @@ module Petstore local_var_path = "/user/{username}".sub("{" + "username" + "}", URI.encode(username.to_s).gsub("%2F", "/")) # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -338,9 +338,9 @@ module Petstore local_var_path = "/user/login" # query parameters - query_params = Hash(Symbol, String).new - query_params[:"username"] = username - query_params[:"password"] = password + query_params = Hash(String, String).new + query_params["username"] = username + query_params["password"] = password # header parameters header_params = Hash(String, String).new @@ -391,7 +391,7 @@ module Petstore local_var_path = "/user/logout" # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new @@ -454,7 +454,7 @@ module Petstore local_var_path = "/user/{username}".sub("{" + "username" + "}", URI.encode(username.to_s).gsub("%2F", "/")) # query parameters - query_params = Hash(Symbol, String).new + query_params = Hash(String, String).new # header parameters header_params = Hash(String, String).new diff --git a/samples/client/petstore/crystal/src/petstore/api_client.cr b/samples/client/petstore/crystal/src/petstore/api_client.cr index 75fe8faa2032..a0f4a469c48b 100644 --- a/samples/client/petstore/crystal/src/petstore/api_client.cr +++ b/samples/client/petstore/crystal/src/petstore/api_client.cr @@ -171,7 +171,7 @@ module Petstore # @param [Hash] query_params Query parameters # @param [String] auth_names Authentication scheme name def update_params_for_auth!(header_params, query_params, auth_names) - Array{auth_names}.each do |auth_name| + auth_names.each do |auth_name| auth_setting = @config.auth_settings[auth_name] next unless auth_setting case auth_setting[:in] @@ -264,7 +264,7 @@ module Petstore # # @return [Array<(Object, Integer, Hash)>] an array of 3 elements: # the data deserialized from response body (could be nil), response status code and response headers. - def call_api(http_method : Symbol, path : String, operation : Symbol, return_type : String, post_body : String?, auth_names = [] of String, header_params = {} of String => String, query_params = {} of Symbol => String, form_params = {} of Symbol => String) + def call_api(http_method : Symbol, path : String, operation : Symbol, return_type : String, post_body : String?, auth_names = [] of String, header_params = {} of String => String, query_params = {} of String => String, form_params = {} of Symbol => String) #ssl_options = { # :ca_file => @config.ssl_ca_file, # :verify => @config.ssl_verify, @@ -282,6 +282,8 @@ module Petstore # conn.adapter(Faraday.default_adapter) #end + update_params_for_auth! header_params, query_params, auth_names + if !post_body.nil? && !post_body.empty? # use JSON string in the payload form_or_body = post_body diff --git a/samples/client/petstore/crystal/src/petstore/configuration.cr b/samples/client/petstore/crystal/src/petstore/configuration.cr index e02acd2e5071..b3d1c1ca2025 100644 --- a/samples/client/petstore/crystal/src/petstore/configuration.cr +++ b/samples/client/petstore/crystal/src/petstore/configuration.cr @@ -38,7 +38,7 @@ module Petstore # @return [Hash] key: parameter name, value: parameter value (API key) # # @example parameter name is "api_key", API key is "xxx" (e.g. "api_key=xxx" in query string) - # config.api_key[:"api_key"] = "xxx" + # config.api_key[:api_key] = "xxx" property api_key : Hash(Symbol, String) # Defines API key prefixes used with API Key authentications. @@ -46,7 +46,7 @@ module Petstore # @return [Hash] key: parameter name, value: API key prefix # # @example parameter name is "Authorization", API key prefix is "Token" (e.g. "Authorization: Token xxx" in headers) - # config.api_key_prefix[:"api_key"] = "Token" + # config.api_key_prefix[:api_key] = "Token" property api_key_prefix : Hash(Symbol, String) # Defines the username used with HTTP basic authentication. @@ -191,10 +191,10 @@ module Petstore # Gets API key (with prefix if set). # @param [String] param_name the parameter name of API key auth def api_key_with_prefix(param_name) - if @api_key_prefix[param_name] - "#{@api_key_prefix[param_name]} #{@api_key[param_name]}" + if prefix = @api_key_prefix[param_name]? + "#{prefix} #{@api_key[param_name]}" else - @api_key[param_name] + @api_key[param_name]? || "" end end @@ -210,7 +210,7 @@ module Petstore type: "api_key", in: "header", key: "api_key", - value: api_key_with_prefix("api_key") + value: api_key_with_prefix(:api_key) }, "petstore_auth" => { type: "oauth2", From c4f7091da53b1553b7696c64c1d878c414f07a8d Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 17 May 2021 23:47:07 +0800 Subject: [PATCH 119/186] partially revert 9404: avoid empty string enum value (#9501) --- docs/generators/aspnetcore.md | 4 ++-- .../codegen/languages/AspNetCoreServerCodegen.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/generators/aspnetcore.md b/docs/generators/aspnetcore.md index 99f0b789bdc3..849f4ff93134 100644 --- a/docs/generators/aspnetcore.md +++ b/docs/generators/aspnetcore.md @@ -9,7 +9,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl | ------ | ----------- | ------ | ------- | |aspnetCoreVersion|ASP.NET Core version: 5.0, 3.1, 3.0, 2.2, 2.1, 2.0 (deprecated)|

    **2.0**
    ASP.NET Core 2.0
    **2.1**
    ASP.NET Core 2.1
    **2.2**
    ASP.NET Core 2.2
    **3.0**
    ASP.NET Core 3.0
    **3.1**
    ASP.NET Core 3.1
    **5.0**
    ASP.NET Core 5.0
    |3.1| |buildTarget|Target to build an application or library|
    **program**
    Generate code for a standalone server
    **library**
    Generate code for a server abstract class library
    |program| -|classModifier|Class Modifier for controller classes: Empty string or abstract.|
    ****
    Keep class default with no modifier
    **abstract**
    Make class abstract
    || +|classModifier|Class Modifier for controller classes: Empty string or abstract.| || |compatibilityVersion|ASP.Net Core CompatibilityVersion| |Version_2_2| |enumNameSuffix|Suffix that will be appended to all enum names.| |Enum| |enumValueSuffix|Suffix that will be appended to all enum values.| |Enum| @@ -17,7 +17,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |isLibrary|Is the build a library| |false| |licenseName|The name of the license| |NoLicense| |licenseUrl|The URL of the license| |http://localhost| -|modelClassModifier|Model Class Modifier can be nothing or partial|
    ****
    Keep model class default with no modifier
    **partial**
    Make model class partial
    |partial| +|modelClassModifier|Model Class Modifier can be nothing or partial| |partial| |newtonsoftVersion|Version for Microsoft.AspNetCore.Mvc.NewtonsoftJson for ASP.NET Core 3.0+| |3.0.0| |operationIsAsync|Set methods to async or sync (default).| |false| |operationModifier|Operation Modifier can be virtual or abstract|
    **virtual**
    Keep method virtual
    **abstract**
    Make method abstract
    |virtual| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index f7c24196331e..1bc11ce94ca1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -261,7 +261,7 @@ public AspNetCoreServerCodegen() { classModifier.addEnum("abstract", "Make class abstract"); classModifier.setDefault(""); classModifier.setOptValue(classModifier.getDefault()); - cliOptions.add(classModifier); + addOption(classModifier.getOpt(), classModifier.getDescription(), classModifier.getOptValue()); operationModifier.addEnum("virtual", "Keep method virtual"); operationModifier.addEnum("abstract", "Make method abstract"); @@ -292,7 +292,7 @@ public AspNetCoreServerCodegen() { modelClassModifier.addEnum("partial", "Make model class partial"); modelClassModifier.setDefault("partial"); modelClassModifier.setOptValue(modelClassModifier.getDefault()); - cliOptions.add(modelClassModifier); + addOption(modelClassModifier.getOpt(), modelClassModifier.getDescription(), modelClassModifier.getOptValue()); } @Override From 1c733247b19a5dae148542c006a549eee3002913 Mon Sep 17 00:00:00 2001 From: Kuzma <57258237+ksvirkou-hubspot@users.noreply.github.com> Date: Mon, 17 May 2021 19:19:08 +0300 Subject: [PATCH 120/186] fix api key (#9476) --- .../src/main/resources/typescript/auth/auth.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/typescript/auth/auth.mustache b/modules/openapi-generator/src/main/resources/typescript/auth/auth.mustache index 0e0ae23b1f28..332760455bf6 100644 --- a/modules/openapi-generator/src/main/resources/typescript/auth/auth.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/auth/auth.mustache @@ -85,7 +85,7 @@ export class {{#lambda.pascalcase}}{{name}}{{/lambda.pascalcase}}Authentication public {{#isBasicBearer}}async {{/isBasicBearer}}applySecurityAuthentication(context: RequestContext) { {{#isApiKey}} - context.{{#isKeyInHeader}}setHeaderParam{{/isKeyInHeader}}{{#isKeyInQuery}}addCookie{{/isKeyInQuery}}{{#isKeyInCookie}}setQueryParam{{/isKeyInCookie}}("{{keyParamName}}", this.apiKey); + context.{{#isKeyInHeader}}setHeaderParam{{/isKeyInHeader}}{{#isKeyInQuery}}setQueryParam{{/isKeyInQuery}}{{#isKeyInCookie}}addCookie{{/isKeyInCookie}}("{{keyParamName}}", this.apiKey); {{/isApiKey}} {{#isBasicBasic}} let comb = this.username + ":" + this.password; From e1ef7d40b3a217d49aa026130da26c7723066adb Mon Sep 17 00:00:00 2001 From: Kuzma <57258237+ksvirkou-hubspot@users.noreply.github.com> Date: Mon, 17 May 2021 19:22:18 +0300 Subject: [PATCH 121/186] add OAuth2 to typescript template (#9466) * add OAuth to typescript * generate samples --- .../main/resources/typescript/auth/auth.mustache | 13 +++++++++---- .../petstore/typescript/builds/default/auth/auth.ts | 13 +++++++++---- .../petstore/typescript/builds/deno/auth/auth.ts | 13 +++++++++---- .../typescript/builds/inversify/auth/auth.ts | 13 +++++++++---- .../petstore/typescript/builds/jquery/auth/auth.ts | 13 +++++++++---- .../typescript/builds/object_params/auth/auth.ts | 13 +++++++++---- 6 files changed, 54 insertions(+), 24 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript/auth/auth.mustache b/modules/openapi-generator/src/main/resources/typescript/auth/auth.mustache index 332760455bf6..bfb303e741ed 100644 --- a/modules/openapi-generator/src/main/resources/typescript/auth/auth.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/auth/auth.mustache @@ -75,8 +75,12 @@ export class {{#lambda.pascalcase}}{{name}}{{/lambda.pascalcase}}Authentication public constructor({{#useInversify}}@inject(AbstractTokenProvider) @named("{{name}}") {{/useInversify}}private tokenProvider: TokenProvider) {} {{/isBasicBearer}} {{#isOAuth}} - // TODO: How to handle oauth2 authentication! - public constructor() {} + /** + * Configures OAuth2 with the necessary properties + * + * @param accessToken: The access token to be used for every request + */ + public constructor(private accessToken: string) {} {{/isOAuth}} public getName(): string { @@ -95,7 +99,7 @@ export class {{#lambda.pascalcase}}{{name}}{{/lambda.pascalcase}}Authentication context.setHeaderParam("Authorization", "Bearer " + await this.tokenProvider.getToken()); {{/isBasicBearer}} {{#isOAuth}} - // TODO + context.setHeaderParam("Authorization", "Bearer " + this.accessToken); {{/isOAuth}} } } @@ -119,7 +123,7 @@ export const authMethodServices = { export type ApiKeyConfiguration = string; export type HttpBasicConfiguration = { "username": string, "password": string }; export type HttpBearerConfiguration = { tokenProvider: TokenProvider }; -export type OAuth2Configuration = string; +export type OAuth2Configuration = { accessToken: string }; export type AuthMethodsConfiguration = { {{#authMethods}} @@ -152,6 +156,7 @@ export function configureAuthMethods(config: AuthMethodsConfiguration | undefine config["{{name}}"]["tokenProvider"] {{/isBasicBearer}} {{#isOAuth}} + config["{{name}}"]["accessToken"] {{/isOAuth}} ); } diff --git a/samples/openapi3/client/petstore/typescript/builds/default/auth/auth.ts b/samples/openapi3/client/petstore/typescript/builds/default/auth/auth.ts index 9d59a0a25580..1f1d1ecac678 100644 --- a/samples/openapi3/client/petstore/typescript/builds/default/auth/auth.ts +++ b/samples/openapi3/client/petstore/typescript/builds/default/auth/auth.ts @@ -48,15 +48,19 @@ export class ApiKeyAuthentication implements SecurityAuthentication { * Applies oauth2 authentication to the request context. */ export class PetstoreAuthAuthentication implements SecurityAuthentication { - // TODO: How to handle oauth2 authentication! - public constructor() {} + /** + * Configures OAuth2 with the necessary properties + * + * @param accessToken: The access token to be used for every request + */ + public constructor(private accessToken: string) {} public getName(): string { return "petstore_auth"; } public applySecurityAuthentication(context: RequestContext) { - // TODO + context.setHeaderParam("Authorization", "Bearer " + this.accessToken); } } @@ -69,7 +73,7 @@ export type AuthMethods = { export type ApiKeyConfiguration = string; export type HttpBasicConfiguration = { "username": string, "password": string }; export type HttpBearerConfiguration = { tokenProvider: TokenProvider }; -export type OAuth2Configuration = string; +export type OAuth2Configuration = { accessToken: string }; export type AuthMethodsConfiguration = { "api_key"?: ApiKeyConfiguration, @@ -95,6 +99,7 @@ export function configureAuthMethods(config: AuthMethodsConfiguration | undefine if (config["petstore_auth"]) { authMethods["petstore_auth"] = new PetstoreAuthAuthentication( + config["petstore_auth"]["accessToken"] ); } diff --git a/samples/openapi3/client/petstore/typescript/builds/deno/auth/auth.ts b/samples/openapi3/client/petstore/typescript/builds/deno/auth/auth.ts index 0a02d2e58d2b..e7609dabbece 100644 --- a/samples/openapi3/client/petstore/typescript/builds/deno/auth/auth.ts +++ b/samples/openapi3/client/petstore/typescript/builds/deno/auth/auth.ts @@ -46,15 +46,19 @@ export class ApiKeyAuthentication implements SecurityAuthentication { * Applies oauth2 authentication to the request context. */ export class PetstoreAuthAuthentication implements SecurityAuthentication { - // TODO: How to handle oauth2 authentication! - public constructor() {} + /** + * Configures OAuth2 with the necessary properties + * + * @param accessToken: The access token to be used for every request + */ + public constructor(private accessToken: string) {} public getName(): string { return "petstore_auth"; } public applySecurityAuthentication(context: RequestContext) { - // TODO + context.setHeaderParam("Authorization", "Bearer " + this.accessToken); } } @@ -67,7 +71,7 @@ export type AuthMethods = { export type ApiKeyConfiguration = string; export type HttpBasicConfiguration = { "username": string, "password": string }; export type HttpBearerConfiguration = { tokenProvider: TokenProvider }; -export type OAuth2Configuration = string; +export type OAuth2Configuration = { accessToken: string }; export type AuthMethodsConfiguration = { "api_key"?: ApiKeyConfiguration, @@ -93,6 +97,7 @@ export function configureAuthMethods(config: AuthMethodsConfiguration | undefine if (config["petstore_auth"]) { authMethods["petstore_auth"] = new PetstoreAuthAuthentication( + config["petstore_auth"]["accessToken"] ); } diff --git a/samples/openapi3/client/petstore/typescript/builds/inversify/auth/auth.ts b/samples/openapi3/client/petstore/typescript/builds/inversify/auth/auth.ts index 13e3b17fa825..f6ffebc4d7ee 100644 --- a/samples/openapi3/client/petstore/typescript/builds/inversify/auth/auth.ts +++ b/samples/openapi3/client/petstore/typescript/builds/inversify/auth/auth.ts @@ -56,15 +56,19 @@ export class ApiKeyAuthentication implements SecurityAuthentication { */ @injectable() export class PetstoreAuthAuthentication implements SecurityAuthentication { - // TODO: How to handle oauth2 authentication! - public constructor() {} + /** + * Configures OAuth2 with the necessary properties + * + * @param accessToken: The access token to be used for every request + */ + public constructor(private accessToken: string) {} public getName(): string { return "petstore_auth"; } public applySecurityAuthentication(context: RequestContext) { - // TODO + context.setHeaderParam("Authorization", "Bearer " + this.accessToken); } } @@ -82,7 +86,7 @@ export const authMethodServices = { export type ApiKeyConfiguration = string; export type HttpBasicConfiguration = { "username": string, "password": string }; export type HttpBearerConfiguration = { tokenProvider: TokenProvider }; -export type OAuth2Configuration = string; +export type OAuth2Configuration = { accessToken: string }; export type AuthMethodsConfiguration = { "api_key"?: ApiKeyConfiguration, @@ -108,6 +112,7 @@ export function configureAuthMethods(config: AuthMethodsConfiguration | undefine if (config["petstore_auth"]) { authMethods["petstore_auth"] = new PetstoreAuthAuthentication( + config["petstore_auth"]["accessToken"] ); } diff --git a/samples/openapi3/client/petstore/typescript/builds/jquery/auth/auth.ts b/samples/openapi3/client/petstore/typescript/builds/jquery/auth/auth.ts index 2cdf0800f32a..d8924a4216c2 100644 --- a/samples/openapi3/client/petstore/typescript/builds/jquery/auth/auth.ts +++ b/samples/openapi3/client/petstore/typescript/builds/jquery/auth/auth.ts @@ -46,15 +46,19 @@ export class ApiKeyAuthentication implements SecurityAuthentication { * Applies oauth2 authentication to the request context. */ export class PetstoreAuthAuthentication implements SecurityAuthentication { - // TODO: How to handle oauth2 authentication! - public constructor() {} + /** + * Configures OAuth2 with the necessary properties + * + * @param accessToken: The access token to be used for every request + */ + public constructor(private accessToken: string) {} public getName(): string { return "petstore_auth"; } public applySecurityAuthentication(context: RequestContext) { - // TODO + context.setHeaderParam("Authorization", "Bearer " + this.accessToken); } } @@ -67,7 +71,7 @@ export type AuthMethods = { export type ApiKeyConfiguration = string; export type HttpBasicConfiguration = { "username": string, "password": string }; export type HttpBearerConfiguration = { tokenProvider: TokenProvider }; -export type OAuth2Configuration = string; +export type OAuth2Configuration = { accessToken: string }; export type AuthMethodsConfiguration = { "api_key"?: ApiKeyConfiguration, @@ -93,6 +97,7 @@ export function configureAuthMethods(config: AuthMethodsConfiguration | undefine if (config["petstore_auth"]) { authMethods["petstore_auth"] = new PetstoreAuthAuthentication( + config["petstore_auth"]["accessToken"] ); } diff --git a/samples/openapi3/client/petstore/typescript/builds/object_params/auth/auth.ts b/samples/openapi3/client/petstore/typescript/builds/object_params/auth/auth.ts index 9d59a0a25580..1f1d1ecac678 100644 --- a/samples/openapi3/client/petstore/typescript/builds/object_params/auth/auth.ts +++ b/samples/openapi3/client/petstore/typescript/builds/object_params/auth/auth.ts @@ -48,15 +48,19 @@ export class ApiKeyAuthentication implements SecurityAuthentication { * Applies oauth2 authentication to the request context. */ export class PetstoreAuthAuthentication implements SecurityAuthentication { - // TODO: How to handle oauth2 authentication! - public constructor() {} + /** + * Configures OAuth2 with the necessary properties + * + * @param accessToken: The access token to be used for every request + */ + public constructor(private accessToken: string) {} public getName(): string { return "petstore_auth"; } public applySecurityAuthentication(context: RequestContext) { - // TODO + context.setHeaderParam("Authorization", "Bearer " + this.accessToken); } } @@ -69,7 +73,7 @@ export type AuthMethods = { export type ApiKeyConfiguration = string; export type HttpBasicConfiguration = { "username": string, "password": string }; export type HttpBearerConfiguration = { tokenProvider: TokenProvider }; -export type OAuth2Configuration = string; +export type OAuth2Configuration = { accessToken: string }; export type AuthMethodsConfiguration = { "api_key"?: ApiKeyConfiguration, @@ -95,6 +99,7 @@ export function configureAuthMethods(config: AuthMethodsConfiguration | undefine if (config["petstore_auth"]) { authMethods["petstore_auth"] = new PetstoreAuthAuthentication( + config["petstore_auth"]["accessToken"] ); } From fb3aed6dc43b9c723b2f8c6e4418830ca4314862 Mon Sep 17 00:00:00 2001 From: Justin Black Date: Mon, 17 May 2021 20:15:53 -0700 Subject: [PATCH 122/186] Fixes python test_fake_api tests (#9483) * Fixes test_upload_download_file * Fixes test_string * Fixes test_string_enum * Fixes test_number_with_validations test_composed_one_of_number_with_validations * Fixes two more tests * Fixes test_array_of_enums * Fixes two tests * Removes comment * Fixes serializationf of composed schema object models, fixes test * Samples regenerated * Removes pdb --- .../resources/python/model_utils.mustache | 20 ++- ...odels-for-testing-with-http-signature.yaml | 12 +- .../python/petstore_api/model_utils.py | 20 ++- .../petstore_api/model_utils.py | 20 ++- .../python/x_auth_id_alias/model_utils.py | 20 ++- .../python/dynamic_servers/model_utils.py | 20 ++- .../petstore/python/.openapi-generator/FILES | 4 +- .../openapi3/client/petstore/python/README.md | 6 +- .../client/petstore/python/docs/FakeApi.md | 154 ++++++++-------- ...neAdditionalPropertiesPayloadArrayData.md} | 2 +- .../InlineAdditionalPropertiesRefPayload.md | 2 +- .../petstore/python/docs/InlineObject6.md | 2 +- .../python/petstore_api/api/fake_api.py | 166 +++++++++--------- ...ditional_properties_payload_array_data.py} | 6 +- ...nline_additional_properties_ref_payload.py | 10 +- .../petstore_api/model/inline_object6.py | 10 +- .../python/petstore_api/model_utils.py | 20 ++- .../python/petstore_api/models/__init__.py | 2 +- ...ditional_properties_payload_array_data.py} | 12 +- ...nline_additional_properties_ref_payload.py | 4 +- .../python/test/test_inline_object6.py | 4 +- .../python/tests_manual/test_fake_api.py | 110 ++++++++---- 22 files changed, 387 insertions(+), 239 deletions(-) rename samples/openapi3/client/petstore/python/docs/{FakeGetInlineAdditionalPropertiesPayloadArrayData.md => FakePostInlineAdditionalPropertiesPayloadArrayData.md} (90%) rename samples/openapi3/client/petstore/python/petstore_api/model/{fake_get_inline_additional_properties_payload_array_data.py => fake_post_inline_additional_properties_payload_array_data.py} (97%) rename samples/openapi3/client/petstore/python/test/{test_fake_get_inline_additional_properties_payload_array_data.py => test_fake_post_inline_additional_properties_payload_array_data.py} (52%) diff --git a/modules/openapi-generator/src/main/resources/python/model_utils.mustache b/modules/openapi-generator/src/main/resources/python/model_utils.mustache index 73e6e7d555b0..c7944e4fdcf5 100644 --- a/modules/openapi-generator/src/main/resources/python/model_utils.mustache +++ b/modules/openapi-generator/src/main/resources/python/model_utils.mustache @@ -1335,12 +1335,20 @@ def model_to_dict(model_instance, serialize=True): model_instances = [model_instance] if model_instance._composed_schemas: model_instances.extend(model_instance._composed_instances) + seen_json_attribute_names = set() + used_fallback_python_attribute_names = set() + py_to_json_map = {} for model_instance in model_instances: for attr, value in model_instance._data_store.items(): if serialize: # we use get here because additional property key names do not # exist in attribute_map - attr = model_instance.attribute_map.get(attr, attr) + try: + attr = model_instance.attribute_map[attr] + py_to_json_map.update(model_instance.attribute_map) + seen_json_attribute_names.add(attr) + except KeyError: + used_fallback_python_attribute_names.add(attr) if isinstance(value, list): if not value: # empty list or None @@ -1368,6 +1376,16 @@ def model_to_dict(model_instance, serialize=True): result[attr] = model_to_dict(value, serialize=serialize) else: result[attr] = value + if serialize: + for python_key in used_fallback_python_attribute_names: + json_key = py_to_json_map.get(python_key) + if json_key is None: + continue + if python_key == json_key: + continue + json_key_assigned_no_need_for_python_key = json_key in seen_json_attribute_names + if json_key_assigned_no_need_for_python_key: + del result[python_key] return result diff --git a/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml b/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml index 683641e5a862..4efbc9cc0283 100644 --- a/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/python/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml @@ -1288,11 +1288,11 @@ paths: application/json: schema: $ref: '#/components/schemas/HealthCheckResult' - /fake/getInlineAdditionalPropertiesRefPayload: - get: + /fake/postInlineAdditionalPropertiesRefPayload: + post: tags: - fake - operationId: getInlineAdditionalPropertiesRefPayload + operationId: postInlineAdditionalPropertiesRefPayload responses: 200: description: InlineAdditionalPropertiesRefPayload @@ -1305,11 +1305,11 @@ paths: application/json: schema: $ref: '#/components/schemas/InlineAdditionalPropertiesRefPayload' - /fake/getInlineAdditionalPropertiesPayload: - get: + /fake/postInlineAdditionalPropertiesPayload: + post: tags: - fake - operationId: getInlineAdditionalPropertiesPayload + operationId: postInlineAdditionalPropertiesPayload responses: 200: description: InlineAdditionalPropertiesPayload diff --git a/samples/client/petstore/python/petstore_api/model_utils.py b/samples/client/petstore/python/petstore_api/model_utils.py index 3913228d6b89..97f9b2881cc5 100644 --- a/samples/client/petstore/python/petstore_api/model_utils.py +++ b/samples/client/petstore/python/petstore_api/model_utils.py @@ -1632,12 +1632,20 @@ def model_to_dict(model_instance, serialize=True): model_instances = [model_instance] if model_instance._composed_schemas: model_instances.extend(model_instance._composed_instances) + seen_json_attribute_names = set() + used_fallback_python_attribute_names = set() + py_to_json_map = {} for model_instance in model_instances: for attr, value in model_instance._data_store.items(): if serialize: # we use get here because additional property key names do not # exist in attribute_map - attr = model_instance.attribute_map.get(attr, attr) + try: + attr = model_instance.attribute_map[attr] + py_to_json_map.update(model_instance.attribute_map) + seen_json_attribute_names.add(attr) + except KeyError: + used_fallback_python_attribute_names.add(attr) if isinstance(value, list): if not value: # empty list or None @@ -1665,6 +1673,16 @@ def model_to_dict(model_instance, serialize=True): result[attr] = model_to_dict(value, serialize=serialize) else: result[attr] = value + if serialize: + for python_key in used_fallback_python_attribute_names: + json_key = py_to_json_map.get(python_key) + if json_key is None: + continue + if python_key == json_key: + continue + json_key_assigned_no_need_for_python_key = json_key in seen_json_attribute_names + if json_key_assigned_no_need_for_python_key: + del result[python_key] return result diff --git a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py index 3913228d6b89..97f9b2881cc5 100644 --- a/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py +++ b/samples/client/petstore/python_disallowAdditionalPropertiesIfNotPresent/petstore_api/model_utils.py @@ -1632,12 +1632,20 @@ def model_to_dict(model_instance, serialize=True): model_instances = [model_instance] if model_instance._composed_schemas: model_instances.extend(model_instance._composed_instances) + seen_json_attribute_names = set() + used_fallback_python_attribute_names = set() + py_to_json_map = {} for model_instance in model_instances: for attr, value in model_instance._data_store.items(): if serialize: # we use get here because additional property key names do not # exist in attribute_map - attr = model_instance.attribute_map.get(attr, attr) + try: + attr = model_instance.attribute_map[attr] + py_to_json_map.update(model_instance.attribute_map) + seen_json_attribute_names.add(attr) + except KeyError: + used_fallback_python_attribute_names.add(attr) if isinstance(value, list): if not value: # empty list or None @@ -1665,6 +1673,16 @@ def model_to_dict(model_instance, serialize=True): result[attr] = model_to_dict(value, serialize=serialize) else: result[attr] = value + if serialize: + for python_key in used_fallback_python_attribute_names: + json_key = py_to_json_map.get(python_key) + if json_key is None: + continue + if python_key == json_key: + continue + json_key_assigned_no_need_for_python_key = json_key in seen_json_attribute_names + if json_key_assigned_no_need_for_python_key: + del result[python_key] return result diff --git a/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py b/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py index 7993d12971b2..bd30ebabb27f 100644 --- a/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py +++ b/samples/openapi3/client/extensions/x-auth-id-alias/python/x_auth_id_alias/model_utils.py @@ -1632,12 +1632,20 @@ def model_to_dict(model_instance, serialize=True): model_instances = [model_instance] if model_instance._composed_schemas: model_instances.extend(model_instance._composed_instances) + seen_json_attribute_names = set() + used_fallback_python_attribute_names = set() + py_to_json_map = {} for model_instance in model_instances: for attr, value in model_instance._data_store.items(): if serialize: # we use get here because additional property key names do not # exist in attribute_map - attr = model_instance.attribute_map.get(attr, attr) + try: + attr = model_instance.attribute_map[attr] + py_to_json_map.update(model_instance.attribute_map) + seen_json_attribute_names.add(attr) + except KeyError: + used_fallback_python_attribute_names.add(attr) if isinstance(value, list): if not value: # empty list or None @@ -1665,6 +1673,16 @@ def model_to_dict(model_instance, serialize=True): result[attr] = model_to_dict(value, serialize=serialize) else: result[attr] = value + if serialize: + for python_key in used_fallback_python_attribute_names: + json_key = py_to_json_map.get(python_key) + if json_key is None: + continue + if python_key == json_key: + continue + json_key_assigned_no_need_for_python_key = json_key in seen_json_attribute_names + if json_key_assigned_no_need_for_python_key: + del result[python_key] return result diff --git a/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py b/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py index 2fcf6b2de1e4..c73de2486818 100644 --- a/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py +++ b/samples/openapi3/client/features/dynamic-servers/python/dynamic_servers/model_utils.py @@ -1632,12 +1632,20 @@ def model_to_dict(model_instance, serialize=True): model_instances = [model_instance] if model_instance._composed_schemas: model_instances.extend(model_instance._composed_instances) + seen_json_attribute_names = set() + used_fallback_python_attribute_names = set() + py_to_json_map = {} for model_instance in model_instances: for attr, value in model_instance._data_store.items(): if serialize: # we use get here because additional property key names do not # exist in attribute_map - attr = model_instance.attribute_map.get(attr, attr) + try: + attr = model_instance.attribute_map[attr] + py_to_json_map.update(model_instance.attribute_map) + seen_json_attribute_names.add(attr) + except KeyError: + used_fallback_python_attribute_names.add(attr) if isinstance(value, list): if not value: # empty list or None @@ -1665,6 +1673,16 @@ def model_to_dict(model_instance, serialize=True): result[attr] = model_to_dict(value, serialize=serialize) else: result[attr] = value + if serialize: + for python_key in used_fallback_python_attribute_names: + json_key = py_to_json_map.get(python_key) + if json_key is None: + continue + if python_key == json_key: + continue + json_key_assigned_no_need_for_python_key = json_key in seen_json_attribute_names + if json_key_assigned_no_need_for_python_key: + del result[python_key] return result diff --git a/samples/openapi3/client/petstore/python/.openapi-generator/FILES b/samples/openapi3/client/petstore/python/.openapi-generator/FILES index 9e23967bd9af..bf96206001f5 100644 --- a/samples/openapi3/client/petstore/python/.openapi-generator/FILES +++ b/samples/openapi3/client/petstore/python/.openapi-generator/FILES @@ -40,7 +40,7 @@ docs/EnumTest.md docs/EquilateralTriangle.md docs/FakeApi.md docs/FakeClassnameTags123Api.md -docs/FakeGetInlineAdditionalPropertiesPayloadArrayData.md +docs/FakePostInlineAdditionalPropertiesPayloadArrayData.md docs/File.md docs/FileSchemaTestClass.md docs/Foo.md @@ -150,7 +150,7 @@ petstore_api/model/enum_arrays.py petstore_api/model/enum_class.py petstore_api/model/enum_test.py petstore_api/model/equilateral_triangle.py -petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py +petstore_api/model/fake_post_inline_additional_properties_payload_array_data.py petstore_api/model/file.py petstore_api/model/file_schema_test_class.py petstore_api/model/foo.py diff --git a/samples/openapi3/client/petstore/python/README.md b/samples/openapi3/client/petstore/python/README.md index bf7ae031db41..beb64bb7e04e 100644 --- a/samples/openapi3/client/petstore/python/README.md +++ b/samples/openapi3/client/petstore/python/README.md @@ -91,11 +91,11 @@ Class | Method | HTTP request | Description *FakeApi* | [**download_attachment**](docs/FakeApi.md#download_attachment) | **GET** /{fileName} | downloads a file using Content-Disposition *FakeApi* | [**enum_test**](docs/FakeApi.md#enum_test) | **POST** /fake/refs/enum-test | Object contains enum properties and array properties containing enums *FakeApi* | [**fake_health_get**](docs/FakeApi.md#fake_health_get) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**get_inline_additional_properties_payload**](docs/FakeApi.md#get_inline_additional_properties_payload) | **GET** /fake/getInlineAdditionalPropertiesPayload | -*FakeApi* | [**get_inline_additional_properties_ref_payload**](docs/FakeApi.md#get_inline_additional_properties_ref_payload) | **GET** /fake/getInlineAdditionalPropertiesRefPayload | *FakeApi* | [**mammal**](docs/FakeApi.md#mammal) | **POST** /fake/refs/mammal | *FakeApi* | [**number_with_validations**](docs/FakeApi.md#number_with_validations) | **POST** /fake/refs/number | *FakeApi* | [**object_model_with_ref_props**](docs/FakeApi.md#object_model_with_ref_props) | **POST** /fake/refs/object_model_with_ref_props | +*FakeApi* | [**post_inline_additional_properties_payload**](docs/FakeApi.md#post_inline_additional_properties_payload) | **POST** /fake/postInlineAdditionalPropertiesPayload | +*FakeApi* | [**post_inline_additional_properties_ref_payload**](docs/FakeApi.md#post_inline_additional_properties_ref_payload) | **POST** /fake/postInlineAdditionalPropertiesRefPayload | *FakeApi* | [**string**](docs/FakeApi.md#string) | **POST** /fake/refs/string | *FakeApi* | [**string_enum**](docs/FakeApi.md#string_enum) | **POST** /fake/refs/enum | *FakeApi* | [**test_body_with_file_schema**](docs/FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | @@ -168,7 +168,7 @@ Class | Method | HTTP request | Description - [EnumClass](docs/EnumClass.md) - [EnumTest](docs/EnumTest.md) - [EquilateralTriangle](docs/EquilateralTriangle.md) - - [FakeGetInlineAdditionalPropertiesPayloadArrayData](docs/FakeGetInlineAdditionalPropertiesPayloadArrayData.md) + - [FakePostInlineAdditionalPropertiesPayloadArrayData](docs/FakePostInlineAdditionalPropertiesPayloadArrayData.md) - [File](docs/File.md) - [FileSchemaTestClass](docs/FileSchemaTestClass.md) - [Foo](docs/Foo.md) diff --git a/samples/openapi3/client/petstore/python/docs/FakeApi.md b/samples/openapi3/client/petstore/python/docs/FakeApi.md index acc41cb48998..5802b45cb399 100644 --- a/samples/openapi3/client/petstore/python/docs/FakeApi.md +++ b/samples/openapi3/client/petstore/python/docs/FakeApi.md @@ -12,11 +12,11 @@ Method | HTTP request | Description [**download_attachment**](FakeApi.md#download_attachment) | **GET** /{fileName} | downloads a file using Content-Disposition [**enum_test**](FakeApi.md#enum_test) | **POST** /fake/refs/enum-test | Object contains enum properties and array properties containing enums [**fake_health_get**](FakeApi.md#fake_health_get) | **GET** /fake/health | Health check endpoint -[**get_inline_additional_properties_payload**](FakeApi.md#get_inline_additional_properties_payload) | **GET** /fake/getInlineAdditionalPropertiesPayload | -[**get_inline_additional_properties_ref_payload**](FakeApi.md#get_inline_additional_properties_ref_payload) | **GET** /fake/getInlineAdditionalPropertiesRefPayload | [**mammal**](FakeApi.md#mammal) | **POST** /fake/refs/mammal | [**number_with_validations**](FakeApi.md#number_with_validations) | **POST** /fake/refs/number | [**object_model_with_ref_props**](FakeApi.md#object_model_with_ref_props) | **POST** /fake/refs/object_model_with_ref_props | +[**post_inline_additional_properties_payload**](FakeApi.md#post_inline_additional_properties_payload) | **POST** /fake/postInlineAdditionalPropertiesPayload | +[**post_inline_additional_properties_ref_payload**](FakeApi.md#post_inline_additional_properties_ref_payload) | **POST** /fake/postInlineAdditionalPropertiesRefPayload | [**string**](FakeApi.md#string) | **POST** /fake/refs/string | [**string_enum**](FakeApi.md#string_enum) | **POST** /fake/refs/enum | [**test_body_with_file_schema**](FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | @@ -564,18 +564,20 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_inline_additional_properties_payload** -> InlineObject6 get_inline_additional_properties_payload() +# **mammal** +> Mammal mammal(mammal) +Test serialization of mammals + ### Example ```python import time import petstore_api from petstore_api.api import fake_api -from petstore_api.model.inline_object6 import InlineObject6 +from petstore_api.model.mammal import Mammal from pprint import pprint # Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 # See configuration.py for a list of all supported configuration parameters. @@ -588,23 +590,18 @@ configuration = petstore_api.Configuration( with petstore_api.ApiClient() as api_client: # Create an instance of the API class api_instance = fake_api.FakeApi(api_client) - inline_object6 = InlineObject6( - array_data=[ - FakeGetInlineAdditionalPropertiesPayloadArrayData( - labels=[ - "labels_example", - ], - ), - ], - ) # InlineObject6 | (optional) + mammal = Mammal( + has_baleen=True, + has_teeth=True, + class_name="whale", + ) # Mammal | Input mammal # example passing only required values which don't have defaults set - # and optional values try: - api_response = api_instance.get_inline_additional_properties_payload(inline_object6=inline_object6) + api_response = api_instance.mammal(mammal) pprint(api_response) except petstore_api.ApiException as e: - print("Exception when calling FakeApi->get_inline_additional_properties_payload: %s\n" % e) + print("Exception when calling FakeApi->mammal: %s\n" % e) ``` @@ -612,11 +609,11 @@ with petstore_api.ApiClient() as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **inline_object6** | [**InlineObject6**](InlineObject6.md)| | [optional] + **mammal** | [**Mammal**](Mammal.md)| Input mammal | ### Return type -[**InlineObject6**](InlineObject6.md) +[**Mammal**](Mammal.md) ### Authorization @@ -631,14 +628,16 @@ No authorization required ### HTTP response details | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | InlineAdditionalPropertiesPayload | - | +**200** | Output mammal | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_inline_additional_properties_ref_payload** -> InlineAdditionalPropertiesRefPayload get_inline_additional_properties_ref_payload() +# **number_with_validations** +> NumberWithValidations number_with_validations() + +Test serialization of outer number types ### Example @@ -646,7 +645,7 @@ No authorization required import time import petstore_api from petstore_api.api import fake_api -from petstore_api.model.inline_additional_properties_ref_payload import InlineAdditionalPropertiesRefPayload +from petstore_api.model.number_with_validations import NumberWithValidations from pprint import pprint # Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 # See configuration.py for a list of all supported configuration parameters. @@ -659,23 +658,15 @@ configuration = petstore_api.Configuration( with petstore_api.ApiClient() as api_client: # Create an instance of the API class api_instance = fake_api.FakeApi(api_client) - inline_additional_properties_ref_payload = InlineAdditionalPropertiesRefPayload( - array_data=[ - FakeGetInlineAdditionalPropertiesPayloadArrayData( - labels=[ - "labels_example", - ], - ), - ], - ) # InlineAdditionalPropertiesRefPayload | (optional) + body = NumberWithValidations(10) # NumberWithValidations | Input number as post body (optional) # example passing only required values which don't have defaults set # and optional values try: - api_response = api_instance.get_inline_additional_properties_ref_payload(inline_additional_properties_ref_payload=inline_additional_properties_ref_payload) + api_response = api_instance.number_with_validations(body=body) pprint(api_response) except petstore_api.ApiException as e: - print("Exception when calling FakeApi->get_inline_additional_properties_ref_payload: %s\n" % e) + print("Exception when calling FakeApi->number_with_validations: %s\n" % e) ``` @@ -683,11 +674,11 @@ with petstore_api.ApiClient() as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **inline_additional_properties_ref_payload** | [**InlineAdditionalPropertiesRefPayload**](InlineAdditionalPropertiesRefPayload.md)| | [optional] + **body** | [**NumberWithValidations**](NumberWithValidations.md)| Input number as post body | [optional] ### Return type -[**InlineAdditionalPropertiesRefPayload**](InlineAdditionalPropertiesRefPayload.md) +[**NumberWithValidations**](NumberWithValidations.md) ### Authorization @@ -702,16 +693,16 @@ No authorization required ### HTTP response details | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | InlineAdditionalPropertiesRefPayload | - | +**200** | Output number | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **mammal** -> Mammal mammal(mammal) +# **object_model_with_ref_props** +> ObjectModelWithRefProps object_model_with_ref_props() -Test serialization of mammals +Test serialization of object with $refed properties ### Example @@ -719,7 +710,7 @@ Test serialization of mammals import time import petstore_api from petstore_api.api import fake_api -from petstore_api.model.mammal import Mammal +from petstore_api.model.object_model_with_ref_props import ObjectModelWithRefProps from pprint import pprint # Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 # See configuration.py for a list of all supported configuration parameters. @@ -732,18 +723,19 @@ configuration = petstore_api.Configuration( with petstore_api.ApiClient() as api_client: # Create an instance of the API class api_instance = fake_api.FakeApi(api_client) - mammal = Mammal( - has_baleen=True, - has_teeth=True, - class_name="whale", - ) # Mammal | Input mammal + body = ObjectModelWithRefProps( + my_number=NumberWithValidations(10), + my_string="my_string_example", + my_boolean=True, + ) # ObjectModelWithRefProps | Input model (optional) # example passing only required values which don't have defaults set + # and optional values try: - api_response = api_instance.mammal(mammal) + api_response = api_instance.object_model_with_ref_props(body=body) pprint(api_response) except petstore_api.ApiException as e: - print("Exception when calling FakeApi->mammal: %s\n" % e) + print("Exception when calling FakeApi->object_model_with_ref_props: %s\n" % e) ``` @@ -751,11 +743,11 @@ with petstore_api.ApiClient() as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **mammal** | [**Mammal**](Mammal.md)| Input mammal | + **body** | [**ObjectModelWithRefProps**](ObjectModelWithRefProps.md)| Input model | [optional] ### Return type -[**Mammal**](Mammal.md) +[**ObjectModelWithRefProps**](ObjectModelWithRefProps.md) ### Authorization @@ -770,24 +762,22 @@ No authorization required ### HTTP response details | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | Output mammal | - | +**200** | Output model | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **number_with_validations** -> NumberWithValidations number_with_validations() +# **post_inline_additional_properties_payload** +> InlineObject6 post_inline_additional_properties_payload() -Test serialization of outer number types - ### Example ```python import time import petstore_api from petstore_api.api import fake_api -from petstore_api.model.number_with_validations import NumberWithValidations +from petstore_api.model.inline_object6 import InlineObject6 from pprint import pprint # Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 # See configuration.py for a list of all supported configuration parameters. @@ -800,15 +790,23 @@ configuration = petstore_api.Configuration( with petstore_api.ApiClient() as api_client: # Create an instance of the API class api_instance = fake_api.FakeApi(api_client) - body = NumberWithValidations(10) # NumberWithValidations | Input number as post body (optional) + inline_object6 = InlineObject6( + array_data=[ + FakePostInlineAdditionalPropertiesPayloadArrayData( + labels=[ + "labels_example", + ], + ), + ], + ) # InlineObject6 | (optional) # example passing only required values which don't have defaults set # and optional values try: - api_response = api_instance.number_with_validations(body=body) + api_response = api_instance.post_inline_additional_properties_payload(inline_object6=inline_object6) pprint(api_response) except petstore_api.ApiException as e: - print("Exception when calling FakeApi->number_with_validations: %s\n" % e) + print("Exception when calling FakeApi->post_inline_additional_properties_payload: %s\n" % e) ``` @@ -816,11 +814,11 @@ with petstore_api.ApiClient() as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**NumberWithValidations**](NumberWithValidations.md)| Input number as post body | [optional] + **inline_object6** | [**InlineObject6**](InlineObject6.md)| | [optional] ### Return type -[**NumberWithValidations**](NumberWithValidations.md) +[**InlineObject6**](InlineObject6.md) ### Authorization @@ -835,16 +833,14 @@ No authorization required ### HTTP response details | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | Output number | - | +**200** | InlineAdditionalPropertiesPayload | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **object_model_with_ref_props** -> ObjectModelWithRefProps object_model_with_ref_props() - +# **post_inline_additional_properties_ref_payload** +> InlineAdditionalPropertiesRefPayload post_inline_additional_properties_ref_payload() -Test serialization of object with $refed properties ### Example @@ -852,7 +848,7 @@ Test serialization of object with $refed properties import time import petstore_api from petstore_api.api import fake_api -from petstore_api.model.object_model_with_ref_props import ObjectModelWithRefProps +from petstore_api.model.inline_additional_properties_ref_payload import InlineAdditionalPropertiesRefPayload from pprint import pprint # Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 # See configuration.py for a list of all supported configuration parameters. @@ -865,19 +861,23 @@ configuration = petstore_api.Configuration( with petstore_api.ApiClient() as api_client: # Create an instance of the API class api_instance = fake_api.FakeApi(api_client) - body = ObjectModelWithRefProps( - my_number=NumberWithValidations(10), - my_string="my_string_example", - my_boolean=True, - ) # ObjectModelWithRefProps | Input model (optional) + inline_additional_properties_ref_payload = InlineAdditionalPropertiesRefPayload( + array_data=[ + FakePostInlineAdditionalPropertiesPayloadArrayData( + labels=[ + "labels_example", + ], + ), + ], + ) # InlineAdditionalPropertiesRefPayload | (optional) # example passing only required values which don't have defaults set # and optional values try: - api_response = api_instance.object_model_with_ref_props(body=body) + api_response = api_instance.post_inline_additional_properties_ref_payload(inline_additional_properties_ref_payload=inline_additional_properties_ref_payload) pprint(api_response) except petstore_api.ApiException as e: - print("Exception when calling FakeApi->object_model_with_ref_props: %s\n" % e) + print("Exception when calling FakeApi->post_inline_additional_properties_ref_payload: %s\n" % e) ``` @@ -885,11 +885,11 @@ with petstore_api.ApiClient() as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**ObjectModelWithRefProps**](ObjectModelWithRefProps.md)| Input model | [optional] + **inline_additional_properties_ref_payload** | [**InlineAdditionalPropertiesRefPayload**](InlineAdditionalPropertiesRefPayload.md)| | [optional] ### Return type -[**ObjectModelWithRefProps**](ObjectModelWithRefProps.md) +[**InlineAdditionalPropertiesRefPayload**](InlineAdditionalPropertiesRefPayload.md) ### Authorization @@ -904,7 +904,7 @@ No authorization required ### HTTP response details | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | Output model | - | +**200** | InlineAdditionalPropertiesRefPayload | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/FakeGetInlineAdditionalPropertiesPayloadArrayData.md b/samples/openapi3/client/petstore/python/docs/FakePostInlineAdditionalPropertiesPayloadArrayData.md similarity index 90% rename from samples/openapi3/client/petstore/python/docs/FakeGetInlineAdditionalPropertiesPayloadArrayData.md rename to samples/openapi3/client/petstore/python/docs/FakePostInlineAdditionalPropertiesPayloadArrayData.md index 6c3418d8c079..23ec35f5dcd3 100644 --- a/samples/openapi3/client/petstore/python/docs/FakeGetInlineAdditionalPropertiesPayloadArrayData.md +++ b/samples/openapi3/client/petstore/python/docs/FakePostInlineAdditionalPropertiesPayloadArrayData.md @@ -1,4 +1,4 @@ -# FakeGetInlineAdditionalPropertiesPayloadArrayData +# FakePostInlineAdditionalPropertiesPayloadArrayData ## Properties diff --git a/samples/openapi3/client/petstore/python/docs/InlineAdditionalPropertiesRefPayload.md b/samples/openapi3/client/petstore/python/docs/InlineAdditionalPropertiesRefPayload.md index 5922fc61f1a7..f99ed143d3f8 100644 --- a/samples/openapi3/client/petstore/python/docs/InlineAdditionalPropertiesRefPayload.md +++ b/samples/openapi3/client/petstore/python/docs/InlineAdditionalPropertiesRefPayload.md @@ -5,7 +5,7 @@ this payload is used for verification that some model_to_dict issues are fixed ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**array_data** | [**[FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type**](FakeGetInlineAdditionalPropertiesPayloadArrayData.md) | | [optional] +**array_data** | [**[FakePostInlineAdditionalPropertiesPayloadArrayData], none_type**](FakePostInlineAdditionalPropertiesPayloadArrayData.md) | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/docs/InlineObject6.md b/samples/openapi3/client/petstore/python/docs/InlineObject6.md index fc83501c1546..b4a7a55a2c7f 100644 --- a/samples/openapi3/client/petstore/python/docs/InlineObject6.md +++ b/samples/openapi3/client/petstore/python/docs/InlineObject6.md @@ -5,7 +5,7 @@ this payload is used for verification that some model_to_dict issues are fixed ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**array_data** | [**[FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type**](FakeGetInlineAdditionalPropertiesPayloadArrayData.md) | | [optional] +**array_data** | [**[FakePostInlineAdditionalPropertiesPayloadArrayData], none_type**](FakePostInlineAdditionalPropertiesPayloadArrayData.md) | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py b/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py index 27a387e05701..7dea3785aecd 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py +++ b/samples/openapi3/client/petstore/python/petstore_api/api/fake_api.py @@ -945,21 +945,24 @@ def __fake_health_get( callable=__fake_health_get ) - def __get_inline_additional_properties_payload( + def __mammal( self, + mammal, **kwargs ): - """get_inline_additional_properties_payload # noqa: E501 + """mammal # noqa: E501 + Test serialization of mammals # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_inline_additional_properties_payload(async_req=True) + >>> thread = api.mammal(mammal, async_req=True) >>> result = thread.get() + Args: + mammal (Mammal): Input mammal Keyword Args: - inline_object6 (InlineObject6): [optional] _return_http_data_only (bool): response data without head status code and headers. Default is True. _preload_content (bool): if False, the urllib3.HTTPResponse object @@ -981,7 +984,7 @@ def __get_inline_additional_properties_payload( async_req (bool): execute request asynchronously Returns: - InlineObject6 + Mammal If the method is called asynchronously, returns the request thread. """ @@ -1004,22 +1007,26 @@ def __get_inline_additional_properties_payload( '_check_return_type', True ) kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['mammal'] = \ + mammal return self.call_with_http_info(**kwargs) - self.get_inline_additional_properties_payload = _Endpoint( + self.mammal = _Endpoint( settings={ - 'response_type': (InlineObject6,), + 'response_type': (Mammal,), 'auth': [], - 'endpoint_path': '/fake/getInlineAdditionalPropertiesPayload', - 'operation_id': 'get_inline_additional_properties_payload', - 'http_method': 'GET', + 'endpoint_path': '/fake/refs/mammal', + 'operation_id': 'mammal', + 'http_method': 'POST', 'servers': None, }, params_map={ 'all': [ - 'inline_object6', + 'mammal', + ], + 'required': [ + 'mammal', ], - 'required': [], 'nullable': [ ], 'enum': [ @@ -1033,13 +1040,13 @@ def __get_inline_additional_properties_payload( 'allowed_values': { }, 'openapi_types': { - 'inline_object6': - (InlineObject6,), + 'mammal': + (Mammal,), }, 'attribute_map': { }, 'location_map': { - 'inline_object6': 'body', + 'mammal': 'body', }, 'collection_format_map': { } @@ -1053,24 +1060,25 @@ def __get_inline_additional_properties_payload( ] }, api_client=api_client, - callable=__get_inline_additional_properties_payload + callable=__mammal ) - def __get_inline_additional_properties_ref_payload( + def __number_with_validations( self, **kwargs ): - """get_inline_additional_properties_ref_payload # noqa: E501 + """number_with_validations # noqa: E501 + Test serialization of outer number types # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_inline_additional_properties_ref_payload(async_req=True) + >>> thread = api.number_with_validations(async_req=True) >>> result = thread.get() Keyword Args: - inline_additional_properties_ref_payload (InlineAdditionalPropertiesRefPayload): [optional] + body (NumberWithValidations): Input number as post body. [optional] _return_http_data_only (bool): response data without head status code and headers. Default is True. _preload_content (bool): if False, the urllib3.HTTPResponse object @@ -1092,7 +1100,7 @@ def __get_inline_additional_properties_ref_payload( async_req (bool): execute request asynchronously Returns: - InlineAdditionalPropertiesRefPayload + NumberWithValidations If the method is called asynchronously, returns the request thread. """ @@ -1117,18 +1125,18 @@ def __get_inline_additional_properties_ref_payload( kwargs['_host_index'] = kwargs.get('_host_index') return self.call_with_http_info(**kwargs) - self.get_inline_additional_properties_ref_payload = _Endpoint( + self.number_with_validations = _Endpoint( settings={ - 'response_type': (InlineAdditionalPropertiesRefPayload,), + 'response_type': (NumberWithValidations,), 'auth': [], - 'endpoint_path': '/fake/getInlineAdditionalPropertiesRefPayload', - 'operation_id': 'get_inline_additional_properties_ref_payload', - 'http_method': 'GET', + 'endpoint_path': '/fake/refs/number', + 'operation_id': 'number_with_validations', + 'http_method': 'POST', 'servers': None, }, params_map={ 'all': [ - 'inline_additional_properties_ref_payload', + 'body', ], 'required': [], 'nullable': [ @@ -1144,13 +1152,13 @@ def __get_inline_additional_properties_ref_payload( 'allowed_values': { }, 'openapi_types': { - 'inline_additional_properties_ref_payload': - (InlineAdditionalPropertiesRefPayload,), + 'body': + (NumberWithValidations,), }, 'attribute_map': { }, 'location_map': { - 'inline_additional_properties_ref_payload': 'body', + 'body': 'body', }, 'collection_format_map': { } @@ -1164,27 +1172,25 @@ def __get_inline_additional_properties_ref_payload( ] }, api_client=api_client, - callable=__get_inline_additional_properties_ref_payload + callable=__number_with_validations ) - def __mammal( + def __object_model_with_ref_props( self, - mammal, **kwargs ): - """mammal # noqa: E501 + """object_model_with_ref_props # noqa: E501 - Test serialization of mammals # noqa: E501 + Test serialization of object with $refed properties # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.mammal(mammal, async_req=True) + >>> thread = api.object_model_with_ref_props(async_req=True) >>> result = thread.get() - Args: - mammal (Mammal): Input mammal Keyword Args: + body (ObjectModelWithRefProps): Input model. [optional] _return_http_data_only (bool): response data without head status code and headers. Default is True. _preload_content (bool): if False, the urllib3.HTTPResponse object @@ -1206,7 +1212,7 @@ def __mammal( async_req (bool): execute request asynchronously Returns: - Mammal + ObjectModelWithRefProps If the method is called asynchronously, returns the request thread. """ @@ -1229,26 +1235,22 @@ def __mammal( '_check_return_type', True ) kwargs['_host_index'] = kwargs.get('_host_index') - kwargs['mammal'] = \ - mammal return self.call_with_http_info(**kwargs) - self.mammal = _Endpoint( + self.object_model_with_ref_props = _Endpoint( settings={ - 'response_type': (Mammal,), + 'response_type': (ObjectModelWithRefProps,), 'auth': [], - 'endpoint_path': '/fake/refs/mammal', - 'operation_id': 'mammal', + 'endpoint_path': '/fake/refs/object_model_with_ref_props', + 'operation_id': 'object_model_with_ref_props', 'http_method': 'POST', 'servers': None, }, params_map={ 'all': [ - 'mammal', - ], - 'required': [ - 'mammal', + 'body', ], + 'required': [], 'nullable': [ ], 'enum': [ @@ -1262,13 +1264,13 @@ def __mammal( 'allowed_values': { }, 'openapi_types': { - 'mammal': - (Mammal,), + 'body': + (ObjectModelWithRefProps,), }, 'attribute_map': { }, 'location_map': { - 'mammal': 'body', + 'body': 'body', }, 'collection_format_map': { } @@ -1282,25 +1284,24 @@ def __mammal( ] }, api_client=api_client, - callable=__mammal + callable=__object_model_with_ref_props ) - def __number_with_validations( + def __post_inline_additional_properties_payload( self, **kwargs ): - """number_with_validations # noqa: E501 + """post_inline_additional_properties_payload # noqa: E501 - Test serialization of outer number types # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.number_with_validations(async_req=True) + >>> thread = api.post_inline_additional_properties_payload(async_req=True) >>> result = thread.get() Keyword Args: - body (NumberWithValidations): Input number as post body. [optional] + inline_object6 (InlineObject6): [optional] _return_http_data_only (bool): response data without head status code and headers. Default is True. _preload_content (bool): if False, the urllib3.HTTPResponse object @@ -1322,7 +1323,7 @@ def __number_with_validations( async_req (bool): execute request asynchronously Returns: - NumberWithValidations + InlineObject6 If the method is called asynchronously, returns the request thread. """ @@ -1347,18 +1348,18 @@ def __number_with_validations( kwargs['_host_index'] = kwargs.get('_host_index') return self.call_with_http_info(**kwargs) - self.number_with_validations = _Endpoint( + self.post_inline_additional_properties_payload = _Endpoint( settings={ - 'response_type': (NumberWithValidations,), + 'response_type': (InlineObject6,), 'auth': [], - 'endpoint_path': '/fake/refs/number', - 'operation_id': 'number_with_validations', + 'endpoint_path': '/fake/postInlineAdditionalPropertiesPayload', + 'operation_id': 'post_inline_additional_properties_payload', 'http_method': 'POST', 'servers': None, }, params_map={ 'all': [ - 'body', + 'inline_object6', ], 'required': [], 'nullable': [ @@ -1374,13 +1375,13 @@ def __number_with_validations( 'allowed_values': { }, 'openapi_types': { - 'body': - (NumberWithValidations,), + 'inline_object6': + (InlineObject6,), }, 'attribute_map': { }, 'location_map': { - 'body': 'body', + 'inline_object6': 'body', }, 'collection_format_map': { } @@ -1394,25 +1395,24 @@ def __number_with_validations( ] }, api_client=api_client, - callable=__number_with_validations + callable=__post_inline_additional_properties_payload ) - def __object_model_with_ref_props( + def __post_inline_additional_properties_ref_payload( self, **kwargs ): - """object_model_with_ref_props # noqa: E501 + """post_inline_additional_properties_ref_payload # noqa: E501 - Test serialization of object with $refed properties # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.object_model_with_ref_props(async_req=True) + >>> thread = api.post_inline_additional_properties_ref_payload(async_req=True) >>> result = thread.get() Keyword Args: - body (ObjectModelWithRefProps): Input model. [optional] + inline_additional_properties_ref_payload (InlineAdditionalPropertiesRefPayload): [optional] _return_http_data_only (bool): response data without head status code and headers. Default is True. _preload_content (bool): if False, the urllib3.HTTPResponse object @@ -1434,7 +1434,7 @@ def __object_model_with_ref_props( async_req (bool): execute request asynchronously Returns: - ObjectModelWithRefProps + InlineAdditionalPropertiesRefPayload If the method is called asynchronously, returns the request thread. """ @@ -1459,18 +1459,18 @@ def __object_model_with_ref_props( kwargs['_host_index'] = kwargs.get('_host_index') return self.call_with_http_info(**kwargs) - self.object_model_with_ref_props = _Endpoint( + self.post_inline_additional_properties_ref_payload = _Endpoint( settings={ - 'response_type': (ObjectModelWithRefProps,), + 'response_type': (InlineAdditionalPropertiesRefPayload,), 'auth': [], - 'endpoint_path': '/fake/refs/object_model_with_ref_props', - 'operation_id': 'object_model_with_ref_props', + 'endpoint_path': '/fake/postInlineAdditionalPropertiesRefPayload', + 'operation_id': 'post_inline_additional_properties_ref_payload', 'http_method': 'POST', 'servers': None, }, params_map={ 'all': [ - 'body', + 'inline_additional_properties_ref_payload', ], 'required': [], 'nullable': [ @@ -1486,13 +1486,13 @@ def __object_model_with_ref_props( 'allowed_values': { }, 'openapi_types': { - 'body': - (ObjectModelWithRefProps,), + 'inline_additional_properties_ref_payload': + (InlineAdditionalPropertiesRefPayload,), }, 'attribute_map': { }, 'location_map': { - 'body': 'body', + 'inline_additional_properties_ref_payload': 'body', }, 'collection_format_map': { } @@ -1506,7 +1506,7 @@ def __object_model_with_ref_props( ] }, api_client=api_client, - callable=__object_model_with_ref_props + callable=__post_inline_additional_properties_ref_payload ) def __string( diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py b/samples/openapi3/client/petstore/python/petstore_api/model/fake_post_inline_additional_properties_payload_array_data.py similarity index 97% rename from samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py rename to samples/openapi3/client/petstore/python/petstore_api/model/fake_post_inline_additional_properties_payload_array_data.py index 71b921c921fb..bf9761b084c7 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/fake_get_inline_additional_properties_payload_array_data.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/fake_post_inline_additional_properties_payload_array_data.py @@ -30,7 +30,7 @@ -class FakeGetInlineAdditionalPropertiesPayloadArrayData(ModelNormal): +class FakePostInlineAdditionalPropertiesPayloadArrayData(ModelNormal): """NOTE: This class is auto generated by OpenAPI Generator. Ref: https://openapi-generator.tech @@ -101,7 +101,7 @@ def discriminator(): @classmethod @convert_js_args_to_python_args def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 - """FakeGetInlineAdditionalPropertiesPayloadArrayData - a model defined in OpenAPI + """FakePostInlineAdditionalPropertiesPayloadArrayData - a model defined in OpenAPI Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -183,7 +183,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 @convert_js_args_to_python_args def __init__(self, *args, **kwargs): # noqa: E501 - """FakeGetInlineAdditionalPropertiesPayloadArrayData - a model defined in OpenAPI + """FakePostInlineAdditionalPropertiesPayloadArrayData - a model defined in OpenAPI Keyword Args: _check_type (bool): if True, values for parameters in openapi_types diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py b/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py index 4ba519ea0aff..85d3fa5922f1 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/inline_additional_properties_ref_payload.py @@ -30,8 +30,8 @@ def lazy_import(): - from petstore_api.model.fake_get_inline_additional_properties_payload_array_data import FakeGetInlineAdditionalPropertiesPayloadArrayData - globals()['FakeGetInlineAdditionalPropertiesPayloadArrayData'] = FakeGetInlineAdditionalPropertiesPayloadArrayData + from petstore_api.model.fake_post_inline_additional_properties_payload_array_data import FakePostInlineAdditionalPropertiesPayloadArrayData + globals()['FakePostInlineAdditionalPropertiesPayloadArrayData'] = FakePostInlineAdditionalPropertiesPayloadArrayData class InlineAdditionalPropertiesRefPayload(ModelNormal): @@ -87,7 +87,7 @@ def openapi_types(): """ lazy_import() return { - 'array_data': ([FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type,), # noqa: E501 + 'array_data': ([FakePostInlineAdditionalPropertiesPayloadArrayData], none_type,), # noqa: E501 } @cached_property @@ -140,7 +140,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - array_data ([FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type): [optional] # noqa: E501 + array_data ([FakePostInlineAdditionalPropertiesPayloadArrayData], none_type): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -222,7 +222,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - array_data ([FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type): [optional] # noqa: E501 + array_data ([FakePostInlineAdditionalPropertiesPayloadArrayData], none_type): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py b/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py index dbbd376e1250..828d30aa0762 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model/inline_object6.py @@ -30,8 +30,8 @@ def lazy_import(): - from petstore_api.model.fake_get_inline_additional_properties_payload_array_data import FakeGetInlineAdditionalPropertiesPayloadArrayData - globals()['FakeGetInlineAdditionalPropertiesPayloadArrayData'] = FakeGetInlineAdditionalPropertiesPayloadArrayData + from petstore_api.model.fake_post_inline_additional_properties_payload_array_data import FakePostInlineAdditionalPropertiesPayloadArrayData + globals()['FakePostInlineAdditionalPropertiesPayloadArrayData'] = FakePostInlineAdditionalPropertiesPayloadArrayData class InlineObject6(ModelNormal): @@ -87,7 +87,7 @@ def openapi_types(): """ lazy_import() return { - 'array_data': ([FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type,), # noqa: E501 + 'array_data': ([FakePostInlineAdditionalPropertiesPayloadArrayData], none_type,), # noqa: E501 } @cached_property @@ -140,7 +140,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - array_data ([FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type): [optional] # noqa: E501 + array_data ([FakePostInlineAdditionalPropertiesPayloadArrayData], none_type): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -222,7 +222,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - array_data ([FakeGetInlineAdditionalPropertiesPayloadArrayData], none_type): [optional] # noqa: E501 + array_data ([FakePostInlineAdditionalPropertiesPayloadArrayData], none_type): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/samples/openapi3/client/petstore/python/petstore_api/model_utils.py b/samples/openapi3/client/petstore/python/petstore_api/model_utils.py index 3913228d6b89..97f9b2881cc5 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/model_utils.py +++ b/samples/openapi3/client/petstore/python/petstore_api/model_utils.py @@ -1632,12 +1632,20 @@ def model_to_dict(model_instance, serialize=True): model_instances = [model_instance] if model_instance._composed_schemas: model_instances.extend(model_instance._composed_instances) + seen_json_attribute_names = set() + used_fallback_python_attribute_names = set() + py_to_json_map = {} for model_instance in model_instances: for attr, value in model_instance._data_store.items(): if serialize: # we use get here because additional property key names do not # exist in attribute_map - attr = model_instance.attribute_map.get(attr, attr) + try: + attr = model_instance.attribute_map[attr] + py_to_json_map.update(model_instance.attribute_map) + seen_json_attribute_names.add(attr) + except KeyError: + used_fallback_python_attribute_names.add(attr) if isinstance(value, list): if not value: # empty list or None @@ -1665,6 +1673,16 @@ def model_to_dict(model_instance, serialize=True): result[attr] = model_to_dict(value, serialize=serialize) else: result[attr] = value + if serialize: + for python_key in used_fallback_python_attribute_names: + json_key = py_to_json_map.get(python_key) + if json_key is None: + continue + if python_key == json_key: + continue + json_key_assigned_no_need_for_python_key = json_key in seen_json_attribute_names + if json_key_assigned_no_need_for_python_key: + del result[python_key] return result diff --git a/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py b/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py index f18e33defce6..9485a03d2f88 100644 --- a/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py +++ b/samples/openapi3/client/petstore/python/petstore_api/models/__init__.py @@ -43,7 +43,7 @@ from petstore_api.model.enum_class import EnumClass from petstore_api.model.enum_test import EnumTest from petstore_api.model.equilateral_triangle import EquilateralTriangle -from petstore_api.model.fake_get_inline_additional_properties_payload_array_data import FakeGetInlineAdditionalPropertiesPayloadArrayData +from petstore_api.model.fake_post_inline_additional_properties_payload_array_data import FakePostInlineAdditionalPropertiesPayloadArrayData from petstore_api.model.file import File from petstore_api.model.file_schema_test_class import FileSchemaTestClass from petstore_api.model.foo import Foo diff --git a/samples/openapi3/client/petstore/python/test/test_fake_get_inline_additional_properties_payload_array_data.py b/samples/openapi3/client/petstore/python/test/test_fake_post_inline_additional_properties_payload_array_data.py similarity index 52% rename from samples/openapi3/client/petstore/python/test/test_fake_get_inline_additional_properties_payload_array_data.py rename to samples/openapi3/client/petstore/python/test/test_fake_post_inline_additional_properties_payload_array_data.py index 2e95eb37dffc..6b4be44e865d 100644 --- a/samples/openapi3/client/petstore/python/test/test_fake_get_inline_additional_properties_payload_array_data.py +++ b/samples/openapi3/client/petstore/python/test/test_fake_post_inline_additional_properties_payload_array_data.py @@ -12,11 +12,11 @@ import unittest import petstore_api -from petstore_api.model.fake_get_inline_additional_properties_payload_array_data import FakeGetInlineAdditionalPropertiesPayloadArrayData +from petstore_api.model.fake_post_inline_additional_properties_payload_array_data import FakePostInlineAdditionalPropertiesPayloadArrayData -class TestFakeGetInlineAdditionalPropertiesPayloadArrayData(unittest.TestCase): - """FakeGetInlineAdditionalPropertiesPayloadArrayData unit test stubs""" +class TestFakePostInlineAdditionalPropertiesPayloadArrayData(unittest.TestCase): + """FakePostInlineAdditionalPropertiesPayloadArrayData unit test stubs""" def setUp(self): pass @@ -24,10 +24,10 @@ def setUp(self): def tearDown(self): pass - def testFakeGetInlineAdditionalPropertiesPayloadArrayData(self): - """Test FakeGetInlineAdditionalPropertiesPayloadArrayData""" + def testFakePostInlineAdditionalPropertiesPayloadArrayData(self): + """Test FakePostInlineAdditionalPropertiesPayloadArrayData""" # FIXME: construct object with mandatory attributes with example values - # model = FakeGetInlineAdditionalPropertiesPayloadArrayData() # noqa: E501 + # model = FakePostInlineAdditionalPropertiesPayloadArrayData() # noqa: E501 pass diff --git a/samples/openapi3/client/petstore/python/test/test_inline_additional_properties_ref_payload.py b/samples/openapi3/client/petstore/python/test/test_inline_additional_properties_ref_payload.py index 709ee27adc89..7e8cf543335f 100644 --- a/samples/openapi3/client/petstore/python/test/test_inline_additional_properties_ref_payload.py +++ b/samples/openapi3/client/petstore/python/test/test_inline_additional_properties_ref_payload.py @@ -12,8 +12,8 @@ import unittest import petstore_api -from petstore_api.model.fake_get_inline_additional_properties_payload_array_data import FakeGetInlineAdditionalPropertiesPayloadArrayData -globals()['FakeGetInlineAdditionalPropertiesPayloadArrayData'] = FakeGetInlineAdditionalPropertiesPayloadArrayData +from petstore_api.model.fake_post_inline_additional_properties_payload_array_data import FakePostInlineAdditionalPropertiesPayloadArrayData +globals()['FakePostInlineAdditionalPropertiesPayloadArrayData'] = FakePostInlineAdditionalPropertiesPayloadArrayData from petstore_api.model.inline_additional_properties_ref_payload import InlineAdditionalPropertiesRefPayload diff --git a/samples/openapi3/client/petstore/python/test/test_inline_object6.py b/samples/openapi3/client/petstore/python/test/test_inline_object6.py index 463123d8e558..887e5689b9ad 100644 --- a/samples/openapi3/client/petstore/python/test/test_inline_object6.py +++ b/samples/openapi3/client/petstore/python/test/test_inline_object6.py @@ -12,8 +12,8 @@ import unittest import petstore_api -from petstore_api.model.fake_get_inline_additional_properties_payload_array_data import FakeGetInlineAdditionalPropertiesPayloadArrayData -globals()['FakeGetInlineAdditionalPropertiesPayloadArrayData'] = FakeGetInlineAdditionalPropertiesPayloadArrayData +from petstore_api.model.fake_post_inline_additional_properties_payload_array_data import FakePostInlineAdditionalPropertiesPayloadArrayData +globals()['FakePostInlineAdditionalPropertiesPayloadArrayData'] = FakePostInlineAdditionalPropertiesPayloadArrayData from petstore_api.model.inline_object6 import InlineObject6 diff --git a/samples/openapi3/client/petstore/python/tests_manual/test_fake_api.py b/samples/openapi3/client/petstore/python/tests_manual/test_fake_api.py index 8c0886e373b6..954f1ce8e5c2 100644 --- a/samples/openapi3/client/petstore/python/tests_manual/test_fake_api.py +++ b/samples/openapi3/client/petstore/python/tests_manual/test_fake_api.py @@ -19,7 +19,7 @@ import petstore_api from petstore_api.api.fake_api import FakeApi # noqa: E501 from petstore_api.rest import RESTClientObject, RESTResponse -from petstore_api.model_utils import file_type +from petstore_api.model_utils import file_type, model_to_dict HTTPResponse = namedtuple( 'urllib3_response_HTTPResponse', @@ -59,14 +59,15 @@ def assert_request_called_with( url, accept='application/json', http_method='POST', + content_type='application/json', **kwargs ): headers = { 'Accept': accept, 'User-Agent': 'OpenAPI-Generator/1.0.0/python', } - if 'content_type' in kwargs: - headers['Content-Type'] = kwargs['content_type'] + if content_type: + headers['Content-Type'] = content_type used_kwargs = dict( _preload_content=True, _request_timeout=None, @@ -77,12 +78,13 @@ def assert_request_called_with( used_kwargs['post_params'] = kwargs['post_params'] if 'body' in kwargs: used_kwargs['body'] = kwargs['body'] - else: - mock_method.assert_called_with( - http_method, - url, - **used_kwargs - ) + if 'post_params' not in used_kwargs: + used_kwargs['post_params'] = [] + mock_method.assert_called_with( + http_method, + url, + **used_kwargs + ) def test_array_model(self): """Test case for array_model @@ -101,7 +103,11 @@ def test_array_model(self): mock_method.return_value = self.mock_response(json_data) response = endpoint(body=body) - self.assert_request_called_with(mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/arraymodel', body=json_data) + self.assert_request_called_with( + mock_method, + 'http://petstore.swagger.io:80/v2/fake/refs/arraymodel', + body=json_data, + ) assert isinstance(response, animal_farm.AnimalFarm) assert response == body @@ -158,7 +164,10 @@ def test_enum_test(self): response = endpoint(enum_test=body) self.assert_request_called_with( - mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/enum-test', body=json_value) + mock_method, + 'http://petstore.swagger.io:80/v2/fake/refs/enum-test', + body=json_value, + ) assert isinstance(response, EnumTest) assert response == body @@ -174,7 +183,10 @@ def test_enum_test(self): response = endpoint(enum_test=body) self.assert_request_called_with( - mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/enum-test', body=json_value) + mock_method, + 'http://petstore.swagger.io:80/v2/fake/refs/enum-test', + body=json_value, + ) assert isinstance(response, EnumTest) assert response == body @@ -198,7 +210,11 @@ def test_array_of_enums(self): mock_method.return_value = self.mock_response(value_simple) response = endpoint(array_of_enums=body) - self.assert_request_called_with(mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/array-of-enums', body=value_simple) + self.assert_request_called_with( + mock_method, + 'http://petstore.swagger.io:80/v2/fake/refs/array-of-enums', + body=value_simple, + ) assert isinstance(response, array_of_enums.ArrayOfEnums) assert response.value == value @@ -219,7 +235,11 @@ def test_number_with_validations(self): mock_method.return_value = self.mock_response(value) response = endpoint(body=body) - self.assert_request_called_with(mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/number', body=value) + self.assert_request_called_with( + mock_method, + 'http://petstore.swagger.io:80/v2/fake/refs/number', + body=value, + ) assert isinstance(response, number_with_validations.NumberWithValidations) assert response.value == value @@ -262,7 +282,7 @@ def test_object_model_with_ref_props(self): self.assert_request_called_with( mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/object_model_with_ref_props', - body=json_payload + body=json_payload, ) assert isinstance(response, expected_model.__class__) @@ -300,7 +320,7 @@ def test_composed_one_of_number_with_validations(self): self.assert_request_called_with( mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/composed_one_of_number_with_validations', - body=value_simple + body=value_simple, ) assert isinstance(response, body.__class__) @@ -321,7 +341,11 @@ def test_string(self): mock_method.return_value = self.mock_response(value_simple) response = endpoint(body=body) - self.assert_request_called_with(mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/string', body=value_simple) + self.assert_request_called_with( + mock_method, + 'http://petstore.swagger.io:80/v2/fake/refs/string', + body=value_simple, + ) assert isinstance(response, str) assert response == value_simple @@ -343,7 +367,11 @@ def test_string_enum(self): mock_method.return_value = self.mock_response(value) response = endpoint(body=body) - self.assert_request_called_with(mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/enum', body=value) + self.assert_request_called_with( + mock_method, + 'http://petstore.swagger.io:80/v2/fake/refs/enum', + body=value, + ) assert isinstance(response, string_enum.StringEnum) assert response.value == value @@ -495,6 +523,7 @@ def get_header(name, default=None): 'http://www.jtricks.com/download-text', http_method='GET', accept='text/plain', + content_type=None, ) self.assertTrue(isinstance(file_object, file_type)) self.assertFalse(file_object.closed) @@ -532,8 +561,11 @@ def get_header(name, default=None): self.assert_request_called_with( mock_method, 'http://petstore.swagger.io:80/v2/fake/uploadDownloadFile', - body=expected_file_data, content_type='application/octet-stream' + body=expected_file_data, + content_type='application/octet-stream', + accept='application/octet-stream' ) + self.assertTrue(isinstance(downloaded_file, file_type)) self.assertFalse(downloaded_file.closed) self.assertEqual(downloaded_file.read(), expected_file_data) @@ -604,12 +636,12 @@ def test_test_query_parameter_collection_format(self): """ pass - def test_get_inline_additional_properties_ref_payload(self): - """Test case for getInlineAdditionlPropertiesRefPayload + def test_post_inline_additional_properties_ref_payload(self): + """Test case for postInlineAdditionlPropertiesRefPayload """ from petstore_api.model.inline_additional_properties_ref_payload import InlineAdditionalPropertiesRefPayload - from petstore_api.model.fake_get_inline_additional_properties_payload_array_data import FakeGetInlineAdditionalPropertiesPayloadArrayData - endpoint = self.api.get_inline_additional_properties_ref_payload + from petstore_api.model.fake_post_inline_additional_properties_payload_array_data import FakePostInlineAdditionalPropertiesPayloadArrayData + endpoint = self.api.post_inline_additional_properties_ref_payload assert endpoint.openapi_types['inline_additional_properties_ref_payload'] == (InlineAdditionalPropertiesRefPayload,) assert endpoint.settings['response_type'] == (InlineAdditionalPropertiesRefPayload,) @@ -617,7 +649,7 @@ def test_get_inline_additional_properties_ref_payload(self): from petstore_api.rest import RESTClientObject, RESTResponse with patch.object(RESTClientObject, 'request') as mock_method: expected_json_body = { - 'array_data': [ + 'arrayData': [ { 'labels': [ None, @@ -628,23 +660,27 @@ def test_get_inline_additional_properties_ref_payload(self): } inline_additional_properties_ref_payload = InlineAdditionalPropertiesRefPayload( array_data=[ - FakeGetInlineAdditionalPropertiesPayloadArrayData(labels=[None, 'foo']) + FakePostInlineAdditionalPropertiesPayloadArrayData(labels=[None, 'foo']) ] ) mock_method.return_value = self.mock_response(expected_json_body) response = endpoint(inline_additional_properties_ref_payload=inline_additional_properties_ref_payload) - self.assert_request_called_with(mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/enum', body=expected_json_body) + self.assert_request_called_with( + mock_method, + 'http://petstore.swagger.io:80/v2/fake/postInlineAdditionalPropertiesRefPayload', + body=expected_json_body + ) assert isinstance(response, InlineAdditionalPropertiesRefPayload) - assert response.to_dict() == expected_json_body + assert model_to_dict(response) == expected_json_body - def test_get_inline_additional_properties_payload(self): - """Test case for getInlineAdditionlPropertiesPayload + def test_post_inline_additional_properties_payload(self): + """Test case for postInlineAdditionlPropertiesPayload """ from petstore_api.model.inline_object6 import InlineObject6 - from petstore_api.model.fake_get_inline_additional_properties_payload_array_data import FakeGetInlineAdditionalPropertiesPayloadArrayData - endpoint = self.api.get_inline_additional_properties_payload + from petstore_api.model.fake_post_inline_additional_properties_payload_array_data import FakePostInlineAdditionalPropertiesPayloadArrayData + endpoint = self.api.post_inline_additional_properties_payload assert endpoint.openapi_types['inline_object6'] == (InlineObject6,) assert endpoint.settings['response_type'] == (InlineObject6,) @@ -652,7 +688,7 @@ def test_get_inline_additional_properties_payload(self): from petstore_api.rest import RESTClientObject, RESTResponse with patch.object(RESTClientObject, 'request') as mock_method: expected_json_body = { - 'array_data': [ + 'arrayData': [ { 'labels': [ None, @@ -663,16 +699,20 @@ def test_get_inline_additional_properties_payload(self): } inline_object6 = InlineObject6( array_data=[ - FakeGetInlineAdditionalPropertiesPayloadArrayData(labels=[None, 'foo']) + FakePostInlineAdditionalPropertiesPayloadArrayData(labels=[None, 'foo']) ] ) mock_method.return_value = self.mock_response(expected_json_body) response = endpoint(inline_object6=inline_object6) - self.assert_request_called_with(mock_method, 'http://petstore.swagger.io:80/v2/fake/refs/enum', body=expected_json_body) + self.assert_request_called_with( + mock_method, + 'http://petstore.swagger.io:80/v2/fake/postInlineAdditionalPropertiesPayload', + body=expected_json_body + ) assert isinstance(response, InlineObject6) - assert response.to_dict() == expected_json_body + assert model_to_dict(response) == expected_json_body if __name__ == '__main__': unittest.main() From 93166dd6b5249bbf6f9b8242525575ac3e4f9e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Wilski?= Date: Tue, 18 May 2021 08:10:44 +0200 Subject: [PATCH 123/186] fix: properly mark 'deprecated' routes in typescript-axios template #9502 (#9505) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Michał Wilski --- .../resources/typescript-axios/apiInner.mustache | 15 ++++++++++----- .../typescript-axios/builds/default/api.ts | 4 ++++ .../typescript-axios/builds/es6-target/api.ts | 4 ++++ .../builds/with-complex-headers/api.ts | 4 ++++ .../api.ts | 4 ++++ .../builds/with-interfaces/api.ts | 5 +++++ .../api/another/level/pet-api.ts | 4 ++++ .../builds/with-npm-version/api.ts | 4 ++++ .../builds/with-single-request-parameters/api.ts | 4 ++++ 9 files changed, 43 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache b/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache index 0550c77b4d8c..b425c807a246 100644 --- a/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-axios/apiInner.mustache @@ -34,7 +34,8 @@ export const {{classname}}AxiosParamCreator = function (configuration?: Configur {{#allParams}} * @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}} {{/allParams}} - * @param {*} [options] Override http request option. + * @param {*} [options] Override http request option.{{#isDeprecated}} + * @deprecated{{/isDeprecated}} * @throws {RequiredError} */ {{nickname}}: async ({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options: any = {}): Promise => { @@ -217,7 +218,8 @@ export const {{classname}}Fp = function(configuration?: Configuration) { {{#allParams}} * @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}} {{/allParams}} - * @param {*} [options] Override http request option. + * @param {*} [options] Override http request option.{{#isDeprecated}} + * @deprecated{{/isDeprecated}} * @throws {RequiredError} */ async {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}>> { @@ -245,7 +247,8 @@ export const {{classname}}Factory = function (configuration?: Configuration, bas {{#allParams}} * @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}} {{/allParams}} - * @param {*} [options] Override http request option. + * @param {*} [options] Override http request option.{{#isDeprecated}} + * @deprecated{{/isDeprecated}} * @throws {RequiredError} */ {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: any): AxiosPromise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> { @@ -272,7 +275,8 @@ export interface {{classname}}Interface { {{#allParams}} * @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}} {{/allParams}} - * @param {*} [options] Override http request option. + * @param {*} [options] Override http request option.{{#isDeprecated}} + * @deprecated{{/isDeprecated}} * @throws {RequiredError} * @memberof {{classname}}Interface */ @@ -336,7 +340,8 @@ export class {{classname}} extends BaseAPI { * @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}} {{/allParams}} {{/useSingleRequestParameter}} - * @param {*} [options] Override http request option. + * @param {*} [options] Override http request option.{{#isDeprecated}} + * @deprecated{{/isDeprecated}} * @throws {RequiredError} * @memberof {{classname}} */ diff --git a/samples/client/petstore/typescript-axios/builds/default/api.ts b/samples/client/petstore/typescript-axios/builds/default/api.ts index 856fb0a48298..0ce81cf11744 100644 --- a/samples/client/petstore/typescript-axios/builds/default/api.ts +++ b/samples/client/petstore/typescript-axios/builds/default/api.ts @@ -383,6 +383,7 @@ export const PetApiAxiosParamCreator = function (configuration?: Configuration) * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags: async (tags: Array, options: any = {}): Promise => { @@ -649,6 +650,7 @@ export const PetApiFp = function(configuration?: Configuration) { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ async findPetsByTags(tags: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { @@ -749,6 +751,7 @@ export const PetApiFactory = function (configuration?: Configuration, basePath?: * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags(tags: Array, options?: any): AxiosPromise> { @@ -850,6 +853,7 @@ export class PetApi extends BaseAPI { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} * @memberof PetApi */ diff --git a/samples/client/petstore/typescript-axios/builds/es6-target/api.ts b/samples/client/petstore/typescript-axios/builds/es6-target/api.ts index 856fb0a48298..0ce81cf11744 100644 --- a/samples/client/petstore/typescript-axios/builds/es6-target/api.ts +++ b/samples/client/petstore/typescript-axios/builds/es6-target/api.ts @@ -383,6 +383,7 @@ export const PetApiAxiosParamCreator = function (configuration?: Configuration) * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags: async (tags: Array, options: any = {}): Promise => { @@ -649,6 +650,7 @@ export const PetApiFp = function(configuration?: Configuration) { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ async findPetsByTags(tags: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { @@ -749,6 +751,7 @@ export const PetApiFactory = function (configuration?: Configuration, basePath?: * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags(tags: Array, options?: any): AxiosPromise> { @@ -850,6 +853,7 @@ export class PetApi extends BaseAPI { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} * @memberof PetApi */ diff --git a/samples/client/petstore/typescript-axios/builds/with-complex-headers/api.ts b/samples/client/petstore/typescript-axios/builds/with-complex-headers/api.ts index 85c32a979e2d..15fa56e5e78b 100644 --- a/samples/client/petstore/typescript-axios/builds/with-complex-headers/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-complex-headers/api.ts @@ -394,6 +394,7 @@ export const PetApiAxiosParamCreator = function (configuration?: Configuration) * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags: async (tags: Array, options: any = {}): Promise => { @@ -662,6 +663,7 @@ export const PetApiFp = function(configuration?: Configuration) { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ async findPetsByTags(tags: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { @@ -764,6 +766,7 @@ export const PetApiFactory = function (configuration?: Configuration, basePath?: * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags(tags: Array, options?: any): AxiosPromise> { @@ -867,6 +870,7 @@ export class PetApi extends BaseAPI { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} * @memberof PetApi */ diff --git a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts index 832e63b1f4e6..c9fba6a5167f 100644 --- a/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-fake-endpoints-models-for-testing-with-http-signature/api.ts @@ -3089,6 +3089,7 @@ export const PetApiAxiosParamCreator = function (configuration?: Configuration) * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags: async (tags: Array, options: any = {}): Promise => { @@ -3413,6 +3414,7 @@ export const PetApiFp = function(configuration?: Configuration) { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ async findPetsByTags(tags: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { @@ -3526,6 +3528,7 @@ export const PetApiFactory = function (configuration?: Configuration, basePath?: * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags(tags: Array, options?: any): AxiosPromise> { @@ -3639,6 +3642,7 @@ export class PetApi extends BaseAPI { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} * @memberof PetApi */ diff --git a/samples/client/petstore/typescript-axios/builds/with-interfaces/api.ts b/samples/client/petstore/typescript-axios/builds/with-interfaces/api.ts index 0368b1d57036..c6cda5b65033 100644 --- a/samples/client/petstore/typescript-axios/builds/with-interfaces/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-interfaces/api.ts @@ -383,6 +383,7 @@ export const PetApiAxiosParamCreator = function (configuration?: Configuration) * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags: async (tags: Array, options: any = {}): Promise => { @@ -649,6 +650,7 @@ export const PetApiFp = function(configuration?: Configuration) { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ async findPetsByTags(tags: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { @@ -749,6 +751,7 @@ export const PetApiFactory = function (configuration?: Configuration, basePath?: * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags(tags: Array, options?: any): AxiosPromise> { @@ -843,6 +846,7 @@ export interface PetApiInterface { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} * @memberof PetApiInterface */ @@ -943,6 +947,7 @@ export class PetApi extends BaseAPI implements PetApiInterface { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} * @memberof PetApi */ diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/api/another/level/pet-api.ts b/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/api/another/level/pet-api.ts index fc66c5184fab..03545d554fcf 100644 --- a/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/api/another/level/pet-api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-npm-version-and-separate-models-and-api/api/another/level/pet-api.ts @@ -159,6 +159,7 @@ export const PetApiAxiosParamCreator = function (configuration?: Configuration) * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags: async (tags: Array, options: any = {}): Promise => { @@ -425,6 +426,7 @@ export const PetApiFp = function(configuration?: Configuration) { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ async findPetsByTags(tags: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { @@ -525,6 +527,7 @@ export const PetApiFactory = function (configuration?: Configuration, basePath?: * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags(tags: Array, options?: any): AxiosPromise> { @@ -626,6 +629,7 @@ export class PetApi extends BaseAPI { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} * @memberof PetApi */ diff --git a/samples/client/petstore/typescript-axios/builds/with-npm-version/api.ts b/samples/client/petstore/typescript-axios/builds/with-npm-version/api.ts index 856fb0a48298..0ce81cf11744 100644 --- a/samples/client/petstore/typescript-axios/builds/with-npm-version/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-npm-version/api.ts @@ -383,6 +383,7 @@ export const PetApiAxiosParamCreator = function (configuration?: Configuration) * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags: async (tags: Array, options: any = {}): Promise => { @@ -649,6 +650,7 @@ export const PetApiFp = function(configuration?: Configuration) { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ async findPetsByTags(tags: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { @@ -749,6 +751,7 @@ export const PetApiFactory = function (configuration?: Configuration, basePath?: * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags(tags: Array, options?: any): AxiosPromise> { @@ -850,6 +853,7 @@ export class PetApi extends BaseAPI { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} * @memberof PetApi */ diff --git a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/api.ts b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/api.ts index ec1563347136..1f8764baaf07 100644 --- a/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/api.ts +++ b/samples/client/petstore/typescript-axios/builds/with-single-request-parameters/api.ts @@ -383,6 +383,7 @@ export const PetApiAxiosParamCreator = function (configuration?: Configuration) * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags: async (tags: Array, options: any = {}): Promise => { @@ -649,6 +650,7 @@ export const PetApiFp = function(configuration?: Configuration) { * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ async findPetsByTags(tags: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { @@ -749,6 +751,7 @@ export const PetApiFactory = function (configuration?: Configuration, basePath?: * @summary Finds Pets by tags * @param {Array} tags Tags to filter by * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} */ findPetsByTags(tags: Array, options?: any): AxiosPromise> { @@ -996,6 +999,7 @@ export class PetApi extends BaseAPI { * @summary Finds Pets by tags * @param {PetApiFindPetsByTagsRequest} requestParameters Request parameters. * @param {*} [options] Override http request option. + * @deprecated * @throws {RequiredError} * @memberof PetApi */ From 55b95bc9c525fa69182bf7839b084f8ccde287e8 Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Tue, 18 May 2021 17:09:29 +0200 Subject: [PATCH 124/186] Fix CircleCI failures (#9503) * Fix go-echo-server sample not running in CircleCI * remove wrong argument * [dart] Fix petstore sample tests & Multipart not working * follow up to #9392 * `MultipartRequest(null, null)` is no longer valid after `http` package upgrade * fix petstore sample project not compiling * disable live petstore tests * use template to strip out unused code blocks --- .../src/main/resources/dart2/api.mustache | 62 ++-- .../petstore/dart2/petstore/.analysis_options | 2 - .../petstore/dart2/petstore/pubspec.yaml | 9 +- .../dart2/petstore/test/fake_client.dart | 19 +- .../dart2/petstore/test/order_model_test.dart | 8 +- .../petstore/test/pet_faked_client_test.dart | 45 +-- .../dart2/petstore/test/pet_test.dart | 11 +- .../dart2/petstore/test/random_id.dart | 2 +- .../test/store_faked_client_test.dart | 82 ++--- .../dart2/petstore/test/store_test.dart | 22 +- .../dart2/petstore/test/user_test.dart | 9 +- .../petstore_client_lib/lib/api/pet_api.dart | 130 +------ .../lib/api/store_api.dart | 44 --- .../petstore_client_lib/lib/api/user_api.dart | 88 ----- .../lib/api/another_fake_api.dart | 11 - .../lib/api/default_api.dart | 11 - .../lib/api/fake_api.dart | 345 +++--------------- .../lib/api/fake_classname_tags123_api.dart | 11 - .../lib/api/pet_api.dart | 165 ++------- .../lib/api/store_api.dart | 44 --- .../lib/api/user_api.dart | 88 ----- .../lib/api/another_fake_api.dart | 11 - .../lib/api/default_api.dart | 11 - .../lib/api/fake_api.dart | 345 +++--------------- .../lib/api/fake_classname_tags123_api.dart | 11 - .../lib/api/pet_api.dart | 165 ++------- .../lib/api/store_api.dart | 44 --- .../lib/api/user_api.dart | 88 ----- .../server/petstore/go-echo-server/pom.xml | 1 - 29 files changed, 298 insertions(+), 1586 deletions(-) delete mode 100644 samples/openapi3/client/petstore/dart2/petstore/.analysis_options diff --git a/modules/openapi-generator/src/main/resources/dart2/api.mustache b/modules/openapi-generator/src/main/resources/dart2/api.mustache index d99ba2b325f6..6a53829cb59b 100644 --- a/modules/openapi-generator/src/main/resources/dart2/api.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/api.mustache @@ -99,39 +99,37 @@ class {{{classname}}} { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = [{{#authMethods}}'{{{name}}}'{{^-last}}, {{/-last}}{{/authMethods}}]; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - {{#formParams}} - {{^isFile}} - if ({{{paramName}}} != null) { - hasFields = true; - mp.fields[r'{{{baseName}}}'] = parameterToString({{{paramName}}}); - } - {{/isFile}} - {{#isFile}} - if ({{{paramName}}} != null) { - hasFields = true; - mp.fields[r'{{{baseName}}}'] = {{{paramName}}}.field; - mp.files.add({{{paramName}}}); - } - {{/isFile}} - {{/formParams}} - if (hasFields) { - postBody = mp; - } - } else { - {{#formParams}} - {{^isFile}} - if ({{{paramName}}} != null) { - formParams[r'{{{baseName}}}'] = parameterToString({{{paramName}}}); - } - {{/isFile}} - {{/formParams}} + {{#isMultipart}} + bool hasFields = false; + final mp = MultipartRequest('{{{httpMethod}}}', Uri.parse(path)); + {{#formParams}} + {{^isFile}} + if ({{{paramName}}} != null) { + hasFields = true; + mp.fields[r'{{{baseName}}}'] = parameterToString({{{paramName}}}); + } + {{/isFile}} + {{#isFile}} + if ({{{paramName}}} != null) { + hasFields = true; + mp.fields[r'{{{baseName}}}'] = {{{paramName}}}.field; + mp.files.add({{{paramName}}}); + } + {{/isFile}} + {{/formParams}} + if (hasFields) { + postBody = mp; + } + {{/isMultipart}} + {{^isMultipart}} + {{#formParams}} + {{^isFile}} + if ({{{paramName}}} != null) { + formParams[r'{{{baseName}}}'] = parameterToString({{{paramName}}}); } + {{/isFile}} + {{/formParams}} + {{/isMultipart}} return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore/.analysis_options b/samples/openapi3/client/petstore/dart2/petstore/.analysis_options deleted file mode 100644 index a10d4c5a05c9..000000000000 --- a/samples/openapi3/client/petstore/dart2/petstore/.analysis_options +++ /dev/null @@ -1,2 +0,0 @@ -analyzer: - strong-mode: true diff --git a/samples/openapi3/client/petstore/dart2/petstore/pubspec.yaml b/samples/openapi3/client/petstore/dart2/petstore/pubspec.yaml index f26301750933..92262618ab48 100644 --- a/samples/openapi3/client/petstore/dart2/petstore/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart2/petstore/pubspec.yaml @@ -1,13 +1,18 @@ name: petstore_client version: 1.0.0 description: Petstore client using OpenAPI library + +publish_to: none + environment: - sdk: '>=2.5.0 <3.0.0' + sdk: '>=2.11.0 <3.0.0' + dependencies: openapi: path: ../petstore_client_lib + dev_dependencies: test: ^1.8.0 mockito: ^4.1.1 - http: ^0.12.0 + http: ^0.13.0 collection: ^1.14.12 diff --git a/samples/openapi3/client/petstore/dart2/petstore/test/fake_client.dart b/samples/openapi3/client/petstore/dart2/petstore/test/fake_client.dart index 95c735deb38c..ed60f386aa41 100644 --- a/samples/openapi3/client/petstore/dart2/petstore/test/fake_client.dart +++ b/samples/openapi3/client/petstore/dart2/petstore/test/fake_client.dart @@ -21,9 +21,9 @@ class FakeClient extends Fake implements Client { this.expectedPutRequestBody, this.putResponseBody, this.sendResponseBody, - this.expectedUrl, + String expectedUrl, this.expectedHeaders = null, - }); + }) : this.expectedUrl = Uri.parse(expectedUrl); Exception throwException; Object expectedPostRequestBody; @@ -34,12 +34,12 @@ class FakeClient extends Fake implements Client { String expectedPutRequestBody; String putResponseBody; String sendResponseBody; - String expectedUrl; + Uri expectedUrl; Map expectedHeaders; @override - Future post(url, - {Map headers, body, Encoding encoding}) async { + Future post(Uri url, + {Map headers, Object body, Encoding encoding}) async { // check that the request was made with expected values if (url != expectedUrl) { throw StateError( @@ -67,7 +67,7 @@ class FakeClient extends Fake implements Client { } @override - Future get(url, {Map headers}) async { + Future get(Uri url, {Map headers}) async { // check that the request was made with expected values if (url != expectedUrl) { throw StateError( @@ -85,7 +85,8 @@ class FakeClient extends Fake implements Client { } @override - Future delete(url, {Map headers}) async { + Future delete(Uri url, + {Map headers, Object body, Encoding encoding}) async { // check that the request was made with expected values if (url != expectedUrl) { throw StateError( @@ -103,8 +104,8 @@ class FakeClient extends Fake implements Client { } @override - Future put(url, - {Map headers, body, Encoding encoding}) async { + Future put(Uri url, + {Map headers, Object body, Encoding encoding}) async { // check that the request was made with expected values if (url != expectedUrl) { throw StateError( diff --git a/samples/openapi3/client/petstore/dart2/petstore/test/order_model_test.dart b/samples/openapi3/client/petstore/dart2/petstore/test/order_model_test.dart index 9cdc65fe52dc..7048659e8942 100644 --- a/samples/openapi3/client/petstore/dart2/petstore/test/order_model_test.dart +++ b/samples/openapi3/client/petstore/dart2/petstore/test/order_model_test.dart @@ -2,8 +2,8 @@ import 'package:openapi/api.dart'; import 'package:test/test.dart'; void main() { - test('Check if default value is generated', () async { - var order = Order(); - expect(order.complete, equals(false)); - }); + test('Check if default value is generated', () async { + var order = Order(); + expect(order.complete, equals(false)); + }); } diff --git a/samples/openapi3/client/petstore/dart2/petstore/test/pet_faked_client_test.dart b/samples/openapi3/client/petstore/dart2/petstore/test/pet_faked_client_test.dart index 277c49b3971a..9737df5d4881 100644 --- a/samples/openapi3/client/petstore/dart2/petstore/test/pet_faked_client_test.dart +++ b/samples/openapi3/client/petstore/dart2/petstore/test/pet_faked_client_test.dart @@ -26,11 +26,10 @@ void main() { ..id = 124321 ..name = 'Jose' ]; - return Pet() + return Pet(name: name) ..id = id ..category = category ..tags = tags - ..name = name ..status = PetStatusEnum.fromJson(status) ..photoUrls = ['https://petstore.com/sample/photo1.jpg']; } @@ -53,8 +52,7 @@ void main() { // use the pet api to add a pet petApi.apiClient.client = FakeClient( expectedUrl: 'http://petstore.swagger.io/v2/pet', - expectedPostRequestBody: - await petApi.apiClient.serializeAsync(newPet), + expectedPostRequestBody: await petApi.apiClient.serializeAsync(newPet), postResponseBody: await petApi.apiClient.serializeAsync(newPet), expectedHeaders: {'Content-Type': 'application/json'}); await petApi.addPet(newPet); @@ -76,8 +74,7 @@ void main() { expectedUrl: 'http://petstore.swagger.io/v2/pet/$id', throwException: ApiException(400, 'not found'), ); - expect( - petApi.getPetById(id), throwsA(equals(TypeMatcher()))); + expect(petApi.getPetById(id), throwsA(equals(TypeMatcher()))); }); test('deletes existing pet by id', () async { @@ -87,8 +84,7 @@ void main() { // add a new pet petApi.apiClient.client = FakeClient( expectedUrl: 'http://petstore.swagger.io/v2/pet', - expectedPostRequestBody: - await petApi.apiClient.serializeAsync(newPet), + expectedPostRequestBody: await petApi.apiClient.serializeAsync(newPet), postResponseBody: await petApi.apiClient.serializeAsync(newPet), expectedHeaders: {'Content-Type': 'application/json'}); await petApi.addPet(newPet); @@ -106,8 +102,7 @@ void main() { expectedUrl: 'http://petstore.swagger.io/v2/pet/$id', throwException: ApiException(400, 'Not found'), ); - expect( - petApi.getPetById(id), throwsA(equals(TypeMatcher()))); + expect(petApi.getPetById(id), throwsA(equals(TypeMatcher()))); }); test('updates pet with form', () async { @@ -117,16 +112,11 @@ void main() { // add a new pet petApi.apiClient.client = FakeClient( expectedUrl: 'http://petstore.swagger.io/v2/pet', - expectedPostRequestBody: - await petApi.apiClient.serializeAsync(newPet), + expectedPostRequestBody: await petApi.apiClient.serializeAsync(newPet), postResponseBody: await petApi.apiClient.serializeAsync(newPet), expectedHeaders: {'Content-Type': 'application/json'}); await petApi.addPet(newPet); - final multipartRequest = MultipartRequest(null, null); - multipartRequest.fields['name'] = 'Doge'; - multipartRequest.fields['status'] = ''; - // update with form petApi.apiClient.client = FakeClient( expectedUrl: 'http://petstore.swagger.io/v2/pet/$id', @@ -157,8 +147,7 @@ void main() { // add a new pet petApi.apiClient.client = FakeClient( expectedUrl: 'http://petstore.swagger.io/v2/pet', - expectedPostRequestBody: - await petApi.apiClient.serializeAsync(newPet), + expectedPostRequestBody: await petApi.apiClient.serializeAsync(newPet), postResponseBody: await petApi.apiClient.serializeAsync(newPet), expectedHeaders: {'Content-Type': 'application/json'}); await petApi.addPet(newPet); @@ -166,8 +155,7 @@ void main() { // update the same pet petApi.apiClient.client = FakeClient( expectedUrl: 'http://petstore.swagger.io/v2/pet', - expectedPutRequestBody: - await petApi.apiClient.serializeAsync(updatePet), + expectedPutRequestBody: await petApi.apiClient.serializeAsync(updatePet), putResponseBody: await petApi.apiClient.serializeAsync(updatePet), expectedHeaders: {'Content-Type': 'application/json'}); await petApi.updatePet(updatePet); @@ -196,15 +184,13 @@ void main() { // retrieve pets by status petApi.apiClient.client = FakeClient( - expectedUrl: - 'http://petstore.swagger.io/v2/pet/findByStatus?status=$status', + expectedUrl: 'http://petstore.swagger.io/v2/pet/findByStatus?status=$status', getResponseBody: await petApi.apiClient.serializeAsync([pet1, pet2]), ); final pets = await petApi.findPetsByStatus([status]); // tests serialisation and deserialisation of enum - final petsByStatus = - pets.where((p) => p.status == PetStatusEnum.available); + final petsByStatus = pets.where((p) => p.status == PetStatusEnum.available); expect(petsByStatus.length, equals(2)); final petIds = pets.map((pet) => pet.id).toList(); expect(petIds, contains(id1)); @@ -216,14 +202,12 @@ void main() { final id = newId(); final newPet = makePet(id: id); // get some test data (recorded from live response) - final uploadResponse = - await File('test/file_upload_response.json').readAsString(); + final uploadResponse = await File('test/file_upload_response.json').readAsString(); // add a new pet petApi.apiClient.client = FakeClient( expectedUrl: 'http://petstore.swagger.io/v2/pet', - expectedPostRequestBody: - await petApi.apiClient.serializeAsync(newPet), + expectedPostRequestBody: await petApi.apiClient.serializeAsync(newPet), postResponseBody: await petApi.apiClient.serializeAsync(newPet), expectedHeaders: {'Content-Type': 'application/json'}); await petApi.addPet(newPet); @@ -232,9 +216,8 @@ void main() { expectedUrl: 'http://petstore.swagger.io/v2/pet', sendResponseBody: uploadResponse, ); - final file = - new MultipartFile.fromBytes('file', [104, 101, 108, 108, 111]); - await petApi.uploadFile(id, additionalMetadata: '', file: file); + final file = new MultipartFile.fromBytes('file', [104, 101, 108, 108, 111]); + await petApi.uploadFile(id, file: file); }); }); } diff --git a/samples/openapi3/client/petstore/dart2/petstore/test/pet_test.dart b/samples/openapi3/client/petstore/dart2/petstore/test/pet_test.dart index 72126ba6a904..cbd26c68c7ee 100644 --- a/samples/openapi3/client/petstore/dart2/petstore/test/pet_test.dart +++ b/samples/openapi3/client/petstore/dart2/petstore/test/pet_test.dart @@ -1,5 +1,4 @@ -import 'dart:async'; - +@Skip('Needs real petstore') import 'package:http/http.dart'; import 'package:openapi/api.dart'; import 'package:test/test.dart'; @@ -46,16 +45,14 @@ void main() { }); test('doesn\'t get non-existing pet by id', () { - expect(petApi.getPetById(newId()), - throwsA(equals(TypeMatcher()))); + expect(petApi.getPetById(newId()), throwsA(equals(TypeMatcher()))); }); test('deletes existing pet by id', () async { var id = newId(); await petApi.addPet(makePet(id: id)); await petApi.deletePet(id, apiKey: 'special-key'); - expect( - petApi.getPetById(id), throwsA(equals(TypeMatcher()))); + expect(petApi.getPetById(id), throwsA(equals(TypeMatcher()))); }); test('updates pet with form', () async { @@ -100,5 +97,5 @@ void main() { var file = new MultipartFile.fromBytes('file', [104, 101, 108, 108, 111]); await petApi.uploadFile(id, additionalMetadata: '', file: file); }); - }, skip: 'e2e tests for CI'); + }); } diff --git a/samples/openapi3/client/petstore/dart2/petstore/test/random_id.dart b/samples/openapi3/client/petstore/dart2/petstore/test/random_id.dart index 0457428c7dd4..ca67ac209934 100644 --- a/samples/openapi3/client/petstore/dart2/petstore/test/random_id.dart +++ b/samples/openapi3/client/petstore/dart2/petstore/test/random_id.dart @@ -4,4 +4,4 @@ final _random = new Random(); int newId() { return _random.nextInt(999999); -} \ No newline at end of file +} diff --git a/samples/openapi3/client/petstore/dart2/petstore/test/store_faked_client_test.dart b/samples/openapi3/client/petstore/dart2/petstore/test/store_faked_client_test.dart index 9f75fd55d863..541d08b8c6a7 100644 --- a/samples/openapi3/client/petstore/dart2/petstore/test/store_faked_client_test.dart +++ b/samples/openapi3/client/petstore/dart2/petstore/test/store_faked_client_test.dart @@ -21,62 +21,56 @@ void main() { group('Store API with faked client', () { test('places an order and gets it by id', () async { - // TODO: Please uncomment this after a content type of the petstore order in petstore.yaml is fixed. - // final id = newId(); - // final newOrder = makeOrder(id: id); + final id = newId(); + final newOrder = makeOrder(id: id); - // // use the store api to add an order - // storeApi.apiClient.client = FakeClient( - // expectedUrl: 'http://petstore.swagger.io/v2/store/order', - // expectedPostRequestBody: await storeApi.apiClient.serializeAsync(newOrder), - // postResponseBody: await storeApi.apiClient.serializeAsync(newOrder), - // expectedHeaders: {"Content-Type": "application/json"} - // ); - // await storeApi.placeOrder(newOrder); + // use the store api to add an order + storeApi.apiClient.client = FakeClient( + expectedUrl: 'http://petstore.swagger.io/v2/store/order', + expectedPostRequestBody: await storeApi.apiClient.serializeAsync(newOrder), + postResponseBody: await storeApi.apiClient.serializeAsync(newOrder), + expectedHeaders: {"Content-Type": "application/json"}); + await storeApi.placeOrder(newOrder); - // // retrieve the same order by id - // storeApi.apiClient.client = FakeClient( - // expectedUrl: 'http://petstore.swagger.io/v2/store/order/$id', - // getResponseBody: await storeApi.apiClient.serializeAsync(newOrder), - // ); - // final placedOrder = await storeApi.getOrderById(id); - // expect(placedOrder.id, equals(id)); + // retrieve the same order by id + storeApi.apiClient.client = FakeClient( + expectedUrl: 'http://petstore.swagger.io/v2/store/order/$id', + getResponseBody: await storeApi.apiClient.serializeAsync(newOrder), + ); + final placedOrder = await storeApi.getOrderById(id); + expect(placedOrder.id, equals(id)); }); test('deletes an order', () async { - // TODO: Please uncomment this after a content type of the petstore order in petstore.yaml is fixed. - // final id = newId(); - // final newOrder = makeOrder(id: id); + final id = newId(); + final newOrder = makeOrder(id: id); - // // use the store api to add an order - // storeApi.apiClient.client = FakeClient( - // expectedUrl: 'http://petstore.swagger.io/v2/store/order', - // expectedPostRequestBody: await storeApi.apiClient.serializeAsync(newOrder), - // postResponseBody: await storeApi.apiClient.serializeAsync(newOrder), - // expectedHeaders: {"Content-Type": "application/json"} - // ); - // await storeApi.placeOrder(newOrder); + // use the store api to add an order + storeApi.apiClient.client = FakeClient( + expectedUrl: 'http://petstore.swagger.io/v2/store/order', + expectedPostRequestBody: await storeApi.apiClient.serializeAsync(newOrder), + postResponseBody: await storeApi.apiClient.serializeAsync(newOrder), + expectedHeaders: {"Content-Type": "application/json"}); + await storeApi.placeOrder(newOrder); - // // delete the same order - // storeApi.apiClient.client = FakeClient( - // expectedUrl: 'http://petstore.swagger.io/v2/store/order/$id', - // deleteResponseBody: '', - // ); - // await storeApi.deleteOrder(id.toString()); + // delete the same order + storeApi.apiClient.client = FakeClient( + expectedUrl: 'http://petstore.swagger.io/v2/store/order/$id', + deleteResponseBody: '', + ); + await storeApi.deleteOrder(id.toString()); - // // try and retrieve the order - // storeApi.apiClient.client = FakeClient( - // expectedUrl: 'http://petstore.swagger.io/v2/store/order/$id', - // throwException: ApiException(400, 'Not found'), - // ); - // expect(storeApi.getOrderById(id), - // throwsA(equals(TypeMatcher()))); + // try and retrieve the order + storeApi.apiClient.client = FakeClient( + expectedUrl: 'http://petstore.swagger.io/v2/store/order/$id', + throwException: ApiException(400, 'Not found'), + ); + expect(storeApi.getOrderById(id), throwsA(equals(TypeMatcher()))); }); test('gets the store inventory', () async { // get some test data (recorded from live response) - final inventoryResponse = - await File('test/inventory_response.json').readAsString(); + final inventoryResponse = await File('test/inventory_response.json').readAsString(); // use the store api to get the inventory storeApi.apiClient.client = FakeClient( expectedUrl: 'http://petstore.swagger.io/v2/store/inventory', diff --git a/samples/openapi3/client/petstore/dart2/petstore/test/store_test.dart b/samples/openapi3/client/petstore/dart2/petstore/test/store_test.dart index b2175238819c..a5b19cd1de59 100644 --- a/samples/openapi3/client/petstore/dart2/petstore/test/store_test.dart +++ b/samples/openapi3/client/petstore/dart2/petstore/test/store_test.dart @@ -1,3 +1,4 @@ +@Skip('Needs real petstore') import 'package:openapi/api.dart'; import 'package:test/test.dart'; @@ -18,27 +19,24 @@ void main() { group('Store API with live client', () { test('places an order and gets it by id', () async { - // TODO: Please uncomment this after a content type of the petstore order in petstore.yaml is fixed. - // var id = newId(); + var id = newId(); - // await storeApi.placeOrder(makeOrder(id: id)); - // var order = await storeApi.getOrderById(id); - // expect(order.id, equals(id)); + await storeApi.placeOrder(makeOrder(id: id)); + var order = await storeApi.getOrderById(id); + expect(order.id, equals(id)); }); test('deletes an order', () async { - // TODO: Please uncomment this after a content type of the petstore order in petstore.yaml is fixed. - // var id = newId(); + var id = newId(); - // await storeApi.placeOrder(makeOrder(id: id)); - // await storeApi.deleteOrder(id.toString()); - // expect(storeApi.getOrderById(id), - // throwsA(equals(TypeMatcher()))); + await storeApi.placeOrder(makeOrder(id: id)); + await storeApi.deleteOrder(id.toString()); + expect(storeApi.getOrderById(id), throwsA(equals(TypeMatcher()))); }); test('gets the store inventory', () async { Map inventory = await storeApi.getInventory(); expect(inventory.length, isNot(equals(0))); }); - }); // , skip: 'e2e tests for CI' + }); } diff --git a/samples/openapi3/client/petstore/dart2/petstore/test/user_test.dart b/samples/openapi3/client/petstore/dart2/petstore/test/user_test.dart index ea34b3713fa7..d604363622d6 100644 --- a/samples/openapi3/client/petstore/dart2/petstore/test/user_test.dart +++ b/samples/openapi3/client/petstore/dart2/petstore/test/user_test.dart @@ -1,3 +1,4 @@ +@Skip('Needs real petstore') import 'package:openapi/api.dart'; import 'package:test/test.dart'; @@ -6,8 +7,7 @@ import 'random_id.dart'; void main() { var userApi = new UserApi(); - User makeUser( - {int id, String userName = 'username', String password = 'password'}) { + User makeUser({int id, String userName = 'username', String password = 'password'}) { return User() ..id = id ..username = userName @@ -63,8 +63,7 @@ void main() { var username = 'Riddlem325'; await userApi.createUser(makeUser(id: newId(), userName: username)); await userApi.deleteUser(username); - expect(userApi.getUserByName(username), - throwsA(TypeMatcher())); + expect(userApi.getUserByName(username), throwsA(TypeMatcher())); }); test('logs a user in', () async { @@ -76,5 +75,5 @@ void main() { var result = await userApi.loginUser(username, password); expect(result, contains('logged in user session:')); }); - }, skip: 'e2e tests for CI'); + }); } diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/pet_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/pet_api.dart index 2ec34d475e27..ee5c6f0d24cb 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/pet_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/pet_api.dart @@ -41,17 +41,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -118,17 +107,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -187,17 +165,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -265,17 +232,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -342,17 +298,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -414,17 +359,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -491,30 +425,11 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (name != null) { - hasFields = true; - mp.fields[r'name'] = parameterToString(name); - } - if (status != null) { - hasFields = true; - mp.fields[r'status'] = parameterToString(status); - } - if (hasFields) { - postBody = mp; - } - } else { - if (name != null) { - formParams[r'name'] = parameterToString(name); - } - if (status != null) { - formParams[r'status'] = parameterToString(status); - } + if (name != null) { + formParams[r'name'] = parameterToString(name); + } + if (status != null) { + formParams[r'status'] = parameterToString(status); } return await apiClient.invokeAPI( @@ -581,28 +496,19 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (additionalMetadata != null) { - hasFields = true; - mp.fields[r'additionalMetadata'] = parameterToString(additionalMetadata); - } - if (file != null) { - hasFields = true; - mp.fields[r'file'] = file.field; - mp.files.add(file); - } - if (hasFields) { - postBody = mp; - } - } else { - if (additionalMetadata != null) { - formParams[r'additionalMetadata'] = parameterToString(additionalMetadata); - } + bool hasFields = false; + final mp = MultipartRequest('POST', Uri.parse(path)); + if (additionalMetadata != null) { + hasFields = true; + mp.fields[r'additionalMetadata'] = parameterToString(additionalMetadata); + } + if (file != null) { + hasFields = true; + mp.fields[r'file'] = file.field; + mp.files.add(file); + } + if (hasFields) { + postBody = mp; } return await apiClient.invokeAPI( diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/store_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/store_api.dart index 9696bacc9de1..4ff0cee3e1a0 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/store_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/store_api.dart @@ -44,17 +44,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -101,17 +90,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -171,17 +149,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -243,17 +210,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/user_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/user_api.dart index fc19afb4e93e..274b176291b3 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/user_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api/user_api.dart @@ -43,17 +43,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -108,17 +97,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -171,17 +149,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -237,17 +204,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -303,17 +259,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -382,17 +327,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -445,17 +379,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -512,17 +435,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/another_fake_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/another_fake_api.dart index c297f77a8a34..8f8b96abc53e 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/another_fake_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/another_fake_api.dart @@ -43,17 +43,6 @@ class AnotherFakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/default_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/default_api.dart index 1185af2521cd..e811495110f0 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/default_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/default_api.dart @@ -29,17 +29,6 @@ class DefaultApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart index 20db8f0c9b06..95eb36aacdf6 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart @@ -31,17 +31,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -110,17 +99,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['http_signature_test']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -176,17 +154,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -243,17 +210,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -310,17 +266,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -377,17 +322,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -447,17 +381,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -516,17 +439,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -581,17 +493,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -645,17 +546,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -767,112 +657,44 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['http_basic_test']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (integer != null) { - hasFields = true; - mp.fields[r'integer'] = parameterToString(integer); - } - if (int32 != null) { - hasFields = true; - mp.fields[r'int32'] = parameterToString(int32); - } - if (int64 != null) { - hasFields = true; - mp.fields[r'int64'] = parameterToString(int64); - } - if (number != null) { - hasFields = true; - mp.fields[r'number'] = parameterToString(number); - } - if (float != null) { - hasFields = true; - mp.fields[r'float'] = parameterToString(float); - } - if (double_ != null) { - hasFields = true; - mp.fields[r'double'] = parameterToString(double_); - } - if (string != null) { - hasFields = true; - mp.fields[r'string'] = parameterToString(string); - } - if (patternWithoutDelimiter != null) { - hasFields = true; - mp.fields[r'pattern_without_delimiter'] = parameterToString(patternWithoutDelimiter); - } - if (byte != null) { - hasFields = true; - mp.fields[r'byte'] = parameterToString(byte); - } - if (binary != null) { - hasFields = true; - mp.fields[r'binary'] = binary.field; - mp.files.add(binary); - } - if (date != null) { - hasFields = true; - mp.fields[r'date'] = parameterToString(date); - } - if (dateTime != null) { - hasFields = true; - mp.fields[r'dateTime'] = parameterToString(dateTime); - } - if (password != null) { - hasFields = true; - mp.fields[r'password'] = parameterToString(password); - } - if (callback != null) { - hasFields = true; - mp.fields[r'callback'] = parameterToString(callback); - } - if (hasFields) { - postBody = mp; - } - } else { - if (integer != null) { - formParams[r'integer'] = parameterToString(integer); - } - if (int32 != null) { - formParams[r'int32'] = parameterToString(int32); - } - if (int64 != null) { - formParams[r'int64'] = parameterToString(int64); - } - if (number != null) { - formParams[r'number'] = parameterToString(number); - } - if (float != null) { - formParams[r'float'] = parameterToString(float); - } - if (double_ != null) { - formParams[r'double'] = parameterToString(double_); - } - if (string != null) { - formParams[r'string'] = parameterToString(string); - } - if (patternWithoutDelimiter != null) { - formParams[r'pattern_without_delimiter'] = parameterToString(patternWithoutDelimiter); - } - if (byte != null) { - formParams[r'byte'] = parameterToString(byte); - } - if (date != null) { - formParams[r'date'] = parameterToString(date); - } - if (dateTime != null) { - formParams[r'dateTime'] = parameterToString(dateTime); - } - if (password != null) { - formParams[r'password'] = parameterToString(password); - } - if (callback != null) { - formParams[r'callback'] = parameterToString(callback); - } + if (integer != null) { + formParams[r'integer'] = parameterToString(integer); + } + if (int32 != null) { + formParams[r'int32'] = parameterToString(int32); + } + if (int64 != null) { + formParams[r'int64'] = parameterToString(int64); + } + if (number != null) { + formParams[r'number'] = parameterToString(number); + } + if (float != null) { + formParams[r'float'] = parameterToString(float); + } + if (double_ != null) { + formParams[r'double'] = parameterToString(double_); + } + if (string != null) { + formParams[r'string'] = parameterToString(string); + } + if (patternWithoutDelimiter != null) { + formParams[r'pattern_without_delimiter'] = parameterToString(patternWithoutDelimiter); + } + if (byte != null) { + formParams[r'byte'] = parameterToString(byte); + } + if (date != null) { + formParams[r'date'] = parameterToString(date); + } + if (dateTime != null) { + formParams[r'dateTime'] = parameterToString(dateTime); + } + if (password != null) { + formParams[r'password'] = parameterToString(password); + } + if (callback != null) { + formParams[r'callback'] = parameterToString(callback); } return await apiClient.invokeAPI( @@ -1007,30 +829,11 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (enumFormStringArray != null) { - hasFields = true; - mp.fields[r'enum_form_string_array'] = parameterToString(enumFormStringArray); - } - if (enumFormString != null) { - hasFields = true; - mp.fields[r'enum_form_string'] = parameterToString(enumFormString); - } - if (hasFields) { - postBody = mp; - } - } else { - if (enumFormStringArray != null) { - formParams[r'enum_form_string_array'] = parameterToString(enumFormStringArray); - } - if (enumFormString != null) { - formParams[r'enum_form_string'] = parameterToString(enumFormString); - } + if (enumFormStringArray != null) { + formParams[r'enum_form_string_array'] = parameterToString(enumFormStringArray); + } + if (enumFormString != null) { + formParams[r'enum_form_string'] = parameterToString(enumFormString); } return await apiClient.invokeAPI( @@ -1144,17 +947,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['bearer_test']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -1224,17 +1016,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -1293,30 +1074,11 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (param != null) { - hasFields = true; - mp.fields[r'param'] = parameterToString(param); - } - if (param2 != null) { - hasFields = true; - mp.fields[r'param2'] = parameterToString(param2); - } - if (hasFields) { - postBody = mp; - } - } else { - if (param != null) { - formParams[r'param'] = parameterToString(param); - } - if (param2 != null) { - formParams[r'param2'] = parameterToString(param2); - } + if (param != null) { + formParams[r'param'] = parameterToString(param); + } + if (param2 != null) { + formParams[r'param2'] = parameterToString(param2); } return await apiClient.invokeAPI( @@ -1398,17 +1160,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_classname_tags123_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_classname_tags123_api.dart index f7e337dbee5d..79ec2cbed45c 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_classname_tags123_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_classname_tags123_api.dart @@ -43,17 +43,6 @@ class FakeClassnameTags123Api { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key_query']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/pet_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/pet_api.dart index af2215c4db76..50d001f61ced 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/pet_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/pet_api.dart @@ -41,17 +41,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -111,17 +100,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -180,17 +158,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -258,17 +225,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -335,17 +291,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -407,17 +352,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -477,30 +411,11 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (name != null) { - hasFields = true; - mp.fields[r'name'] = parameterToString(name); - } - if (status != null) { - hasFields = true; - mp.fields[r'status'] = parameterToString(status); - } - if (hasFields) { - postBody = mp; - } - } else { - if (name != null) { - formParams[r'name'] = parameterToString(name); - } - if (status != null) { - formParams[r'status'] = parameterToString(status); - } + if (name != null) { + formParams[r'name'] = parameterToString(name); + } + if (status != null) { + formParams[r'status'] = parameterToString(status); } return await apiClient.invokeAPI( @@ -567,28 +482,19 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (additionalMetadata != null) { - hasFields = true; - mp.fields[r'additionalMetadata'] = parameterToString(additionalMetadata); - } - if (file != null) { - hasFields = true; - mp.fields[r'file'] = file.field; - mp.files.add(file); - } - if (hasFields) { - postBody = mp; - } - } else { - if (additionalMetadata != null) { - formParams[r'additionalMetadata'] = parameterToString(additionalMetadata); - } + bool hasFields = false; + final mp = MultipartRequest('POST', Uri.parse(path)); + if (additionalMetadata != null) { + hasFields = true; + mp.fields[r'additionalMetadata'] = parameterToString(additionalMetadata); + } + if (file != null) { + hasFields = true; + mp.fields[r'file'] = file.field; + mp.files.add(file); + } + if (hasFields) { + postBody = mp; } return await apiClient.invokeAPI( @@ -665,28 +571,19 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (additionalMetadata != null) { - hasFields = true; - mp.fields[r'additionalMetadata'] = parameterToString(additionalMetadata); - } - if (requiredFile != null) { - hasFields = true; - mp.fields[r'requiredFile'] = requiredFile.field; - mp.files.add(requiredFile); - } - if (hasFields) { - postBody = mp; - } - } else { - if (additionalMetadata != null) { - formParams[r'additionalMetadata'] = parameterToString(additionalMetadata); - } + bool hasFields = false; + final mp = MultipartRequest('POST', Uri.parse(path)); + if (additionalMetadata != null) { + hasFields = true; + mp.fields[r'additionalMetadata'] = parameterToString(additionalMetadata); + } + if (requiredFile != null) { + hasFields = true; + mp.fields[r'requiredFile'] = requiredFile.field; + mp.files.add(requiredFile); + } + if (hasFields) { + postBody = mp; } return await apiClient.invokeAPI( diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/store_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/store_api.dart index ea459d16052a..08a73bb8fcaf 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/store_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/store_api.dart @@ -44,17 +44,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -101,17 +90,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -171,17 +149,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -243,17 +210,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/user_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/user_api.dart index 0a2c54c75feb..d45509dcac57 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/user_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/user_api.dart @@ -43,17 +43,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -108,17 +97,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -171,17 +149,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -237,17 +204,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -303,17 +259,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -382,17 +327,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -445,17 +379,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -512,17 +435,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/another_fake_api.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/another_fake_api.dart index b712431a035f..f0115e6907b7 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/another_fake_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/another_fake_api.dart @@ -43,17 +43,6 @@ class AnotherFakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/default_api.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/default_api.dart index 779bdec8b3a6..182442cbd42f 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/default_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/default_api.dart @@ -29,17 +29,6 @@ class DefaultApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart index edcd08cfa4a6..2386fdfe4d57 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart @@ -31,17 +31,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -111,17 +100,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['http_signature_test']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -177,17 +155,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -245,17 +212,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -313,17 +269,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -381,17 +326,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -452,17 +386,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -522,17 +445,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -587,17 +499,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -651,17 +552,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -774,112 +664,44 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['http_basic_test']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (integer != null) { - hasFields = true; - mp.fields[r'integer'] = parameterToString(integer); - } - if (int32 != null) { - hasFields = true; - mp.fields[r'int32'] = parameterToString(int32); - } - if (int64 != null) { - hasFields = true; - mp.fields[r'int64'] = parameterToString(int64); - } - if (number != null) { - hasFields = true; - mp.fields[r'number'] = parameterToString(number); - } - if (float != null) { - hasFields = true; - mp.fields[r'float'] = parameterToString(float); - } - if (double_ != null) { - hasFields = true; - mp.fields[r'double'] = parameterToString(double_); - } - if (string != null) { - hasFields = true; - mp.fields[r'string'] = parameterToString(string); - } - if (patternWithoutDelimiter != null) { - hasFields = true; - mp.fields[r'pattern_without_delimiter'] = parameterToString(patternWithoutDelimiter); - } - if (byte != null) { - hasFields = true; - mp.fields[r'byte'] = parameterToString(byte); - } - if (binary != null) { - hasFields = true; - mp.fields[r'binary'] = binary.field; - mp.files.add(binary); - } - if (date != null) { - hasFields = true; - mp.fields[r'date'] = parameterToString(date); - } - if (dateTime != null) { - hasFields = true; - mp.fields[r'dateTime'] = parameterToString(dateTime); - } - if (password != null) { - hasFields = true; - mp.fields[r'password'] = parameterToString(password); - } - if (callback != null) { - hasFields = true; - mp.fields[r'callback'] = parameterToString(callback); - } - if (hasFields) { - postBody = mp; - } - } else { - if (integer != null) { - formParams[r'integer'] = parameterToString(integer); - } - if (int32 != null) { - formParams[r'int32'] = parameterToString(int32); - } - if (int64 != null) { - formParams[r'int64'] = parameterToString(int64); - } - if (number != null) { - formParams[r'number'] = parameterToString(number); - } - if (float != null) { - formParams[r'float'] = parameterToString(float); - } - if (double_ != null) { - formParams[r'double'] = parameterToString(double_); - } - if (string != null) { - formParams[r'string'] = parameterToString(string); - } - if (patternWithoutDelimiter != null) { - formParams[r'pattern_without_delimiter'] = parameterToString(patternWithoutDelimiter); - } - if (byte != null) { - formParams[r'byte'] = parameterToString(byte); - } - if (date != null) { - formParams[r'date'] = parameterToString(date); - } - if (dateTime != null) { - formParams[r'dateTime'] = parameterToString(dateTime); - } - if (password != null) { - formParams[r'password'] = parameterToString(password); - } - if (callback != null) { - formParams[r'callback'] = parameterToString(callback); - } + if (integer != null) { + formParams[r'integer'] = parameterToString(integer); + } + if (int32 != null) { + formParams[r'int32'] = parameterToString(int32); + } + if (int64 != null) { + formParams[r'int64'] = parameterToString(int64); + } + if (number != null) { + formParams[r'number'] = parameterToString(number); + } + if (float != null) { + formParams[r'float'] = parameterToString(float); + } + if (double_ != null) { + formParams[r'double'] = parameterToString(double_); + } + if (string != null) { + formParams[r'string'] = parameterToString(string); + } + if (patternWithoutDelimiter != null) { + formParams[r'pattern_without_delimiter'] = parameterToString(patternWithoutDelimiter); + } + if (byte != null) { + formParams[r'byte'] = parameterToString(byte); + } + if (date != null) { + formParams[r'date'] = parameterToString(date); + } + if (dateTime != null) { + formParams[r'dateTime'] = parameterToString(dateTime); + } + if (password != null) { + formParams[r'password'] = parameterToString(password); + } + if (callback != null) { + formParams[r'callback'] = parameterToString(callback); } return await apiClient.invokeAPI( @@ -1014,30 +836,11 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (enumFormStringArray != null) { - hasFields = true; - mp.fields[r'enum_form_string_array'] = parameterToString(enumFormStringArray); - } - if (enumFormString != null) { - hasFields = true; - mp.fields[r'enum_form_string'] = parameterToString(enumFormString); - } - if (hasFields) { - postBody = mp; - } - } else { - if (enumFormStringArray != null) { - formParams[r'enum_form_string_array'] = parameterToString(enumFormStringArray); - } - if (enumFormString != null) { - formParams[r'enum_form_string'] = parameterToString(enumFormString); - } + if (enumFormStringArray != null) { + formParams[r'enum_form_string_array'] = parameterToString(enumFormStringArray); + } + if (enumFormString != null) { + formParams[r'enum_form_string'] = parameterToString(enumFormString); } return await apiClient.invokeAPI( @@ -1151,17 +954,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['bearer_test']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -1231,17 +1023,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -1300,30 +1081,11 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (param != null) { - hasFields = true; - mp.fields[r'param'] = parameterToString(param); - } - if (param2 != null) { - hasFields = true; - mp.fields[r'param2'] = parameterToString(param2); - } - if (hasFields) { - postBody = mp; - } - } else { - if (param != null) { - formParams[r'param'] = parameterToString(param); - } - if (param2 != null) { - formParams[r'param2'] = parameterToString(param2); - } + if (param != null) { + formParams[r'param'] = parameterToString(param); + } + if (param2 != null) { + formParams[r'param2'] = parameterToString(param2); } return await apiClient.invokeAPI( @@ -1405,17 +1167,6 @@ class FakeApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_classname_tags123_api.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_classname_tags123_api.dart index 49f4ce7cde23..c9fc34d194c4 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_classname_tags123_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_classname_tags123_api.dart @@ -43,17 +43,6 @@ class FakeClassnameTags123Api { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key_query']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/pet_api.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/pet_api.dart index cd2a65ab9397..dec9efa15f7a 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/pet_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/pet_api.dart @@ -41,17 +41,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -111,17 +100,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -180,17 +158,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -259,17 +226,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -337,17 +293,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -410,17 +355,6 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -480,30 +414,11 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (name != null) { - hasFields = true; - mp.fields[r'name'] = parameterToString(name); - } - if (status != null) { - hasFields = true; - mp.fields[r'status'] = parameterToString(status); - } - if (hasFields) { - postBody = mp; - } - } else { - if (name != null) { - formParams[r'name'] = parameterToString(name); - } - if (status != null) { - formParams[r'status'] = parameterToString(status); - } + if (name != null) { + formParams[r'name'] = parameterToString(name); + } + if (status != null) { + formParams[r'status'] = parameterToString(status); } return await apiClient.invokeAPI( @@ -570,28 +485,19 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (additionalMetadata != null) { - hasFields = true; - mp.fields[r'additionalMetadata'] = parameterToString(additionalMetadata); - } - if (file != null) { - hasFields = true; - mp.fields[r'file'] = file.field; - mp.files.add(file); - } - if (hasFields) { - postBody = mp; - } - } else { - if (additionalMetadata != null) { - formParams[r'additionalMetadata'] = parameterToString(additionalMetadata); - } + bool hasFields = false; + final mp = MultipartRequest('POST', Uri.parse(path)); + if (additionalMetadata != null) { + hasFields = true; + mp.fields[r'additionalMetadata'] = parameterToString(additionalMetadata); + } + if (file != null) { + hasFields = true; + mp.fields[r'file'] = file.field; + mp.files.add(file); + } + if (hasFields) { + postBody = mp; } return await apiClient.invokeAPI( @@ -669,28 +575,19 @@ class PetApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['petstore_auth']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (additionalMetadata != null) { - hasFields = true; - mp.fields[r'additionalMetadata'] = parameterToString(additionalMetadata); - } - if (requiredFile != null) { - hasFields = true; - mp.fields[r'requiredFile'] = requiredFile.field; - mp.files.add(requiredFile); - } - if (hasFields) { - postBody = mp; - } - } else { - if (additionalMetadata != null) { - formParams[r'additionalMetadata'] = parameterToString(additionalMetadata); - } + bool hasFields = false; + final mp = MultipartRequest('POST', Uri.parse(path)); + if (additionalMetadata != null) { + hasFields = true; + mp.fields[r'additionalMetadata'] = parameterToString(additionalMetadata); + } + if (requiredFile != null) { + hasFields = true; + mp.fields[r'requiredFile'] = requiredFile.field; + mp.files.add(requiredFile); + } + if (hasFields) { + postBody = mp; } return await apiClient.invokeAPI( diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/store_api.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/store_api.dart index 9e262c18b98f..f7a67632d331 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/store_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/store_api.dart @@ -44,17 +44,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -101,17 +90,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = ['api_key']; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -172,17 +150,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -245,17 +212,6 @@ class StoreApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/user_api.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/user_api.dart index 3291afc26708..13e62586ac99 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/user_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/user_api.dart @@ -43,17 +43,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -108,17 +97,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -171,17 +149,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -237,17 +204,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -303,17 +259,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -383,17 +328,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -447,17 +381,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, @@ -514,17 +437,6 @@ class UserApi { final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = []; - if ( - nullableContentType != null && - nullableContentType.toLowerCase().startsWith('multipart/form-data') - ) { - bool hasFields = false; - final mp = MultipartRequest(null, null); - if (hasFields) { - postBody = mp; - } - } else { - } return await apiClient.invokeAPI( path, diff --git a/samples/server/petstore/go-echo-server/pom.xml b/samples/server/petstore/go-echo-server/pom.xml index df4dbbf47023..5e7f03d3842b 100644 --- a/samples/server/petstore/go-echo-server/pom.xml +++ b/samples/server/petstore/go-echo-server/pom.xml @@ -35,7 +35,6 @@ go - go mod download From 9e4afb0fc378e39502633f18921d78ed526694b5 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Tue, 18 May 2021 23:09:59 +0800 Subject: [PATCH 125/186] [C++] Rename Qt5 to Qt (#9490) * rename qt5 to qt * rename, update * rename qt5 to qt in the templates * update doc --- ...cpp-qt5-client.yaml => cpp-qt-client.yaml} | 6 ++-- ...er.yaml => cpp-qt-qhttpengine-server.yaml} | 6 ++-- docs/generators.md | 4 +-- .../{cpp-qt5-client.md => cpp-qt-client.md} | 4 +-- ...server.md => cpp-qt-qhttpengine-server.md} | 4 +-- ...Codegen.java => CppQtAbstractCodegen.java} | 6 ++-- ...ntCodegen.java => CppQtClientCodegen.java} | 34 +++++++++---------- ...ava => CppQtQHttpEngineServerCodegen.java} | 12 +++---- .../org.openapitools.codegen.CodegenConfig | 4 +-- .../CMakeLists.txt.mustache | 0 .../HttpFileElement.cpp.mustache | 0 .../HttpFileElement.h.mustache | 0 .../HttpRequest.cpp.mustache | 2 +- .../HttpRequest.h.mustache | 0 .../Project.mustache | 0 .../README.mustache | 4 +-- .../ServerConfiguration.mustache | 0 .../ServerVariable.mustache | 0 .../api-body.mustache | 0 .../api-header.mustache | 0 .../enum.mustache | 0 .../helpers-body.mustache | 0 .../helpers-header.mustache | 0 .../licenseInfo.mustache | 0 .../model-body.mustache | 0 .../model-header.mustache | 0 .../object.mustache | 0 .../CMakeLists.txt.mustache | 2 +- .../Dockerfile.mustache | 4 +-- .../HttpFileElement.cpp.mustache | 0 .../HttpFileElement.h.mustache | 0 .../LICENSE.txt.mustache | 0 .../Makefile.mustache | 0 .../README.md.mustache | 14 ++++---- .../apihandler.cpp.mustache | 0 .../apihandler.h.mustache | 0 .../apirequest.cpp.mustache | 0 .../apirequest.h.mustache | 0 .../apirouter.cpp.mustache | 0 .../apirouter.h.mustache | 0 .../enum.mustache | 0 .../helpers-body.mustache | 0 .../helpers-header.mustache | 0 .../licenseInfo.mustache | 0 .../main.cpp.mustache | 0 .../model-body.mustache | 0 .../model-header.mustache | 0 .../object.mustache | 0 .../src-CMakeLists.txt.mustache | 0 pom.xml | 2 +- .../{cpp-qt5 => cpp-qt}/.clang-format | 0 .../petstore/{cpp-qt5 => cpp-qt}/.gitignore | 0 .../.openapi-generator-ignore | 0 .../.openapi-generator/FILES | 0 .../.openapi-generator/VERSION | 0 .../{cpp-qt5 => cpp-qt}/CMakeLists.txt | 0 .../PetStore/PetApiTests.cpp | 0 .../PetStore/PetApiTests.h | 0 .../{cpp-qt5 => cpp-qt}/PetStore/PetStore.pro | 0 .../PetStore/StoreApiTests.cpp | 0 .../PetStore/StoreApiTests.h | 0 .../PetStore/UserApiTests.cpp | 0 .../PetStore/UserApiTests.h | 0 .../{cpp-qt5 => cpp-qt}/PetStore/main.cpp | 0 .../petstore/{cpp-qt5 => cpp-qt}/README.md | 4 +-- .../{cpp-qt5 => cpp-qt}/build-and-test.bash | 0 .../{cpp-qt5 => cpp-qt}/client/CMakeLists.txt | 0 .../client/PFXApiResponse.cpp | 0 .../client/PFXApiResponse.h | 0 .../client/PFXCategory.cpp | 0 .../{cpp-qt5 => cpp-qt}/client/PFXCategory.h | 0 .../{cpp-qt5 => cpp-qt}/client/PFXEnum.h | 0 .../{cpp-qt5 => cpp-qt}/client/PFXHelpers.cpp | 0 .../{cpp-qt5 => cpp-qt}/client/PFXHelpers.h | 0 .../client/PFXHttpFileElement.cpp | 0 .../client/PFXHttpFileElement.h | 0 .../client/PFXHttpRequest.cpp | 2 +- .../client/PFXHttpRequest.h | 0 .../{cpp-qt5 => cpp-qt}/client/PFXObject.h | 0 .../{cpp-qt5 => cpp-qt}/client/PFXOrder.cpp | 0 .../{cpp-qt5 => cpp-qt}/client/PFXOrder.h | 0 .../{cpp-qt5 => cpp-qt}/client/PFXPet.cpp | 0 .../{cpp-qt5 => cpp-qt}/client/PFXPet.h | 0 .../{cpp-qt5 => cpp-qt}/client/PFXPetApi.cpp | 0 .../{cpp-qt5 => cpp-qt}/client/PFXPetApi.h | 0 .../client/PFXServerConfiguration.h | 0 .../client/PFXServerVariable.h | 0 .../client/PFXStoreApi.cpp | 0 .../{cpp-qt5 => cpp-qt}/client/PFXStoreApi.h | 0 .../{cpp-qt5 => cpp-qt}/client/PFXTag.cpp | 0 .../{cpp-qt5 => cpp-qt}/client/PFXTag.h | 0 .../{cpp-qt5 => cpp-qt}/client/PFXUser.cpp | 0 .../{cpp-qt5 => cpp-qt}/client/PFXUser.h | 0 .../{cpp-qt5 => cpp-qt}/client/PFXUserApi.cpp | 0 .../{cpp-qt5 => cpp-qt}/client/PFXUserApi.h | 0 .../{cpp-qt5 => cpp-qt}/client/PFXclient.pri | 0 .../petstore/{cpp-qt5 => cpp-qt}/pom.xml | 0 .../.openapi-generator-ignore | 0 .../.openapi-generator/FILES | 0 .../.openapi-generator/VERSION | 0 .../server/CMakeLists.txt | 2 +- .../server/Dockerfile | 4 +-- .../server/LICENSE.txt | 0 .../server/Makefile | 0 .../server/README.MD | 14 ++++---- .../server/src/CMakeLists.txt | 0 .../server/src/handlers/OAIApiRouter.cpp | 0 .../server/src/handlers/OAIApiRouter.h | 0 .../server/src/handlers/OAIPetApiHandler.cpp | 0 .../server/src/handlers/OAIPetApiHandler.h | 0 .../src/handlers/OAIStoreApiHandler.cpp | 0 .../server/src/handlers/OAIStoreApiHandler.h | 0 .../server/src/handlers/OAIUserApiHandler.cpp | 0 .../server/src/handlers/OAIUserApiHandler.h | 0 .../server/src/main.cpp | 0 .../server/src/models/OAIApiResponse.cpp | 0 .../server/src/models/OAIApiResponse.h | 0 .../server/src/models/OAICategory.cpp | 0 .../server/src/models/OAICategory.h | 0 .../server/src/models/OAIEnum.h | 0 .../server/src/models/OAIHelpers.cpp | 0 .../server/src/models/OAIHelpers.h | 0 .../server/src/models/OAIHttpFileElement.cpp | 0 .../server/src/models/OAIHttpFileElement.h | 0 .../server/src/models/OAIObject.h | 0 .../server/src/models/OAIOrder.cpp | 0 .../server/src/models/OAIOrder.h | 0 .../server/src/models/OAIPet.cpp | 0 .../server/src/models/OAIPet.h | 0 .../server/src/models/OAITag.cpp | 0 .../server/src/models/OAITag.h | 0 .../server/src/models/OAIUser.cpp | 0 .../server/src/models/OAIUser.h | 0 .../server/src/requests/OAIPetApiRequest.cpp | 0 .../server/src/requests/OAIPetApiRequest.h | 0 .../src/requests/OAIStoreApiRequest.cpp | 0 .../server/src/requests/OAIStoreApiRequest.h | 0 .../server/src/requests/OAIUserApiRequest.cpp | 0 .../server/src/requests/OAIUserApiRequest.h | 0 139 files changed, 67 insertions(+), 67 deletions(-) rename bin/configs/{cpp-qt5-client.yaml => cpp-qt-client.yaml} (72%) rename bin/configs/{cpp-qt5-qhttpengine-server.yaml => cpp-qt-qhttpengine-server.yaml} (52%) rename docs/generators/{cpp-qt5-client.md => cpp-qt-client.md} (99%) rename docs/generators/{cpp-qt5-qhttpengine-server.md => cpp-qt-qhttpengine-server.md} (98%) rename modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/{CppQt5AbstractCodegen.java => CppQtAbstractCodegen.java} (98%) rename modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/{CppQt5ClientCodegen.java => CppQtClientCodegen.java} (89%) rename modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/{CppQt5QHttpEngineServerCodegen.java => CppQtQHttpEngineServerCodegen.java} (95%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/CMakeLists.txt.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/HttpFileElement.cpp.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/HttpFileElement.h.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/HttpRequest.cpp.mustache (99%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/HttpRequest.h.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/Project.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/README.mustache (98%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/ServerConfiguration.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/ServerVariable.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/api-body.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/api-header.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/enum.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/helpers-body.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/helpers-header.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/licenseInfo.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/model-body.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/model-header.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-client => cpp-qt-client}/object.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/CMakeLists.txt.mustache (93%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/Dockerfile.mustache (78%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/HttpFileElement.cpp.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/HttpFileElement.h.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/LICENSE.txt.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/Makefile.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/README.md.mustache (89%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/apihandler.cpp.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/apihandler.h.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/apirequest.cpp.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/apirequest.h.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/apirouter.cpp.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/apirouter.h.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/enum.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/helpers-body.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/helpers-header.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/licenseInfo.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/main.cpp.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/model-body.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/model-header.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/object.mustache (100%) rename modules/openapi-generator/src/main/resources/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/src-CMakeLists.txt.mustache (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/.clang-format (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/.gitignore (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/.openapi-generator-ignore (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/.openapi-generator/FILES (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/.openapi-generator/VERSION (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/CMakeLists.txt (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/PetStore/PetApiTests.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/PetStore/PetApiTests.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/PetStore/PetStore.pro (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/PetStore/StoreApiTests.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/PetStore/StoreApiTests.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/PetStore/UserApiTests.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/PetStore/UserApiTests.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/PetStore/main.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/README.md (98%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/build-and-test.bash (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/CMakeLists.txt (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXApiResponse.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXApiResponse.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXCategory.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXCategory.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXEnum.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXHelpers.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXHelpers.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXHttpFileElement.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXHttpFileElement.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXHttpRequest.cpp (99%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXHttpRequest.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXObject.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXOrder.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXOrder.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXPet.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXPet.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXPetApi.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXPetApi.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXServerConfiguration.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXServerVariable.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXStoreApi.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXStoreApi.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXTag.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXTag.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXUser.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXUser.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXUserApi.cpp (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXUserApi.h (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/client/PFXclient.pri (100%) rename samples/client/petstore/{cpp-qt5 => cpp-qt}/pom.xml (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/.openapi-generator-ignore (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/.openapi-generator/FILES (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/.openapi-generator/VERSION (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/CMakeLists.txt (93%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/Dockerfile (78%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/LICENSE.txt (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/Makefile (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/README.MD (88%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/CMakeLists.txt (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/handlers/OAIApiRouter.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/handlers/OAIApiRouter.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/handlers/OAIPetApiHandler.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/handlers/OAIPetApiHandler.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/handlers/OAIStoreApiHandler.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/handlers/OAIStoreApiHandler.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/handlers/OAIUserApiHandler.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/handlers/OAIUserApiHandler.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/main.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIApiResponse.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIApiResponse.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAICategory.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAICategory.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIEnum.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIHelpers.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIHelpers.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIHttpFileElement.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIHttpFileElement.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIObject.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIOrder.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIOrder.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIPet.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIPet.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAITag.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAITag.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIUser.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/models/OAIUser.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/requests/OAIPetApiRequest.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/requests/OAIPetApiRequest.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/requests/OAIStoreApiRequest.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/requests/OAIStoreApiRequest.h (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/requests/OAIUserApiRequest.cpp (100%) rename samples/server/petstore/{cpp-qt5-qhttpengine-server => cpp-qt-qhttpengine-server}/server/src/requests/OAIUserApiRequest.h (100%) diff --git a/bin/configs/cpp-qt5-client.yaml b/bin/configs/cpp-qt-client.yaml similarity index 72% rename from bin/configs/cpp-qt5-client.yaml rename to bin/configs/cpp-qt-client.yaml index dc36141b436b..14f4a2745003 100644 --- a/bin/configs/cpp-qt5-client.yaml +++ b/bin/configs/cpp-qt-client.yaml @@ -1,7 +1,7 @@ -generatorName: cpp-qt5-client -outputDir: samples/client/petstore/cpp-qt5 +generatorName: cpp-qt-client +outputDir: samples/client/petstore/cpp-qt inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml -templateDir: modules/openapi-generator/src/main/resources/cpp-qt5-client +templateDir: modules/openapi-generator/src/main/resources/cpp-qt-client additionalProperties: cppNamespace: test_namespace modelNamePrefix: PFX diff --git a/bin/configs/cpp-qt5-qhttpengine-server.yaml b/bin/configs/cpp-qt-qhttpengine-server.yaml similarity index 52% rename from bin/configs/cpp-qt5-qhttpengine-server.yaml rename to bin/configs/cpp-qt-qhttpengine-server.yaml index 8ead0fe398de..9a03bcbc9511 100644 --- a/bin/configs/cpp-qt5-qhttpengine-server.yaml +++ b/bin/configs/cpp-qt-qhttpengine-server.yaml @@ -1,4 +1,4 @@ -generatorName: cpp-qt5-qhttpengine-server -outputDir: samples/server/petstore/cpp-qt5-qhttpengine-server +generatorName: cpp-qt-qhttpengine-server +outputDir: samples/server/petstore/cpp-qt-qhttpengine-server inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml -templateDir: modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server +templateDir: modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server diff --git a/docs/generators.md b/docs/generators.md index 6cb063b22308..d4e3e5065bc8 100644 --- a/docs/generators.md +++ b/docs/generators.md @@ -12,7 +12,7 @@ The following generators are available: * [bash](generators/bash.md) * [c](generators/c.md) * [clojure](generators/clojure.md) -* [cpp-qt5-client](generators/cpp-qt5-client.md) +* [cpp-qt-client](generators/cpp-qt-client.md) * [cpp-restsdk](generators/cpp-restsdk.md) * [cpp-tizen](generators/cpp-tizen.md) * [cpp-ue4 (beta)](generators/cpp-ue4.md) @@ -80,7 +80,7 @@ The following generators are available: * [ada-server](generators/ada-server.md) * [aspnetcore](generators/aspnetcore.md) * [cpp-pistache-server](generators/cpp-pistache-server.md) -* [cpp-qt5-qhttpengine-server](generators/cpp-qt5-qhttpengine-server.md) +* [cpp-qt-qhttpengine-server](generators/cpp-qt-qhttpengine-server.md) * [cpp-restbed-server](generators/cpp-restbed-server.md) * [csharp-nancyfx](generators/csharp-nancyfx.md) * [erlang-server](generators/erlang-server.md) diff --git a/docs/generators/cpp-qt5-client.md b/docs/generators/cpp-qt-client.md similarity index 99% rename from docs/generators/cpp-qt5-client.md rename to docs/generators/cpp-qt-client.md index ce9e00428f88..0dcbd968233d 100644 --- a/docs/generators/cpp-qt5-client.md +++ b/docs/generators/cpp-qt-client.md @@ -1,6 +1,6 @@ --- -title: Config Options for cpp-qt5-client -sidebar_label: cpp-qt5-client +title: Config Options for cpp-qt-client +sidebar_label: cpp-qt-client --- These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. diff --git a/docs/generators/cpp-qt5-qhttpengine-server.md b/docs/generators/cpp-qt-qhttpengine-server.md similarity index 98% rename from docs/generators/cpp-qt5-qhttpengine-server.md rename to docs/generators/cpp-qt-qhttpengine-server.md index 3467f16775b9..efd57d28d7ad 100644 --- a/docs/generators/cpp-qt5-qhttpengine-server.md +++ b/docs/generators/cpp-qt-qhttpengine-server.md @@ -1,6 +1,6 @@ --- -title: Config Options for cpp-qt5-qhttpengine-server -sidebar_label: cpp-qt5-qhttpengine-server +title: Config Options for cpp-qt-qhttpengine-server +sidebar_label: cpp-qt-qhttpengine-server --- These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5AbstractCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtAbstractCodegen.java similarity index 98% rename from modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5AbstractCodegen.java rename to modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtAbstractCodegen.java index af8323258da5..2dff94f15c36 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5AbstractCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtAbstractCodegen.java @@ -13,8 +13,8 @@ import java.io.File; import java.util.*; -public class CppQt5AbstractCodegen extends AbstractCppCodegen implements CodegenConfig { - private final Logger LOGGER = LoggerFactory.getLogger(CppQt5AbstractCodegen.class); +public class CppQtAbstractCodegen extends AbstractCppCodegen implements CodegenConfig { + private final Logger LOGGER = LoggerFactory.getLogger(CppQtAbstractCodegen.class); protected final String PREFIX = "OAI"; protected String apiVersion = "1.0.0"; protected static final String CPP_NAMESPACE = "cppNamespace"; @@ -29,7 +29,7 @@ public class CppQt5AbstractCodegen extends AbstractCppCodegen implements Codegen protected Set nonFrameworkPrimitives = new HashSet(); - public CppQt5AbstractCodegen() { + public CppQtAbstractCodegen() { super(); modifyFeatureSet(features -> features diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtClientCodegen.java similarity index 89% rename from modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java rename to modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtClientCodegen.java index 00e489ee6ee7..e93ae32541a8 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtClientCodegen.java @@ -29,28 +29,28 @@ import static org.openapitools.codegen.utils.StringUtils.*; -public class CppQt5ClientCodegen extends CppQt5AbstractCodegen implements CodegenConfig { +public class CppQtClientCodegen extends CppQtAbstractCodegen implements CodegenConfig { public static final String OPTIONAL_PROJECT_FILE_DESC = "Generate client.pri."; // source folder where to write the files protected String sourceFolder = "client"; protected boolean optionalProjectFileFlag = true; - public CppQt5ClientCodegen() { + public CppQtClientCodegen() { super(); modifyFeatureSet(features -> features - .includeDocumentationFeatures(DocumentationFeature.Readme) - .includeGlobalFeatures(GlobalFeature.ParameterizedServer) - .includeGlobalFeatures(GlobalFeature.MultiServer) - .includeSecurityFeatures(SecurityFeature.BasicAuth) - .includeSecurityFeatures(SecurityFeature.ApiKey) - .includeSecurityFeatures(SecurityFeature.BearerToken) - .includeGlobalFeatures(GlobalFeature.ParameterStyling) + .includeDocumentationFeatures(DocumentationFeature.Readme) + .includeGlobalFeatures(GlobalFeature.ParameterizedServer) + .includeGlobalFeatures(GlobalFeature.MultiServer) + .includeSecurityFeatures(SecurityFeature.BasicAuth) + .includeSecurityFeatures(SecurityFeature.ApiKey) + .includeSecurityFeatures(SecurityFeature.BearerToken) + .includeGlobalFeatures(GlobalFeature.ParameterStyling) ); // set the output folder here - outputFolder = "generated-code/qt5cpp"; + outputFolder = "generated-code/cpp-qt-client"; /* * Models. You can write model files using the modelTemplateFiles map. @@ -83,7 +83,7 @@ public CppQt5ClientCodegen() { * Template Location. This is the location which templates will be read from. The generator * will use the resource stream to attempt to read the templates. */ - embeddedTemplateDir = templateDir = "cpp-qt5-client"; + embeddedTemplateDir = templateDir = "cpp-qt-client"; addSwitch(CodegenConstants.OPTIONAL_PROJECT_FILE, OPTIONAL_PROJECT_FILE_DESC, this.optionalProjectFileFlag); supportingFiles.add(new SupportingFile("helpers-header.mustache", sourceFolder, PREFIX + "Helpers.h")); @@ -94,9 +94,9 @@ public CppQt5ClientCodegen() { supportingFiles.add(new SupportingFile("HttpFileElement.cpp.mustache", sourceFolder, PREFIX + "HttpFileElement.cpp")); supportingFiles.add(new SupportingFile("object.mustache", sourceFolder, PREFIX + "Object.h")); supportingFiles.add(new SupportingFile("enum.mustache", sourceFolder, PREFIX + "Enum.h")); - supportingFiles.add(new SupportingFile("ServerConfiguration.mustache", sourceFolder, PREFIX +"ServerConfiguration.h")); - supportingFiles.add(new SupportingFile("ServerVariable.mustache", sourceFolder, PREFIX +"ServerVariable.h")); - supportingFiles.add(new SupportingFile("README.mustache", "","README.md")); + supportingFiles.add(new SupportingFile("ServerConfiguration.mustache", sourceFolder, PREFIX + "ServerConfiguration.h")); + supportingFiles.add(new SupportingFile("ServerVariable.mustache", sourceFolder, PREFIX + "ServerVariable.h")); + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("CMakeLists.txt.mustache", sourceFolder, "CMakeLists.txt")); if (optionalProjectFileFlag) { supportingFiles.add(new SupportingFile("Project.mustache", sourceFolder, "client.pri")); @@ -127,7 +127,7 @@ public void processOpts() { supportingFiles.add(new SupportingFile("enum.mustache", sourceFolder, modelNamePrefix + "Enum.h")); supportingFiles.add(new SupportingFile("ServerConfiguration.mustache", sourceFolder, modelNamePrefix + "ServerConfiguration.h")); supportingFiles.add(new SupportingFile("ServerVariable.mustache", sourceFolder, modelNamePrefix + "ServerVariable.h")); - supportingFiles.add(new SupportingFile("README.mustache", "","README.md")); + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("CMakeLists.txt.mustache", sourceFolder, "CMakeLists.txt")); @@ -158,7 +158,7 @@ public CodegenType getTag() { */ @Override public String getName() { - return "cpp-qt5-client"; + return "cpp-qt-client"; } /** @@ -169,7 +169,7 @@ public String getName() { */ @Override public String getHelp() { - return "Generates a Qt5 C++ client library."; + return "Generates a Qt C++ client library."; } /** diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtQHttpEngineServerCodegen.java similarity index 95% rename from modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java rename to modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtQHttpEngineServerCodegen.java index 7c35de11720f..938211f67870 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQtQHttpEngineServerCodegen.java @@ -26,7 +26,7 @@ import static org.openapitools.codegen.utils.StringUtils.camelize; -public class CppQt5QHttpEngineServerCodegen extends CppQt5AbstractCodegen implements CodegenConfig { +public class CppQtQHttpEngineServerCodegen extends CppQtAbstractCodegen implements CodegenConfig { protected final String SRC_DIR = "/src"; protected final String MODEL_DIR = "/src/models"; @@ -36,13 +36,13 @@ public class CppQt5QHttpEngineServerCodegen extends CppQt5AbstractCodegen implem // source folder where to write the files protected String sourceFolder = "server"; - public CppQt5QHttpEngineServerCodegen() { + public CppQtQHttpEngineServerCodegen() { super(); modifyFeatureSet(features -> features.includeDocumentationFeatures(DocumentationFeature.Readme)); // set the output folder here - outputFolder = "generated-code/cpp-qt5-qhttpengine-server"; + outputFolder = "generated-code/cpp-qt-qhttpengine-server"; /* * Models. You can write model files using the modelTemplateFiles map. @@ -83,7 +83,7 @@ public CppQt5QHttpEngineServerCodegen() { * Template Location. This is the location which templates will be read from. The generator * will use the resource stream to attempt to read the templates. */ - embeddedTemplateDir = templateDir = "cpp-qt5-qhttpengine-server"; + embeddedTemplateDir = templateDir = "cpp-qt-qhttpengine-server"; supportingFiles.add(new SupportingFile("helpers-header.mustache", sourceFolder + MODEL_DIR, PREFIX + "Helpers.h")); supportingFiles.add(new SupportingFile("helpers-body.mustache", sourceFolder + MODEL_DIR, PREFIX + "Helpers.cpp")); @@ -154,7 +154,7 @@ public CodegenType getTag() { */ @Override public String getName() { - return "cpp-qt5-qhttpengine-server"; + return "cpp-qt-qhttpengine-server"; } /** @@ -165,7 +165,7 @@ public String getName() { */ @Override public String getHelp() { - return "Generates a Qt5 C++ Server using the QHTTPEngine HTTP Library."; + return "Generates a Qt C++ Server using the QHTTPEngine HTTP Library."; } /** diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig index 4226cade162a..eacec0f51278 100644 --- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig +++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig @@ -11,8 +11,8 @@ org.openapitools.codegen.languages.CrystalClientCodegen org.openapitools.codegen.languages.CLibcurlClientCodegen org.openapitools.codegen.languages.ClojureClientCodegen org.openapitools.codegen.languages.ConfluenceWikiCodegen -org.openapitools.codegen.languages.CppQt5ClientCodegen -org.openapitools.codegen.languages.CppQt5QHttpEngineServerCodegen +org.openapitools.codegen.languages.CppQtClientCodegen +org.openapitools.codegen.languages.CppQtQHttpEngineServerCodegen org.openapitools.codegen.languages.CppPistacheServerCodegen org.openapitools.codegen.languages.CppRestbedServerCodegen org.openapitools.codegen.languages.CppRestSdkClientCodegen diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/CMakeLists.txt.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/CMakeLists.txt.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/CMakeLists.txt.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/CMakeLists.txt.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpFileElement.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/HttpFileElement.cpp.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpFileElement.cpp.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/HttpFileElement.cpp.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpFileElement.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/HttpFileElement.h.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpFileElement.h.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/HttpFileElement.h.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/HttpRequest.cpp.mustache similarity index 99% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.cpp.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/HttpRequest.cpp.mustache index 5eca0f0f0a4b..bf88363b51cf 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.cpp.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt-client/HttpRequest.cpp.mustache @@ -328,7 +328,7 @@ void {{prefix}}HttpRequestWorker::execute({{prefix}}HttpRequestInput *input) { if ({{prefix}}HttpRequestWorker::sslDefaultConfiguration != nullptr) { request.setSslConfiguration(*{{prefix}}HttpRequestWorker::sslDefaultConfiguration); } - request.setRawHeader("User-Agent", "{{#httpUserAgent}}{{.}}{{/httpUserAgent}}{{^httpUserAgent}}OpenAPI-Generator/{{apiVersion}}/cpp-qt5{{/httpUserAgent}}"); + request.setRawHeader("User-Agent", "{{#httpUserAgent}}{{.}}{{/httpUserAgent}}{{^httpUserAgent}}OpenAPI-Generator/{{apiVersion}}/cpp-qt{{/httpUserAgent}}"); foreach (QString key, input->headers.keys()) { request.setRawHeader(key.toStdString().c_str(), input->headers.value(key).toStdString().c_str()); } if (request_content.size() > 0 && !isFormData && (input->var_layout != MULTIPART)) { diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/HttpRequest.h.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.h.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/HttpRequest.h.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/Project.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/Project.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/Project.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/Project.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/README.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/README.mustache similarity index 98% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/README.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/README.mustache index 5f3194575328..9692bf79152c 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/README.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt-client/README.mustache @@ -53,10 +53,10 @@ At first generate the JAR by executing: mvn clean package ``` -Use the Jar file to generate the Qt5 Client: +Use the Jar file to generate the Qt Client: ```shell -java -jar target/openapi-generator-cli.jar generate -i -g cpp-qt5-client -o +java -jar target/openapi-generator-cli.jar generate -i -g cpp-qt-client -o ``` ## Getting Started diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/ServerConfiguration.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/ServerConfiguration.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/ServerConfiguration.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/ServerConfiguration.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/ServerVariable.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/ServerVariable.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/ServerVariable.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/ServerVariable.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/api-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/api-body.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/api-body.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/api-body.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/api-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/api-header.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/api-header.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/api-header.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/enum.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/enum.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/enum.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/enum.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/helpers-body.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-body.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/helpers-body.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/helpers-header.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-header.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/helpers-header.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/licenseInfo.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/licenseInfo.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/licenseInfo.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/licenseInfo.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/model-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/model-body.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/model-body.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/model-body.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/model-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/model-header.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/model-header.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/model-header.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/object.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/object.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-client/object.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-client/object.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/CMakeLists.txt.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/CMakeLists.txt.mustache similarity index 93% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/CMakeLists.txt.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/CMakeLists.txt.mustache index 54e6d36d73fe..71b8bdb45f41 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/CMakeLists.txt.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/CMakeLists.txt.mustache @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.2 FATAL_ERROR) -project(cpp-qt5-qhttpengine-server) +project(cpp-qt-qhttpengine-server) include(ExternalProject) diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/Dockerfile.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/Dockerfile.mustache similarity index 78% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/Dockerfile.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/Dockerfile.mustache index b0c591d10f65..9dfdd9ab4785 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/Dockerfile.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/Dockerfile.mustache @@ -23,7 +23,7 @@ RUN apk add --update \ openssl WORKDIR /usr/server -COPY --from=build /usr/server/build/src/cpp-qt5-qhttpengine-server ./build/src/ +COPY --from=build /usr/server/build/src/cpp-qt-qhttpengine-server ./build/src/ COPY --from=build /usr/server/external/ ./external EXPOSE 8080/tcp -ENTRYPOINT ["/usr/server/build/src/cpp-qt5-qhttpengine-server"] \ No newline at end of file +ENTRYPOINT ["/usr/server/build/src/cpp-qt-qhttpengine-server"] diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/HttpFileElement.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/HttpFileElement.cpp.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/HttpFileElement.cpp.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/HttpFileElement.cpp.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/HttpFileElement.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/HttpFileElement.h.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/HttpFileElement.h.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/HttpFileElement.h.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/LICENSE.txt.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/LICENSE.txt.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/LICENSE.txt.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/LICENSE.txt.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/Makefile.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/Makefile.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/Makefile.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/Makefile.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/README.md.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/README.md.mustache similarity index 89% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/README.md.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/README.md.mustache index e5439dcae3b9..68ec6bf4369a 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/README.md.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/README.md.mustache @@ -1,6 +1,6 @@ -# C++ Qt5 Server +# C++ Qt Server -## Qt5 HTTP Server based on the Qhttpengine +## Qt HTTP Server based on the Qhttpengine This server was generated by the [openapi-generator](https://openapi-generator.tech) project. By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub. @@ -50,18 +50,18 @@ make To run the server ```shell -./build/src/cpp-qt5-qhttpengine-server & +./build/src/cpp-qt-qhttpengine-server & ``` To override the default port via the command line, provide the parameters `port` and `address` like below ```shell -cpp-qt5-qhttpengine-server --port 9080 --address 127.17.0.1 +cpp-qt-qhttpengine-server --port 9080 --address 127.17.0.1 ``` or ```shell -cpp-qt5-qhttpengine-server -p 9080 -a 127.17.0.1 +cpp-qt-qhttpengine-server -p 9080 -a 127.17.0.1 ``` #### Invoke an API @@ -80,13 +80,13 @@ If you dont have docker install [here](https://docs.docker.com/install) Add yourself to the docker group ```shell -docker build --network=host -t cpp-qt5-qhttpengine-server . +docker build --network=host -t cpp-qt-qhttpengine-server . ``` Running with docker ```shell -docker run --rm -it --name=server-container cpp-qt5-qhttpengine-server +docker run --rm -it --name=server-container cpp-qt-qhttpengine-server ``` #### Invoking an API diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apihandler.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apihandler.cpp.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apihandler.cpp.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apihandler.cpp.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apihandler.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apihandler.h.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apihandler.h.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apihandler.h.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apirequest.cpp.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.cpp.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apirequest.cpp.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apirequest.h.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.h.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apirequest.h.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apirouter.cpp.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.cpp.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apirouter.cpp.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apirouter.h.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.h.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/apirouter.h.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/enum.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/enum.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/enum.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/enum.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/helpers-body.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-body.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/helpers-body.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/helpers-header.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-header.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/helpers-header.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/licenseInfo.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/licenseInfo.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/licenseInfo.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/licenseInfo.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/main.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/main.cpp.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/main.cpp.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/main.cpp.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/model-body.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-body.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/model-body.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/model-header.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-header.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/model-header.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/object.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/object.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/object.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/object.mustache diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/src-CMakeLists.txt.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/src-CMakeLists.txt.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/src-CMakeLists.txt.mustache rename to modules/openapi-generator/src/main/resources/cpp-qt-qhttpengine-server/src-CMakeLists.txt.mustache diff --git a/pom.xml b/pom.xml index fd2f7903af4f..f5954bbd850a 100644 --- a/pom.xml +++ b/pom.xml @@ -1201,7 +1201,7 @@ - samples/client/petstore/cpp-qt5 + samples/client/petstore/cpp-qt samples/client/petstore/rust samples/client/petstore/rust/reqwest/petstore samples/client/petstore/rust/reqwest/petstore-async diff --git a/samples/client/petstore/cpp-qt5/.clang-format b/samples/client/petstore/cpp-qt/.clang-format similarity index 100% rename from samples/client/petstore/cpp-qt5/.clang-format rename to samples/client/petstore/cpp-qt/.clang-format diff --git a/samples/client/petstore/cpp-qt5/.gitignore b/samples/client/petstore/cpp-qt/.gitignore similarity index 100% rename from samples/client/petstore/cpp-qt5/.gitignore rename to samples/client/petstore/cpp-qt/.gitignore diff --git a/samples/client/petstore/cpp-qt5/.openapi-generator-ignore b/samples/client/petstore/cpp-qt/.openapi-generator-ignore similarity index 100% rename from samples/client/petstore/cpp-qt5/.openapi-generator-ignore rename to samples/client/petstore/cpp-qt/.openapi-generator-ignore diff --git a/samples/client/petstore/cpp-qt5/.openapi-generator/FILES b/samples/client/petstore/cpp-qt/.openapi-generator/FILES similarity index 100% rename from samples/client/petstore/cpp-qt5/.openapi-generator/FILES rename to samples/client/petstore/cpp-qt/.openapi-generator/FILES diff --git a/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION b/samples/client/petstore/cpp-qt/.openapi-generator/VERSION similarity index 100% rename from samples/client/petstore/cpp-qt5/.openapi-generator/VERSION rename to samples/client/petstore/cpp-qt/.openapi-generator/VERSION diff --git a/samples/client/petstore/cpp-qt5/CMakeLists.txt b/samples/client/petstore/cpp-qt/CMakeLists.txt similarity index 100% rename from samples/client/petstore/cpp-qt5/CMakeLists.txt rename to samples/client/petstore/cpp-qt/CMakeLists.txt diff --git a/samples/client/petstore/cpp-qt5/PetStore/PetApiTests.cpp b/samples/client/petstore/cpp-qt/PetStore/PetApiTests.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/PetStore/PetApiTests.cpp rename to samples/client/petstore/cpp-qt/PetStore/PetApiTests.cpp diff --git a/samples/client/petstore/cpp-qt5/PetStore/PetApiTests.h b/samples/client/petstore/cpp-qt/PetStore/PetApiTests.h similarity index 100% rename from samples/client/petstore/cpp-qt5/PetStore/PetApiTests.h rename to samples/client/petstore/cpp-qt/PetStore/PetApiTests.h diff --git a/samples/client/petstore/cpp-qt5/PetStore/PetStore.pro b/samples/client/petstore/cpp-qt/PetStore/PetStore.pro similarity index 100% rename from samples/client/petstore/cpp-qt5/PetStore/PetStore.pro rename to samples/client/petstore/cpp-qt/PetStore/PetStore.pro diff --git a/samples/client/petstore/cpp-qt5/PetStore/StoreApiTests.cpp b/samples/client/petstore/cpp-qt/PetStore/StoreApiTests.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/PetStore/StoreApiTests.cpp rename to samples/client/petstore/cpp-qt/PetStore/StoreApiTests.cpp diff --git a/samples/client/petstore/cpp-qt5/PetStore/StoreApiTests.h b/samples/client/petstore/cpp-qt/PetStore/StoreApiTests.h similarity index 100% rename from samples/client/petstore/cpp-qt5/PetStore/StoreApiTests.h rename to samples/client/petstore/cpp-qt/PetStore/StoreApiTests.h diff --git a/samples/client/petstore/cpp-qt5/PetStore/UserApiTests.cpp b/samples/client/petstore/cpp-qt/PetStore/UserApiTests.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/PetStore/UserApiTests.cpp rename to samples/client/petstore/cpp-qt/PetStore/UserApiTests.cpp diff --git a/samples/client/petstore/cpp-qt5/PetStore/UserApiTests.h b/samples/client/petstore/cpp-qt/PetStore/UserApiTests.h similarity index 100% rename from samples/client/petstore/cpp-qt5/PetStore/UserApiTests.h rename to samples/client/petstore/cpp-qt/PetStore/UserApiTests.h diff --git a/samples/client/petstore/cpp-qt5/PetStore/main.cpp b/samples/client/petstore/cpp-qt/PetStore/main.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/PetStore/main.cpp rename to samples/client/petstore/cpp-qt/PetStore/main.cpp diff --git a/samples/client/petstore/cpp-qt5/README.md b/samples/client/petstore/cpp-qt/README.md similarity index 98% rename from samples/client/petstore/cpp-qt5/README.md rename to samples/client/petstore/cpp-qt/README.md index f72d21e557df..156bb656f1d7 100644 --- a/samples/client/petstore/cpp-qt5/README.md +++ b/samples/client/petstore/cpp-qt/README.md @@ -46,10 +46,10 @@ At first generate the JAR by executing: mvn clean package ``` -Use the Jar file to generate the Qt5 Client: +Use the Jar file to generate the Qt Client: ```shell -java -jar target/openapi-generator-cli.jar generate -i -g cpp-qt5-client -o +java -jar target/openapi-generator-cli.jar generate -i -g cpp-qt-client -o ``` ## Getting Started diff --git a/samples/client/petstore/cpp-qt5/build-and-test.bash b/samples/client/petstore/cpp-qt/build-and-test.bash similarity index 100% rename from samples/client/petstore/cpp-qt5/build-and-test.bash rename to samples/client/petstore/cpp-qt/build-and-test.bash diff --git a/samples/client/petstore/cpp-qt5/client/CMakeLists.txt b/samples/client/petstore/cpp-qt/client/CMakeLists.txt similarity index 100% rename from samples/client/petstore/cpp-qt5/client/CMakeLists.txt rename to samples/client/petstore/cpp-qt/client/CMakeLists.txt diff --git a/samples/client/petstore/cpp-qt5/client/PFXApiResponse.cpp b/samples/client/petstore/cpp-qt/client/PFXApiResponse.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXApiResponse.cpp rename to samples/client/petstore/cpp-qt/client/PFXApiResponse.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXApiResponse.h b/samples/client/petstore/cpp-qt/client/PFXApiResponse.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXApiResponse.h rename to samples/client/petstore/cpp-qt/client/PFXApiResponse.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXCategory.cpp b/samples/client/petstore/cpp-qt/client/PFXCategory.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXCategory.cpp rename to samples/client/petstore/cpp-qt/client/PFXCategory.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXCategory.h b/samples/client/petstore/cpp-qt/client/PFXCategory.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXCategory.h rename to samples/client/petstore/cpp-qt/client/PFXCategory.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXEnum.h b/samples/client/petstore/cpp-qt/client/PFXEnum.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXEnum.h rename to samples/client/petstore/cpp-qt/client/PFXEnum.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXHelpers.cpp b/samples/client/petstore/cpp-qt/client/PFXHelpers.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXHelpers.cpp rename to samples/client/petstore/cpp-qt/client/PFXHelpers.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXHelpers.h b/samples/client/petstore/cpp-qt/client/PFXHelpers.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXHelpers.h rename to samples/client/petstore/cpp-qt/client/PFXHelpers.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXHttpFileElement.cpp b/samples/client/petstore/cpp-qt/client/PFXHttpFileElement.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXHttpFileElement.cpp rename to samples/client/petstore/cpp-qt/client/PFXHttpFileElement.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXHttpFileElement.h b/samples/client/petstore/cpp-qt/client/PFXHttpFileElement.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXHttpFileElement.h rename to samples/client/petstore/cpp-qt/client/PFXHttpFileElement.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXHttpRequest.cpp b/samples/client/petstore/cpp-qt/client/PFXHttpRequest.cpp similarity index 99% rename from samples/client/petstore/cpp-qt5/client/PFXHttpRequest.cpp rename to samples/client/petstore/cpp-qt/client/PFXHttpRequest.cpp index ec16ac8e9166..b05c2c19219a 100644 --- a/samples/client/petstore/cpp-qt5/client/PFXHttpRequest.cpp +++ b/samples/client/petstore/cpp-qt/client/PFXHttpRequest.cpp @@ -335,7 +335,7 @@ void PFXHttpRequestWorker::execute(PFXHttpRequestInput *input) { if (PFXHttpRequestWorker::sslDefaultConfiguration != nullptr) { request.setSslConfiguration(*PFXHttpRequestWorker::sslDefaultConfiguration); } - request.setRawHeader("User-Agent", "OpenAPI-Generator/1.0.0/cpp-qt5"); + request.setRawHeader("User-Agent", "OpenAPI-Generator/1.0.0/cpp-qt"); foreach (QString key, input->headers.keys()) { request.setRawHeader(key.toStdString().c_str(), input->headers.value(key).toStdString().c_str()); } if (request_content.size() > 0 && !isFormData && (input->var_layout != MULTIPART)) { diff --git a/samples/client/petstore/cpp-qt5/client/PFXHttpRequest.h b/samples/client/petstore/cpp-qt/client/PFXHttpRequest.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXHttpRequest.h rename to samples/client/petstore/cpp-qt/client/PFXHttpRequest.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXObject.h b/samples/client/petstore/cpp-qt/client/PFXObject.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXObject.h rename to samples/client/petstore/cpp-qt/client/PFXObject.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXOrder.cpp b/samples/client/petstore/cpp-qt/client/PFXOrder.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXOrder.cpp rename to samples/client/petstore/cpp-qt/client/PFXOrder.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXOrder.h b/samples/client/petstore/cpp-qt/client/PFXOrder.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXOrder.h rename to samples/client/petstore/cpp-qt/client/PFXOrder.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXPet.cpp b/samples/client/petstore/cpp-qt/client/PFXPet.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXPet.cpp rename to samples/client/petstore/cpp-qt/client/PFXPet.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXPet.h b/samples/client/petstore/cpp-qt/client/PFXPet.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXPet.h rename to samples/client/petstore/cpp-qt/client/PFXPet.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXPetApi.cpp b/samples/client/petstore/cpp-qt/client/PFXPetApi.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXPetApi.cpp rename to samples/client/petstore/cpp-qt/client/PFXPetApi.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXPetApi.h b/samples/client/petstore/cpp-qt/client/PFXPetApi.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXPetApi.h rename to samples/client/petstore/cpp-qt/client/PFXPetApi.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXServerConfiguration.h b/samples/client/petstore/cpp-qt/client/PFXServerConfiguration.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXServerConfiguration.h rename to samples/client/petstore/cpp-qt/client/PFXServerConfiguration.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXServerVariable.h b/samples/client/petstore/cpp-qt/client/PFXServerVariable.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXServerVariable.h rename to samples/client/petstore/cpp-qt/client/PFXServerVariable.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXStoreApi.cpp b/samples/client/petstore/cpp-qt/client/PFXStoreApi.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXStoreApi.cpp rename to samples/client/petstore/cpp-qt/client/PFXStoreApi.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXStoreApi.h b/samples/client/petstore/cpp-qt/client/PFXStoreApi.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXStoreApi.h rename to samples/client/petstore/cpp-qt/client/PFXStoreApi.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXTag.cpp b/samples/client/petstore/cpp-qt/client/PFXTag.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXTag.cpp rename to samples/client/petstore/cpp-qt/client/PFXTag.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXTag.h b/samples/client/petstore/cpp-qt/client/PFXTag.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXTag.h rename to samples/client/petstore/cpp-qt/client/PFXTag.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXUser.cpp b/samples/client/petstore/cpp-qt/client/PFXUser.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXUser.cpp rename to samples/client/petstore/cpp-qt/client/PFXUser.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXUser.h b/samples/client/petstore/cpp-qt/client/PFXUser.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXUser.h rename to samples/client/petstore/cpp-qt/client/PFXUser.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXUserApi.cpp b/samples/client/petstore/cpp-qt/client/PFXUserApi.cpp similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXUserApi.cpp rename to samples/client/petstore/cpp-qt/client/PFXUserApi.cpp diff --git a/samples/client/petstore/cpp-qt5/client/PFXUserApi.h b/samples/client/petstore/cpp-qt/client/PFXUserApi.h similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXUserApi.h rename to samples/client/petstore/cpp-qt/client/PFXUserApi.h diff --git a/samples/client/petstore/cpp-qt5/client/PFXclient.pri b/samples/client/petstore/cpp-qt/client/PFXclient.pri similarity index 100% rename from samples/client/petstore/cpp-qt5/client/PFXclient.pri rename to samples/client/petstore/cpp-qt/client/PFXclient.pri diff --git a/samples/client/petstore/cpp-qt5/pom.xml b/samples/client/petstore/cpp-qt/pom.xml similarity index 100% rename from samples/client/petstore/cpp-qt5/pom.xml rename to samples/client/petstore/cpp-qt/pom.xml diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator-ignore b/samples/server/petstore/cpp-qt-qhttpengine-server/.openapi-generator-ignore similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator-ignore rename to samples/server/petstore/cpp-qt-qhttpengine-server/.openapi-generator-ignore diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/FILES b/samples/server/petstore/cpp-qt-qhttpengine-server/.openapi-generator/FILES similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/FILES rename to samples/server/petstore/cpp-qt-qhttpengine-server/.openapi-generator/FILES diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/VERSION b/samples/server/petstore/cpp-qt-qhttpengine-server/.openapi-generator/VERSION similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/.openapi-generator/VERSION rename to samples/server/petstore/cpp-qt-qhttpengine-server/.openapi-generator/VERSION diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/CMakeLists.txt b/samples/server/petstore/cpp-qt-qhttpengine-server/server/CMakeLists.txt similarity index 93% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/CMakeLists.txt rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/CMakeLists.txt index 54e6d36d73fe..71b8bdb45f41 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/CMakeLists.txt +++ b/samples/server/petstore/cpp-qt-qhttpengine-server/server/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.2 FATAL_ERROR) -project(cpp-qt5-qhttpengine-server) +project(cpp-qt-qhttpengine-server) include(ExternalProject) diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/Dockerfile b/samples/server/petstore/cpp-qt-qhttpengine-server/server/Dockerfile similarity index 78% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/Dockerfile rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/Dockerfile index b0c591d10f65..9dfdd9ab4785 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/Dockerfile +++ b/samples/server/petstore/cpp-qt-qhttpengine-server/server/Dockerfile @@ -23,7 +23,7 @@ RUN apk add --update \ openssl WORKDIR /usr/server -COPY --from=build /usr/server/build/src/cpp-qt5-qhttpengine-server ./build/src/ +COPY --from=build /usr/server/build/src/cpp-qt-qhttpengine-server ./build/src/ COPY --from=build /usr/server/external/ ./external EXPOSE 8080/tcp -ENTRYPOINT ["/usr/server/build/src/cpp-qt5-qhttpengine-server"] \ No newline at end of file +ENTRYPOINT ["/usr/server/build/src/cpp-qt-qhttpengine-server"] diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/LICENSE.txt b/samples/server/petstore/cpp-qt-qhttpengine-server/server/LICENSE.txt similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/LICENSE.txt rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/LICENSE.txt diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/Makefile b/samples/server/petstore/cpp-qt-qhttpengine-server/server/Makefile similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/Makefile rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/Makefile diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/README.MD b/samples/server/petstore/cpp-qt-qhttpengine-server/server/README.MD similarity index 88% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/README.MD rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/README.MD index 5225ebb24fd9..8158062ef703 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/README.MD +++ b/samples/server/petstore/cpp-qt-qhttpengine-server/server/README.MD @@ -1,6 +1,6 @@ -# C++ Qt5 Server +# C++ Qt Server -## Qt5 HTTP Server based on the Qhttpengine +## Qt HTTP Server based on the Qhttpengine This server was generated by the [openapi-generator](https://openapi-generator.tech) project. By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub. @@ -46,18 +46,18 @@ make To run the server ```shell -./build/src/cpp-qt5-qhttpengine-server & +./build/src/cpp-qt-qhttpengine-server & ``` To override the default port via the command line, provide the parameters `port` and `address` like below ```shell -cpp-qt5-qhttpengine-server --port 9080 --address 127.17.0.1 +cpp-qt-qhttpengine-server --port 9080 --address 127.17.0.1 ``` or ```shell -cpp-qt5-qhttpengine-server -p 9080 -a 127.17.0.1 +cpp-qt-qhttpengine-server -p 9080 -a 127.17.0.1 ``` #### Invoke an API @@ -76,13 +76,13 @@ If you dont have docker install [here](https://docs.docker.com/install) Add yourself to the docker group ```shell -docker build --network=host -t cpp-qt5-qhttpengine-server . +docker build --network=host -t cpp-qt-qhttpengine-server . ``` Running with docker ```shell -docker run --rm -it --name=server-container cpp-qt5-qhttpengine-server +docker run --rm -it --name=server-container cpp-qt-qhttpengine-server ``` #### Invoking an API diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/CMakeLists.txt b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/CMakeLists.txt similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/CMakeLists.txt rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/CMakeLists.txt diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIApiRouter.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIApiRouter.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIApiRouter.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIApiRouter.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIPetApiHandler.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIPetApiHandler.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIPetApiHandler.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIPetApiHandler.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIStoreApiHandler.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIStoreApiHandler.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIStoreApiHandler.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIStoreApiHandler.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIStoreApiHandler.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIStoreApiHandler.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIStoreApiHandler.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIStoreApiHandler.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIUserApiHandler.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIUserApiHandler.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIUserApiHandler.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIUserApiHandler.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIUserApiHandler.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIUserApiHandler.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIUserApiHandler.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/handlers/OAIUserApiHandler.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/main.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/main.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/main.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/main.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIApiResponse.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIApiResponse.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIApiResponse.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIApiResponse.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAICategory.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAICategory.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAICategory.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAICategory.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIEnum.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIEnum.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIEnum.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIEnum.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIHelpers.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIHelpers.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIHelpers.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIHelpers.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHttpFileElement.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIHttpFileElement.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHttpFileElement.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIHttpFileElement.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHttpFileElement.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIHttpFileElement.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHttpFileElement.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIHttpFileElement.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIObject.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIObject.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIObject.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIObject.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIOrder.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIOrder.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIOrder.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIOrder.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIPet.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIPet.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIPet.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIPet.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAITag.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAITag.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAITag.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAITag.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIUser.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIUser.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIUser.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/models/OAIUser.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIPetApiRequest.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIPetApiRequest.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIStoreApiRequest.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIStoreApiRequest.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIStoreApiRequest.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIStoreApiRequest.h diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.cpp b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIUserApiRequest.cpp similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.cpp rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIUserApiRequest.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.h b/samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIUserApiRequest.h similarity index 100% rename from samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.h rename to samples/server/petstore/cpp-qt-qhttpengine-server/server/src/requests/OAIUserApiRequest.h From 6b5794df9d90d8fba02cfadc3c4540d8662d3365 Mon Sep 17 00:00:00 2001 From: Dennis Melzer Date: Tue, 18 May 2021 17:17:57 +0200 Subject: [PATCH 126/186] Fix bean validation for type Optional (#8708) * Fix bean validation for type Optional #8690 * Revert path params --- .../resources/JavaSpring/beanValidationQueryParams.mustache | 2 +- .../src/main/resources/JavaSpring/optionalDataType.mustache | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/beanValidationQueryParams.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/beanValidationQueryParams.mustache index 9cca8cb88748..a2f19f77468c 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/beanValidationQueryParams.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/beanValidationQueryParams.mustache @@ -1 +1 @@ -{{#required}}@NotNull {{/required}}{{>beanValidationCore}} \ No newline at end of file +{{#required}}@NotNull {{/required}}{{^useOptional}}{{>beanValidationCore}}{{/useOptional}}{{#useOptional}}{{#required}}{{>beanValidationCore}}{{/required}}{{/useOptional}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/optionalDataType.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/optionalDataType.mustache index 976950e27e88..84505f8fc299 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/optionalDataType.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/optionalDataType.mustache @@ -1 +1 @@ -{{#useOptional}}{{#required}}{{{dataType}}}{{/required}}{{^required}}Optional<{{{dataType}}}>{{/required}}{{/useOptional}}{{^useOptional}}{{{dataType}}}{{/useOptional}} \ No newline at end of file +{{#useOptional}}{{#required}}{{{dataType}}}{{/required}}{{^required}}Optional<{{#useBeanValidation}}{{>beanValidationCore}}{{/useBeanValidation}}{{{dataType}}}>{{/required}}{{/useOptional}}{{^useOptional}}{{{dataType}}}{{/useOptional}} \ No newline at end of file From f48311dac4738716ec808c6544971d3fdb765f35 Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Tue, 18 May 2021 16:47:26 +0100 Subject: [PATCH 127/186] [swift5][client] make AnyCodable optional (#9479) * [swift5][client] make AnyCodable usage optional * [swift5][client] update sample projects --- .../src/main/resources/swift5/Extensions.mustache | 8 ++++++-- .../src/main/resources/swift5/XcodeGen.mustache | 4 ++-- .../src/main/resources/swift5/model.mustache | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../OpenAPIs/Models/AdditionalPropertiesClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Animal.swift | 2 ++ .../Classes/OpenAPIs/Models/AnimalFarm.swift | 2 ++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayTest.swift | 2 ++ .../Classes/OpenAPIs/Models/Capitalization.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Cat.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../Classes/OpenAPIs/Models/ClassModel.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Client.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Dog.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/File.swift | 2 ++ .../Classes/OpenAPIs/Models/FileSchemaTestClass.swift | 2 ++ .../Classes/OpenAPIs/Models/FormatTest.swift | 2 ++ .../Classes/OpenAPIs/Models/HasOnlyReadOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/List.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Classes/OpenAPIs/Models/Model200Response.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Name.swift | 2 ++ .../Classes/OpenAPIs/Models/NumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterComposite.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterEnum.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../Classes/OpenAPIs/Models/ReadOnlyFirst.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Return.swift | 2 ++ .../Classes/OpenAPIs/Models/SpecialModelName.swift | 2 ++ .../Classes/OpenAPIs/Models/StringBooleanMap.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderDefault.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderExample.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ .../client/petstore/swift5/alamofireLibrary/project.yml | 2 +- .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../OpenAPIs/Models/AdditionalPropertiesClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Animal.swift | 2 ++ .../Classes/OpenAPIs/Models/AnimalFarm.swift | 2 ++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayTest.swift | 2 ++ .../Classes/OpenAPIs/Models/Capitalization.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Cat.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../Classes/OpenAPIs/Models/ClassModel.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Client.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Dog.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/File.swift | 2 ++ .../Classes/OpenAPIs/Models/FileSchemaTestClass.swift | 2 ++ .../Classes/OpenAPIs/Models/FormatTest.swift | 2 ++ .../Classes/OpenAPIs/Models/HasOnlyReadOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/List.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Classes/OpenAPIs/Models/Model200Response.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Name.swift | 2 ++ .../Classes/OpenAPIs/Models/NumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterComposite.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterEnum.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../Classes/OpenAPIs/Models/ReadOnlyFirst.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Return.swift | 2 ++ .../Classes/OpenAPIs/Models/SpecialModelName.swift | 2 ++ .../Classes/OpenAPIs/Models/StringBooleanMap.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderDefault.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderExample.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ samples/client/petstore/swift5/combineLibrary/project.yml | 2 +- .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../OpenAPIs/Models/AdditionalPropertiesAnyType.swift | 2 ++ .../OpenAPIs/Models/AdditionalPropertiesArray.swift | 2 ++ .../OpenAPIs/Models/AdditionalPropertiesBoolean.swift | 2 ++ .../OpenAPIs/Models/AdditionalPropertiesClass.swift | 2 ++ .../OpenAPIs/Models/AdditionalPropertiesInteger.swift | 2 ++ .../OpenAPIs/Models/AdditionalPropertiesNumber.swift | 2 ++ .../OpenAPIs/Models/AdditionalPropertiesObject.swift | 2 ++ .../OpenAPIs/Models/AdditionalPropertiesString.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Animal.swift | 2 ++ .../Classes/OpenAPIs/Models/AnimalFarm.swift | 2 ++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift | 2 ++ .../Classes/OpenAPIs/Models/BigCatAllOf.swift | 2 ++ .../Classes/OpenAPIs/Models/Capitalization.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Cat.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../Classes/OpenAPIs/Models/ClassModel.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Client.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Dog.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/File.swift | 2 ++ .../Classes/OpenAPIs/Models/FileSchemaTestClass.swift | 2 ++ .../Classes/OpenAPIs/Models/FormatTest.swift | 2 ++ .../Classes/OpenAPIs/Models/HasOnlyReadOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/List.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Classes/OpenAPIs/Models/Model200Response.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Name.swift | 2 ++ .../Classes/OpenAPIs/Models/NumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterComposite.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterEnum.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../Classes/OpenAPIs/Models/ReadOnlyFirst.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Return.swift | 2 ++ .../Classes/OpenAPIs/Models/SpecialModelName.swift | 2 ++ .../Classes/OpenAPIs/Models/StringBooleanMap.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderDefault.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderExample.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift | 2 ++ samples/client/petstore/swift5/default/project.yml | 2 +- .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ samples/client/petstore/swift5/deprecated/project.yml | 2 +- .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../OpenAPIs/Models/AdditionalPropertiesClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Animal.swift | 2 ++ .../Classes/OpenAPIs/Models/AnimalFarm.swift | 2 ++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayTest.swift | 2 ++ .../Classes/OpenAPIs/Models/Capitalization.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Cat.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../Classes/OpenAPIs/Models/ClassModel.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Client.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Dog.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/File.swift | 2 ++ .../Classes/OpenAPIs/Models/FileSchemaTestClass.swift | 2 ++ .../Classes/OpenAPIs/Models/FormatTest.swift | 2 ++ .../Classes/OpenAPIs/Models/HasOnlyReadOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/List.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Classes/OpenAPIs/Models/Model200Response.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Name.swift | 2 ++ .../Classes/OpenAPIs/Models/NumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterComposite.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterEnum.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../Classes/OpenAPIs/Models/ReadOnlyFirst.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Return.swift | 2 ++ .../Classes/OpenAPIs/Models/SpecialModelName.swift | 2 ++ .../Classes/OpenAPIs/Models/StringBooleanMap.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderDefault.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderExample.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ samples/client/petstore/swift5/nonPublicApi/project.yml | 2 +- .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../OpenAPIs/Models/AdditionalPropertiesClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Animal.swift | 2 ++ .../Classes/OpenAPIs/Models/AnimalFarm.swift | 2 ++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayTest.swift | 2 ++ .../Classes/OpenAPIs/Models/Capitalization.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Cat.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../Classes/OpenAPIs/Models/ClassModel.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Client.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Dog.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/File.swift | 2 ++ .../Classes/OpenAPIs/Models/FileSchemaTestClass.swift | 2 ++ .../Classes/OpenAPIs/Models/FormatTest.swift | 2 ++ .../Classes/OpenAPIs/Models/HasOnlyReadOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/List.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Classes/OpenAPIs/Models/Model200Response.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Name.swift | 2 ++ .../Classes/OpenAPIs/Models/NumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterComposite.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterEnum.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../Classes/OpenAPIs/Models/ReadOnlyFirst.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Return.swift | 2 ++ .../Classes/OpenAPIs/Models/SpecialModelName.swift | 2 ++ .../Classes/OpenAPIs/Models/StringBooleanMap.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderDefault.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderExample.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ samples/client/petstore/swift5/objcCompatible/project.yml | 2 +- .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../OpenAPIs/Models/AdditionalPropertiesClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Animal.swift | 2 ++ .../Classes/OpenAPIs/Models/AnimalFarm.swift | 2 ++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayTest.swift | 2 ++ .../Classes/OpenAPIs/Models/Capitalization.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Cat.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../Classes/OpenAPIs/Models/ClassModel.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Client.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Dog.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/File.swift | 2 ++ .../Classes/OpenAPIs/Models/FileSchemaTestClass.swift | 2 ++ .../Classes/OpenAPIs/Models/FormatTest.swift | 2 ++ .../Classes/OpenAPIs/Models/HasOnlyReadOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/List.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Classes/OpenAPIs/Models/Model200Response.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Name.swift | 2 ++ .../Classes/OpenAPIs/Models/NumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterComposite.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterEnum.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../Classes/OpenAPIs/Models/ReadOnlyFirst.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Return.swift | 2 ++ .../Classes/OpenAPIs/Models/SpecialModelName.swift | 2 ++ .../Classes/OpenAPIs/Models/StringBooleanMap.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderDefault.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderExample.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ .../client/petstore/swift5/promisekitLibrary/project.yml | 2 +- .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../OpenAPIs/Models/AdditionalPropertiesClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Animal.swift | 2 ++ .../Classes/OpenAPIs/Models/AnimalFarm.swift | 2 ++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayTest.swift | 2 ++ .../Classes/OpenAPIs/Models/Capitalization.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Cat.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../Classes/OpenAPIs/Models/ClassModel.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Client.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Dog.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/File.swift | 2 ++ .../Classes/OpenAPIs/Models/FileSchemaTestClass.swift | 2 ++ .../Classes/OpenAPIs/Models/FormatTest.swift | 2 ++ .../Classes/OpenAPIs/Models/HasOnlyReadOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/List.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Classes/OpenAPIs/Models/Model200Response.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Name.swift | 2 ++ .../Classes/OpenAPIs/Models/NumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterComposite.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterEnum.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../Classes/OpenAPIs/Models/ReadOnlyFirst.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Return.swift | 2 ++ .../Classes/OpenAPIs/Models/SpecialModelName.swift | 2 ++ .../Classes/OpenAPIs/Models/StringBooleanMap.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderDefault.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderExample.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ .../client/petstore/swift5/readonlyProperties/project.yml | 2 +- .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../OpenAPIs/Models/AdditionalPropertiesClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Animal.swift | 2 ++ .../Classes/OpenAPIs/Models/AnimalFarm.swift | 2 ++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayTest.swift | 2 ++ .../Classes/OpenAPIs/Models/Capitalization.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Cat.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../Classes/OpenAPIs/Models/ClassModel.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Client.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Dog.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/File.swift | 2 ++ .../Classes/OpenAPIs/Models/FileSchemaTestClass.swift | 2 ++ .../Classes/OpenAPIs/Models/FormatTest.swift | 2 ++ .../Classes/OpenAPIs/Models/HasOnlyReadOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/List.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Classes/OpenAPIs/Models/Model200Response.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Name.swift | 2 ++ .../Classes/OpenAPIs/Models/NumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterComposite.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterEnum.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../Classes/OpenAPIs/Models/ReadOnlyFirst.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Return.swift | 2 ++ .../Classes/OpenAPIs/Models/SpecialModelName.swift | 2 ++ .../Classes/OpenAPIs/Models/StringBooleanMap.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderDefault.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderExample.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ samples/client/petstore/swift5/resultLibrary/project.yml | 2 +- .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../OpenAPIs/Models/AdditionalPropertiesClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Animal.swift | 2 ++ .../Classes/OpenAPIs/Models/AnimalFarm.swift | 2 ++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayTest.swift | 2 ++ .../Classes/OpenAPIs/Models/Capitalization.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Cat.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../Classes/OpenAPIs/Models/ClassModel.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Client.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Dog.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumArrays.swift | 2 ++ .../Classes/OpenAPIs/Models/EnumClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/File.swift | 2 ++ .../Classes/OpenAPIs/Models/FileSchemaTestClass.swift | 2 ++ .../Classes/OpenAPIs/Models/FormatTest.swift | 2 ++ .../Classes/OpenAPIs/Models/HasOnlyReadOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/List.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Classes/OpenAPIs/Models/Model200Response.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Name.swift | 2 ++ .../Classes/OpenAPIs/Models/NumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterComposite.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterEnum.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../Classes/OpenAPIs/Models/ReadOnlyFirst.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Return.swift | 2 ++ .../Classes/OpenAPIs/Models/SpecialModelName.swift | 2 ++ .../Classes/OpenAPIs/Models/StringBooleanMap.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderDefault.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderExample.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ samples/client/petstore/swift5/rxswiftLibrary/project.yml | 2 +- .../Sources/PetstoreClient/Extensions.swift | 6 +++++- .../PetstoreClient/Models/AdditionalPropertiesClass.swift | 2 ++ .../Sources/PetstoreClient/Models/Animal.swift | 2 ++ .../Sources/PetstoreClient/Models/AnimalFarm.swift | 2 ++ .../Sources/PetstoreClient/Models/ApiResponse.swift | 2 ++ .../PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift | 2 ++ .../Sources/PetstoreClient/Models/ArrayTest.swift | 2 ++ .../Sources/PetstoreClient/Models/Capitalization.swift | 2 ++ .../Sources/PetstoreClient/Models/Cat.swift | 2 ++ .../Sources/PetstoreClient/Models/CatAllOf.swift | 2 ++ .../Sources/PetstoreClient/Models/Category.swift | 2 ++ .../Sources/PetstoreClient/Models/ClassModel.swift | 2 ++ .../Sources/PetstoreClient/Models/Client.swift | 2 ++ .../Sources/PetstoreClient/Models/Dog.swift | 2 ++ .../Sources/PetstoreClient/Models/DogAllOf.swift | 2 ++ .../Sources/PetstoreClient/Models/EnumArrays.swift | 2 ++ .../Sources/PetstoreClient/Models/EnumClass.swift | 2 ++ .../Sources/PetstoreClient/Models/EnumTest.swift | 2 ++ .../Sources/PetstoreClient/Models/File.swift | 2 ++ .../PetstoreClient/Models/FileSchemaTestClass.swift | 2 ++ .../Sources/PetstoreClient/Models/FormatTest.swift | 2 ++ .../Sources/PetstoreClient/Models/HasOnlyReadOnly.swift | 2 ++ .../Sources/PetstoreClient/Models/List.swift | 2 ++ .../Sources/PetstoreClient/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Sources/PetstoreClient/Models/Model200Response.swift | 2 ++ .../Sources/PetstoreClient/Models/Name.swift | 2 ++ .../Sources/PetstoreClient/Models/NumberOnly.swift | 2 ++ .../Sources/PetstoreClient/Models/Order.swift | 2 ++ .../Sources/PetstoreClient/Models/OuterComposite.swift | 2 ++ .../Sources/PetstoreClient/Models/OuterEnum.swift | 2 ++ .../Sources/PetstoreClient/Models/Pet.swift | 2 ++ .../Sources/PetstoreClient/Models/ReadOnlyFirst.swift | 2 ++ .../Sources/PetstoreClient/Models/Return.swift | 2 ++ .../Sources/PetstoreClient/Models/SpecialModelName.swift | 2 ++ .../Sources/PetstoreClient/Models/StringBooleanMap.swift | 2 ++ .../Sources/PetstoreClient/Models/Tag.swift | 2 ++ .../Sources/PetstoreClient/Models/TypeHolderDefault.swift | 2 ++ .../Sources/PetstoreClient/Models/TypeHolderExample.swift | 2 ++ .../Sources/PetstoreClient/Models/User.swift | 2 ++ .../client/petstore/swift5/urlsessionLibrary/project.yml | 2 +- 441 files changed, 908 insertions(+), 26 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache b/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache index 7a7ec22715ca..e3b069f432c2 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache @@ -5,7 +5,9 @@ // import Foundation -import AnyCodable{{#usePromiseKit}} +#if canImport(AnyCodable) +import AnyCodable +#endif{{#usePromiseKit}} import PromiseKit{{/usePromiseKit}} extension Bool: JSONEncodable { @@ -201,6 +203,7 @@ extension RequestBuilder { } }{{/usePromiseKit}} +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -240,4 +243,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache b/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache index 54fbb33d468d..aed8dcb76b2d 100644 --- a/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/XcodeGen.mustache @@ -11,8 +11,8 @@ targets: settings: APPLICATION_EXTENSION_API_ONLY: true scheme: {} - {{#useAlamofire}}dependencies:{{/useAlamofire}}{{^useAlamofire}}{{#useRxSwift}}dependencies:{{/useRxSwift}}{{/useAlamofire}}{{^useAlamofire}}{{^useRxSwift}}{{#usePromiseKit}}dependencies:{{/usePromiseKit}}{{/useRxSwift}}{{/useAlamofire}}{{#useAlamofire}} + dependencies: + - carthage: AnyCodable{{#useAlamofire}} - carthage: Alamofire{{/useAlamofire}}{{#useRxSwift}} - carthage: RxSwift{{/useRxSwift}}{{#usePromiseKit}} - carthage: PromiseKit{{/usePromiseKit}} - - carthage: AnyCodable diff --git a/modules/openapi-generator/src/main/resources/swift5/model.mustache b/modules/openapi-generator/src/main/resources/swift5/model.mustache index 7ea71a27f231..07c2565c3133 100644 --- a/modules/openapi-generator/src/main/resources/swift5/model.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/model.mustache @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif {{#description}} /** {{description}} */{{/description}}{{#isDeprecated}} diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 3aef2d1d6c54..11e807937bdc 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -185,6 +187,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -224,4 +227,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 23c4af6d4ff6..61a478de142b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index a422ee73b556..157cca1d227b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index b20b894a1adb..a0b09cb97615 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 7f7c6a34bdf5..8607cbef1a33 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 0221229e7dd2..f3f161b44c1c 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index b5c7ca501e73..d62de957472a 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 9074d9ab4aae..360d50d027f1 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index f0ca1a76f273..f0781a9cb738 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 89aaea45b910..d5519760387a 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c80f7549e692..8312680deb37 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 0def88b1fc8c..398da60aa73b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 90e4986e7f6b..03bf63e4cad1 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 4e0318069017..596048780439 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 2387b3e7b2cf..4ada3ceb605a 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4317578cee4c..f6c3d287301d 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 01b8960fe34b..0e0aad42abe6 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index ab01cf297f8e..6ea2895aee53 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 9c8e2e9ac842..9e44926be9b8 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 2a9c769ca6ce..11694b2ca59b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cd8a9a0e9fef..6aa85d8eecf9 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 11493f7ce28a..114c884efc5e 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index b7a1449830a4..cb1a7456a7df 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 8d484cf0a334..8ecdd3b02339 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 4b56880fed68..0ff74ed8400e 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index f07f8132af76..58a0a54ca090 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index dc99e8cb8ddf..0f59769954f1 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index d9f893c86ba0..d88c94f05c95 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 8c1ad5ddd4b3..0f05482b9b7c 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index c474a6e657b3..100d6b71fed4 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index cdaad279b0f1..15a4e4a15b6e 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index 9bd6f3bef8f6..76c34b3c2ce6 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index ea9ece39161f..a87ab825ea0b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index d08a673dbf4f..6426deedf637 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index d34dc71ec37e..777c241bc0c0 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index e0e0ea6ae297..b677523a7491 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 8fb1b40e5eea..d3b2bda9b779 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 5d90c8a74009..cd5acc827db7 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e6e6530dc510..341c9b4b8c2e 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 17c811b2edcd..04166af0895f 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f93cecfc5d00..9f3ded8fcd93 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/alamofireLibrary/project.yml b/samples/client/petstore/swift5/alamofireLibrary/project.yml index 148e2487eae3..29a682f44780 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/project.yml +++ b/samples/client/petstore/swift5/alamofireLibrary/project.yml @@ -12,5 +12,5 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} dependencies: - - carthage: Alamofire - carthage: AnyCodable + - carthage: Alamofire diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 3aef2d1d6c54..11e807937bdc 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -185,6 +187,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -224,4 +227,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 23c4af6d4ff6..61a478de142b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index a422ee73b556..157cca1d227b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index b20b894a1adb..a0b09cb97615 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 7f7c6a34bdf5..8607cbef1a33 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 0221229e7dd2..f3f161b44c1c 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index b5c7ca501e73..d62de957472a 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 9074d9ab4aae..360d50d027f1 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index f0ca1a76f273..f0781a9cb738 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 89aaea45b910..d5519760387a 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c80f7549e692..8312680deb37 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 0def88b1fc8c..398da60aa73b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 90e4986e7f6b..03bf63e4cad1 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 4e0318069017..596048780439 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 2387b3e7b2cf..4ada3ceb605a 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4317578cee4c..f6c3d287301d 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 01b8960fe34b..0e0aad42abe6 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index ab01cf297f8e..6ea2895aee53 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 9c8e2e9ac842..9e44926be9b8 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 2a9c769ca6ce..11694b2ca59b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cd8a9a0e9fef..6aa85d8eecf9 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 11493f7ce28a..114c884efc5e 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index b7a1449830a4..cb1a7456a7df 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 8d484cf0a334..8ecdd3b02339 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 4b56880fed68..0ff74ed8400e 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index f07f8132af76..58a0a54ca090 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index dc99e8cb8ddf..0f59769954f1 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index d9f893c86ba0..d88c94f05c95 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 8c1ad5ddd4b3..0f05482b9b7c 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index c474a6e657b3..100d6b71fed4 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index cdaad279b0f1..15a4e4a15b6e 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index 9bd6f3bef8f6..76c34b3c2ce6 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index ea9ece39161f..a87ab825ea0b 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index d08a673dbf4f..6426deedf637 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index d34dc71ec37e..777c241bc0c0 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index e0e0ea6ae297..b677523a7491 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 8fb1b40e5eea..d3b2bda9b779 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 5d90c8a74009..cd5acc827db7 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e6e6530dc510..341c9b4b8c2e 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 17c811b2edcd..04166af0895f 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f93cecfc5d00..9f3ded8fcd93 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/combineLibrary/project.yml b/samples/client/petstore/swift5/combineLibrary/project.yml index 5528eeee5135..0493cf65896e 100644 --- a/samples/client/petstore/swift5/combineLibrary/project.yml +++ b/samples/client/petstore/swift5/combineLibrary/project.yml @@ -11,5 +11,5 @@ targets: settings: APPLICATION_EXTENSION_API_ONLY: true scheme: {} - + dependencies: - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 3aef2d1d6c54..11e807937bdc 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -185,6 +187,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -224,4 +227,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift index d178f10df649..1ad80b83a3ee 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesAnyType: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift index 8ddb4720d6df..273a9f185e3e 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesArray: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift index efa557ee7a82..164ae0e09c06 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesBoolean: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 10b6866249af..614e09633539 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift index 4274f8bde698..dcf8d5c01cd2 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesInteger: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift index 5bacbca48085..ea7bd4639165 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesNumber: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift index cd460f79f64a..cf9072f53a2d 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesObject: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift index a5b9c4d43ee7..d34017e6c970 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesString: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index a422ee73b556..157cca1d227b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index b20b894a1adb..a0b09cb97615 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 7f7c6a34bdf5..8607cbef1a33 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 0221229e7dd2..f3f161b44c1c 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index b5c7ca501e73..d62de957472a 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 9074d9ab4aae..360d50d027f1 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift index 288d1f5c29f4..3284de5040e7 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct BigCat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift index b4e5595c22fe..7d2d24898493 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct BigCatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index f0ca1a76f273..f0781a9cb738 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 89aaea45b910..d5519760387a 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c80f7549e692..8312680deb37 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index d695f78bb4eb..24dd89221d0c 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 90e4986e7f6b..03bf63e4cad1 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 4e0318069017..596048780439 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 2387b3e7b2cf..4ada3ceb605a 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4317578cee4c..f6c3d287301d 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 01b8960fe34b..0e0aad42abe6 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index ab01cf297f8e..6ea2895aee53 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 9c8e2e9ac842..9e44926be9b8 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 2a9c769ca6ce..11694b2ca59b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cd8a9a0e9fef..6aa85d8eecf9 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 8b16c3a20134..60eafb2febe1 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index b7a1449830a4..cb1a7456a7df 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 8d484cf0a334..8ecdd3b02339 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 4b56880fed68..0ff74ed8400e 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index f07f8132af76..58a0a54ca090 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index dc99e8cb8ddf..0f59769954f1 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index d9f893c86ba0..d88c94f05c95 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 8c1ad5ddd4b3..0f05482b9b7c 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index c474a6e657b3..100d6b71fed4 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index cdaad279b0f1..15a4e4a15b6e 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index 9bd6f3bef8f6..76c34b3c2ce6 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index a1a04b93d267..63b32ba8f11b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index d08a673dbf4f..6426deedf637 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index d34dc71ec37e..777c241bc0c0 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index e0e0ea6ae297..b677523a7491 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 8fb1b40e5eea..d3b2bda9b779 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 5d90c8a74009..cd5acc827db7 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e6e6530dc510..341c9b4b8c2e 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 3e25b2288463..7a0b4dda2a59 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f93cecfc5d00..9f3ded8fcd93 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift index d7fa1248dcde..997e2eebce5d 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct XmlItem: Codable, Hashable { diff --git a/samples/client/petstore/swift5/default/project.yml b/samples/client/petstore/swift5/default/project.yml index 5528eeee5135..0493cf65896e 100644 --- a/samples/client/petstore/swift5/default/project.yml +++ b/samples/client/petstore/swift5/default/project.yml @@ -11,5 +11,5 @@ targets: settings: APPLICATION_EXTENSION_API_ONLY: true scheme: {} - + dependencies: - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 3aef2d1d6c54..11e807937bdc 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -185,6 +187,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -224,4 +227,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 665bc7675c1d..619a45e20bb1 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Describes the result of uploading an image resource */ public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 3212f61529d3..26ba10c456e3 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** A category for a pet */ public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index f98e49776396..81d122defdf2 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** An order for a pets from the pet store */ @available(*, deprecated, message: "This schema is deprecated.") diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 7ade27d71a0c..475b1d7e546b 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** A pet for sale in the pet store */ public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 864a0dbbf99c..6f008baf7262 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** A tag for a pet */ public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 7b8fee0dd9fd..f46bd7741311 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** A User who is purchasing from the pet store */ public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/deprecated/project.yml b/samples/client/petstore/swift5/deprecated/project.yml index 5528eeee5135..0493cf65896e 100644 --- a/samples/client/petstore/swift5/deprecated/project.yml +++ b/samples/client/petstore/swift5/deprecated/project.yml @@ -11,5 +11,5 @@ targets: settings: APPLICATION_EXTENSION_API_ONLY: true scheme: {} - + dependencies: - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 729a612f7e60..481f3ce95cec 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -185,6 +187,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -224,4 +227,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index d9dd5e565017..048d2223b464 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index db644cbd9213..cf3022b7a592 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index 49ec4b6ac6e1..58d2309771e9 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 4b3bb87eef86..3bba5d0f051b 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 709e7f19109c..6600b567f54a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 960702ef37ea..b9bb366249b4 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index eeb73442a48a..5aab5e0237f9 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 5c5341e77a73..cc75d775764c 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 61463086913e..e1d59e33c663 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 7c742b83be19..8a3358a747ab 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 9ee881909bfd..cdd51a8ffbaf 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 3ed6d33da0fa..c5561f409fca 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ internal struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 390f624be4f7..a5640b27b268 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 71848669f329..fcf4077c0b13 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index d26c5f5d87dc..f5cb2649406b 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 553e1b1de09e..502b7f16fd27 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index 0c35bd818e05..7b5fa846ca11 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 23817dcd6d5b..6ab42303c451 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift index f14a3a326ca0..c4843091f8d4 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ internal struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index ff5e1a2bf003..52bea1373b04 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index a03e2aaa9302..c1eff9ffd18a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 3e928855ab44..df1e18887c52 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 80d8b0c4071d..10956a8bf61f 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index d61a6e2bd7f1..cee2c1dc24f5 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index a8d53ffb288f..ef916b0d8775 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 14656a218e77..6a6ff7664b9c 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ internal struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index f61b75d65339..5e4345bb54a1 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ internal struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index dcae16adea48..0a36afc7855a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index a2aed66bc25f..bb0eb5c601fe 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 5bd719c715f1..3b41213b30f5 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index cb0a71c180c9..e947654ad729 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 0d1ec07d3e5b..833730ac896b 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 46101e497304..d0a73f836f78 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 144e53c1759c..9b2e502be391 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ internal struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index aa152383444a..f77f26ce88c8 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 2b1e5e2cf884..0da1a5ed223a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 58215131abe1..866911641d00 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index d4f790d97ee7..3b3d4c7387a0 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index e8b051a4508f..2ca47db911d6 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift index d7ae12492198..4f1504516baf 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif internal struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/nonPublicApi/project.yml b/samples/client/petstore/swift5/nonPublicApi/project.yml index 5528eeee5135..0493cf65896e 100644 --- a/samples/client/petstore/swift5/nonPublicApi/project.yml +++ b/samples/client/petstore/swift5/nonPublicApi/project.yml @@ -11,5 +11,5 @@ targets: settings: APPLICATION_EXTENSION_API_ONLY: true scheme: {} - + dependencies: - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 3aef2d1d6c54..11e807937bdc 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -185,6 +187,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -224,4 +227,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 3a2ec316678b..3b250581cc15 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class AdditionalPropertiesClass: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index c011c374f67a..c8bc6f8fd9b6 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class Animal: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index b20b894a1adb..a0b09cb97615 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index dd42fa46250b..9feb0336458b 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class ApiResponse: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index e88fea34550c..acab776dfa1a 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class ArrayOfArrayOfNumberOnly: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 010207d5832d..d44e23a7567e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class ArrayOfNumberOnly: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 4e93d3ec1954..2ed77dba0afd 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class ArrayTest: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 3edcf4aec71f..c7c00b23f7c2 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class Capitalization: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 7ed4aad879db..9f34145e79f9 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class Cat: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index a921ec323a72..32fe1b1e59fe 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class CatAllOf: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 448bbbd77fcd..fd5f886af43b 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class Category: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 3ab43620369a..10b0983599dd 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ @objc public class ClassModel: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 1e4e0390c6d2..c6f66fc19cb6 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class Client: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index d68dadf06978..baaa824e4e14 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class Dog: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 6e6747572351..8e4ca3185812 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class DogAllOf: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 7d461e9f488f..317ec4f86281 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class EnumArrays: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index ab01cf297f8e..6ea2895aee53 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 4a464b00cf2c..39f68239e4d3 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class EnumTest: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift index d3acff746fca..b1f58093b024 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ @objc public class File: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 1b4688f9bd70..c766f63637d1 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class FileSchemaTestClass: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 45bb30fca6e9..70920c84fa8c 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class FormatTest: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index b3cd9e7b4c37..f491a19800eb 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class HasOnlyReadOnly: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 8ea2f8feea7c..baad1d10fe02 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class List: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index bb104e8169f7..b095210c3f62 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class MapTest: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 444ca3572e9b..d3b667779241 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class MixedPropertiesAndAdditionalPropertiesClass: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 1bdf12817bae..6abc550286bb 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ @objc public class Model200Response: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index c5a36141fab1..1544a22cda58 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ @objc public class Name: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 2a90178bdb1e..9e5280165f9f 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class NumberOnly: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 5db1f6b36c6b..d04a6cdab99a 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class Order: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index fd6674b056dd..6521635743e8 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class OuterComposite: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index 9bd6f3bef8f6..76c34b3c2ce6 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 192ef69463a2..1339931a0735 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class Pet: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index ef38f6c6d9c7..7d3b2e5c9b3c 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class ReadOnlyFirst: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index e1bc6f765ac7..aa7cae020161 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ @objc public class Return: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index abafeff9b751..c2ba68d894c6 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class SpecialModelName: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index f9cb11c7cc62..f3da87612bc8 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class StringBooleanMap: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index e861826bcf98..de3f7c181c4d 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class Tag: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 66eaf47b8036..4882236d3e16 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class TypeHolderDefault: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index f4aa2c171e5f..17dfc262df35 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class TypeHolderExample: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 41aa41aaaff1..8b9ef462778d 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif @objc public class User: NSObject, Codable { diff --git a/samples/client/petstore/swift5/objcCompatible/project.yml b/samples/client/petstore/swift5/objcCompatible/project.yml index 5528eeee5135..0493cf65896e 100644 --- a/samples/client/petstore/swift5/objcCompatible/project.yml +++ b/samples/client/petstore/swift5/objcCompatible/project.yml @@ -11,5 +11,5 @@ targets: settings: APPLICATION_EXTENSION_API_ONLY: true scheme: {} - + dependencies: - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 78d15ab2990d..e03e70ec7688 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif import PromiseKit extension Bool: JSONEncodable { @@ -201,6 +203,7 @@ extension RequestBuilder { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -240,4 +243,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 23c4af6d4ff6..61a478de142b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index a422ee73b556..157cca1d227b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index b20b894a1adb..a0b09cb97615 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 7f7c6a34bdf5..8607cbef1a33 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 0221229e7dd2..f3f161b44c1c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index b5c7ca501e73..d62de957472a 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 9074d9ab4aae..360d50d027f1 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index f0ca1a76f273..f0781a9cb738 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 89aaea45b910..d5519760387a 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c80f7549e692..8312680deb37 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 0def88b1fc8c..398da60aa73b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 90e4986e7f6b..03bf63e4cad1 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 4e0318069017..596048780439 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 2387b3e7b2cf..4ada3ceb605a 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4317578cee4c..f6c3d287301d 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 01b8960fe34b..0e0aad42abe6 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index ab01cf297f8e..6ea2895aee53 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 9c8e2e9ac842..9e44926be9b8 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 2a9c769ca6ce..11694b2ca59b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cd8a9a0e9fef..6aa85d8eecf9 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 11493f7ce28a..114c884efc5e 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index b7a1449830a4..cb1a7456a7df 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 8d484cf0a334..8ecdd3b02339 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 4b56880fed68..0ff74ed8400e 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index f07f8132af76..58a0a54ca090 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index dc99e8cb8ddf..0f59769954f1 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index d9f893c86ba0..d88c94f05c95 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 8c1ad5ddd4b3..0f05482b9b7c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index c474a6e657b3..100d6b71fed4 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index cdaad279b0f1..15a4e4a15b6e 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index 9bd6f3bef8f6..76c34b3c2ce6 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index ea9ece39161f..a87ab825ea0b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index d08a673dbf4f..6426deedf637 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index d34dc71ec37e..777c241bc0c0 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index e0e0ea6ae297..b677523a7491 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 8fb1b40e5eea..d3b2bda9b779 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 5d90c8a74009..cd5acc827db7 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e6e6530dc510..341c9b4b8c2e 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 17c811b2edcd..04166af0895f 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f93cecfc5d00..9f3ded8fcd93 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/promisekitLibrary/project.yml b/samples/client/petstore/swift5/promisekitLibrary/project.yml index 043be1cc387a..20bb0a7f6e94 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/project.yml +++ b/samples/client/petstore/swift5/promisekitLibrary/project.yml @@ -12,5 +12,5 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} dependencies: - - carthage: PromiseKit - carthage: AnyCodable + - carthage: PromiseKit diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 3aef2d1d6c54..11e807937bdc 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -185,6 +187,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -224,4 +227,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index b8a7361ac05d..55e1a850f068 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index 7acb01512575..3fded4244c37 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index b20b894a1adb..a0b09cb97615 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 1c9f0e12f41f..1522485099ca 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 4c439515c837..d754b57dd072 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index e882a622576e..261f521a2e3d 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 0e6db13a2921..e68cd879f6c7 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 5993241ce322..d449c5890d1b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index d1526a8ac3a8..3ddf9bee2fd5 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index 1e2fbc1a2bfe..40685ac1a16d 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 73d137b704b3..da9e51d2a512 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 823b48cad607..c6984e27050c 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 7ff9f1e47f1b..a08ef9f5ba42 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 423eb7a58ef4..efe8988d3811 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index ad9761aba9af..1d1f8ca7db91 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index e413cc97d43f..d8e15faf3a39 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index ab01cf297f8e..6ea2895aee53 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 5ea4ff0cf5b8..ca412e06fe1b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 48b1211fe029..1c9a0f33ee83 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index ad421491c9b9..50304fe594a3 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 0e262943f6d2..bf2d4131948e 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index f89b0bac8ebb..ee6bd8280bdb 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 97e9eb6c9a0c..41a0eacd2ac5 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index e3b9164f4639..27e27b36d0fa 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 1156ca42155a..306c8adeaa36 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 511011c84a1d..233fa7656abf 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 10c59ae2a62b..c1fda99c0c7e 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 767a52c5b444..5526fc2fbf25 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 359def85db8a..c79bc3f02d3d 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 3f36b653aac7..c69f16e2a883 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index 9bd6f3bef8f6..76c34b3c2ce6 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index 7fa54eaef817..46f5919b6b74 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index 24c117a48763..249d7691c215 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 47e57b215c50..23e8e52f6e5f 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index ab93560e778b..8a12be510ab8 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 3b304716da48..37ff29a73151 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index ff5e4bbaf36b..e3d44bf635f9 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 22e7d001936a..575466ee7d57 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index d03f41b1d95c..ba22b15d8487 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift index 21532c7023b0..33cb2a060441 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/readonlyProperties/project.yml b/samples/client/petstore/swift5/readonlyProperties/project.yml index 5528eeee5135..0493cf65896e 100644 --- a/samples/client/petstore/swift5/readonlyProperties/project.yml +++ b/samples/client/petstore/swift5/readonlyProperties/project.yml @@ -11,5 +11,5 @@ targets: settings: APPLICATION_EXTENSION_API_ONLY: true scheme: {} - + dependencies: - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 3aef2d1d6c54..11e807937bdc 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -185,6 +187,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -224,4 +227,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 23c4af6d4ff6..61a478de142b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index a422ee73b556..157cca1d227b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index b20b894a1adb..a0b09cb97615 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 7f7c6a34bdf5..8607cbef1a33 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 0221229e7dd2..f3f161b44c1c 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index b5c7ca501e73..d62de957472a 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 9074d9ab4aae..360d50d027f1 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index f0ca1a76f273..f0781a9cb738 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 89aaea45b910..d5519760387a 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c80f7549e692..8312680deb37 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 0def88b1fc8c..398da60aa73b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 90e4986e7f6b..03bf63e4cad1 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 4e0318069017..596048780439 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 2387b3e7b2cf..4ada3ceb605a 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4317578cee4c..f6c3d287301d 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 01b8960fe34b..0e0aad42abe6 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index ab01cf297f8e..6ea2895aee53 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 9c8e2e9ac842..9e44926be9b8 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 2a9c769ca6ce..11694b2ca59b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cd8a9a0e9fef..6aa85d8eecf9 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 11493f7ce28a..114c884efc5e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index b7a1449830a4..cb1a7456a7df 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 8d484cf0a334..8ecdd3b02339 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 4b56880fed68..0ff74ed8400e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index f07f8132af76..58a0a54ca090 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index dc99e8cb8ddf..0f59769954f1 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index d9f893c86ba0..d88c94f05c95 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 8c1ad5ddd4b3..0f05482b9b7c 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index c474a6e657b3..100d6b71fed4 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index cdaad279b0f1..15a4e4a15b6e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index 9bd6f3bef8f6..76c34b3c2ce6 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index ea9ece39161f..a87ab825ea0b 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index d08a673dbf4f..6426deedf637 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index d34dc71ec37e..777c241bc0c0 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index e0e0ea6ae297..b677523a7491 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 8fb1b40e5eea..d3b2bda9b779 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 5d90c8a74009..cd5acc827db7 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e6e6530dc510..341c9b4b8c2e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 17c811b2edcd..04166af0895f 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f93cecfc5d00..9f3ded8fcd93 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/resultLibrary/project.yml b/samples/client/petstore/swift5/resultLibrary/project.yml index 5528eeee5135..0493cf65896e 100644 --- a/samples/client/petstore/swift5/resultLibrary/project.yml +++ b/samples/client/petstore/swift5/resultLibrary/project.yml @@ -11,5 +11,5 @@ targets: settings: APPLICATION_EXTENSION_API_ONLY: true scheme: {} - + dependencies: - carthage: AnyCodable diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 7c712846fbd5..71e752b2e9f3 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -99,6 +101,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -138,4 +141,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 23c4af6d4ff6..61a478de142b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index a422ee73b556..157cca1d227b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index b20b894a1adb..a0b09cb97615 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index 7f7c6a34bdf5..8607cbef1a33 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 0221229e7dd2..f3f161b44c1c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index b5c7ca501e73..d62de957472a 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 9074d9ab4aae..360d50d027f1 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index f0ca1a76f273..f0781a9cb738 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 89aaea45b910..d5519760387a 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index c80f7549e692..8312680deb37 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 0def88b1fc8c..398da60aa73b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index b83341aa308c..761eb4f866ec 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 4e0318069017..596048780439 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index 2387b3e7b2cf..4ada3ceb605a 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 4317578cee4c..f6c3d287301d 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 01b8960fe34b..0e0aad42abe6 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index ab01cf297f8e..6ea2895aee53 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 9c8e2e9ac842..9e44926be9b8 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift index 2a9c769ca6ce..11694b2ca59b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ public struct File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index cd8a9a0e9fef..6aa85d8eecf9 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 11493f7ce28a..114c884efc5e 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index b7a1449830a4..cb1a7456a7df 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 8d484cf0a334..8ecdd3b02339 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 4b56880fed68..0ff74ed8400e 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index f07f8132af76..58a0a54ca090 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index 73afe1ea4584..e5906f844364 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ public struct Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index d9f893c86ba0..d88c94f05c95 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ public struct Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index 8c1ad5ddd4b3..0f05482b9b7c 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index c474a6e657b3..100d6b71fed4 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index cdaad279b0f1..15a4e4a15b6e 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index 9bd6f3bef8f6..76c34b3c2ce6 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index ea9ece39161f..a87ab825ea0b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index d08a673dbf4f..6426deedf637 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 99ff0ddad82a..268ce3bfee0b 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ public struct Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index e0e0ea6ae297..b677523a7491 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index d6d89678adcd..eb3882d7c2a5 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 5d90c8a74009..cd5acc827db7 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index e6e6530dc510..341c9b4b8c2e 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index 17c811b2edcd..04166af0895f 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift index f93cecfc5d00..9f3ded8fcd93 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/rxswiftLibrary/project.yml b/samples/client/petstore/swift5/rxswiftLibrary/project.yml index 7f6334fda437..5471ac0bc64a 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/project.yml +++ b/samples/client/petstore/swift5/rxswiftLibrary/project.yml @@ -12,5 +12,5 @@ targets: APPLICATION_EXTENSION_API_ONLY: true scheme: {} dependencies: - - carthage: RxSwift - carthage: AnyCodable + - carthage: RxSwift diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift index 3aef2d1d6c54..11e807937bdc 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -185,6 +187,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -224,4 +227,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift index 2898823a5296..9363f25a029f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class AdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift index 927e6d2865b2..9a953b845ba8 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class Animal: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift index b20b894a1adb..a0b09cb97615 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift index 77172181cc95..b0e3bad14a11 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class ApiResponse: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift index 090ffe3b17dc..f0a8b45f20d3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift index aa63577f84b1..08cd71668641 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class ArrayOfNumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift index a51a38c8afee..c69cc3c6327d 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class ArrayTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift index e7bad1f3da7d..cc5eeba963bb 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class Capitalization: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift index b22d8572b931..cbcdf143b875 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class Cat: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift index 5b374b752ceb..4b4f862fe108 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class CatAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift index e5128f8b0964..3a88c62a05f4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift index 211f3f1a233a..fee2cec87bf7 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ public final class ClassModel: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift index 73ac3e225753..b9c0857371de 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class Client: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift index cee84354a050..022fddbb1fb8 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class Dog: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift index a4d610050ff1..40f0a1291be5 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class DogAllOf: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift index 2348f0f01b1e..e8a756e0ab3b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class EnumArrays: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift index ab01cf297f8e..6ea2895aee53 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift index d7502d65c1cd..fdb508f216d1 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class EnumTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift index 439997188be3..a8e0dfdebbb8 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ public final class File: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift index 136b2106145c..c3de2775a3af 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class FileSchemaTestClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift index a4e2bf9a8ea4..0ae5bd7d8a2b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class FormatTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift index 701101b66f73..7093d3cedf01 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class HasOnlyReadOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift index 08a9b37f367b..cf232a2e3008 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class List: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift index f89f3bea22fe..5c42a4be48fa 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class MapTest: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index b7d4981c4ae1..faeff27eb6b4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift index 6231c764daaa..c254a7530aa0 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ public final class Model200Response: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift index ab883e7ce644..ce7ac369e33a 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ public final class Name: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift index 0abdc58b2b5a..072738962043 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class NumberOnly: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift index c4c4a3dd9ef4..623c7b839c4b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class Order: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift index d16b840bec6b..509f13dc3db0 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class OuterComposite: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift index 9bd6f3bef8f6..76c34b3c2ce6 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift index 15490bba7140..c1bf287a8f3a 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift index 8c66afb096a6..8e82bd882d02 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class ReadOnlyFirst: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift index 273fac1a3e35..4221455581bd 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ public final class Return: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift index de2a54506e76..6e632eb17e79 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class SpecialModelName: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift index 946c1b11a33c..305ce5056968 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class StringBooleanMap: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift index edf15aa31968..7b44db425398 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift index 7da67c016ebd..30c51f43aea4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class TypeHolderDefault: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift index 4822336dcccb..4c49c40554a8 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class TypeHolderExample: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift index ccb1efefbd37..984e8bfc66c4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public final class User: Codable, Hashable { diff --git a/samples/client/petstore/swift5/urlsessionLibrary/project.yml b/samples/client/petstore/swift5/urlsessionLibrary/project.yml index 8280cd17d31e..af642519aeb4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/project.yml +++ b/samples/client/petstore/swift5/urlsessionLibrary/project.yml @@ -11,5 +11,5 @@ targets: settings: APPLICATION_EXTENSION_API_ONLY: true scheme: {} - + dependencies: - carthage: AnyCodable From 0a34839567c92eb500568907954afbb1b821e70f Mon Sep 17 00:00:00 2001 From: Makoto Aoyama Date: Fri, 21 May 2021 00:04:19 +0900 Subject: [PATCH 128/186] Add hashableModels to additional properties (#9495) * Add hashableStruct * Revert "Remove x-swift-hashable" This reverts commit 18053af0016fdba13fd1e5df00ad86abee071283. * Add Hashable for x-swift-hashable * Add config yaml to test x-swift-hashable * Run ./bin/generate-samples.sh ./bin/configs/swift5* * Run ./bin/utils/export_docs_generators.sh * Run ./bin/generate-samples.sh ./bin/configs/swift5* * Verify setHashableStruct * Rename hashableStruct => hashableModels - Replace hashableStruct => hashableModels - Replace HashableStruct => HashableModels - Replace HASHABLE_STRUCT => HASHABLE_MODELS - Update docs * Refactor modelObject.mustache * Control equals and hash functions --- bin/configs/swift5-x-swift-hashable.yaml | 11 + docs/generators/swift5.md | 1 + .../languages/Swift5ClientCodegen.java | 19 +- .../resources/swift5/modelObject.mustache | 6 +- .../options/Swift5OptionsProvider.java | 2 + .../codegen/swift5/Swift5OptionsTest.java | 1 + ...ith-fake-endpoints-models-for-testing.yaml | 1 + .../swift5/x-swift-hashable/.gitignore | 63 ++ .../.openapi-generator-ignore | 23 + .../x-swift-hashable/.openapi-generator/FILES | 110 +++ .../.openapi-generator/VERSION | 1 + .../contents.xcworkspacedata | 7 + .../petstore/swift5/x-swift-hashable/Cartfile | 2 + .../swift5/x-swift-hashable/Package.resolved | 16 + .../swift5/x-swift-hashable/Package.swift | 33 + .../x-swift-hashable/PetstoreClient.podspec | 15 + .../Classes/OpenAPIs/APIHelper.swift | 71 ++ .../Classes/OpenAPIs/APIs.swift | 62 ++ .../OpenAPIs/APIs/AnotherFakeAPI.swift | 54 ++ .../Classes/OpenAPIs/APIs/FakeAPI.swift | 684 ++++++++++++++++++ .../APIs/FakeClassnameTags123API.swift | 57 ++ .../Classes/OpenAPIs/APIs/PetAPI.swift | 483 +++++++++++++ .../Classes/OpenAPIs/APIs/StoreAPI.swift | 189 +++++ .../Classes/OpenAPIs/APIs/UserAPI.swift | 366 ++++++++++ .../Classes/OpenAPIs/CodableHelper.swift | 49 ++ .../Classes/OpenAPIs/Configuration.swift | 14 + .../Classes/OpenAPIs/Extensions.swift | 227 ++++++ .../Classes/OpenAPIs/JSONDataEncoding.swift | 53 ++ .../Classes/OpenAPIs/JSONEncodingHelper.swift | 45 ++ .../Classes/OpenAPIs/Models.swift | 54 ++ .../Models/AdditionalPropertiesAnyType.swift | 57 ++ .../Models/AdditionalPropertiesArray.swift | 57 ++ .../Models/AdditionalPropertiesBoolean.swift | 57 ++ .../Models/AdditionalPropertiesClass.swift | 33 + .../Models/AdditionalPropertiesInteger.swift | 57 ++ .../Models/AdditionalPropertiesNumber.swift | 57 ++ .../Models/AdditionalPropertiesObject.swift | 57 ++ .../Models/AdditionalPropertiesString.swift | 57 ++ .../Classes/OpenAPIs/Models/Animal.swift | 33 + .../Classes/OpenAPIs/Models/AnimalFarm.swift | 11 + .../Classes/OpenAPIs/Models/ApiResponse.swift | 37 + .../Models/ArrayOfArrayOfNumberOnly.swift | 29 + .../OpenAPIs/Models/ArrayOfNumberOnly.swift | 29 + .../Classes/OpenAPIs/Models/ArrayTest.swift | 37 + .../Classes/OpenAPIs/Models/BigCat.swift | 37 + .../Classes/OpenAPIs/Models/BigCatAllOf.swift | 37 + .../OpenAPIs/Models/Capitalization.swift | 50 ++ .../Classes/OpenAPIs/Models/Cat.swift | 37 + .../Classes/OpenAPIs/Models/CatAllOf.swift | 29 + .../Classes/OpenAPIs/Models/Category.swift | 33 + .../Classes/OpenAPIs/Models/ClassModel.swift | 30 + .../Classes/OpenAPIs/Models/Client.swift | 29 + .../Classes/OpenAPIs/Models/Dog.swift | 37 + .../Classes/OpenAPIs/Models/DogAllOf.swift | 29 + .../Classes/OpenAPIs/Models/EnumArrays.swift | 41 ++ .../Classes/OpenAPIs/Models/EnumClass.swift | 15 + .../Classes/OpenAPIs/Models/EnumTest.swift | 63 ++ .../Classes/OpenAPIs/Models/File.swift | 31 + .../OpenAPIs/Models/FileSchemaTestClass.swift | 33 + .../Classes/OpenAPIs/Models/FormatTest.swift | 77 ++ .../OpenAPIs/Models/HasOnlyReadOnly.swift | 33 + .../Classes/OpenAPIs/Models/List.swift | 29 + .../Classes/OpenAPIs/Models/MapTest.swift | 45 ++ ...opertiesAndAdditionalPropertiesClass.swift | 37 + .../OpenAPIs/Models/Model200Response.swift | 34 + .../Classes/OpenAPIs/Models/Name.swift | 42 ++ .../Classes/OpenAPIs/Models/NumberOnly.swift | 29 + .../Classes/OpenAPIs/Models/Order.swift | 55 ++ .../OpenAPIs/Models/OuterComposite.swift | 37 + .../Classes/OpenAPIs/Models/OuterEnum.swift | 15 + .../Classes/OpenAPIs/Models/Pet.swift | 55 ++ .../OpenAPIs/Models/ReadOnlyFirst.swift | 33 + .../Classes/OpenAPIs/Models/Return.swift | 30 + .../OpenAPIs/Models/SpecialModelName.swift | 29 + .../OpenAPIs/Models/StringBooleanMap.swift | 48 ++ .../Classes/OpenAPIs/Models/Tag.swift | 33 + .../OpenAPIs/Models/TypeHolderDefault.swift | 45 ++ .../OpenAPIs/Models/TypeHolderExample.swift | 45 ++ .../Classes/OpenAPIs/Models/User.swift | 58 ++ .../Classes/OpenAPIs/Models/XmlItem.swift | 143 ++++ .../OpenAPIs/OpenISO8601DateFormatter.swift | 44 ++ .../OpenAPIs/SynchronizedDictionary.swift | 36 + .../OpenAPIs/URLSessionImplementations.swift | 606 ++++++++++++++++ .../swift5/x-swift-hashable/README.md | 141 ++++ .../docs/AdditionalPropertiesAnyType.md | 10 + .../docs/AdditionalPropertiesArray.md | 10 + .../docs/AdditionalPropertiesBoolean.md | 10 + .../docs/AdditionalPropertiesClass.md | 11 + .../docs/AdditionalPropertiesInteger.md | 10 + .../docs/AdditionalPropertiesNumber.md | 10 + .../docs/AdditionalPropertiesObject.md | 10 + .../docs/AdditionalPropertiesString.md | 10 + .../swift5/x-swift-hashable/docs/Animal.md | 11 + .../x-swift-hashable/docs/AnimalFarm.md | 9 + .../x-swift-hashable/docs/AnotherFakeAPI.md | 59 ++ .../x-swift-hashable/docs/ApiResponse.md | 12 + .../docs/ArrayOfArrayOfNumberOnly.md | 10 + .../docs/ArrayOfNumberOnly.md | 10 + .../swift5/x-swift-hashable/docs/ArrayTest.md | 12 + .../swift5/x-swift-hashable/docs/BigCat.md | 10 + .../x-swift-hashable/docs/BigCatAllOf.md | 10 + .../x-swift-hashable/docs/Capitalization.md | 15 + .../swift5/x-swift-hashable/docs/Cat.md | 10 + .../swift5/x-swift-hashable/docs/CatAllOf.md | 10 + .../swift5/x-swift-hashable/docs/Category.md | 11 + .../x-swift-hashable/docs/ClassModel.md | 10 + .../swift5/x-swift-hashable/docs/Client.md | 10 + .../swift5/x-swift-hashable/docs/Dog.md | 10 + .../swift5/x-swift-hashable/docs/DogAllOf.md | 10 + .../x-swift-hashable/docs/EnumArrays.md | 11 + .../swift5/x-swift-hashable/docs/EnumClass.md | 9 + .../swift5/x-swift-hashable/docs/EnumTest.md | 14 + .../swift5/x-swift-hashable/docs/FakeAPI.md | 662 +++++++++++++++++ .../docs/FakeClassnameTags123API.md | 59 ++ .../swift5/x-swift-hashable/docs/File.md | 10 + .../docs/FileSchemaTestClass.md | 11 + .../x-swift-hashable/docs/FormatTest.md | 22 + .../x-swift-hashable/docs/HasOnlyReadOnly.md | 11 + .../swift5/x-swift-hashable/docs/List.md | 10 + .../swift5/x-swift-hashable/docs/MapTest.md | 13 + ...dPropertiesAndAdditionalPropertiesClass.md | 12 + .../x-swift-hashable/docs/Model200Response.md | 11 + .../swift5/x-swift-hashable/docs/Name.md | 13 + .../x-swift-hashable/docs/NumberOnly.md | 10 + .../swift5/x-swift-hashable/docs/Order.md | 15 + .../x-swift-hashable/docs/OuterComposite.md | 12 + .../swift5/x-swift-hashable/docs/OuterEnum.md | 9 + .../swift5/x-swift-hashable/docs/Pet.md | 15 + .../swift5/x-swift-hashable/docs/PetAPI.md | 469 ++++++++++++ .../x-swift-hashable/docs/ReadOnlyFirst.md | 11 + .../swift5/x-swift-hashable/docs/Return.md | 10 + .../x-swift-hashable/docs/SpecialModelName.md | 10 + .../swift5/x-swift-hashable/docs/StoreAPI.md | 206 ++++++ .../x-swift-hashable/docs/StringBooleanMap.md | 9 + .../swift5/x-swift-hashable/docs/Tag.md | 11 + .../docs/TypeHolderDefault.md | 14 + .../docs/TypeHolderExample.md | 14 + .../swift5/x-swift-hashable/docs/User.md | 17 + .../swift5/x-swift-hashable/docs/UserAPI.md | 406 +++++++++++ .../swift5/x-swift-hashable/docs/XmlItem.md | 38 + .../swift5/x-swift-hashable/git_push.sh | 58 ++ .../swift5/x-swift-hashable/project.yml | 15 + 142 files changed, 8160 insertions(+), 4 deletions(-) create mode 100644 bin/configs/swift5-x-swift-hashable.yaml create mode 100644 samples/client/petstore/swift5/x-swift-hashable/.gitignore create mode 100644 samples/client/petstore/swift5/x-swift-hashable/.openapi-generator-ignore create mode 100644 samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/FILES create mode 100644 samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/VERSION create mode 100644 samples/client/petstore/swift5/x-swift-hashable/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata create mode 100644 samples/client/petstore/swift5/x-swift-hashable/Cartfile create mode 100644 samples/client/petstore/swift5/x-swift-hashable/Package.resolved create mode 100644 samples/client/petstore/swift5/x-swift-hashable/Package.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient.podspec create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIHelper.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Configuration.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Category.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Client.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/File.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/List.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Name.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Order.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Return.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/User.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift create mode 100644 samples/client/petstore/swift5/x-swift-hashable/README.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesAnyType.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesArray.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesBoolean.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesClass.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesInteger.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesNumber.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesObject.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesString.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Animal.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/AnimalFarm.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/AnotherFakeAPI.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/ApiResponse.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/ArrayOfArrayOfNumberOnly.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/ArrayOfNumberOnly.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/ArrayTest.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/BigCat.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/BigCatAllOf.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Capitalization.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Cat.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/CatAllOf.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Category.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/ClassModel.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Client.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Dog.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/DogAllOf.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/EnumArrays.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/EnumClass.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/EnumTest.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/FakeAPI.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/FakeClassnameTags123API.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/File.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/FileSchemaTestClass.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/FormatTest.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/HasOnlyReadOnly.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/List.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/MapTest.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/MixedPropertiesAndAdditionalPropertiesClass.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Model200Response.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Name.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/NumberOnly.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Order.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/OuterComposite.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/OuterEnum.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Pet.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/PetAPI.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/ReadOnlyFirst.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Return.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/SpecialModelName.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/StoreAPI.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/StringBooleanMap.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/Tag.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/TypeHolderDefault.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/TypeHolderExample.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/User.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/UserAPI.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/docs/XmlItem.md create mode 100644 samples/client/petstore/swift5/x-swift-hashable/git_push.sh create mode 100644 samples/client/petstore/swift5/x-swift-hashable/project.yml diff --git a/bin/configs/swift5-x-swift-hashable.yaml b/bin/configs/swift5-x-swift-hashable.yaml new file mode 100644 index 000000000000..c07937d53366 --- /dev/null +++ b/bin/configs/swift5-x-swift-hashable.yaml @@ -0,0 +1,11 @@ +generatorName: swift5 +outputDir: samples/client/petstore/swift5/x-swift-hashable +inputSpec: modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml +templateDir: modules/openapi-generator/src/main/resources/swift5 +generateAliasAsModel: true +additionalProperties: + podAuthors: "" + podSummary: PetstoreClient + projectName: PetstoreClient + podHomepage: https://github.com/openapitools/openapi-generator + hashableModels: false diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index eb9bb6c3d713..47f0318e8397 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -12,6 +12,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |generateModelAdditionalProperties|Generate model additional properties (default: true)| |true| +|hashableModels|Make hashable models (default: true)| |true| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |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| |lenientTypeCast|Accept and cast values for simple types (string->bool, string->int, int->string)| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index a4ab7ecec202..e1932f313501 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -65,6 +65,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig public static final String SWIFT_PACKAGE_PATH = "swiftPackagePath"; public static final String USE_BACKTICK_ESCAPES = "useBacktickEscapes"; public static final String GENERATE_MODEL_ADDITIONAL_PROPERTIES = "generateModelAdditionalProperties"; + public static final String HASHABLE_MODELS = "hashableModels"; protected static final String LIBRARY_ALAMOFIRE = "alamofire"; protected static final String LIBRARY_URLSESSION = "urlsession"; protected static final String RESPONSE_LIBRARY_PROMISE_KIT = "PromiseKit"; @@ -82,6 +83,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig protected String swiftPackagePath = "Classes" + File.separator + "OpenAPIs"; protected boolean useBacktickEscapes = false; protected boolean generateModelAdditionalProperties = true; + protected boolean hashableModels = true; protected String[] responseAs = new String[0]; protected String sourceFolder = swiftPackagePath; protected HashSet objcReservedWords; @@ -279,6 +281,10 @@ public Swift5ClientCodegen() { cliOptions.add(new CliOption(SWIFT_PACKAGE_PATH, "Set a custom source path instead of " + projectName + File.separator + "Classes" + File.separator + "OpenAPIs" + ".")); + cliOptions.add(new CliOption(HASHABLE_MODELS, + "Make hashable models (default: true)") + .defaultValue(Boolean.TRUE.toString())); + supportedLibraries.put(LIBRARY_URLSESSION, "[DEFAULT] HTTP client: URLSession"); supportedLibraries.put(LIBRARY_ALAMOFIRE, "HTTP client: Alamofire"); @@ -458,6 +464,11 @@ public void processOpts() { } additionalProperties.put(GENERATE_MODEL_ADDITIONAL_PROPERTIES, generateModelAdditionalProperties); + if (additionalProperties.containsKey(HASHABLE_MODELS)) { + setHashableModels(convertPropertyToBooleanAndWriteBack(HASHABLE_MODELS)); + } + additionalProperties.put(HASHABLE_MODELS, hashableModels); + setLenientTypeCast(convertPropertyToBooleanAndWriteBack(LENIENT_TYPE_CAST)); // make api and model doc path available in mustache template @@ -828,7 +839,9 @@ public CodegenModel fromModel(String name, Schema model) { parentSchema = parentCodegenModel.parentSchema; } } - + if (hashableModels) { + codegenModel.vendorExtensions.put("x-swift-hashable", true); + } return codegenModel; } @@ -876,6 +889,10 @@ public void setGenerateModelAdditionalProperties(boolean generateModelAdditional this.generateModelAdditionalProperties = generateModelAdditionalProperties; } + public void setHashableModels(boolean hashableModels) { + this.hashableModels = hashableModels; + } + @Override public String toEnumValue(String value, String datatype) { // for string, array of string diff --git a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache index bc6f9c64e70f..336ee3467c85 100644 --- a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache @@ -1,4 +1,4 @@ -{{^objcCompatible}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#useClasses}}final class{{/useClasses}}{{^useClasses}}struct{{/useClasses}} {{classname}}: Codable, Hashable { +{{^objcCompatible}}{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} {{#useClasses}}final class{{/useClasses}}{{^useClasses}}struct{{/useClasses}} {{classname}}: Codable{{#vendorExtensions.x-swift-hashable}}, Hashable{{/vendorExtensions.x-swift-hashable}} { {{/objcCompatible}}{{#objcCompatible}}@objc {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} class {{classname}}: NSObject, Codable { {{/objcCompatible}} @@ -86,7 +86,7 @@ nonAdditionalPropertyKeys.insert("{{{baseName}}}") {{/allVars}} additionalProperties = try container.decodeMap({{{additionalPropertiesType}}}.self, excludedKeys: nonAdditionalPropertyKeys) - }{{/additionalPropertiesType}}{{/generateModelAdditionalProperties}}{{^objcCompatible}}{{#useClasses}} + }{{/additionalPropertiesType}}{{/generateModelAdditionalProperties}}{{^objcCompatible}}{{#useClasses}}{{#vendorExtensions.x-swift-hashable}} {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func == (lhs: {{classname}}, rhs: {{classname}}) -> Bool { {{#allVars}} @@ -100,5 +100,5 @@ hasher.combine({{{name}}}{{^required}}?{{/required}}.hashValue) {{/allVars}} {{#generateModelAdditionalProperties}}{{#additionalPropertiesType}}hasher.combine(additionalProperties.hashValue){{/additionalPropertiesType}}{{/generateModelAdditionalProperties}} - }{{/useClasses}}{{/objcCompatible}} + }{{/vendorExtensions.x-swift-hashable}}{{/useClasses}}{{/objcCompatible}} } \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java index 5ed11f1036c4..979da734eacb 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java @@ -48,6 +48,7 @@ public class Swift5OptionsProvider implements OptionsProvider { public static final String SWIFT_USE_API_NAMESPACE_VALUE = "swiftUseApiNamespace"; public static final String USE_BACKTICKS_ESCAPES_VALUE = "false"; public static final String GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE = "true"; + public static final String HASHABLE_MODELS_VALUE = "true"; public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false"; public static final String PREPEND_FORM_OR_BODY_PARAMETERS_VALUE = "true"; public static final String LIBRARY_VALUE = "alamofire"; @@ -93,6 +94,7 @@ public Map createOptions() { .put(Swift5ClientCodegen.USE_SPM_FILE_STRUCTURE, USE_SPM_FILE_STRUCTURE_VALUE) .put(Swift5ClientCodegen.SWIFT_PACKAGE_PATH, SWIFT_PACKAGE_PATH_VALUE) .put(Swift5ClientCodegen.GENERATE_MODEL_ADDITIONAL_PROPERTIES, GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE) + .put(Swift5ClientCodegen.HASHABLE_MODELS, HASHABLE_MODELS_VALUE) .build(); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java index ca237bb7dafe..268d52bed289 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/swift5/Swift5OptionsTest.java @@ -49,5 +49,6 @@ protected void verifyOptions() { verify(clientCodegen).setPrependFormOrBodyParameters(Boolean.valueOf(Swift5OptionsProvider.PREPEND_FORM_OR_BODY_PARAMETERS_VALUE)); verify(clientCodegen).setReadonlyProperties(Boolean.parseBoolean(Swift5OptionsProvider.READONLY_PROPERTIES_VALUE)); verify(clientCodegen).setGenerateModelAdditionalProperties(Boolean.parseBoolean(Swift5OptionsProvider.GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE)); + verify(clientCodegen).setHashableModels(Boolean.parseBoolean(Swift5OptionsProvider.HASHABLE_MODELS_VALUE)); } } diff --git a/modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml b/modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml index 38797a5bf10f..6fa25c302182 100644 --- a/modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml +++ b/modules/openapi-generator/src/test/resources/2_0/swift/petstore-with-fake-endpoints-models-for-testing.yaml @@ -1086,6 +1086,7 @@ definitions: xml: name: Order Category: + x-swift-hashable: true type: object required: - name diff --git a/samples/client/petstore/swift5/x-swift-hashable/.gitignore b/samples/client/petstore/swift5/x-swift-hashable/.gitignore new file mode 100644 index 000000000000..5e5d5cebcf47 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/.gitignore @@ -0,0 +1,63 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated +build/ +DerivedData + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata + +## Other +*.xccheckout +*.moved-aside +*.xcuserstate +*.xcscmblueprint + +## Obj-C/Swift specific +*.hmap +*.ipa + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +.build/ + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md + +fastlane/report.xml +fastlane/screenshots diff --git a/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator-ignore b/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/FILES b/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/FILES new file mode 100644 index 000000000000..c81943baf2af --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/FILES @@ -0,0 +1,110 @@ +.gitignore +Cartfile +Package.swift +PetstoreClient.podspec +PetstoreClient/Classes/OpenAPIs/APIHelper.swift +PetstoreClient/Classes/OpenAPIs/APIs.swift +PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +PetstoreClient/Classes/OpenAPIs/CodableHelper.swift +PetstoreClient/Classes/OpenAPIs/Configuration.swift +PetstoreClient/Classes/OpenAPIs/Extensions.swift +PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift +PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift +PetstoreClient/Classes/OpenAPIs/Models.swift +PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +PetstoreClient/Classes/OpenAPIs/Models/Category.swift +PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +PetstoreClient/Classes/OpenAPIs/Models/Client.swift +PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +PetstoreClient/Classes/OpenAPIs/Models/File.swift +PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +PetstoreClient/Classes/OpenAPIs/Models/List.swift +PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +PetstoreClient/Classes/OpenAPIs/Models/Name.swift +PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +PetstoreClient/Classes/OpenAPIs/Models/Order.swift +PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +PetstoreClient/Classes/OpenAPIs/Models/Return.swift +PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +PetstoreClient/Classes/OpenAPIs/Models/User.swift +PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift +PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift +PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +README.md +docs/AdditionalPropertiesClass.md +docs/Animal.md +docs/AnimalFarm.md +docs/AnotherFakeAPI.md +docs/ApiResponse.md +docs/ArrayOfArrayOfNumberOnly.md +docs/ArrayOfNumberOnly.md +docs/ArrayTest.md +docs/Capitalization.md +docs/Cat.md +docs/CatAllOf.md +docs/Category.md +docs/ClassModel.md +docs/Client.md +docs/Dog.md +docs/DogAllOf.md +docs/EnumArrays.md +docs/EnumClass.md +docs/EnumTest.md +docs/FakeAPI.md +docs/FakeClassnameTags123API.md +docs/File.md +docs/FileSchemaTestClass.md +docs/FormatTest.md +docs/HasOnlyReadOnly.md +docs/List.md +docs/MapTest.md +docs/MixedPropertiesAndAdditionalPropertiesClass.md +docs/Model200Response.md +docs/Name.md +docs/NumberOnly.md +docs/Order.md +docs/OuterComposite.md +docs/OuterEnum.md +docs/Pet.md +docs/PetAPI.md +docs/ReadOnlyFirst.md +docs/Return.md +docs/SpecialModelName.md +docs/StoreAPI.md +docs/StringBooleanMap.md +docs/Tag.md +docs/TypeHolderDefault.md +docs/TypeHolderExample.md +docs/User.md +docs/UserAPI.md +git_push.sh +project.yml diff --git a/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/VERSION b/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/VERSION new file mode 100644 index 000000000000..6555596f9311 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/x-swift-hashable/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift5/x-swift-hashable/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000000..919434a6254f --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/Cartfile b/samples/client/petstore/swift5/x-swift-hashable/Cartfile new file mode 100644 index 000000000000..84aaa61ef2d3 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/Cartfile @@ -0,0 +1,2 @@ + +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/x-swift-hashable/Package.resolved b/samples/client/petstore/swift5/x-swift-hashable/Package.resolved new file mode 100644 index 000000000000..85bb93ced12f --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "38b05fc9f86501ef8018aa90cf3d83bd97f74067", + "version": "0.4.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/Package.swift b/samples/client/petstore/swift5/x-swift-hashable/Package.swift new file mode 100644 index 000000000000..b724838fe8d3 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/Package.swift @@ -0,0 +1,33 @@ +// swift-tools-version:5.1 + +import PackageDescription + +let package = Package( + name: "PetstoreClient", + platforms: [ + .iOS(.v9), + .macOS(.v10_11), + .tvOS(.v9), + .watchOS(.v3), + ], + products: [ + // Products define the executables and libraries produced by a package, and make them visible to other packages. + .library( + name: "PetstoreClient", + targets: ["PetstoreClient"] + ), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages which this package depends on. + .target( + name: "PetstoreClient", + dependencies: ["AnyCodable", ], + path: "PetstoreClient/Classes" + ), + ] +) diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient.podspec b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient.podspec new file mode 100644 index 000000000000..de06558efbdb --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient.podspec @@ -0,0 +1,15 @@ +Pod::Spec.new do |s| + s.name = 'PetstoreClient' + s.ios.deployment_target = '9.0' + s.osx.deployment_target = '10.11' + s.tvos.deployment_target = '9.0' + s.watchos.deployment_target = '3.0' + s.version = '1.0.0' + s.source = { :git => 'git@github.com:OpenAPITools/openapi-generator.git', :tag => 'v1.0.0' } + s.authors = '' + s.license = 'Proprietary' + s.homepage = 'https://github.com/openapitools/openapi-generator' + s.summary = 'PetstoreClient' + s.source_files = 'PetstoreClient/Classes/**/*.swift' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' +end diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIHelper.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIHelper.swift new file mode 100644 index 000000000000..f7bb5274bd98 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIHelper.swift @@ -0,0 +1,71 @@ +// APIHelper.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct APIHelper { + public static func rejectNil(_ source: [String: Any?]) -> [String: Any]? { + let destination = source.reduce(into: [String: Any]()) { result, item in + if let value = item.value { + result[item.key] = value + } + } + + if destination.isEmpty { + return nil + } + return destination + } + + public static func rejectNilHeaders(_ source: [String: Any?]) -> [String: String] { + return source.reduce(into: [String: String]()) { result, item in + if let collection = item.value as? [Any?] { + result[item.key] = collection.filter { $0 != nil }.map { "\($0!)" }.joined(separator: ",") + } else if let value: Any = item.value { + result[item.key] = "\(value)" + } + } + } + + public static func convertBoolToString(_ source: [String: Any]?) -> [String: Any]? { + guard let source = source else { + return nil + } + + return source.reduce(into: [String: Any]()) { result, item in + switch item.value { + case let x as Bool: + result[item.key] = x.description + default: + result[item.key] = item.value + } + } + } + + public static func mapValueToPathItem(_ source: Any) -> Any { + if let collection = source as? [Any?] { + return collection.filter { $0 != nil }.map { "\($0!)" }.joined(separator: ",") + } + return source + } + + public static func mapValuesToQueryItems(_ source: [String: Any?]) -> [URLQueryItem]? { + let destination = source.filter { $0.value != nil }.reduce(into: [URLQueryItem]()) { result, item in + if let collection = item.value as? [Any?] { + collection.filter { $0 != nil }.map { "\($0!)" }.forEach { value in + result.append(URLQueryItem(name: item.key, value: value)) + } + } else if let value = item.value { + result.append(URLQueryItem(name: item.key, value: "\(value)")) + } + } + + if destination.isEmpty { + return nil + } + return destination + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs.swift new file mode 100644 index 000000000000..dbdab491ff7d --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -0,0 +1,62 @@ +// APIs.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class PetstoreClientAPI { + public static var basePath = "http://petstore.swagger.io:80/v2" + public static var credential: URLCredential? + public static var customHeaders: [String: String] = [:] + public static var requestBuilderFactory: RequestBuilderFactory = URLSessionRequestBuilderFactory() + public static var apiResponseQueue: DispatchQueue = .main +} + +open class RequestBuilder { + var credential: URLCredential? + var headers: [String: String] + public let parameters: [String: Any]? + public let method: String + public let URLString: String + + /// Optional block to obtain a reference to the request's progress instance when available. + /// With the URLSession http client the request's progress only works on iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0. + /// If you need to get the request's progress in older OS versions, please use Alamofire http client. + public var onProgressReady: ((Progress) -> Void)? + + required public init(method: String, URLString: String, parameters: [String: Any]?, headers: [String: String] = [:]) { + self.method = method + self.URLString = URLString + self.parameters = parameters + self.headers = headers + + addHeaders(PetstoreClientAPI.customHeaders) + } + + open func addHeaders(_ aHeaders: [String: String]) { + for (header, value) in aHeaders { + headers[header] = value + } + } + + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + + public func addHeader(name: String, value: String) -> Self { + if !value.isEmpty { + headers[name] = value + } + return self + } + + open func addCredential() -> Self { + credential = PetstoreClientAPI.credential + return self + } +} + +public protocol RequestBuilderFactory { + func getNonDecodableBuilder() -> RequestBuilder.Type + func getBuilder() -> RequestBuilder.Type +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift new file mode 100644 index 000000000000..72b89640eeb4 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -0,0 +1,54 @@ +// +// AnotherFakeAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class AnotherFakeAPI { + /** + To test special tags + + - parameter body: (body) client model + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + To test special tags + - PATCH /another-fake/dummy + - To test special tags and operation ID starting with number + - parameter body: (body) client model + - returns: RequestBuilder + */ + open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { + let path = "/another-fake/dummy" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift new file mode 100644 index 000000000000..cf92424d9cc1 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -0,0 +1,684 @@ +// +// FakeAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class FakeAPI { + /** + + - parameter body: (body) Input boolean as post body (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { + fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - POST /fake/outer/boolean + - Test serialization of outer boolean types + - parameter body: (body) Input boolean as post body (optional) + - returns: RequestBuilder + */ + open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { + let path = "/fake/outer/boolean" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter body: (body) Input composite as post body (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { + fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - POST /fake/outer/composite + - Test serialization of object with outer number type + - parameter body: (body) Input composite as post body (optional) + - returns: RequestBuilder + */ + open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { + let path = "/fake/outer/composite" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter body: (body) Input number as post body (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { + fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - POST /fake/outer/number + - Test serialization of outer number types + - parameter body: (body) Input number as post body (optional) + - returns: RequestBuilder + */ + open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { + let path = "/fake/outer/number" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter body: (body) Input string as post body (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - POST /fake/outer/string + - Test serialization of outer string types + - parameter body: (body) Input string as post body (optional) + - returns: RequestBuilder + */ + open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { + let path = "/fake/outer/string" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter body: (body) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - PUT /fake/body-with-file-schema + - For this test, the body for this request much reference a schema named `File`. + - parameter body: (body) + - returns: RequestBuilder + */ + open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { + let path = "/fake/body-with-file-schema" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + + - parameter query: (query) + - parameter body: (body) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - PUT /fake/body-with-query-params + - parameter query: (query) + - parameter body: (body) + - returns: RequestBuilder + */ + open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { + let path = "/fake/body-with-query-params" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ + "query": query.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + To test \"client\" model + + - parameter body: (body) client model + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + To test \"client\" model + - PATCH /fake + - To test \"client\" model + - parameter body: (body) client model + - returns: RequestBuilder + */ + open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { + let path = "/fake" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + + - parameter number: (form) None + - parameter double: (form) None + - parameter patternWithoutDelimiter: (form) None + - parameter byte: (form) None + - parameter integer: (form) None (optional) + - parameter int32: (form) None (optional) + - parameter int64: (form) None (optional) + - parameter float: (form) None (optional) + - parameter string: (form) None (optional) + - parameter binary: (form) None (optional) + - parameter date: (form) None (optional) + - parameter dateTime: (form) None (optional) + - parameter password: (form) None (optional) + - parameter callback: (form) None (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + - POST /fake + - Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + - BASIC: + - type: http + - name: http_basic_test + - parameter number: (form) None + - parameter double: (form) None + - parameter patternWithoutDelimiter: (form) None + - parameter byte: (form) None + - parameter integer: (form) None (optional) + - parameter int32: (form) None (optional) + - parameter int64: (form) None (optional) + - parameter float: (form) None (optional) + - parameter string: (form) None (optional) + - parameter binary: (form) None (optional) + - parameter date: (form) None (optional) + - parameter dateTime: (form) None (optional) + - parameter password: (form) None (optional) + - parameter callback: (form) None (optional) + - returns: RequestBuilder + */ + open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { + let path = "/fake" + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "integer": integer?.encodeToJSON(), + "int32": int32?.encodeToJSON(), + "int64": int64?.encodeToJSON(), + "number": number.encodeToJSON(), + "float": float?.encodeToJSON(), + "double": double.encodeToJSON(), + "string": string?.encodeToJSON(), + "pattern_without_delimiter": patternWithoutDelimiter.encodeToJSON(), + "byte": byte.encodeToJSON(), + "binary": binary?.encodeToJSON(), + "date": date?.encodeToJSON(), + "dateTime": dateTime?.encodeToJSON(), + "password": password?.encodeToJSON(), + "callback": callback?.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "application/x-www-form-urlencoded", + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + * enum for parameter enumHeaderStringArray + */ + public enum EnumHeaderStringArray_testEnumParameters: String, CaseIterable { + case greaterThan = ">" + case dollar = "$" + } + + /** + * enum for parameter enumHeaderString + */ + public enum EnumHeaderString_testEnumParameters: String, CaseIterable { + case abc = "_abc" + case efg = "-efg" + case xyz = "(xyz)" + } + + /** + * enum for parameter enumQueryStringArray + */ + public enum EnumQueryStringArray_testEnumParameters: String, CaseIterable { + case greaterThan = ">" + case dollar = "$" + } + + /** + * enum for parameter enumQueryString + */ + public enum EnumQueryString_testEnumParameters: String, CaseIterable { + case abc = "_abc" + case efg = "-efg" + case xyz = "(xyz)" + } + + /** + * enum for parameter enumQueryInteger + */ + public enum EnumQueryInteger_testEnumParameters: Int, CaseIterable { + case _1 = 1 + case number2 = -2 + } + + /** + * enum for parameter enumQueryDouble + */ + public enum EnumQueryDouble_testEnumParameters: Double, CaseIterable { + case _11 = 1.1 + case number12 = -1.2 + } + + /** + * enum for parameter enumFormStringArray + */ + public enum EnumFormStringArray_testEnumParameters: String, CaseIterable { + case greaterThan = ">" + case dollar = "$" + } + + /** + * enum for parameter enumFormString + */ + public enum EnumFormString_testEnumParameters: String, CaseIterable { + case abc = "_abc" + case efg = "-efg" + case xyz = "(xyz)" + } + + /** + To test enum parameters + + - parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional) + - parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg) + - parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional) + - parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg) + - parameter enumQueryInteger: (query) Query parameter enum test (double) (optional) + - parameter enumQueryDouble: (query) Query parameter enum test (double) (optional) + - parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar) + - parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + To test enum parameters + - GET /fake + - To test enum parameters + - parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional) + - parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg) + - parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional) + - parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg) + - parameter enumQueryInteger: (query) Query parameter enum test (double) (optional) + - parameter enumQueryDouble: (query) Query parameter enum test (double) (optional) + - parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar) + - parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg) + - returns: RequestBuilder + */ + open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { + let path = "/fake" + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "enum_form_string_array": enumFormStringArray?.encodeToJSON(), + "enum_form_string": enumFormString?.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ + "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), + "enum_query_string": enumQueryString?.encodeToJSON(), + "enum_query_integer": enumQueryInteger?.encodeToJSON(), + "enum_query_double": enumQueryDouble?.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "application/x-www-form-urlencoded", + "enum_header_string_array": enumHeaderStringArray?.encodeToJSON(), + "enum_header_string": enumHeaderString?.encodeToJSON(), + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Fake endpoint to test group parameters (optional) + + - parameter requiredStringGroup: (query) Required String in group parameters + - parameter requiredBooleanGroup: (header) Required Boolean in group parameters + - parameter requiredInt64Group: (query) Required Integer in group parameters + - parameter stringGroup: (query) String in group parameters (optional) + - parameter booleanGroup: (header) Boolean in group parameters (optional) + - parameter int64Group: (query) Integer in group parameters (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Fake endpoint to test group parameters (optional) + - DELETE /fake + - Fake endpoint to test group parameters (optional) + - parameter requiredStringGroup: (query) Required String in group parameters + - parameter requiredBooleanGroup: (header) Required Boolean in group parameters + - parameter requiredInt64Group: (query) Required Integer in group parameters + - parameter stringGroup: (query) String in group parameters (optional) + - parameter booleanGroup: (header) Boolean in group parameters (optional) + - parameter int64Group: (query) Integer in group parameters (optional) + - returns: RequestBuilder + */ + open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { + let path = "/fake" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ + "required_string_group": requiredStringGroup.encodeToJSON(), + "required_int64_group": requiredInt64Group.encodeToJSON(), + "string_group": stringGroup?.encodeToJSON(), + "int64_group": int64Group?.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + "required_boolean_group": requiredBooleanGroup.encodeToJSON(), + "boolean_group": booleanGroup?.encodeToJSON(), + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + test inline additionalProperties + + - parameter param: (body) request body + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + test inline additionalProperties + - POST /fake/inline-additionalProperties + - parameter param: (body) request body + - returns: RequestBuilder + */ + open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { + let path = "/fake/inline-additionalProperties" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + test json serialization of form data + + - parameter param: (form) field1 + - parameter param2: (form) field2 + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + test json serialization of form data + - GET /fake/jsonFormData + - parameter param: (form) field1 + - parameter param2: (form) field2 + - returns: RequestBuilder + */ + open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { + let path = "/fake/jsonFormData" + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "param": param.encodeToJSON(), + "param2": param2.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "application/x-www-form-urlencoded", + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift new file mode 100644 index 000000000000..d4d651664963 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -0,0 +1,57 @@ +// +// FakeClassnameTags123API.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class FakeClassnameTags123API { + /** + To test class name in snake case + + - parameter body: (body) client model + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + To test class name in snake case + - PATCH /fake_classname_test + - To test class name in snake case + - API Key: + - type: apiKey api_key_query (QUERY) + - name: api_key_query + - parameter body: (body) client model + - returns: RequestBuilder + */ + open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { + let path = "/fake_classname_test" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift new file mode 100644 index 000000000000..a1fe0d12b1da --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -0,0 +1,483 @@ +// +// PetAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class PetAPI { + /** + Add a new pet to the store + + - parameter body: (body) Pet object that needs to be added to the store + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Add a new pet to the store + - POST /pet + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter body: (body) Pet object that needs to be added to the store + - returns: RequestBuilder + */ + open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { + let path = "/pet" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Deletes a pet + + - parameter petId: (path) Pet id to delete + - parameter apiKey: (header) (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Deletes a pet + - DELETE /pet/{petId} + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter petId: (path) Pet id to delete + - parameter apiKey: (header) (optional) + - returns: RequestBuilder + */ + open class func deletePetWithRequestBuilder(petId: Int64, apiKey: String? = nil) -> RequestBuilder { + var path = "/pet/{petId}" + let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" + let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "api_key": apiKey?.encodeToJSON(), + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + * enum for parameter status + */ + public enum Status_findPetsByStatus: String, CaseIterable { + case available = "available" + case pending = "pending" + case sold = "sold" + } + + /** + Finds Pets by status + + - parameter status: (query) Status values that need to be considered for filter + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Finds Pets by status + - GET /pet/findByStatus + - Multiple status values can be provided with comma separated strings + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter status: (query) Status values that need to be considered for filter + - returns: RequestBuilder<[Pet]> + */ + open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { + let path = "/pet/findByStatus" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ + "status": status.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Finds Pets by tags + + - parameter tags: (query) Tags to filter by + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + @available(*, deprecated, message: "This operation is deprecated.") + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Finds Pets by tags + - GET /pet/findByTags + - Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter tags: (query) Tags to filter by + - returns: RequestBuilder<[Pet]> + */ + @available(*, deprecated, message: "This operation is deprecated.") + open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { + let path = "/pet/findByTags" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ + "tags": tags.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Find pet by ID + + - parameter petId: (path) ID of pet to return + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { + getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Find pet by ID + - GET /pet/{petId} + - Returns a single pet + - API Key: + - type: apiKey api_key + - name: api_key + - parameter petId: (path) ID of pet to return + - returns: RequestBuilder + */ + open class func getPetByIdWithRequestBuilder(petId: Int64) -> RequestBuilder { + var path = "/pet/{petId}" + let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" + let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Update an existing pet + + - parameter body: (body) Pet object that needs to be added to the store + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Update an existing pet + - PUT /pet + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter body: (body) Pet object that needs to be added to the store + - returns: RequestBuilder + */ + open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { + let path = "/pet" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Updates a pet in the store with form data + + - parameter petId: (path) ID of pet that needs to be updated + - parameter name: (form) Updated name of the pet (optional) + - parameter status: (form) Updated status of the pet (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Updates a pet in the store with form data + - POST /pet/{petId} + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter petId: (path) ID of pet that needs to be updated + - parameter name: (form) Updated name of the pet (optional) + - parameter status: (form) Updated status of the pet (optional) + - returns: RequestBuilder + */ + open class func updatePetWithFormWithRequestBuilder(petId: Int64, name: String? = nil, status: String? = nil) -> RequestBuilder { + var path = "/pet/{petId}" + let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" + let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "name": name?.encodeToJSON(), + "status": status?.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "application/x-www-form-urlencoded", + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + uploads an image + + - parameter petId: (path) ID of pet to update + - parameter additionalMetadata: (form) Additional data to pass to server (optional) + - parameter file: (form) file to upload (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + uploads an image + - POST /pet/{petId}/uploadImage + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter petId: (path) ID of pet to update + - parameter additionalMetadata: (form) Additional data to pass to server (optional) + - parameter file: (form) file to upload (optional) + - returns: RequestBuilder + */ + open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { + var path = "/pet/{petId}/uploadImage" + let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" + let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "additionalMetadata": additionalMetadata?.encodeToJSON(), + "file": file?.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "multipart/form-data", + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + uploads an image (required) + + - parameter petId: (path) ID of pet to update + - parameter requiredFile: (form) file to upload + - parameter additionalMetadata: (form) Additional data to pass to server (optional) + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + uploads an image (required) + - POST /fake/{petId}/uploadImageWithRequiredFile + - OAuth: + - type: oauth2 + - name: petstore_auth + - parameter petId: (path) ID of pet to update + - parameter requiredFile: (form) file to upload + - parameter additionalMetadata: (form) Additional data to pass to server (optional) + - returns: RequestBuilder + */ + open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { + var path = "/fake/{petId}/uploadImageWithRequiredFile" + let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" + let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let formParams: [String: Any?] = [ + "additionalMetadata": additionalMetadata?.encodeToJSON(), + "requiredFile": requiredFile.encodeToJSON(), + ] + + let nonNullParameters = APIHelper.rejectNil(formParams) + let parameters = APIHelper.convertBoolToString(nonNullParameters) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + "Content-Type": "multipart/form-data", + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift new file mode 100644 index 000000000000..501f11f5f219 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -0,0 +1,189 @@ +// +// StoreAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class StoreAPI { + /** + Delete purchase order by ID + + - parameter orderId: (path) ID of the order that needs to be deleted + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Delete purchase order by ID + - DELETE /store/order/{order_id} + - For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + - parameter orderId: (path) ID of the order that needs to be deleted + - returns: RequestBuilder + */ + open class func deleteOrderWithRequestBuilder(orderId: String) -> RequestBuilder { + var path = "/store/order/{order_id}" + let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" + let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Returns pet inventories by status + + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { + getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Returns pet inventories by status + - GET /store/inventory + - Returns a map of status codes to quantities + - API Key: + - type: apiKey api_key + - name: api_key + - returns: RequestBuilder<[String: Int]> + */ + open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { + let path = "/store/inventory" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Find purchase order by ID + + - parameter orderId: (path) ID of pet that needs to be fetched + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Find purchase order by ID + - GET /store/order/{order_id} + - For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + - parameter orderId: (path) ID of pet that needs to be fetched + - returns: RequestBuilder + */ + open class func getOrderByIdWithRequestBuilder(orderId: Int64) -> RequestBuilder { + var path = "/store/order/{order_id}" + let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" + let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Place an order for a pet + + - parameter body: (body) order placed for purchasing the pet + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Place an order for a pet + - POST /store/order + - parameter body: (body) order placed for purchasing the pet + - returns: RequestBuilder + */ + open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { + let path = "/store/order" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift new file mode 100644 index 000000000000..254474014d31 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -0,0 +1,366 @@ +// +// UserAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class UserAPI { + /** + Create user + + - parameter body: (body) Created user object + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Create user + - POST /user + - This can only be done by the logged in user. + - parameter body: (body) Created user object + - returns: RequestBuilder + */ + open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { + let path = "/user" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Creates list of users with given input array + + - parameter body: (body) List of user object + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Creates list of users with given input array + - POST /user/createWithArray + - parameter body: (body) List of user object + - returns: RequestBuilder + */ + open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { + let path = "/user/createWithArray" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Creates list of users with given input array + + - parameter body: (body) List of user object + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Creates list of users with given input array + - POST /user/createWithList + - parameter body: (body) List of user object + - returns: RequestBuilder + */ + open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { + let path = "/user/createWithList" + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Delete user + + - parameter username: (path) The name that needs to be deleted + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Delete user + - DELETE /user/{username} + - This can only be done by the logged in user. + - parameter username: (path) The name that needs to be deleted + - returns: RequestBuilder + */ + open class func deleteUserWithRequestBuilder(username: String) -> RequestBuilder { + var path = "/user/{username}" + let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" + let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Get user by user name + + - parameter username: (path) The name that needs to be fetched. Use user1 for testing. + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { + getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Get user by user name + - GET /user/{username} + - parameter username: (path) The name that needs to be fetched. Use user1 for testing. + - returns: RequestBuilder + */ + open class func getUserByNameWithRequestBuilder(username: String) -> RequestBuilder { + var path = "/user/{username}" + let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" + let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Logs user into the system + + - parameter username: (query) The user name for login + - parameter password: (query) The password for login in clear text + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Logs user into the system + - GET /user/login + - responseHeaders: [X-Rate-Limit(Int), X-Expires-After(Date)] + - parameter username: (query) The user name for login + - parameter password: (query) The password for login in clear text + - returns: RequestBuilder + */ + open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { + let path = "/user/login" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + var urlComponents = URLComponents(string: URLString) + urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ + "username": username.encodeToJSON(), + "password": password.encodeToJSON(), + ]) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Logs out current logged in user session + + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Logs out current logged in user session + - GET /user/logout + - returns: RequestBuilder + */ + open class func logoutUserWithRequestBuilder() -> RequestBuilder { + let path = "/user/logout" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + + /** + Updated user + + - parameter username: (path) name that need to be deleted + - parameter body: (body) Updated user object + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in + switch result { + case .success: + completion((), nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + Updated user + - PUT /user/{username} + - This can only be done by the logged in user. + - parameter username: (path) name that need to be deleted + - parameter body: (body) Updated user object + - returns: RequestBuilder + */ + open class func updateUserWithRequestBuilder(username: String, body: User) -> RequestBuilder { + var path = "/user/{username}" + let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" + let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" + path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) + let URLString = PetstoreClientAPI.basePath + path + let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + + return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift new file mode 100644 index 000000000000..09c82e53e132 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift @@ -0,0 +1,49 @@ +// +// CodableHelper.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class CodableHelper { + private static var customDateFormatter: DateFormatter? + private static var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter() + + private static var customJSONDecoder: JSONDecoder? + private static var defaultJSONDecoder: JSONDecoder = { + let decoder = JSONDecoder() + decoder.dateDecodingStrategy = .formatted(CodableHelper.dateFormatter) + return decoder + }() + + private static var customJSONEncoder: JSONEncoder? + private static var defaultJSONEncoder: JSONEncoder = { + let encoder = JSONEncoder() + encoder.dateEncodingStrategy = .formatted(CodableHelper.dateFormatter) + encoder.outputFormatting = .prettyPrinted + return encoder + }() + + public static var dateFormatter: DateFormatter { + get { return customDateFormatter ?? defaultDateFormatter } + set { customDateFormatter = newValue } + } + public static var jsonDecoder: JSONDecoder { + get { return customJSONDecoder ?? defaultJSONDecoder } + set { customJSONDecoder = newValue } + } + public static var jsonEncoder: JSONEncoder { + get { return customJSONEncoder ?? defaultJSONEncoder } + set { customJSONEncoder = newValue } + } + + open class func decode(_ type: T.Type, from data: Data) -> Swift.Result where T: Decodable { + return Swift.Result { try jsonDecoder.decode(type, from: data) } + } + + open class func encode(_ value: T) -> Swift.Result where T: Encodable { + return Swift.Result { try jsonEncoder.encode(value) } + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Configuration.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Configuration.swift new file mode 100644 index 000000000000..18edabbed782 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Configuration.swift @@ -0,0 +1,14 @@ +// Configuration.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class Configuration { + // This value is used to configure the date formatter that is used to serialize dates into JSON format. + // You must set it prior to encoding any dates, and it will only be read once. + @available(*, unavailable, message: "To set a different date format, use CodableHelper.dateFormatter instead.") + public static var dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift new file mode 100644 index 000000000000..3aef2d1d6c54 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -0,0 +1,227 @@ +// Extensions.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +extension Bool: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension Float: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension Int: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension Int32: JSONEncodable { + func encodeToJSON() -> Any { return NSNumber(value: self as Int32) } +} + +extension Int64: JSONEncodable { + func encodeToJSON() -> Any { return NSNumber(value: self as Int64) } +} + +extension Double: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension String: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension RawRepresentable where RawValue: JSONEncodable { + func encodeToJSON() -> Any { return self.rawValue as Any } +} + +private func encodeIfPossible(_ object: T) -> Any { + if let encodableObject = object as? JSONEncodable { + return encodableObject.encodeToJSON() + } else { + return object as Any + } +} + +extension Array: JSONEncodable { + func encodeToJSON() -> Any { + return self.map(encodeIfPossible) + } +} + +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + +extension Dictionary: JSONEncodable { + func encodeToJSON() -> Any { + var dictionary = [AnyHashable: Any]() + for (key, value) in self { + dictionary[key] = encodeIfPossible(value) + } + return dictionary as Any + } +} + +extension Data: JSONEncodable { + func encodeToJSON() -> Any { + return self.base64EncodedString(options: Data.Base64EncodingOptions()) + } +} + +extension Date: JSONEncodable { + func encodeToJSON() -> Any { + return CodableHelper.dateFormatter.string(from: self) as Any + } +} + +extension URL: JSONEncodable { + func encodeToJSON() -> Any { + return self + } +} + +extension UUID: JSONEncodable { + func encodeToJSON() -> Any { + return self.uuidString + } +} + +extension String: CodingKey { + + public var stringValue: String { + return self + } + + public init?(stringValue: String) { + self.init(stringLiteral: stringValue) + } + + public var intValue: Int? { + return nil + } + + public init?(intValue: Int) { + return nil + } + +} + +extension KeyedEncodingContainerProtocol { + + public mutating func encodeArray(_ values: [T], forKey key: Self.Key) throws where T: Encodable { + var arrayContainer = nestedUnkeyedContainer(forKey: key) + try arrayContainer.encode(contentsOf: values) + } + + public mutating func encodeArrayIfPresent(_ values: [T]?, forKey key: Self.Key) throws where T: Encodable { + if let values = values { + try encodeArray(values, forKey: key) + } + } + + public mutating func encodeMap(_ pairs: [Self.Key: T]) throws where T: Encodable { + for (key, value) in pairs { + try encode(value, forKey: key) + } + } + + public mutating func encodeMapIfPresent(_ pairs: [Self.Key: T]?) throws where T: Encodable { + if let pairs = pairs { + try encodeMap(pairs) + } + } + +} + +extension KeyedDecodingContainerProtocol { + + public func decodeArray(_ type: T.Type, forKey key: Self.Key) throws -> [T] where T: Decodable { + var tmpArray = [T]() + + var nestedContainer = try nestedUnkeyedContainer(forKey: key) + while !nestedContainer.isAtEnd { + let arrayValue = try nestedContainer.decode(T.self) + tmpArray.append(arrayValue) + } + + return tmpArray + } + + public func decodeArrayIfPresent(_ type: T.Type, forKey key: Self.Key) throws -> [T]? where T: Decodable { + var tmpArray: [T]? + + if contains(key) { + tmpArray = try decodeArray(T.self, forKey: key) + } + + return tmpArray + } + + public func decodeMap(_ type: T.Type, excludedKeys: Set) throws -> [Self.Key: T] where T: Decodable { + var map: [Self.Key: T] = [:] + + for key in allKeys { + if !excludedKeys.contains(key) { + let value = try decode(T.self, forKey: key) + map[key] = value + } + } + + return map + } + +} + +extension HTTPURLResponse { + var isStatusCodeSuccessful: Bool { + return Array(200 ..< 300).contains(statusCode) + } +} + +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} \ No newline at end of file diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift new file mode 100644 index 000000000000..b79e9f5e64d5 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift @@ -0,0 +1,53 @@ +// +// JSONDataEncoding.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct JSONDataEncoding { + + // MARK: Properties + + private static let jsonDataKey = "jsonData" + + // MARK: Encoding + + /// Creates a URL request by encoding parameters and applying them onto an existing request. + /// + /// - parameter urlRequest: The request to have parameters applied. + /// - parameter parameters: The parameters to apply. This should have a single key/value + /// pair with "jsonData" as the key and a Data object as the value. + /// + /// - throws: An `Error` if the encoding process encounters an error. + /// + /// - returns: The encoded request. + public func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) -> URLRequest { + var urlRequest = urlRequest + + guard let jsonData = parameters?[JSONDataEncoding.jsonDataKey] as? Data, !jsonData.isEmpty else { + return urlRequest + } + + if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { + urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + } + + urlRequest.httpBody = jsonData + + return urlRequest + } + + public static func encodingParameters(jsonData: Data?) -> [String: Any]? { + var returnedParams: [String: Any]? + if let jsonData = jsonData, !jsonData.isEmpty { + var params: [String: Any] = [:] + params[jsonDataKey] = jsonData + returnedParams = params + } + return returnedParams + } + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift new file mode 100644 index 000000000000..02f78ffb4705 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift @@ -0,0 +1,45 @@ +// +// JSONEncodingHelper.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class JSONEncodingHelper { + + open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? { + var params: [String: Any]? + + // Encode the Encodable object + if let encodableObj = encodableObj { + let encodeResult = CodableHelper.encode(encodableObj) + do { + let data = try encodeResult.get() + params = JSONDataEncoding.encodingParameters(jsonData: data) + } catch { + print(error.localizedDescription) + } + } + + return params + } + + open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? { + var params: [String: Any]? + + if let encodableObj = encodableObj { + do { + let data = try JSONSerialization.data(withJSONObject: encodableObj, options: .prettyPrinted) + params = JSONDataEncoding.encodingParameters(jsonData: data) + } catch { + print(error.localizedDescription) + return nil + } + } + + return params + } + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models.swift new file mode 100644 index 000000000000..96e26a20f7d6 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models.swift @@ -0,0 +1,54 @@ +// Models.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +protocol JSONEncodable { + func encodeToJSON() -> Any +} + +public enum ErrorResponse: Error { + case error(Int, Data?, URLResponse?, Error) +} + +public enum DownloadException: Error { + case responseDataMissing + case responseFailed + case requestMissing + case requestMissingPath + case requestMissingURL +} + +public enum DecodableRequestBuilderError: Error { + case emptyDataResponse + case nilHTTPResponse + case unsuccessfulHTTPStatusCode + case jsonDecoding(DecodingError) + case generalError(Error) +} + +open class Response { + public let statusCode: Int + public let header: [String: String] + public let body: T? + + public init(statusCode: Int, header: [String: String], body: T?) { + self.statusCode = statusCode + self.header = header + self.body = body + } + + public convenience init(response: HTTPURLResponse, body: T?) { + let rawHeader = response.allHeaderFields + var header = [String: String]() + for (key, value) in rawHeader { + if let key = key.base as? String, let value = value as? String { + header[key] = value + } + } + self.init(statusCode: response.statusCode, header: header, body: body) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift new file mode 100644 index 000000000000..7022f41580fb --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift @@ -0,0 +1,57 @@ +// +// AdditionalPropertiesAnyType.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesAnyType: Codable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } + public var additionalProperties: [String: AnyCodable] = [:] + + public subscript(key: String) -> AnyCodable? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap(AnyCodable.self, excludedKeys: nonAdditionalPropertyKeys) + } + + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift new file mode 100644 index 000000000000..f0ac1d5c0e0f --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift @@ -0,0 +1,57 @@ +// +// AdditionalPropertiesArray.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesArray: Codable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } + public var additionalProperties: [String: [AnyCodable]] = [:] + + public subscript(key: String) -> [AnyCodable]? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap([AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) + } + + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift new file mode 100644 index 000000000000..5879e1987646 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift @@ -0,0 +1,57 @@ +// +// AdditionalPropertiesBoolean.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesBoolean: Codable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } + public var additionalProperties: [String: Bool] = [:] + + public subscript(key: String) -> Bool? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + } + + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift new file mode 100644 index 000000000000..5e200855eb86 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -0,0 +1,33 @@ +// +// AdditionalPropertiesClass.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesClass: Codable { + + public var mapString: [String: String]? + public var mapMapString: [String: [String: String]]? + + public init(mapString: [String: String]? = nil, mapMapString: [String: [String: String]]? = nil) { + self.mapString = mapString + self.mapMapString = mapMapString + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case mapString = "map_string" + case mapMapString = "map_map_string" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapString, forKey: .mapString) + try container.encodeIfPresent(mapMapString, forKey: .mapMapString) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift new file mode 100644 index 000000000000..acfd7ae67bea --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift @@ -0,0 +1,57 @@ +// +// AdditionalPropertiesInteger.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesInteger: Codable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } + public var additionalProperties: [String: Int] = [:] + + public subscript(key: String) -> Int? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap(Int.self, excludedKeys: nonAdditionalPropertyKeys) + } + + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift new file mode 100644 index 000000000000..006997c5f6bf --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift @@ -0,0 +1,57 @@ +// +// AdditionalPropertiesNumber.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesNumber: Codable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } + public var additionalProperties: [String: Double] = [:] + + public subscript(key: String) -> Double? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap(Double.self, excludedKeys: nonAdditionalPropertyKeys) + } + + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift new file mode 100644 index 000000000000..adc288634476 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift @@ -0,0 +1,57 @@ +// +// AdditionalPropertiesObject.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesObject: Codable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } + public var additionalProperties: [String: [String: AnyCodable]] = [:] + + public subscript(key: String) -> [String: AnyCodable]? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap([String: AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) + } + + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift new file mode 100644 index 000000000000..eba32fc30e11 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift @@ -0,0 +1,57 @@ +// +// AdditionalPropertiesString.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct AdditionalPropertiesString: Codable { + + public var name: String? + + public init(name: String? = nil) { + self.name = name + } + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + } + public var additionalProperties: [String: String] = [:] + + public subscript(key: String) -> String? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + name = try container.decodeIfPresent(String.self, forKey: "name") + var nonAdditionalPropertyKeys = Set() + nonAdditionalPropertyKeys.insert("name") + additionalProperties = try container.decodeMap(String.self, excludedKeys: nonAdditionalPropertyKeys) + } + + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift new file mode 100644 index 000000000000..bd89731cf339 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -0,0 +1,33 @@ +// +// Animal.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct Animal: Codable { + + public var className: String + public var color: String? = "red" + + public init(className: String, color: String? = "red") { + self.className = className + self.color = color + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift new file mode 100644 index 000000000000..b20b894a1adb --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -0,0 +1,11 @@ +// +// AnimalFarm.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift new file mode 100644 index 000000000000..efc4b6998154 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -0,0 +1,37 @@ +// +// ApiResponse.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct ApiResponse: Codable { + + public var code: Int? + public var type: String? + public var message: String? + + public init(code: Int? = nil, type: String? = nil, message: String? = nil) { + self.code = code + self.type = type + self.message = message + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case code + case type + case message + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(code, forKey: .code) + try container.encodeIfPresent(type, forKey: .type) + try container.encodeIfPresent(message, forKey: .message) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift new file mode 100644 index 000000000000..8f042bcafcf9 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -0,0 +1,29 @@ +// +// ArrayOfArrayOfNumberOnly.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct ArrayOfArrayOfNumberOnly: Codable { + + public var arrayArrayNumber: [[Double]]? + + public init(arrayArrayNumber: [[Double]]? = nil) { + self.arrayArrayNumber = arrayArrayNumber + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case arrayArrayNumber = "ArrayArrayNumber" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift new file mode 100644 index 000000000000..216ddb963034 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -0,0 +1,29 @@ +// +// ArrayOfNumberOnly.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct ArrayOfNumberOnly: Codable { + + public var arrayNumber: [Double]? + + public init(arrayNumber: [Double]? = nil) { + self.arrayNumber = arrayNumber + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case arrayNumber = "ArrayNumber" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift new file mode 100644 index 000000000000..0c81613f51d4 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -0,0 +1,37 @@ +// +// ArrayTest.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct ArrayTest: Codable { + + public var arrayOfString: [String]? + public var arrayArrayOfInteger: [[Int64]]? + public var arrayArrayOfModel: [[ReadOnlyFirst]]? + + public init(arrayOfString: [String]? = nil, arrayArrayOfInteger: [[Int64]]? = nil, arrayArrayOfModel: [[ReadOnlyFirst]]? = nil) { + self.arrayOfString = arrayOfString + self.arrayArrayOfInteger = arrayArrayOfInteger + self.arrayArrayOfModel = arrayArrayOfModel + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case arrayOfString = "array_of_string" + case arrayArrayOfInteger = "array_array_of_integer" + case arrayArrayOfModel = "array_array_of_model" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) + try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) + try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift new file mode 100644 index 000000000000..842930f738d6 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/BigCat.swift @@ -0,0 +1,37 @@ +// +// BigCat.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct BigCat: Codable { + + public enum Kind: String, Codable, CaseIterable { + case lions = "lions" + case tigers = "tigers" + case leopards = "leopards" + case jaguars = "jaguars" + } + public var kind: Kind? + + public init(kind: Kind? = nil) { + self.kind = kind + } + public enum CodingKeys: String, CodingKey, CaseIterable { + case kind + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(kind, forKey: .kind) + } + + + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift new file mode 100644 index 000000000000..b7c03fe88219 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/BigCatAllOf.swift @@ -0,0 +1,37 @@ +// +// BigCatAllOf.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct BigCatAllOf: Codable { + + public enum Kind: String, Codable, CaseIterable { + case lions = "lions" + case tigers = "tigers" + case leopards = "leopards" + case jaguars = "jaguars" + } + public var kind: Kind? + + public init(kind: Kind? = nil) { + self.kind = kind + } + public enum CodingKeys: String, CodingKey, CaseIterable { + case kind + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(kind, forKey: .kind) + } + + + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift new file mode 100644 index 000000000000..86d95d462a9e --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -0,0 +1,50 @@ +// +// Capitalization.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct Capitalization: Codable { + + public var smallCamel: String? + public var capitalCamel: String? + public var smallSnake: String? + public var capitalSnake: String? + public var sCAETHFlowPoints: String? + /** Name of the pet */ + public var ATT_NAME: String? + + public init(smallCamel: String? = nil, capitalCamel: String? = nil, smallSnake: String? = nil, capitalSnake: String? = nil, sCAETHFlowPoints: String? = nil, ATT_NAME: String? = nil) { + self.smallCamel = smallCamel + self.capitalCamel = capitalCamel + self.smallSnake = smallSnake + self.capitalSnake = capitalSnake + self.sCAETHFlowPoints = sCAETHFlowPoints + self.ATT_NAME = ATT_NAME + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case smallCamel + case capitalCamel = "CapitalCamel" + case smallSnake = "small_Snake" + case capitalSnake = "Capital_Snake" + case sCAETHFlowPoints = "SCA_ETH_Flow_Points" + case ATT_NAME + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(smallCamel, forKey: .smallCamel) + try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) + try container.encodeIfPresent(smallSnake, forKey: .smallSnake) + try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) + try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) + try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift new file mode 100644 index 000000000000..8bcdaa52c2a5 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -0,0 +1,37 @@ +// +// Cat.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct Cat: Codable { + + public var className: String + public var color: String? = "red" + public var declawed: Bool? + + public init(className: String, color: String? = "red", declawed: Bool? = nil) { + self.className = className + self.color = color + self.declawed = declawed + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(declawed, forKey: .declawed) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift new file mode 100644 index 000000000000..af61714a29b9 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -0,0 +1,29 @@ +// +// CatAllOf.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct CatAllOf: Codable { + + public var declawed: Bool? + + public init(declawed: Bool? = nil) { + self.declawed = declawed + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case declawed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(declawed, forKey: .declawed) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Category.swift new file mode 100644 index 000000000000..0def88b1fc8c --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -0,0 +1,33 @@ +// +// Category.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct Category: Codable, Hashable { + + public var id: Int64? + public var name: String? = "default-name" + + public init(id: Int64? = nil, name: String? = "default-name") { + self.id = id + self.name = name + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encode(name, forKey: .name) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift new file mode 100644 index 000000000000..7a15b3a7c3b8 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -0,0 +1,30 @@ +// +// ClassModel.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +/** Model for testing model with \"_class\" property */ +public struct ClassModel: Codable { + + public var _class: String? + + public init(_class: String? = nil) { + self._class = _class + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case _class + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_class, forKey: ._class) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Client.swift new file mode 100644 index 000000000000..82451c589234 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -0,0 +1,29 @@ +// +// Client.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct Client: Codable { + + public var client: String? + + public init(client: String? = nil) { + self.client = client + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case client + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(client, forKey: .client) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift new file mode 100644 index 000000000000..f935e75ea71f --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -0,0 +1,37 @@ +// +// Dog.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct Dog: Codable { + + public var className: String + public var color: String? = "red" + public var breed: String? + + public init(className: String, color: String? = "red", breed: String? = nil) { + self.className = className + self.color = color + self.breed = breed + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case className + case color + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(className, forKey: .className) + try container.encodeIfPresent(color, forKey: .color) + try container.encodeIfPresent(breed, forKey: .breed) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift new file mode 100644 index 000000000000..378eb3c38478 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -0,0 +1,29 @@ +// +// DogAllOf.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct DogAllOf: Codable { + + public var breed: String? + + public init(breed: String? = nil) { + self.breed = breed + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case breed + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(breed, forKey: .breed) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift new file mode 100644 index 000000000000..6502415e4f7f --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -0,0 +1,41 @@ +// +// EnumArrays.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct EnumArrays: Codable { + + public enum JustSymbol: String, Codable, CaseIterable { + case greaterThanOrEqualTo = ">=" + case dollar = "$" + } + public enum ArrayEnum: String, Codable, CaseIterable { + case fish = "fish" + case crab = "crab" + } + public var justSymbol: JustSymbol? + public var arrayEnum: [ArrayEnum]? + + public init(justSymbol: JustSymbol? = nil, arrayEnum: [ArrayEnum]? = nil) { + self.justSymbol = justSymbol + self.arrayEnum = arrayEnum + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case justSymbol = "just_symbol" + case arrayEnum = "array_enum" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justSymbol, forKey: .justSymbol) + try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift new file mode 100644 index 000000000000..ab01cf297f8e --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -0,0 +1,15 @@ +// +// EnumClass.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public enum EnumClass: String, Codable, CaseIterable { + case abc = "_abc" + case efg = "-efg" + case xyz = "(xyz)" +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift new file mode 100644 index 000000000000..11883eb92b45 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -0,0 +1,63 @@ +// +// EnumTest.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct EnumTest: Codable { + + public enum EnumString: String, Codable, CaseIterable { + case upper = "UPPER" + case lower = "lower" + case empty = "" + } + public enum EnumStringRequired: String, Codable, CaseIterable { + case upper = "UPPER" + case lower = "lower" + case empty = "" + } + public enum EnumInteger: Int, Codable, CaseIterable { + case _1 = 1 + case number1 = -1 + } + public enum EnumNumber: Double, Codable, CaseIterable { + case _11 = 1.1 + case number12 = -1.2 + } + public var enumString: EnumString? + public var enumStringRequired: EnumStringRequired + public var enumInteger: EnumInteger? + public var enumNumber: EnumNumber? + public var outerEnum: OuterEnum? + + public init(enumString: EnumString? = nil, enumStringRequired: EnumStringRequired, enumInteger: EnumInteger? = nil, enumNumber: EnumNumber? = nil, outerEnum: OuterEnum? = nil) { + self.enumString = enumString + self.enumStringRequired = enumStringRequired + self.enumInteger = enumInteger + self.enumNumber = enumNumber + self.outerEnum = outerEnum + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case enumString = "enum_string" + case enumStringRequired = "enum_string_required" + case enumInteger = "enum_integer" + case enumNumber = "enum_number" + case outerEnum + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(enumString, forKey: .enumString) + try container.encode(enumStringRequired, forKey: .enumStringRequired) + try container.encodeIfPresent(enumInteger, forKey: .enumInteger) + try container.encodeIfPresent(enumNumber, forKey: .enumNumber) + try container.encodeIfPresent(outerEnum, forKey: .outerEnum) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/File.swift new file mode 100644 index 000000000000..beed22f4452b --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -0,0 +1,31 @@ +// +// File.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +/** Must be named `File` for test. */ +public struct File: Codable { + + /** Test capitalization */ + public var sourceURI: String? + + public init(sourceURI: String? = nil) { + self.sourceURI = sourceURI + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case sourceURI + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(sourceURI, forKey: .sourceURI) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift new file mode 100644 index 000000000000..286fd1363ecd --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -0,0 +1,33 @@ +// +// FileSchemaTestClass.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct FileSchemaTestClass: Codable { + + public var file: File? + public var files: [File]? + + public init(file: File? = nil, files: [File]? = nil) { + self.file = file + self.files = files + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case file + case files + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(file, forKey: .file) + try container.encodeIfPresent(files, forKey: .files) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift new file mode 100644 index 000000000000..0c3ae8c0c520 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -0,0 +1,77 @@ +// +// FormatTest.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct FormatTest: Codable { + + public var integer: Int? + public var int32: Int? + public var int64: Int64? + public var number: Double + public var float: Float? + public var double: Double? + public var string: String? + public var byte: Data + public var binary: URL? + public var date: Date + public var dateTime: Date? + public var uuid: UUID? + public var password: String + + public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { + self.integer = integer + self.int32 = int32 + self.int64 = int64 + self.number = number + self.float = float + self.double = double + self.string = string + self.byte = byte + self.binary = binary + self.date = date + self.dateTime = dateTime + self.uuid = uuid + self.password = password + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case integer + case int32 + case int64 + case number + case float + case double + case string + case byte + case binary + case date + case dateTime + case uuid + case password + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(integer, forKey: .integer) + try container.encodeIfPresent(int32, forKey: .int32) + try container.encodeIfPresent(int64, forKey: .int64) + try container.encode(number, forKey: .number) + try container.encodeIfPresent(float, forKey: .float) + try container.encodeIfPresent(double, forKey: .double) + try container.encodeIfPresent(string, forKey: .string) + try container.encode(byte, forKey: .byte) + try container.encodeIfPresent(binary, forKey: .binary) + try container.encode(date, forKey: .date) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encode(password, forKey: .password) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift new file mode 100644 index 000000000000..5139c97869ea --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -0,0 +1,33 @@ +// +// HasOnlyReadOnly.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct HasOnlyReadOnly: Codable { + + public var bar: String? + public var foo: String? + + public init(bar: String? = nil, foo: String? = nil) { + self.bar = bar + self.foo = foo + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case foo + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(foo, forKey: .foo) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/List.swift new file mode 100644 index 000000000000..5774c22584b5 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -0,0 +1,29 @@ +// +// List.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct List: Codable { + + public var _123list: String? + + public init(_123list: String? = nil) { + self._123list = _123list + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case _123list = "123-list" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_123list, forKey: ._123list) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift new file mode 100644 index 000000000000..245b554c5b18 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -0,0 +1,45 @@ +// +// MapTest.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct MapTest: Codable { + + public enum MapOfEnumString: String, Codable, CaseIterable { + case upper = "UPPER" + case lower = "lower" + } + public var mapMapOfString: [String: [String: String]]? + public var mapOfEnumString: [String: String]? + public var directMap: [String: Bool]? + public var indirectMap: StringBooleanMap? + + public init(mapMapOfString: [String: [String: String]]? = nil, mapOfEnumString: [String: String]? = nil, directMap: [String: Bool]? = nil, indirectMap: StringBooleanMap? = nil) { + self.mapMapOfString = mapMapOfString + self.mapOfEnumString = mapOfEnumString + self.directMap = directMap + self.indirectMap = indirectMap + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case mapMapOfString = "map_map_of_string" + case mapOfEnumString = "map_of_enum_string" + case directMap = "direct_map" + case indirectMap = "indirect_map" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) + try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) + try container.encodeIfPresent(directMap, forKey: .directMap) + try container.encodeIfPresent(indirectMap, forKey: .indirectMap) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift new file mode 100644 index 000000000000..353dfe0095c4 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -0,0 +1,37 @@ +// +// MixedPropertiesAndAdditionalPropertiesClass.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct MixedPropertiesAndAdditionalPropertiesClass: Codable { + + public var uuid: UUID? + public var dateTime: Date? + public var map: [String: Animal]? + + public init(uuid: UUID? = nil, dateTime: Date? = nil, map: [String: Animal]? = nil) { + self.uuid = uuid + self.dateTime = dateTime + self.map = map + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case uuid + case dateTime + case map + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(uuid, forKey: .uuid) + try container.encodeIfPresent(dateTime, forKey: .dateTime) + try container.encodeIfPresent(map, forKey: .map) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift new file mode 100644 index 000000000000..b05878fec393 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -0,0 +1,34 @@ +// +// Model200Response.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +/** Model for testing model name starting with number */ +public struct Model200Response: Codable { + + public var name: Int? + public var _class: String? + + public init(name: Int? = nil, _class: String? = nil) { + self.name = name + self._class = _class + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + case _class = "class" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(name, forKey: .name) + try container.encodeIfPresent(_class, forKey: ._class) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Name.swift new file mode 100644 index 000000000000..9f37e7a69d98 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -0,0 +1,42 @@ +// +// Name.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +/** Model for testing model name same as property name */ +public struct Name: Codable { + + public var name: Int + public var snakeCase: Int? + public var property: String? + public var _123number: Int? + + public init(name: Int, snakeCase: Int? = nil, property: String? = nil, _123number: Int? = nil) { + self.name = name + self.snakeCase = snakeCase + self.property = property + self._123number = _123number + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case name + case snakeCase = "snake_case" + case property + case _123number = "123Number" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(snakeCase, forKey: .snakeCase) + try container.encodeIfPresent(property, forKey: .property) + try container.encodeIfPresent(_123number, forKey: ._123number) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift new file mode 100644 index 000000000000..f790388df53b --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -0,0 +1,29 @@ +// +// NumberOnly.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct NumberOnly: Codable { + + public var justNumber: Double? + + public init(justNumber: Double? = nil) { + self.justNumber = justNumber + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case justNumber = "JustNumber" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(justNumber, forKey: .justNumber) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Order.swift new file mode 100644 index 000000000000..2b038b6a6a71 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -0,0 +1,55 @@ +// +// Order.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct Order: Codable { + + public enum Status: String, Codable, CaseIterable { + case placed = "placed" + case approved = "approved" + case delivered = "delivered" + } + public var id: Int64? + public var petId: Int64? + public var quantity: Int? + public var shipDate: Date? + /** Order Status */ + public var status: Status? + public var complete: Bool? = false + + public init(id: Int64? = nil, petId: Int64? = nil, quantity: Int? = nil, shipDate: Date? = nil, status: Status? = nil, complete: Bool? = false) { + self.id = id + self.petId = petId + self.quantity = quantity + self.shipDate = shipDate + self.status = status + self.complete = complete + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case petId + case quantity + case shipDate + case status + case complete + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(petId, forKey: .petId) + try container.encodeIfPresent(quantity, forKey: .quantity) + try container.encodeIfPresent(shipDate, forKey: .shipDate) + try container.encodeIfPresent(status, forKey: .status) + try container.encodeIfPresent(complete, forKey: .complete) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift new file mode 100644 index 000000000000..940ba71637a9 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -0,0 +1,37 @@ +// +// OuterComposite.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct OuterComposite: Codable { + + public var myNumber: Double? + public var myString: String? + public var myBoolean: Bool? + + public init(myNumber: Double? = nil, myString: String? = nil, myBoolean: Bool? = nil) { + self.myNumber = myNumber + self.myString = myString + self.myBoolean = myBoolean + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case myNumber = "my_number" + case myString = "my_string" + case myBoolean = "my_boolean" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(myNumber, forKey: .myNumber) + try container.encodeIfPresent(myString, forKey: .myString) + try container.encodeIfPresent(myBoolean, forKey: .myBoolean) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift new file mode 100644 index 000000000000..9bd6f3bef8f6 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -0,0 +1,15 @@ +// +// OuterEnum.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public enum OuterEnum: String, Codable, CaseIterable { + case placed = "placed" + case approved = "approved" + case delivered = "delivered" +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift new file mode 100644 index 000000000000..ea9ece39161f --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -0,0 +1,55 @@ +// +// Pet.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct Pet: Codable, Hashable { + + public enum Status: String, Codable, CaseIterable { + case available = "available" + case pending = "pending" + case sold = "sold" + } + public var id: Int64? + public var category: Category? + public var name: String + public var photoUrls: [String] + public var tags: [Tag]? + /** pet status in the store */ + public var status: Status? + + public init(id: Int64? = nil, category: Category? = nil, name: String, photoUrls: [String], tags: [Tag]? = nil, status: Status? = nil) { + self.id = id + self.category = category + self.name = name + self.photoUrls = photoUrls + self.tags = tags + self.status = status + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case category + case name + case photoUrls + case tags + case status + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(category, forKey: .category) + try container.encode(name, forKey: .name) + try container.encode(photoUrls, forKey: .photoUrls) + try container.encodeIfPresent(tags, forKey: .tags) + try container.encodeIfPresent(status, forKey: .status) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift new file mode 100644 index 000000000000..f54c2e9ddab5 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -0,0 +1,33 @@ +// +// ReadOnlyFirst.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct ReadOnlyFirst: Codable { + + public var bar: String? + public var baz: String? + + public init(bar: String? = nil, baz: String? = nil) { + self.bar = bar + self.baz = baz + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case bar + case baz + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(bar, forKey: .bar) + try container.encodeIfPresent(baz, forKey: .baz) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Return.swift new file mode 100644 index 000000000000..0053e62ba10e --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -0,0 +1,30 @@ +// +// Return.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +/** Model for testing reserved words */ +public struct Return: Codable { + + public var _return: Int? + + public init(_return: Int? = nil) { + self._return = _return + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case _return = "return" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(_return, forKey: ._return) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift new file mode 100644 index 000000000000..373a7e8fc8cd --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -0,0 +1,29 @@ +// +// SpecialModelName.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct SpecialModelName: Codable { + + public var specialPropertyName: Int64? + + public init(specialPropertyName: Int64? = nil) { + self.specialPropertyName = specialPropertyName + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case specialPropertyName = "$special[property.name]" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift new file mode 100644 index 000000000000..a103da75ea3e --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -0,0 +1,48 @@ +// +// StringBooleanMap.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct StringBooleanMap: Codable { + + + public enum CodingKeys: CodingKey, CaseIterable { + } + + public var additionalProperties: [String: Bool] = [:] + + public subscript(key: String) -> Bool? { + get { + if let value = additionalProperties[key] { + return value + } + return nil + } + + set { + additionalProperties[key] = newValue + } + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + var additionalPropertiesContainer = encoder.container(keyedBy: String.self) + try additionalPropertiesContainer.encodeMap(additionalProperties) + } + + // Decodable protocol methods + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: String.self) + + var nonAdditionalPropertyKeys = Set() + additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift new file mode 100644 index 000000000000..5d90c8a74009 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -0,0 +1,33 @@ +// +// Tag.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct Tag: Codable, Hashable { + + public var id: Int64? + public var name: String? + + public init(id: Int64? = nil, name: String? = nil) { + self.id = id + self.name = name + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case name + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(name, forKey: .name) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift new file mode 100644 index 000000000000..2c4ecd20ddea --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -0,0 +1,45 @@ +// +// TypeHolderDefault.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct TypeHolderDefault: Codable { + + public var stringItem: String = "what" + public var numberItem: Double + public var integerItem: Int + public var boolItem: Bool = true + public var arrayItem: [Int] + + public init(stringItem: String = "what", numberItem: Double, integerItem: Int, boolItem: Bool = true, arrayItem: [Int]) { + self.stringItem = stringItem + self.numberItem = numberItem + self.integerItem = integerItem + self.boolItem = boolItem + self.arrayItem = arrayItem + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case stringItem = "string_item" + case numberItem = "number_item" + case integerItem = "integer_item" + case boolItem = "bool_item" + case arrayItem = "array_item" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift new file mode 100644 index 000000000000..c6a93c87f8bc --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -0,0 +1,45 @@ +// +// TypeHolderExample.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct TypeHolderExample: Codable { + + public var stringItem: String + public var numberItem: Double + public var integerItem: Int + public var boolItem: Bool + public var arrayItem: [Int] + + public init(stringItem: String, numberItem: Double, integerItem: Int, boolItem: Bool, arrayItem: [Int]) { + self.stringItem = stringItem + self.numberItem = numberItem + self.integerItem = integerItem + self.boolItem = boolItem + self.arrayItem = arrayItem + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case stringItem = "string_item" + case numberItem = "number_item" + case integerItem = "integer_item" + case boolItem = "bool_item" + case arrayItem = "array_item" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(stringItem, forKey: .stringItem) + try container.encode(numberItem, forKey: .numberItem) + try container.encode(integerItem, forKey: .integerItem) + try container.encode(boolItem, forKey: .boolItem) + try container.encode(arrayItem, forKey: .arrayItem) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/User.swift new file mode 100644 index 000000000000..c905a34d516a --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -0,0 +1,58 @@ +// +// User.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct User: Codable { + + public var id: Int64? + public var username: String? + public var firstName: String? + public var lastName: String? + public var email: String? + public var password: String? + public var phone: String? + /** User Status */ + public var userStatus: Int? + + public init(id: Int64? = nil, username: String? = nil, firstName: String? = nil, lastName: String? = nil, email: String? = nil, password: String? = nil, phone: String? = nil, userStatus: Int? = nil) { + self.id = id + self.username = username + self.firstName = firstName + self.lastName = lastName + self.email = email + self.password = password + self.phone = phone + self.userStatus = userStatus + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case id + case username + case firstName + case lastName + case email + case password + case phone + case userStatus + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(id, forKey: .id) + try container.encodeIfPresent(username, forKey: .username) + try container.encodeIfPresent(firstName, forKey: .firstName) + try container.encodeIfPresent(lastName, forKey: .lastName) + try container.encodeIfPresent(email, forKey: .email) + try container.encodeIfPresent(password, forKey: .password) + try container.encodeIfPresent(phone, forKey: .phone) + try container.encodeIfPresent(userStatus, forKey: .userStatus) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift new file mode 100644 index 000000000000..896202b00ec4 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/XmlItem.swift @@ -0,0 +1,143 @@ +// +// XmlItem.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +import AnyCodable + +public struct XmlItem: Codable { + + public var attributeString: String? + public var attributeNumber: Double? + public var attributeInteger: Int? + public var attributeBoolean: Bool? + public var wrappedArray: [Int]? + public var nameString: String? + public var nameNumber: Double? + public var nameInteger: Int? + public var nameBoolean: Bool? + public var nameArray: [Int]? + public var nameWrappedArray: [Int]? + public var prefixString: String? + public var prefixNumber: Double? + public var prefixInteger: Int? + public var prefixBoolean: Bool? + public var prefixArray: [Int]? + public var prefixWrappedArray: [Int]? + public var namespaceString: String? + public var namespaceNumber: Double? + public var namespaceInteger: Int? + public var namespaceBoolean: Bool? + public var namespaceArray: [Int]? + public var namespaceWrappedArray: [Int]? + public var prefixNsString: String? + public var prefixNsNumber: Double? + public var prefixNsInteger: Int? + public var prefixNsBoolean: Bool? + public var prefixNsArray: [Int]? + public var prefixNsWrappedArray: [Int]? + + public init(attributeString: String? = nil, attributeNumber: Double? = nil, attributeInteger: Int? = nil, attributeBoolean: Bool? = nil, wrappedArray: [Int]? = nil, nameString: String? = nil, nameNumber: Double? = nil, nameInteger: Int? = nil, nameBoolean: Bool? = nil, nameArray: [Int]? = nil, nameWrappedArray: [Int]? = nil, prefixString: String? = nil, prefixNumber: Double? = nil, prefixInteger: Int? = nil, prefixBoolean: Bool? = nil, prefixArray: [Int]? = nil, prefixWrappedArray: [Int]? = nil, namespaceString: String? = nil, namespaceNumber: Double? = nil, namespaceInteger: Int? = nil, namespaceBoolean: Bool? = nil, namespaceArray: [Int]? = nil, namespaceWrappedArray: [Int]? = nil, prefixNsString: String? = nil, prefixNsNumber: Double? = nil, prefixNsInteger: Int? = nil, prefixNsBoolean: Bool? = nil, prefixNsArray: [Int]? = nil, prefixNsWrappedArray: [Int]? = nil) { + self.attributeString = attributeString + self.attributeNumber = attributeNumber + self.attributeInteger = attributeInteger + self.attributeBoolean = attributeBoolean + self.wrappedArray = wrappedArray + self.nameString = nameString + self.nameNumber = nameNumber + self.nameInteger = nameInteger + self.nameBoolean = nameBoolean + self.nameArray = nameArray + self.nameWrappedArray = nameWrappedArray + self.prefixString = prefixString + self.prefixNumber = prefixNumber + self.prefixInteger = prefixInteger + self.prefixBoolean = prefixBoolean + self.prefixArray = prefixArray + self.prefixWrappedArray = prefixWrappedArray + self.namespaceString = namespaceString + self.namespaceNumber = namespaceNumber + self.namespaceInteger = namespaceInteger + self.namespaceBoolean = namespaceBoolean + self.namespaceArray = namespaceArray + self.namespaceWrappedArray = namespaceWrappedArray + self.prefixNsString = prefixNsString + self.prefixNsNumber = prefixNsNumber + self.prefixNsInteger = prefixNsInteger + self.prefixNsBoolean = prefixNsBoolean + self.prefixNsArray = prefixNsArray + self.prefixNsWrappedArray = prefixNsWrappedArray + } + public enum CodingKeys: String, CodingKey, CaseIterable { + case attributeString = "attribute_string" + case attributeNumber = "attribute_number" + case attributeInteger = "attribute_integer" + case attributeBoolean = "attribute_boolean" + case wrappedArray = "wrapped_array" + case nameString = "name_string" + case nameNumber = "name_number" + case nameInteger = "name_integer" + case nameBoolean = "name_boolean" + case nameArray = "name_array" + case nameWrappedArray = "name_wrapped_array" + case prefixString = "prefix_string" + case prefixNumber = "prefix_number" + case prefixInteger = "prefix_integer" + case prefixBoolean = "prefix_boolean" + case prefixArray = "prefix_array" + case prefixWrappedArray = "prefix_wrapped_array" + case namespaceString = "namespace_string" + case namespaceNumber = "namespace_number" + case namespaceInteger = "namespace_integer" + case namespaceBoolean = "namespace_boolean" + case namespaceArray = "namespace_array" + case namespaceWrappedArray = "namespace_wrapped_array" + case prefixNsString = "prefix_ns_string" + case prefixNsNumber = "prefix_ns_number" + case prefixNsInteger = "prefix_ns_integer" + case prefixNsBoolean = "prefix_ns_boolean" + case prefixNsArray = "prefix_ns_array" + case prefixNsWrappedArray = "prefix_ns_wrapped_array" + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(attributeString, forKey: .attributeString) + try container.encodeIfPresent(attributeNumber, forKey: .attributeNumber) + try container.encodeIfPresent(attributeInteger, forKey: .attributeInteger) + try container.encodeIfPresent(attributeBoolean, forKey: .attributeBoolean) + try container.encodeIfPresent(wrappedArray, forKey: .wrappedArray) + try container.encodeIfPresent(nameString, forKey: .nameString) + try container.encodeIfPresent(nameNumber, forKey: .nameNumber) + try container.encodeIfPresent(nameInteger, forKey: .nameInteger) + try container.encodeIfPresent(nameBoolean, forKey: .nameBoolean) + try container.encodeIfPresent(nameArray, forKey: .nameArray) + try container.encodeIfPresent(nameWrappedArray, forKey: .nameWrappedArray) + try container.encodeIfPresent(prefixString, forKey: .prefixString) + try container.encodeIfPresent(prefixNumber, forKey: .prefixNumber) + try container.encodeIfPresent(prefixInteger, forKey: .prefixInteger) + try container.encodeIfPresent(prefixBoolean, forKey: .prefixBoolean) + try container.encodeIfPresent(prefixArray, forKey: .prefixArray) + try container.encodeIfPresent(prefixWrappedArray, forKey: .prefixWrappedArray) + try container.encodeIfPresent(namespaceString, forKey: .namespaceString) + try container.encodeIfPresent(namespaceNumber, forKey: .namespaceNumber) + try container.encodeIfPresent(namespaceInteger, forKey: .namespaceInteger) + try container.encodeIfPresent(namespaceBoolean, forKey: .namespaceBoolean) + try container.encodeIfPresent(namespaceArray, forKey: .namespaceArray) + try container.encodeIfPresent(namespaceWrappedArray, forKey: .namespaceWrappedArray) + try container.encodeIfPresent(prefixNsString, forKey: .prefixNsString) + try container.encodeIfPresent(prefixNsNumber, forKey: .prefixNsNumber) + try container.encodeIfPresent(prefixNsInteger, forKey: .prefixNsInteger) + try container.encodeIfPresent(prefixNsBoolean, forKey: .prefixNsBoolean) + try container.encodeIfPresent(prefixNsArray, forKey: .prefixNsArray) + try container.encodeIfPresent(prefixNsWrappedArray, forKey: .prefixNsWrappedArray) + } + + + +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift new file mode 100644 index 000000000000..e06208074cd9 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift @@ -0,0 +1,44 @@ +// +// OpenISO8601DateFormatter.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +// https://stackoverflow.com/a/50281094/976628 +public class OpenISO8601DateFormatter: DateFormatter { + static let withoutSeconds: DateFormatter = { + let formatter = DateFormatter() + formatter.calendar = Calendar(identifier: .iso8601) + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.timeZone = TimeZone(secondsFromGMT: 0) + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" + return formatter + }() + + private func setup() { + calendar = Calendar(identifier: .iso8601) + locale = Locale(identifier: "en_US_POSIX") + timeZone = TimeZone(secondsFromGMT: 0) + dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" + } + + override init() { + super.init() + setup() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + setup() + } + + override public func date(from string: String) -> Date? { + if let result = super.date(from: string) { + return result + } + return OpenISO8601DateFormatter.withoutSeconds.date(from: string) + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift new file mode 100644 index 000000000000..acf7ff4031bd --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift @@ -0,0 +1,36 @@ +// SynchronizedDictionary.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +internal struct SynchronizedDictionary { + + private var dictionary = [K: V]() + private let queue = DispatchQueue( + label: "SynchronizedDictionary", + qos: DispatchQoS.userInitiated, + attributes: [DispatchQueue.Attributes.concurrent], + autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, + target: nil + ) + + internal subscript(key: K) -> V? { + get { + var value: V? + + queue.sync { + value = self.dictionary[key] + } + + return value + } + set { + queue.sync(flags: DispatchWorkItemFlags.barrier) { + self.dictionary[key] = newValue + } + } + } +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift new file mode 100644 index 000000000000..52b2071ec1aa --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -0,0 +1,606 @@ +// URLSessionImplementations.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +#if !os(macOS) +import MobileCoreServices +#endif + +class URLSessionRequestBuilderFactory: RequestBuilderFactory { + func getNonDecodableBuilder() -> RequestBuilder.Type { + return URLSessionRequestBuilder.self + } + + func getBuilder() -> RequestBuilder.Type { + return URLSessionDecodableRequestBuilder.self + } +} + +// Store the URLSession to retain its reference +private var urlSessionStore = SynchronizedDictionary() + +open class URLSessionRequestBuilder: RequestBuilder { + + /** + May be assigned if you want to control the authentication challenges. + */ + public var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? + + /** + May be assigned if you want to do any of those things: + - control the task completion + - intercept and handle errors like authorization + - retry the request. + */ + @available(*, deprecated, message: "Please override execute() method to intercept and handle errors like authorization or retry the request. Check the Wiki for more info. https://github.com/OpenAPITools/openapi-generator/wiki/FAQ#how-do-i-implement-bearer-token-authentication-with-urlsession-on-the-swift-api-client") + public var taskCompletionShouldRetry: ((Data?, URLResponse?, Error?, @escaping (Bool) -> Void) -> Void)? + + required public init(method: String, URLString: String, parameters: [String: Any]?, headers: [String: String] = [:]) { + super.init(method: method, URLString: URLString, parameters: parameters, headers: headers) + } + + /** + May be overridden by a subclass if you want to control the URLSession + configuration. + */ + open func createURLSession() -> URLSession { + let configuration = URLSessionConfiguration.default + configuration.httpAdditionalHeaders = buildHeaders() + let sessionDelegate = SessionDelegate() + sessionDelegate.credential = credential + sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge + return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil) + } + + /** + May be overridden by a subclass if you want to control the Content-Type + that is given to an uploaded form part. + + Return nil to use the default behavior (inferring the Content-Type from + the file extension). Return the desired Content-Type otherwise. + */ + open func contentTypeForFormPart(fileURL: URL) -> String? { + return nil + } + + /** + May be overridden by a subclass if you want to control the URLRequest + configuration (e.g. to override the cache policy). + */ + open func createURLRequest(urlSession: URLSession, method: HTTPMethod, encoding: ParameterEncoding, headers: [String: String]) throws -> URLRequest { + + guard let url = URL(string: URLString) else { + throw DownloadException.requestMissingURL + } + + var originalRequest = URLRequest(url: url) + + originalRequest.httpMethod = method.rawValue + + headers.forEach { key, value in + originalRequest.setValue(value, forHTTPHeaderField: key) + } + + buildHeaders().forEach { key, value in + originalRequest.setValue(value, forHTTPHeaderField: key) + } + + let modifiedRequest = try encoding.encode(originalRequest, with: parameters) + + return modifiedRequest + } + + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + let urlSessionId = UUID().uuidString + // Create a new manager for each request to customize its request header + let urlSession = createURLSession() + urlSessionStore[urlSessionId] = urlSession + + guard let xMethod = HTTPMethod(rawValue: method) else { + fatalError("Unsuported Http method - \(method)") + } + + let encoding: ParameterEncoding + + switch xMethod { + case .get, .head: + encoding = URLEncoding() + + case .options, .post, .put, .patch, .delete, .trace, .connect: + let contentType = headers["Content-Type"] ?? "application/json" + + if contentType == "application/json" { + encoding = JSONDataEncoding() + } else if contentType == "multipart/form-data" { + encoding = FormDataEncoding(contentTypeForFormPart: contentTypeForFormPart(fileURL:)) + } else if contentType == "application/x-www-form-urlencoded" { + encoding = FormURLEncoding() + } else { + fatalError("Unsuported Media Type - \(contentType)") + } + } + + let cleanupRequest = { + urlSessionStore[urlSessionId]?.finishTasksAndInvalidate() + urlSessionStore[urlSessionId] = nil + } + + do { + let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) + + let dataTask = urlSession.dataTask(with: request) { data, response, error in + + if let taskCompletionShouldRetry = self.taskCompletionShouldRetry { + + taskCompletionShouldRetry(data, response, error) { shouldRetry in + + if shouldRetry { + cleanupRequest() + self.execute(apiResponseQueue, completion) + } else { + apiResponseQueue.async { + self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion) + cleanupRequest() + } + } + } + } else { + apiResponseQueue.async { + self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion) + cleanupRequest() + } + } + } + + if #available(iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0, *) { + onProgressReady?(dataTask.progress) + } + + dataTask.resume() + + } catch { + apiResponseQueue.async { + cleanupRequest() + completion(.failure(ErrorResponse.error(415, nil, nil, error))) + } + } + } + + fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + + if let error = error { + completion(.failure(ErrorResponse.error(-1, data, response, error))) + return + } + + guard let httpResponse = response as? HTTPURLResponse else { + completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse))) + return + } + + guard httpResponse.isStatusCodeSuccessful else { + completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) + return + } + + switch T.self { + case is String.Type: + + let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? "" + + completion(.success(Response(response: httpResponse, body: body as? T))) + + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } + + let filePath = documentsDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + + case is Void.Type: + + completion(.success(Response(response: httpResponse, body: nil))) + + default: + + completion(.success(Response(response: httpResponse, body: data as? T))) + } + + } + + open func buildHeaders() -> [String: String] { + var httpHeaders: [String: String] = [:] + for (key, value) in headers { + httpHeaders[key] = value + } + for (key, value) in PetstoreClientAPI.customHeaders { + httpHeaders[key] = value + } + return httpHeaders + } + + fileprivate func getFileName(fromContentDisposition contentDisposition: String?) -> String? { + + guard let contentDisposition = contentDisposition else { + return nil + } + + let items = contentDisposition.components(separatedBy: ";") + + var filename: String? + + for contentItem in items { + + let filenameKey = "filename=" + guard let range = contentItem.range(of: filenameKey) else { + break + } + + filename = contentItem + return filename? + .replacingCharacters(in: range, with: "") + .replacingOccurrences(of: "\"", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) + } + + return filename + + } + + fileprivate func getPath(from url: URL) throws -> String { + + guard var path = URLComponents(url: url, resolvingAgainstBaseURL: true)?.path else { + throw DownloadException.requestMissingPath + } + + if path.hasPrefix("/") { + path.remove(at: path.startIndex) + } + + return path + + } + + fileprivate func getURL(from urlRequest: URLRequest) throws -> URL { + + guard let url = urlRequest.url else { + throw DownloadException.requestMissingURL + } + + return url + } + +} + +open class URLSessionDecodableRequestBuilder: URLSessionRequestBuilder { + override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + + if let error = error { + completion(.failure(ErrorResponse.error(-1, data, response, error))) + return + } + + guard let httpResponse = response as? HTTPURLResponse else { + completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse))) + return + } + + guard httpResponse.isStatusCodeSuccessful else { + completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) + return + } + + switch T.self { + case is String.Type: + + let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? "" + + completion(.success(Response(response: httpResponse, body: body as? T))) + + case is Void.Type: + + completion(.success(Response(response: httpResponse, body: nil))) + + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + + default: + + guard let data = data, !data.isEmpty else { + completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse))) + return + } + + let decodeResult = CodableHelper.decode(T.self, from: data) + + switch decodeResult { + case let .success(decodableObj): + completion(.success(Response(response: httpResponse, body: decodableObj))) + case let .failure(error): + completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error))) + } + } + } +} + +private class SessionDelegate: NSObject, URLSessionDelegate, URLSessionDataDelegate { + + var credential: URLCredential? + + var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? + + func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + + var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling + + var credential: URLCredential? + + if let taskDidReceiveChallenge = taskDidReceiveChallenge { + (disposition, credential) = taskDidReceiveChallenge(session, task, challenge) + } else { + if challenge.previousFailureCount > 0 { + disposition = .rejectProtectionSpace + } else { + credential = self.credential ?? session.configuration.urlCredentialStorage?.defaultCredential(for: challenge.protectionSpace) + + if credential != nil { + disposition = .useCredential + } + } + } + + completionHandler(disposition, credential) + } +} + +public enum HTTPMethod: String { + case options = "OPTIONS" + case get = "GET" + case head = "HEAD" + case post = "POST" + case put = "PUT" + case patch = "PATCH" + case delete = "DELETE" + case trace = "TRACE" + case connect = "CONNECT" +} + +public protocol ParameterEncoding { + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest +} + +private class URLEncoding: ParameterEncoding { + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { + + var urlRequest = urlRequest + + guard let parameters = parameters else { return urlRequest } + + guard let url = urlRequest.url else { + throw DownloadException.requestMissingURL + } + + if var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false), !parameters.isEmpty { + urlComponents.queryItems = APIHelper.mapValuesToQueryItems(parameters) + urlRequest.url = urlComponents.url + } + + return urlRequest + } +} + +private class FormDataEncoding: ParameterEncoding { + + let contentTypeForFormPart: (_ fileURL: URL) -> String? + + init(contentTypeForFormPart: @escaping (_ fileURL: URL) -> String?) { + self.contentTypeForFormPart = contentTypeForFormPart + } + + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { + + var urlRequest = urlRequest + + guard let parameters = parameters, !parameters.isEmpty else { + return urlRequest + } + + let boundary = "Boundary-\(UUID().uuidString)" + + urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") + + for (key, value) in parameters { + switch value { + case let fileURL as URL: + + urlRequest = try configureFileUploadRequest( + urlRequest: urlRequest, + boundary: boundary, + name: key, + fileURL: fileURL + ) + + case let string as String: + + if let data = string.data(using: .utf8) { + urlRequest = configureDataUploadRequest( + urlRequest: urlRequest, + boundary: boundary, + name: key, + data: data + ) + } + + case let number as NSNumber: + + if let data = number.stringValue.data(using: .utf8) { + urlRequest = configureDataUploadRequest( + urlRequest: urlRequest, + boundary: boundary, + name: key, + data: data + ) + } + + default: + fatalError("Unprocessable value \(value) with key \(key)") + } + } + + var body = urlRequest.httpBody.orEmpty + + body.append("\r\n--\(boundary)--\r\n") + + urlRequest.httpBody = body + + return urlRequest + } + + private func configureFileUploadRequest(urlRequest: URLRequest, boundary: String, name: String, fileURL: URL) throws -> URLRequest { + + var urlRequest = urlRequest + + var body = urlRequest.httpBody.orEmpty + + let fileData = try Data(contentsOf: fileURL) + + let mimetype = contentTypeForFormPart(fileURL) ?? mimeType(for: fileURL) + + let fileName = fileURL.lastPathComponent + + // If we already added something then we need an additional newline. + if body.count > 0 { + body.append("\r\n") + } + + // Value boundary. + body.append("--\(boundary)\r\n") + + // Value headers. + body.append("Content-Disposition: form-data; name=\"\(name)\"; filename=\"\(fileName)\"\r\n") + body.append("Content-Type: \(mimetype)\r\n") + + // Separate headers and body. + body.append("\r\n") + + // The value data. + body.append(fileData) + + urlRequest.httpBody = body + + return urlRequest + } + + private func configureDataUploadRequest(urlRequest: URLRequest, boundary: String, name: String, data: Data) -> URLRequest { + + var urlRequest = urlRequest + + var body = urlRequest.httpBody.orEmpty + + // If we already added something then we need an additional newline. + if body.count > 0 { + body.append("\r\n") + } + + // Value boundary. + body.append("--\(boundary)\r\n") + + // Value headers. + body.append("Content-Disposition: form-data; name=\"\(name)\"\r\n") + + // Separate headers and body. + body.append("\r\n") + + // The value data. + body.append(data) + + urlRequest.httpBody = body + + return urlRequest + + } + + func mimeType(for url: URL) -> String { + let pathExtension = url.pathExtension + + if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() { + if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() { + return mimetype as String + } + } + return "application/octet-stream" + } + +} + +private class FormURLEncoding: ParameterEncoding { + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { + + var urlRequest = urlRequest + + var requestBodyComponents = URLComponents() + requestBodyComponents.queryItems = APIHelper.mapValuesToQueryItems(parameters ?? [:]) + + if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { + urlRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") + } + + urlRequest.httpBody = requestBodyComponents.query?.data(using: .utf8) + + return urlRequest + } +} + +private extension Data { + /// Append string to Data + /// + /// Rather than littering my code with calls to `dataUsingEncoding` to convert strings to Data, and then add that data to the Data, this wraps it in a nice convenient little extension to Data. This converts using UTF-8. + /// + /// - parameter string: The string to be added to the `Data`. + + mutating func append(_ string: String) { + if let data = string.data(using: .utf8) { + append(data) + } + } +} + +private extension Optional where Wrapped == Data { + var orEmpty: Data { + self ?? Data() + } +} + +extension JSONDataEncoding: ParameterEncoding {} diff --git a/samples/client/petstore/swift5/x-swift-hashable/README.md b/samples/client/petstore/swift5/x-swift-hashable/README.md new file mode 100644 index 000000000000..1725415f7e04 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/README.md @@ -0,0 +1,141 @@ +# Swift5 API client for PetstoreClient + +This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + +## Overview +This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [openapi-spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate an API client. + +- API version: 1.0.0 +- Package version: +- Build package: org.openapitools.codegen.languages.Swift5ClientCodegen + +## Installation + +### Carthage + +Run `carthage update` + +### CocoaPods + +Run `pod install` + +## Documentation for API Endpoints + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*AnotherFakeAPI* | [**call123testSpecialTags**](docs/AnotherFakeAPI.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*FakeAPI* | [**fakeOuterBooleanSerialize**](docs/FakeAPI.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeAPI* | [**fakeOuterCompositeSerialize**](docs/FakeAPI.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeAPI* | [**fakeOuterNumberSerialize**](docs/FakeAPI.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeAPI* | [**fakeOuterStringSerialize**](docs/FakeAPI.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeAPI* | [**testBodyWithFileSchema**](docs/FakeAPI.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeAPI* | [**testBodyWithQueryParams**](docs/FakeAPI.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeAPI* | [**testClientModel**](docs/FakeAPI.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeAPI* | [**testEndpointParameters**](docs/FakeAPI.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeAPI* | [**testEnumParameters**](docs/FakeAPI.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeAPI* | [**testGroupParameters**](docs/FakeAPI.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeAPI* | [**testInlineAdditionalProperties**](docs/FakeAPI.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeAPI* | [**testJsonFormData**](docs/FakeAPI.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeClassnameTags123API* | [**testClassname**](docs/FakeClassnameTags123API.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetAPI* | [**addPet**](docs/PetAPI.md#addpet) | **POST** /pet | Add a new pet to the store +*PetAPI* | [**deletePet**](docs/PetAPI.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetAPI* | [**findPetsByStatus**](docs/PetAPI.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetAPI* | [**findPetsByTags**](docs/PetAPI.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetAPI* | [**getPetById**](docs/PetAPI.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetAPI* | [**updatePet**](docs/PetAPI.md#updatepet) | **PUT** /pet | Update an existing pet +*PetAPI* | [**updatePetWithForm**](docs/PetAPI.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetAPI* | [**uploadFile**](docs/PetAPI.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetAPI* | [**uploadFileWithRequiredFile**](docs/PetAPI.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreAPI* | [**deleteOrder**](docs/StoreAPI.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreAPI* | [**getInventory**](docs/StoreAPI.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreAPI* | [**getOrderById**](docs/StoreAPI.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreAPI* | [**placeOrder**](docs/StoreAPI.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserAPI* | [**createUser**](docs/UserAPI.md#createuser) | **POST** /user | Create user +*UserAPI* | [**createUsersWithArrayInput**](docs/UserAPI.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserAPI* | [**createUsersWithListInput**](docs/UserAPI.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserAPI* | [**deleteUser**](docs/UserAPI.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserAPI* | [**getUserByName**](docs/UserAPI.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserAPI* | [**loginUser**](docs/UserAPI.md#loginuser) | **GET** /user/login | Logs user into the system +*UserAPI* | [**logoutUser**](docs/UserAPI.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserAPI* | [**updateUser**](docs/UserAPI.md#updateuser) | **PUT** /user/{username} | Updated user + + +## Documentation For Models + + - [AdditionalPropertiesClass](docs/AdditionalPropertiesClass.md) + - [Animal](docs/Animal.md) + - [AnimalFarm](docs/AnimalFarm.md) + - [ApiResponse](docs/ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md) + - [ArrayTest](docs/ArrayTest.md) + - [Capitalization](docs/Capitalization.md) + - [Cat](docs/Cat.md) + - [CatAllOf](docs/CatAllOf.md) + - [Category](docs/Category.md) + - [ClassModel](docs/ClassModel.md) + - [Client](docs/Client.md) + - [Dog](docs/Dog.md) + - [DogAllOf](docs/DogAllOf.md) + - [EnumArrays](docs/EnumArrays.md) + - [EnumClass](docs/EnumClass.md) + - [EnumTest](docs/EnumTest.md) + - [File](docs/File.md) + - [FileSchemaTestClass](docs/FileSchemaTestClass.md) + - [FormatTest](docs/FormatTest.md) + - [HasOnlyReadOnly](docs/HasOnlyReadOnly.md) + - [List](docs/List.md) + - [MapTest](docs/MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](docs/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](docs/Model200Response.md) + - [Name](docs/Name.md) + - [NumberOnly](docs/NumberOnly.md) + - [Order](docs/Order.md) + - [OuterComposite](docs/OuterComposite.md) + - [OuterEnum](docs/OuterEnum.md) + - [Pet](docs/Pet.md) + - [ReadOnlyFirst](docs/ReadOnlyFirst.md) + - [Return](docs/Return.md) + - [SpecialModelName](docs/SpecialModelName.md) + - [StringBooleanMap](docs/StringBooleanMap.md) + - [Tag](docs/Tag.md) + - [TypeHolderDefault](docs/TypeHolderDefault.md) + - [TypeHolderExample](docs/TypeHolderExample.md) + - [User](docs/User.md) + + +## Documentation For Authorization + + +## api_key + +- **Type**: API key +- **API key parameter name**: api_key +- **Location**: HTTP header + +## api_key_query + +- **Type**: API key +- **API key parameter name**: api_key_query +- **Location**: URL query string + +## http_basic_test + +- **Type**: HTTP basic authentication + +## petstore_auth + +- **Type**: OAuth +- **Flow**: implicit +- **Authorization URL**: http://petstore.swagger.io/api/oauth/dialog +- **Scopes**: + - **write:pets**: modify pets in your account + - **read:pets**: read your pets + + +## Author + + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesAnyType.md b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesAnyType.md new file mode 100644 index 000000000000..bae60ab148f2 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesAnyType.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesAnyType + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesArray.md b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesArray.md new file mode 100644 index 000000000000..a371b5e28f32 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesArray.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesArray + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesBoolean.md b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesBoolean.md new file mode 100644 index 000000000000..d5f0d6da11ee --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesBoolean.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesBoolean + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesClass.md b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesClass.md new file mode 100644 index 000000000000..1f222244134e --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesClass.md @@ -0,0 +1,11 @@ +# AdditionalPropertiesClass + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**mapString** | **[String: String]** | | [optional] +**mapMapString** | [String: [String: String]] | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesInteger.md b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesInteger.md new file mode 100644 index 000000000000..629293abdfe9 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesInteger.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesInteger + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesNumber.md b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesNumber.md new file mode 100644 index 000000000000..65adfe78137c --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesNumber.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesNumber + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesObject.md b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesObject.md new file mode 100644 index 000000000000..99d69b7aae6a --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesObject.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesObject + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesString.md b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesString.md new file mode 100644 index 000000000000..5bb8122887c4 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/AdditionalPropertiesString.md @@ -0,0 +1,10 @@ +# AdditionalPropertiesString + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Animal.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Animal.md new file mode 100644 index 000000000000..69c601455cd8 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Animal.md @@ -0,0 +1,11 @@ +# Animal + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**className** | **String** | | +**color** | **String** | | [optional] [default to "red"] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/AnimalFarm.md b/samples/client/petstore/swift5/x-swift-hashable/docs/AnimalFarm.md new file mode 100644 index 000000000000..df6bab21dae8 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/AnimalFarm.md @@ -0,0 +1,9 @@ +# AnimalFarm + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/AnotherFakeAPI.md b/samples/client/petstore/swift5/x-swift-hashable/docs/AnotherFakeAPI.md new file mode 100644 index 000000000000..aead5f1f980f --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/AnotherFakeAPI.md @@ -0,0 +1,59 @@ +# AnotherFakeAPI + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**call123testSpecialTags**](AnotherFakeAPI.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags + + +# **call123testSpecialTags** +```swift + open class func call123testSpecialTags(body: Client, completion: @escaping (_ data: Client?, _ error: Error?) -> Void) +``` + +To test special tags + +To test special tags and operation ID starting with number + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = Client(client: "client_example") // Client | client model + +// To test special tags +AnotherFakeAPI.call123testSpecialTags(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Client**](Client.md) | client model | + +### Return type + +[**Client**](Client.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/ApiResponse.md b/samples/client/petstore/swift5/x-swift-hashable/docs/ApiResponse.md new file mode 100644 index 000000000000..c6d9768fe9bf --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/ApiResponse.md @@ -0,0 +1,12 @@ +# ApiResponse + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**code** | **Int** | | [optional] +**type** | **String** | | [optional] +**message** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/ArrayOfArrayOfNumberOnly.md b/samples/client/petstore/swift5/x-swift-hashable/docs/ArrayOfArrayOfNumberOnly.md new file mode 100644 index 000000000000..c6fceff5e08d --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/ArrayOfArrayOfNumberOnly.md @@ -0,0 +1,10 @@ +# ArrayOfArrayOfNumberOnly + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**arrayArrayNumber** | [[Double]] | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/ArrayOfNumberOnly.md b/samples/client/petstore/swift5/x-swift-hashable/docs/ArrayOfNumberOnly.md new file mode 100644 index 000000000000..f09f8fa6f70f --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/ArrayOfNumberOnly.md @@ -0,0 +1,10 @@ +# ArrayOfNumberOnly + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**arrayNumber** | **[Double]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/ArrayTest.md b/samples/client/petstore/swift5/x-swift-hashable/docs/ArrayTest.md new file mode 100644 index 000000000000..bf416b8330cc --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/ArrayTest.md @@ -0,0 +1,12 @@ +# ArrayTest + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**arrayOfString** | **[String]** | | [optional] +**arrayArrayOfInteger** | [[Int64]] | | [optional] +**arrayArrayOfModel** | [[ReadOnlyFirst]] | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/BigCat.md b/samples/client/petstore/swift5/x-swift-hashable/docs/BigCat.md new file mode 100644 index 000000000000..cd904c7381a2 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/BigCat.md @@ -0,0 +1,10 @@ +# BigCat + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**kind** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/BigCatAllOf.md b/samples/client/petstore/swift5/x-swift-hashable/docs/BigCatAllOf.md new file mode 100644 index 000000000000..20da4caf5d01 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/BigCatAllOf.md @@ -0,0 +1,10 @@ +# BigCatAllOf + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**kind** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Capitalization.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Capitalization.md new file mode 100644 index 000000000000..95374216c773 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Capitalization.md @@ -0,0 +1,15 @@ +# Capitalization + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**smallCamel** | **String** | | [optional] +**capitalCamel** | **String** | | [optional] +**smallSnake** | **String** | | [optional] +**capitalSnake** | **String** | | [optional] +**sCAETHFlowPoints** | **String** | | [optional] +**ATT_NAME** | **String** | Name of the pet | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Cat.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Cat.md new file mode 100644 index 000000000000..fb5949b15761 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Cat.md @@ -0,0 +1,10 @@ +# Cat + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**declawed** | **Bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/CatAllOf.md b/samples/client/petstore/swift5/x-swift-hashable/docs/CatAllOf.md new file mode 100644 index 000000000000..79789be61c01 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/CatAllOf.md @@ -0,0 +1,10 @@ +# CatAllOf + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**declawed** | **Bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Category.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Category.md new file mode 100644 index 000000000000..5ca5408c0f96 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Category.md @@ -0,0 +1,11 @@ +# Category + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **Int64** | | [optional] +**name** | **String** | | [default to "default-name"] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/ClassModel.md b/samples/client/petstore/swift5/x-swift-hashable/docs/ClassModel.md new file mode 100644 index 000000000000..e3912fdf0fd5 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/ClassModel.md @@ -0,0 +1,10 @@ +# ClassModel + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**_class** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Client.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Client.md new file mode 100644 index 000000000000..0de1b238c36f --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Client.md @@ -0,0 +1,10 @@ +# Client + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**client** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Dog.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Dog.md new file mode 100644 index 000000000000..4824786da049 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Dog.md @@ -0,0 +1,10 @@ +# Dog + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**breed** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/DogAllOf.md b/samples/client/petstore/swift5/x-swift-hashable/docs/DogAllOf.md new file mode 100644 index 000000000000..9302ef52e938 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/DogAllOf.md @@ -0,0 +1,10 @@ +# DogAllOf + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**breed** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/EnumArrays.md b/samples/client/petstore/swift5/x-swift-hashable/docs/EnumArrays.md new file mode 100644 index 000000000000..b9a9807d3c8e --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/EnumArrays.md @@ -0,0 +1,11 @@ +# EnumArrays + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**justSymbol** | **String** | | [optional] +**arrayEnum** | **[String]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/EnumClass.md b/samples/client/petstore/swift5/x-swift-hashable/docs/EnumClass.md new file mode 100644 index 000000000000..67f017becd0c --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/EnumClass.md @@ -0,0 +1,9 @@ +# EnumClass + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/EnumTest.md b/samples/client/petstore/swift5/x-swift-hashable/docs/EnumTest.md new file mode 100644 index 000000000000..bc9b036dd769 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/EnumTest.md @@ -0,0 +1,14 @@ +# EnumTest + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**enumString** | **String** | | [optional] +**enumStringRequired** | **String** | | +**enumInteger** | **Int** | | [optional] +**enumNumber** | **Double** | | [optional] +**outerEnum** | [**OuterEnum**](OuterEnum.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/FakeAPI.md b/samples/client/petstore/swift5/x-swift-hashable/docs/FakeAPI.md new file mode 100644 index 000000000000..543869c0d2e0 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/FakeAPI.md @@ -0,0 +1,662 @@ +# FakeAPI + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**fakeOuterBooleanSerialize**](FakeAPI.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +[**fakeOuterCompositeSerialize**](FakeAPI.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +[**fakeOuterNumberSerialize**](FakeAPI.md#fakeouternumberserialize) | **POST** /fake/outer/number | +[**fakeOuterStringSerialize**](FakeAPI.md#fakeouterstringserialize) | **POST** /fake/outer/string | +[**testBodyWithFileSchema**](FakeAPI.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +[**testBodyWithQueryParams**](FakeAPI.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +[**testClientModel**](FakeAPI.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +[**testEndpointParameters**](FakeAPI.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +[**testEnumParameters**](FakeAPI.md#testenumparameters) | **GET** /fake | To test enum parameters +[**testGroupParameters**](FakeAPI.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +[**testInlineAdditionalProperties**](FakeAPI.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +[**testJsonFormData**](FakeAPI.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data + + +# **fakeOuterBooleanSerialize** +```swift + open class func fakeOuterBooleanSerialize(body: Bool? = nil, completion: @escaping (_ data: Bool?, _ error: Error?) -> Void) +``` + + + +Test serialization of outer boolean types + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = true // Bool | Input boolean as post body (optional) + +FakeAPI.fakeOuterBooleanSerialize(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **Bool** | Input boolean as post body | [optional] + +### Return type + +**Bool** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: */* + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **fakeOuterCompositeSerialize** +```swift + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, completion: @escaping (_ data: OuterComposite?, _ error: Error?) -> Void) +``` + + + +Test serialization of object with outer number type + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = OuterComposite(myNumber: 123, myString: "myString_example", myBoolean: false) // OuterComposite | Input composite as post body (optional) + +FakeAPI.fakeOuterCompositeSerialize(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**OuterComposite**](OuterComposite.md) | Input composite as post body | [optional] + +### Return type + +[**OuterComposite**](OuterComposite.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: */* + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **fakeOuterNumberSerialize** +```swift + open class func fakeOuterNumberSerialize(body: Double? = nil, completion: @escaping (_ data: Double?, _ error: Error?) -> Void) +``` + + + +Test serialization of outer number types + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = 987 // Double | Input number as post body (optional) + +FakeAPI.fakeOuterNumberSerialize(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **Double** | Input number as post body | [optional] + +### Return type + +**Double** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: */* + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **fakeOuterStringSerialize** +```swift + open class func fakeOuterStringSerialize(body: String? = nil, completion: @escaping (_ data: String?, _ error: Error?) -> Void) +``` + + + +Test serialization of outer string types + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = "body_example" // String | Input string as post body (optional) + +FakeAPI.fakeOuterStringSerialize(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **String** | Input string as post body | [optional] + +### Return type + +**String** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: */* + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **testBodyWithFileSchema** +```swift + open class func testBodyWithFileSchema(body: FileSchemaTestClass, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + + + +For this test, the body for this request much reference a schema named `File`. + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = FileSchemaTestClass(file: File(sourceURI: "sourceURI_example"), files: [nil]) // FileSchemaTestClass | + +FakeAPI.testBodyWithFileSchema(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**FileSchemaTestClass**](FileSchemaTestClass.md) | | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **testBodyWithQueryParams** +```swift + open class func testBodyWithQueryParams(query: String, body: User, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + + + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let query = "query_example" // String | +let body = User(id: 123, username: "username_example", firstName: "firstName_example", lastName: "lastName_example", email: "email_example", password: "password_example", phone: "phone_example", userStatus: 123) // User | + +FakeAPI.testBodyWithQueryParams(query: query, body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **query** | **String** | | + **body** | [**User**](User.md) | | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **testClientModel** +```swift + open class func testClientModel(body: Client, completion: @escaping (_ data: Client?, _ error: Error?) -> Void) +``` + +To test \"client\" model + +To test \"client\" model + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = Client(client: "client_example") // Client | client model + +// To test \"client\" model +FakeAPI.testClientModel(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Client**](Client.md) | client model | + +### Return type + +[**Client**](Client.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **testEndpointParameters** +```swift + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + +Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let number = 987 // Double | None +let double = 987 // Double | None +let patternWithoutDelimiter = "patternWithoutDelimiter_example" // String | None +let byte = 987 // Data | None +let integer = 987 // Int | None (optional) +let int32 = 987 // Int | None (optional) +let int64 = 987 // Int64 | None (optional) +let float = 987 // Float | None (optional) +let string = "string_example" // String | None (optional) +let binary = URL(string: "https://example.com")! // URL | None (optional) +let date = Date() // Date | None (optional) +let dateTime = Date() // Date | None (optional) +let password = "password_example" // String | None (optional) +let callback = "callback_example" // String | None (optional) + +// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +FakeAPI.testEndpointParameters(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **number** | **Double** | None | + **double** | **Double** | None | + **patternWithoutDelimiter** | **String** | None | + **byte** | **Data** | None | + **integer** | **Int** | None | [optional] + **int32** | **Int** | None | [optional] + **int64** | **Int64** | None | [optional] + **float** | **Float** | None | [optional] + **string** | **String** | None | [optional] + **binary** | **URL** | None | [optional] + **date** | **Date** | None | [optional] + **dateTime** | **Date** | None | [optional] + **password** | **String** | None | [optional] + **callback** | **String** | None | [optional] + +### Return type + +Void (empty response body) + +### Authorization + +[http_basic_test](../README.md#http_basic_test) + +### HTTP request headers + + - **Content-Type**: application/x-www-form-urlencoded + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **testEnumParameters** +```swift + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +To test enum parameters + +To test enum parameters + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let enumHeaderStringArray = ["enumHeaderStringArray_example"] // [String] | Header parameter enum test (string array) (optional) +let enumHeaderString = "enumHeaderString_example" // String | Header parameter enum test (string) (optional) (default to .efg) +let enumQueryStringArray = ["enumQueryStringArray_example"] // [String] | Query parameter enum test (string array) (optional) +let enumQueryString = "enumQueryString_example" // String | Query parameter enum test (string) (optional) (default to .efg) +let enumQueryInteger = 987 // Int | Query parameter enum test (double) (optional) +let enumQueryDouble = 987 // Double | Query parameter enum test (double) (optional) +let enumFormStringArray = ["inner_example"] // [String] | Form parameter enum test (string array) (optional) (default to .dollar) +let enumFormString = "enumFormString_example" // String | Form parameter enum test (string) (optional) (default to .efg) + +// To test enum parameters +FakeAPI.testEnumParameters(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **enumHeaderStringArray** | [**[String]**](String.md) | Header parameter enum test (string array) | [optional] + **enumHeaderString** | **String** | Header parameter enum test (string) | [optional] [default to .efg] + **enumQueryStringArray** | [**[String]**](String.md) | Query parameter enum test (string array) | [optional] + **enumQueryString** | **String** | Query parameter enum test (string) | [optional] [default to .efg] + **enumQueryInteger** | **Int** | Query parameter enum test (double) | [optional] + **enumQueryDouble** | **Double** | Query parameter enum test (double) | [optional] + **enumFormStringArray** | [**[String]**](String.md) | Form parameter enum test (string array) | [optional] [default to .dollar] + **enumFormString** | **String** | Form parameter enum test (string) | [optional] [default to .efg] + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/x-www-form-urlencoded + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **testGroupParameters** +```swift + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Fake endpoint to test group parameters (optional) + +Fake endpoint to test group parameters (optional) + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let requiredStringGroup = 987 // Int | Required String in group parameters +let requiredBooleanGroup = true // Bool | Required Boolean in group parameters +let requiredInt64Group = 987 // Int64 | Required Integer in group parameters +let stringGroup = 987 // Int | String in group parameters (optional) +let booleanGroup = true // Bool | Boolean in group parameters (optional) +let int64Group = 987 // Int64 | Integer in group parameters (optional) + +// Fake endpoint to test group parameters (optional) +FakeAPI.testGroupParameters(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **requiredStringGroup** | **Int** | Required String in group parameters | + **requiredBooleanGroup** | **Bool** | Required Boolean in group parameters | + **requiredInt64Group** | **Int64** | Required Integer in group parameters | + **stringGroup** | **Int** | String in group parameters | [optional] + **booleanGroup** | **Bool** | Boolean in group parameters | [optional] + **int64Group** | **Int64** | Integer in group parameters | [optional] + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **testInlineAdditionalProperties** +```swift + open class func testInlineAdditionalProperties(param: [String: String], completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +test inline additionalProperties + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let param = "TODO" // [String: String] | request body + +// test inline additionalProperties +FakeAPI.testInlineAdditionalProperties(param: param) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **param** | [**[String: String]**](String.md) | request body | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **testJsonFormData** +```swift + open class func testJsonFormData(param: String, param2: String, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +test json serialization of form data + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let param = "param_example" // String | field1 +let param2 = "param2_example" // String | field2 + +// test json serialization of form data +FakeAPI.testJsonFormData(param: param, param2: param2) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **param** | **String** | field1 | + **param2** | **String** | field2 | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/x-www-form-urlencoded + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/FakeClassnameTags123API.md b/samples/client/petstore/swift5/x-swift-hashable/docs/FakeClassnameTags123API.md new file mode 100644 index 000000000000..9f24b46edbc3 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/FakeClassnameTags123API.md @@ -0,0 +1,59 @@ +# FakeClassnameTags123API + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**testClassname**](FakeClassnameTags123API.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case + + +# **testClassname** +```swift + open class func testClassname(body: Client, completion: @escaping (_ data: Client?, _ error: Error?) -> Void) +``` + +To test class name in snake case + +To test class name in snake case + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = Client(client: "client_example") // Client | client model + +// To test class name in snake case +FakeClassnameTags123API.testClassname(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Client**](Client.md) | client model | + +### Return type + +[**Client**](Client.md) + +### Authorization + +[api_key_query](../README.md#api_key_query) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/File.md b/samples/client/petstore/swift5/x-swift-hashable/docs/File.md new file mode 100644 index 000000000000..3edfef17b794 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/File.md @@ -0,0 +1,10 @@ +# File + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**sourceURI** | **String** | Test capitalization | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/FileSchemaTestClass.md b/samples/client/petstore/swift5/x-swift-hashable/docs/FileSchemaTestClass.md new file mode 100644 index 000000000000..afdacc60b2c3 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/FileSchemaTestClass.md @@ -0,0 +1,11 @@ +# FileSchemaTestClass + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**file** | [**File**](File.md) | | [optional] +**files** | [File] | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/FormatTest.md b/samples/client/petstore/swift5/x-swift-hashable/docs/FormatTest.md new file mode 100644 index 000000000000..f74d94f6c46a --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/FormatTest.md @@ -0,0 +1,22 @@ +# FormatTest + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**integer** | **Int** | | [optional] +**int32** | **Int** | | [optional] +**int64** | **Int64** | | [optional] +**number** | **Double** | | +**float** | **Float** | | [optional] +**double** | **Double** | | [optional] +**string** | **String** | | [optional] +**byte** | **Data** | | +**binary** | **URL** | | [optional] +**date** | **Date** | | +**dateTime** | **Date** | | [optional] +**uuid** | **UUID** | | [optional] +**password** | **String** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/HasOnlyReadOnly.md b/samples/client/petstore/swift5/x-swift-hashable/docs/HasOnlyReadOnly.md new file mode 100644 index 000000000000..57b6e3a17e67 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/HasOnlyReadOnly.md @@ -0,0 +1,11 @@ +# HasOnlyReadOnly + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bar** | **String** | | [optional] [readonly] +**foo** | **String** | | [optional] [readonly] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/List.md b/samples/client/petstore/swift5/x-swift-hashable/docs/List.md new file mode 100644 index 000000000000..b77718302edf --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/List.md @@ -0,0 +1,10 @@ +# List + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**_123list** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/MapTest.md b/samples/client/petstore/swift5/x-swift-hashable/docs/MapTest.md new file mode 100644 index 000000000000..73f9e0d50acf --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/MapTest.md @@ -0,0 +1,13 @@ +# MapTest + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**mapMapOfString** | [String: [String: String]] | | [optional] +**mapOfEnumString** | **[String: String]** | | [optional] +**directMap** | **[String: Bool]** | | [optional] +**indirectMap** | [**StringBooleanMap**](StringBooleanMap.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/MixedPropertiesAndAdditionalPropertiesClass.md b/samples/client/petstore/swift5/x-swift-hashable/docs/MixedPropertiesAndAdditionalPropertiesClass.md new file mode 100644 index 000000000000..3fdfd03f0e31 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/MixedPropertiesAndAdditionalPropertiesClass.md @@ -0,0 +1,12 @@ +# MixedPropertiesAndAdditionalPropertiesClass + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**uuid** | **UUID** | | [optional] +**dateTime** | **Date** | | [optional] +**map** | [String: Animal] | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Model200Response.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Model200Response.md new file mode 100644 index 000000000000..5865ea690cc3 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Model200Response.md @@ -0,0 +1,11 @@ +# Model200Response + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **Int** | | [optional] +**_class** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Name.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Name.md new file mode 100644 index 000000000000..f7b180292cd6 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Name.md @@ -0,0 +1,13 @@ +# Name + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **Int** | | +**snakeCase** | **Int** | | [optional] [readonly] +**property** | **String** | | [optional] +**_123number** | **Int** | | [optional] [readonly] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/NumberOnly.md b/samples/client/petstore/swift5/x-swift-hashable/docs/NumberOnly.md new file mode 100644 index 000000000000..72bd361168b5 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/NumberOnly.md @@ -0,0 +1,10 @@ +# NumberOnly + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**justNumber** | **Double** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Order.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Order.md new file mode 100644 index 000000000000..15487f01175c --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Order.md @@ -0,0 +1,15 @@ +# Order + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **Int64** | | [optional] +**petId** | **Int64** | | [optional] +**quantity** | **Int** | | [optional] +**shipDate** | **Date** | | [optional] +**status** | **String** | Order Status | [optional] +**complete** | **Bool** | | [optional] [default to false] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/OuterComposite.md b/samples/client/petstore/swift5/x-swift-hashable/docs/OuterComposite.md new file mode 100644 index 000000000000..d6b3583bc3ff --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/OuterComposite.md @@ -0,0 +1,12 @@ +# OuterComposite + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**myNumber** | **Double** | | [optional] +**myString** | **String** | | [optional] +**myBoolean** | **Bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/OuterEnum.md b/samples/client/petstore/swift5/x-swift-hashable/docs/OuterEnum.md new file mode 100644 index 000000000000..06d413b01680 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/OuterEnum.md @@ -0,0 +1,9 @@ +# OuterEnum + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Pet.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Pet.md new file mode 100644 index 000000000000..5c05f98fad4a --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Pet.md @@ -0,0 +1,15 @@ +# Pet + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **Int64** | | [optional] +**category** | [**Category**](Category.md) | | [optional] +**name** | **String** | | +**photoUrls** | **[String]** | | +**tags** | [Tag] | | [optional] +**status** | **String** | pet status in the store | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/PetAPI.md b/samples/client/petstore/swift5/x-swift-hashable/docs/PetAPI.md new file mode 100644 index 000000000000..27efe0833476 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/PetAPI.md @@ -0,0 +1,469 @@ +# PetAPI + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**addPet**](PetAPI.md#addpet) | **POST** /pet | Add a new pet to the store +[**deletePet**](PetAPI.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +[**findPetsByStatus**](PetAPI.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +[**findPetsByTags**](PetAPI.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +[**getPetById**](PetAPI.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +[**updatePet**](PetAPI.md#updatepet) | **PUT** /pet | Update an existing pet +[**updatePetWithForm**](PetAPI.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +[**uploadFile**](PetAPI.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +[**uploadFileWithRequiredFile**](PetAPI.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) + + +# **addPet** +```swift + open class func addPet(body: Pet, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Add a new pet to the store + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = Pet(id: 123, category: Category(id: 123, name: "name_example"), name: "name_example", photoUrls: ["photoUrls_example"], tags: [Tag(id: 123, name: "name_example")], status: "status_example") // Pet | Pet object that needs to be added to the store + +// Add a new pet to the store +PetAPI.addPet(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Pet**](Pet.md) | Pet object that needs to be added to the store | + +### Return type + +Void (empty response body) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: application/json, application/xml + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **deletePet** +```swift + open class func deletePet(petId: Int64, apiKey: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Deletes a pet + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let petId = 987 // Int64 | Pet id to delete +let apiKey = "apiKey_example" // String | (optional) + +// Deletes a pet +PetAPI.deletePet(petId: petId, apiKey: apiKey) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **petId** | **Int64** | Pet id to delete | + **apiKey** | **String** | | [optional] + +### Return type + +Void (empty response body) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **findPetsByStatus** +```swift + open class func findPetsByStatus(status: [String], completion: @escaping (_ data: [Pet]?, _ error: Error?) -> Void) +``` + +Finds Pets by status + +Multiple status values can be provided with comma separated strings + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let status = ["status_example"] // [String] | Status values that need to be considered for filter + +// Finds Pets by status +PetAPI.findPetsByStatus(status: status) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **status** | [**[String]**](String.md) | Status values that need to be considered for filter | + +### Return type + +[**[Pet]**](Pet.md) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **findPetsByTags** +```swift + open class func findPetsByTags(tags: [String], completion: @escaping (_ data: [Pet]?, _ error: Error?) -> Void) +``` + +Finds Pets by tags + +Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let tags = ["inner_example"] // [String] | Tags to filter by + +// Finds Pets by tags +PetAPI.findPetsByTags(tags: tags) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **tags** | [**[String]**](String.md) | Tags to filter by | + +### Return type + +[**[Pet]**](Pet.md) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **getPetById** +```swift + open class func getPetById(petId: Int64, completion: @escaping (_ data: Pet?, _ error: Error?) -> Void) +``` + +Find pet by ID + +Returns a single pet + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let petId = 987 // Int64 | ID of pet to return + +// Find pet by ID +PetAPI.getPetById(petId: petId) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **petId** | **Int64** | ID of pet to return | + +### Return type + +[**Pet**](Pet.md) + +### Authorization + +[api_key](../README.md#api_key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **updatePet** +```swift + open class func updatePet(body: Pet, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Update an existing pet + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = Pet(id: 123, category: Category(id: 123, name: "name_example"), name: "name_example", photoUrls: ["photoUrls_example"], tags: [Tag(id: 123, name: "name_example")], status: "status_example") // Pet | Pet object that needs to be added to the store + +// Update an existing pet +PetAPI.updatePet(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Pet**](Pet.md) | Pet object that needs to be added to the store | + +### Return type + +Void (empty response body) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: application/json, application/xml + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **updatePetWithForm** +```swift + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Updates a pet in the store with form data + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let petId = 987 // Int64 | ID of pet that needs to be updated +let name = "name_example" // String | Updated name of the pet (optional) +let status = "status_example" // String | Updated status of the pet (optional) + +// Updates a pet in the store with form data +PetAPI.updatePetWithForm(petId: petId, name: name, status: status) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **petId** | **Int64** | ID of pet that needs to be updated | + **name** | **String** | Updated name of the pet | [optional] + **status** | **String** | Updated status of the pet | [optional] + +### Return type + +Void (empty response body) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: application/x-www-form-urlencoded + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **uploadFile** +```swift + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) +``` + +uploads an image + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let petId = 987 // Int64 | ID of pet to update +let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) +let file = URL(string: "https://example.com")! // URL | file to upload (optional) + +// uploads an image +PetAPI.uploadFile(petId: petId, additionalMetadata: additionalMetadata, file: file) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **petId** | **Int64** | ID of pet to update | + **additionalMetadata** | **String** | Additional data to pass to server | [optional] + **file** | **URL** | file to upload | [optional] + +### Return type + +[**ApiResponse**](ApiResponse.md) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **uploadFileWithRequiredFile** +```swift + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, completion: @escaping (_ data: ApiResponse?, _ error: Error?) -> Void) +``` + +uploads an image (required) + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let petId = 987 // Int64 | ID of pet to update +let requiredFile = URL(string: "https://example.com")! // URL | file to upload +let additionalMetadata = "additionalMetadata_example" // String | Additional data to pass to server (optional) + +// uploads an image (required) +PetAPI.uploadFileWithRequiredFile(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **petId** | **Int64** | ID of pet to update | + **requiredFile** | **URL** | file to upload | + **additionalMetadata** | **String** | Additional data to pass to server | [optional] + +### Return type + +[**ApiResponse**](ApiResponse.md) + +### Authorization + +[petstore_auth](../README.md#petstore_auth) + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/ReadOnlyFirst.md b/samples/client/petstore/swift5/x-swift-hashable/docs/ReadOnlyFirst.md new file mode 100644 index 000000000000..ed537b87598b --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/ReadOnlyFirst.md @@ -0,0 +1,11 @@ +# ReadOnlyFirst + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bar** | **String** | | [optional] [readonly] +**baz** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Return.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Return.md new file mode 100644 index 000000000000..66d17c27c887 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Return.md @@ -0,0 +1,10 @@ +# Return + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**_return** | **Int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/SpecialModelName.md b/samples/client/petstore/swift5/x-swift-hashable/docs/SpecialModelName.md new file mode 100644 index 000000000000..3ec27a38c2ac --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/SpecialModelName.md @@ -0,0 +1,10 @@ +# SpecialModelName + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**specialPropertyName** | **Int64** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/StoreAPI.md b/samples/client/petstore/swift5/x-swift-hashable/docs/StoreAPI.md new file mode 100644 index 000000000000..383dda5d3c71 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/StoreAPI.md @@ -0,0 +1,206 @@ +# StoreAPI + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**deleteOrder**](StoreAPI.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +[**getInventory**](StoreAPI.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +[**getOrderById**](StoreAPI.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +[**placeOrder**](StoreAPI.md#placeorder) | **POST** /store/order | Place an order for a pet + + +# **deleteOrder** +```swift + open class func deleteOrder(orderId: String, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Delete purchase order by ID + +For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let orderId = "orderId_example" // String | ID of the order that needs to be deleted + +// Delete purchase order by ID +StoreAPI.deleteOrder(orderId: orderId) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **orderId** | **String** | ID of the order that needs to be deleted | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **getInventory** +```swift + open class func getInventory(completion: @escaping (_ data: [String: Int]?, _ error: Error?) -> Void) +``` + +Returns pet inventories by status + +Returns a map of status codes to quantities + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + + +// Returns pet inventories by status +StoreAPI.getInventory() { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +**[String: Int]** + +### Authorization + +[api_key](../README.md#api_key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **getOrderById** +```swift + open class func getOrderById(orderId: Int64, completion: @escaping (_ data: Order?, _ error: Error?) -> Void) +``` + +Find purchase order by ID + +For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let orderId = 987 // Int64 | ID of pet that needs to be fetched + +// Find purchase order by ID +StoreAPI.getOrderById(orderId: orderId) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **orderId** | **Int64** | ID of pet that needs to be fetched | + +### Return type + +[**Order**](Order.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **placeOrder** +```swift + open class func placeOrder(body: Order, completion: @escaping (_ data: Order?, _ error: Error?) -> Void) +``` + +Place an order for a pet + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = Order(id: 123, petId: 123, quantity: 123, shipDate: Date(), status: "status_example", complete: false) // Order | order placed for purchasing the pet + +// Place an order for a pet +StoreAPI.placeOrder(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**Order**](Order.md) | order placed for purchasing the pet | + +### Return type + +[**Order**](Order.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/StringBooleanMap.md b/samples/client/petstore/swift5/x-swift-hashable/docs/StringBooleanMap.md new file mode 100644 index 000000000000..7abf11ec68b1 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/StringBooleanMap.md @@ -0,0 +1,9 @@ +# StringBooleanMap + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/Tag.md b/samples/client/petstore/swift5/x-swift-hashable/docs/Tag.md new file mode 100644 index 000000000000..ff4ac8aa4519 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/Tag.md @@ -0,0 +1,11 @@ +# Tag + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **Int64** | | [optional] +**name** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/TypeHolderDefault.md b/samples/client/petstore/swift5/x-swift-hashable/docs/TypeHolderDefault.md new file mode 100644 index 000000000000..5161394bdc3e --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/TypeHolderDefault.md @@ -0,0 +1,14 @@ +# TypeHolderDefault + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**stringItem** | **String** | | [default to "what"] +**numberItem** | **Double** | | +**integerItem** | **Int** | | +**boolItem** | **Bool** | | [default to true] +**arrayItem** | **[Int]** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/TypeHolderExample.md b/samples/client/petstore/swift5/x-swift-hashable/docs/TypeHolderExample.md new file mode 100644 index 000000000000..46d0471cd71a --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/TypeHolderExample.md @@ -0,0 +1,14 @@ +# TypeHolderExample + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**stringItem** | **String** | | +**numberItem** | **Double** | | +**integerItem** | **Int** | | +**boolItem** | **Bool** | | +**arrayItem** | **[Int]** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/User.md b/samples/client/petstore/swift5/x-swift-hashable/docs/User.md new file mode 100644 index 000000000000..5a439de0ff95 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/User.md @@ -0,0 +1,17 @@ +# User + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **Int64** | | [optional] +**username** | **String** | | [optional] +**firstName** | **String** | | [optional] +**lastName** | **String** | | [optional] +**email** | **String** | | [optional] +**password** | **String** | | [optional] +**phone** | **String** | | [optional] +**userStatus** | **Int** | User Status | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/UserAPI.md b/samples/client/petstore/swift5/x-swift-hashable/docs/UserAPI.md new file mode 100644 index 000000000000..380813bc68c0 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/UserAPI.md @@ -0,0 +1,406 @@ +# UserAPI + +All URIs are relative to *http://petstore.swagger.io:80/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**createUser**](UserAPI.md#createuser) | **POST** /user | Create user +[**createUsersWithArrayInput**](UserAPI.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +[**createUsersWithListInput**](UserAPI.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +[**deleteUser**](UserAPI.md#deleteuser) | **DELETE** /user/{username} | Delete user +[**getUserByName**](UserAPI.md#getuserbyname) | **GET** /user/{username} | Get user by user name +[**loginUser**](UserAPI.md#loginuser) | **GET** /user/login | Logs user into the system +[**logoutUser**](UserAPI.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +[**updateUser**](UserAPI.md#updateuser) | **PUT** /user/{username} | Updated user + + +# **createUser** +```swift + open class func createUser(body: User, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Create user + +This can only be done by the logged in user. + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = User(id: 123, username: "username_example", firstName: "firstName_example", lastName: "lastName_example", email: "email_example", password: "password_example", phone: "phone_example", userStatus: 123) // User | Created user object + +// Create user +UserAPI.createUser(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**User**](User.md) | Created user object | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **createUsersWithArrayInput** +```swift + open class func createUsersWithArrayInput(body: [User], completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Creates list of users with given input array + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = [User(id: 123, username: "username_example", firstName: "firstName_example", lastName: "lastName_example", email: "email_example", password: "password_example", phone: "phone_example", userStatus: 123)] // [User] | List of user object + +// Creates list of users with given input array +UserAPI.createUsersWithArrayInput(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**[User]**](User.md) | List of user object | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **createUsersWithListInput** +```swift + open class func createUsersWithListInput(body: [User], completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Creates list of users with given input array + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let body = [User(id: 123, username: "username_example", firstName: "firstName_example", lastName: "lastName_example", email: "email_example", password: "password_example", phone: "phone_example", userStatus: 123)] // [User] | List of user object + +// Creates list of users with given input array +UserAPI.createUsersWithListInput(body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**[User]**](User.md) | List of user object | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **deleteUser** +```swift + open class func deleteUser(username: String, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Delete user + +This can only be done by the logged in user. + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let username = "username_example" // String | The name that needs to be deleted + +// Delete user +UserAPI.deleteUser(username: username) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **username** | **String** | The name that needs to be deleted | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **getUserByName** +```swift + open class func getUserByName(username: String, completion: @escaping (_ data: User?, _ error: Error?) -> Void) +``` + +Get user by user name + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let username = "username_example" // String | The name that needs to be fetched. Use user1 for testing. + +// Get user by user name +UserAPI.getUserByName(username: username) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **username** | **String** | The name that needs to be fetched. Use user1 for testing. | + +### Return type + +[**User**](User.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **loginUser** +```swift + open class func loginUser(username: String, password: String, completion: @escaping (_ data: String?, _ error: Error?) -> Void) +``` + +Logs user into the system + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let username = "username_example" // String | The user name for login +let password = "password_example" // String | The password for login in clear text + +// Logs user into the system +UserAPI.loginUser(username: username, password: password) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **username** | **String** | The user name for login | + **password** | **String** | The password for login in clear text | + +### Return type + +**String** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **logoutUser** +```swift + open class func logoutUser(completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Logs out current logged in user session + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + + +// Logs out current logged in user session +UserAPI.logoutUser() { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **updateUser** +```swift + open class func updateUser(username: String, body: User, completion: @escaping (_ data: Void?, _ error: Error?) -> Void) +``` + +Updated user + +This can only be done by the logged in user. + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + +let username = "username_example" // String | name that need to be deleted +let body = User(id: 123, username: "username_example", firstName: "firstName_example", lastName: "lastName_example", email: "email_example", password: "password_example", phone: "phone_example", userStatus: 123) // User | Updated user object + +// Updated user +UserAPI.updateUser(username: username, body: body) { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **username** | **String** | name that need to be deleted | + **body** | [**User**](User.md) | Updated user object | + +### Return type + +Void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/swift5/x-swift-hashable/docs/XmlItem.md b/samples/client/petstore/swift5/x-swift-hashable/docs/XmlItem.md new file mode 100644 index 000000000000..1a4eb4e9c836 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/docs/XmlItem.md @@ -0,0 +1,38 @@ +# XmlItem + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**attributeString** | **String** | | [optional] +**attributeNumber** | **Double** | | [optional] +**attributeInteger** | **Int** | | [optional] +**attributeBoolean** | **Bool** | | [optional] +**wrappedArray** | **[Int]** | | [optional] +**nameString** | **String** | | [optional] +**nameNumber** | **Double** | | [optional] +**nameInteger** | **Int** | | [optional] +**nameBoolean** | **Bool** | | [optional] +**nameArray** | **[Int]** | | [optional] +**nameWrappedArray** | **[Int]** | | [optional] +**prefixString** | **String** | | [optional] +**prefixNumber** | **Double** | | [optional] +**prefixInteger** | **Int** | | [optional] +**prefixBoolean** | **Bool** | | [optional] +**prefixArray** | **[Int]** | | [optional] +**prefixWrappedArray** | **[Int]** | | [optional] +**namespaceString** | **String** | | [optional] +**namespaceNumber** | **Double** | | [optional] +**namespaceInteger** | **Int** | | [optional] +**namespaceBoolean** | **Bool** | | [optional] +**namespaceArray** | **[Int]** | | [optional] +**namespaceWrappedArray** | **[Int]** | | [optional] +**prefixNsString** | **String** | | [optional] +**prefixNsNumber** | **Double** | | [optional] +**prefixNsInteger** | **Int** | | [optional] +**prefixNsBoolean** | **Bool** | | [optional] +**prefixNsArray** | **[Int]** | | [optional] +**prefixNsWrappedArray** | **[Int]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/x-swift-hashable/git_push.sh b/samples/client/petstore/swift5/x-swift-hashable/git_push.sh new file mode 100644 index 000000000000..ced3be2b0c7b --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/git_push.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-pestore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=`git remote` +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' + diff --git a/samples/client/petstore/swift5/x-swift-hashable/project.yml b/samples/client/petstore/swift5/x-swift-hashable/project.yml new file mode 100644 index 000000000000..5528eeee5135 --- /dev/null +++ b/samples/client/petstore/swift5/x-swift-hashable/project.yml @@ -0,0 +1,15 @@ +name: PetstoreClient +targets: + PetstoreClient: + type: framework + platform: iOS + deploymentTarget: "9.0" + sources: [PetstoreClient] + info: + path: ./Info.plist + version: 1.0.0 + settings: + APPLICATION_EXTENSION_API_ONLY: true + scheme: {} + + - carthage: AnyCodable From 1ff436a86aad6b5eca8b7cf3c7838308b43f22d0 Mon Sep 17 00:00:00 2001 From: Kazuki Chigita Date: Fri, 21 May 2021 00:05:22 +0900 Subject: [PATCH 129/186] [REQ] [kotlin-client] Add uriAdapter for moshiBuilder (#9494) * Apply UriAdapter to moshiBuilder * Add UriAdapter for supportingFiles * Fix test * Apply ./bin/generate-samples.sh --- .../languages/KotlinClientCodegen.java | 1 + .../infrastructure/Serializer.kt.mustache | 1 + .../infrastructure/URIAdapter.kt.mustache | 19 ++++++++++++++++++- .../codegen/DefaultGeneratorTest.java | 8 ++++---- .../.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ .../.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ .../kotlin-nonpublic/.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ .../kotlin-nullable/.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ .../kotlin-okhttp3/.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ .../client/infrastructure/URIAdapter.kt | 2 +- .../.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ .../kotlin-retrofit2/.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ .../kotlin-string/.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ .../.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ .../.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ .../petstore/kotlin/.openapi-generator/FILES | 1 + .../client/infrastructure/Serializer.kt | 1 + .../client/infrastructure/URIAdapter.kt | 13 +++++++++++++ 38 files changed, 190 insertions(+), 6 deletions(-) create mode 100644 samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt create mode 100644 samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt create mode 100644 samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt create mode 100644 samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt create mode 100644 samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt create mode 100644 samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt create mode 100644 samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt create mode 100644 samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt create mode 100644 samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt create mode 100644 samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt create mode 100644 samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index 3ff2429d99d9..d2a229fe9888 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -471,6 +471,7 @@ private void addSupportingSerializerAdapters(final String infrastructureFolder) supportingFiles.add(new SupportingFile("jvm-common/infrastructure/OffsetDateTimeAdapter.kt.mustache", infrastructureFolder, "OffsetDateTimeAdapter.kt")); supportingFiles.add(new SupportingFile("jvm-common/infrastructure/BigDecimalAdapter.kt.mustache", infrastructureFolder, "BigDecimalAdapter.kt")); supportingFiles.add(new SupportingFile("jvm-common/infrastructure/BigIntegerAdapter.kt.mustache", infrastructureFolder, "BigIntegerAdapter.kt")); + supportingFiles.add(new SupportingFile("jvm-common/infrastructure/URIAdapter.kt.mustache", infrastructureFolder, "URIAdapter.kt")); break; case gson: diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache index beef3fc2bf38..ba46e7331955 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache @@ -60,6 +60,7 @@ import java.util.concurrent.atomic.AtomicLong .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) {{^moshiCodeGen}} .add(KotlinJsonAdapterFactory()) {{/moshiCodeGen}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URIAdapter.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URIAdapter.kt.mustache index 0225ccf549bc..20dd42023e8e 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URIAdapter.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URIAdapter.kt.mustache @@ -1,5 +1,6 @@ package {{packageName}}.infrastructure +{{#kotlinx_serialization}} import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializer import kotlinx.serialization.encoding.Decoder @@ -7,8 +8,23 @@ import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.SerialDescriptor +{{/kotlinx_serialization}} +{{#moshi}} +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +{{/moshi}} import java.net.URI +{{#moshi}} +{{#nonPublicApi}}internal {{/nonPublicApi}}class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} +{{/moshi}} +{{#kotlinx_serialization}} @Serializer(forClass = URI::class) object UriAdapter : KSerializer { override fun serialize(encoder: Encoder, value: URI) { @@ -18,4 +34,5 @@ object UriAdapter : KSerializer { override fun deserialize(decoder: Decoder): URI = URI(decoder.decodeString()) override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("URI", PrimitiveKind.STRING) -} \ No newline at end of file +} +{{/kotlinx_serialization}} \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java index 7e6a986bb324..dac059152231 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java @@ -459,7 +459,7 @@ public void testBuiltinLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 26); + Assert.assertEquals(files.size(), 27); // Generator should report a library templated file as a generated file TestUtils.ensureContainsFile(files, output, "src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt"); @@ -501,7 +501,7 @@ public void testBuiltinNonLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 26); + Assert.assertEquals(files.size(), 27); // Generator should report README.md as a generated file TestUtils.ensureContainsFile(files, output, "README.md"); @@ -566,7 +566,7 @@ public void testCustomLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 26); + Assert.assertEquals(files.size(), 27); // Generator should report a library templated file as a generated file TestUtils.ensureContainsFile(files, output, "src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt"); @@ -620,7 +620,7 @@ public void testCustomNonLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 26); + Assert.assertEquals(files.size(), 27); // Generator should report README.md as a generated file TestUtils.ensureContainsFile(files, output, "README.md"); diff --git a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES index 3f4610174ccc..ca4c31651a48 100644 --- a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES @@ -32,6 +32,7 @@ src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt src/main/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExtensions.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/ApiResponse.kt src/main/kotlin/org/openapitools/client/models/Category.kt diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 3d0a6c32566a..5b6d177ca893 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,6 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..87de0b17353b --- /dev/null +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} diff --git a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES index 3f4610174ccc..ca4c31651a48 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES @@ -32,6 +32,7 @@ src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt src/main/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExtensions.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/ApiResponse.kt src/main/kotlin/org/openapitools/client/models/Category.kt diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 1ac7a1908fa6..e1cee08d055b 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -11,6 +11,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..87de0b17353b --- /dev/null +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} diff --git a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES index 3f4610174ccc..ca4c31651a48 100644 --- a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES @@ -32,6 +32,7 @@ src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt src/main/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExtensions.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/ApiResponse.kt src/main/kotlin/org/openapitools/client/models/Category.kt diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 54e21400c43f..914d277df5e7 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,6 +12,7 @@ internal object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..bfe929176150 --- /dev/null +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +internal class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} diff --git a/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES b/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES index 3f4610174ccc..ca4c31651a48 100644 --- a/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES @@ -32,6 +32,7 @@ src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt src/main/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExtensions.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/ApiResponse.kt src/main/kotlin/org/openapitools/client/models/Category.kt diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 3d0a6c32566a..5b6d177ca893 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,6 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..87de0b17353b --- /dev/null +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} diff --git a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES index 3f4610174ccc..ca4c31651a48 100644 --- a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES @@ -32,6 +32,7 @@ src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt src/main/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExtensions.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/ApiResponse.kt src/main/kotlin/org/openapitools/client/models/Category.kt diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 3d0a6c32566a..5b6d177ca893 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,6 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..87de0b17353b --- /dev/null +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index ef3c2b387bec..0b734134afaf 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -18,4 +18,4 @@ object UriAdapter : KSerializer { override fun deserialize(decoder: Decoder): URI = URI(decoder.decodeString()) override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("URI", PrimitiveKind.STRING) -} \ No newline at end of file +} diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/FILES b/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/FILES index 871f0c1d09cb..04b505d1f173 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-retrofit2-rx3/.openapi-generator/FILES @@ -31,6 +31,7 @@ src/main/kotlin/org/openapitools/client/infrastructure/LocalDateTimeAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/OffsetDateTimeAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExt.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/ApiResponse.kt src/main/kotlin/org/openapitools/client/models/Category.kt diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 3d0a6c32566a..5b6d177ca893 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,6 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..87de0b17353b --- /dev/null +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} diff --git a/samples/client/petstore/kotlin-retrofit2/.openapi-generator/FILES b/samples/client/petstore/kotlin-retrofit2/.openapi-generator/FILES index 871f0c1d09cb..04b505d1f173 100644 --- a/samples/client/petstore/kotlin-retrofit2/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-retrofit2/.openapi-generator/FILES @@ -31,6 +31,7 @@ src/main/kotlin/org/openapitools/client/infrastructure/LocalDateTimeAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/OffsetDateTimeAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExt.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/ApiResponse.kt src/main/kotlin/org/openapitools/client/models/Category.kt diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 3d0a6c32566a..5b6d177ca893 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,6 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..87de0b17353b --- /dev/null +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} diff --git a/samples/client/petstore/kotlin-string/.openapi-generator/FILES b/samples/client/petstore/kotlin-string/.openapi-generator/FILES index 3f4610174ccc..ca4c31651a48 100644 --- a/samples/client/petstore/kotlin-string/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-string/.openapi-generator/FILES @@ -32,6 +32,7 @@ src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt src/main/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExtensions.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/ApiResponse.kt src/main/kotlin/org/openapitools/client/models/Category.kt diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 3d0a6c32566a..5b6d177ca893 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,6 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..87de0b17353b --- /dev/null +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} diff --git a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES index 3f4610174ccc..ca4c31651a48 100644 --- a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES @@ -32,6 +32,7 @@ src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt src/main/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExtensions.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/ApiResponse.kt src/main/kotlin/org/openapitools/client/models/Category.kt diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 3d0a6c32566a..5b6d177ca893 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,6 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..87de0b17353b --- /dev/null +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} diff --git a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES index 7619fbe8f8eb..bfbf9941fa57 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES @@ -23,5 +23,6 @@ src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt src/main/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExtensions.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/PetEnum.kt diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 3d0a6c32566a..5b6d177ca893 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,6 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..87de0b17353b --- /dev/null +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} diff --git a/samples/client/petstore/kotlin/.openapi-generator/FILES b/samples/client/petstore/kotlin/.openapi-generator/FILES index 3f4610174ccc..ca4c31651a48 100644 --- a/samples/client/petstore/kotlin/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin/.openapi-generator/FILES @@ -32,6 +32,7 @@ src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt src/main/kotlin/org/openapitools/client/infrastructure/RequestMethod.kt src/main/kotlin/org/openapitools/client/infrastructure/ResponseExtensions.kt src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt src/main/kotlin/org/openapitools/client/models/ApiResponse.kt src/main/kotlin/org/openapitools/client/models/Category.kt diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 3d0a6c32566a..5b6d177ca893 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,6 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) + .add(UriAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt new file mode 100644 index 000000000000..87de0b17353b --- /dev/null +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -0,0 +1,13 @@ +package org.openapitools.client.infrastructure + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import java.net.URI + +class UriAdapter { + @ToJson + fun toJson(uri: URI) = uri.toString() + + @FromJson + fun fromJson(s: String) = URI.create(s) +} From d1b8a3fac4d9820500929af73d271a3c9bec3098 Mon Sep 17 00:00:00 2001 From: Stefan Hanselmann <69970522+shanselm-ergon@users.noreply.github.com> Date: Thu, 20 May 2021 17:07:04 +0200 Subject: [PATCH 130/186] =?UTF-8?q?[Kotlin]=20[#8809]=20Allow=20optional?= =?UTF-8?q?=20header=20parameters=20with=20Kotlin=20and=20ret=E2=80=A6=20(?= =?UTF-8?q?#9306)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Kotlin] [#8809] Allow optional header parameters with Kotlin and retrofit2 * [Kotlin] [#8809] Update sample client * [Kotlin] [#8809] Replace mustache dot notation with more classic style * [Kotlin] [#8809] Remove new line at the end of the mustache template --- .../kotlin-client/libraries/jvm-retrofit2/headerParams.mustache | 2 +- .../src/main/kotlin/org/openapitools/client/apis/PetApi.kt | 2 +- .../src/main/kotlin/org/openapitools/client/apis/PetApi.kt | 2 +- .../src/main/kotlin/org/openapitools/client/apis/PetApi.kt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/headerParams.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/headerParams.mustache index aa5a8e346732..f546244307bd 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/headerParams.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/headerParams.mustache @@ -1 +1 @@ -{{#isHeaderParam}}@Header("{{baseName}}") {{{paramName}}}: {{{dataType}}}{{/isHeaderParam}} \ No newline at end of file +{{#isHeaderParam}}@Header("{{baseName}}") {{{paramName}}}: {{{dataType}}}{{#required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/required}}{{^required}}?{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{/isHeaderParam}} \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 3b2a41282096..d30336f02e9e 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -34,7 +34,7 @@ interface PetApi { * @return [Call]<[Unit]> */ @DELETE("pet/{petId}") - fun deletePet(@Path("petId") petId: kotlin.Long, @Header("api_key") apiKey: kotlin.String): Call + fun deletePet(@Path("petId") petId: kotlin.Long, @Header("api_key") apiKey: kotlin.String? = null): Call /** * Finds Pets by status diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 8162b6dc4483..d90c3c85f92a 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -35,7 +35,7 @@ interface PetApi { * @return [Call]<[Unit]> */ @DELETE("pet/{petId}") - fun deletePet(@Path("petId") petId: kotlin.Long, @Header("api_key") apiKey: kotlin.String): Completable + fun deletePet(@Path("petId") petId: kotlin.Long, @Header("api_key") apiKey: kotlin.String? = null): Completable /** * Finds Pets by status diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 3b2a41282096..d30336f02e9e 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -34,7 +34,7 @@ interface PetApi { * @return [Call]<[Unit]> */ @DELETE("pet/{petId}") - fun deletePet(@Path("petId") petId: kotlin.Long, @Header("api_key") apiKey: kotlin.String): Call + fun deletePet(@Path("petId") petId: kotlin.Long, @Header("api_key") apiKey: kotlin.String? = null): Call /** * Finds Pets by status From 338812114c4925858bb1c37a046c9eec9744efa2 Mon Sep 17 00:00:00 2001 From: Yusuke Hosonuma Date: Fri, 21 May 2021 13:37:21 +0900 Subject: [PATCH 131/186] [crystal][client] support configure method with block (#9506) * [crystal][client] allow initialize Configuration with block * [crystal][client] update samples * [crystal][client] add test for configuration.cr * [crystal][client] fix .configure * [crystal][client] update samples * [crystal][client] add test for pestore.cr * [crystal][client] fix Configuration#configure --- .../resources/crystal/configuration.mustache | 18 ++++++++++--- .../resources/crystal/shard_name.mustache | 25 ++++++++++-------- .../crystal/spec/configuration_spec.cr | 26 +++++++++++++++++++ .../petstore/crystal/spec/petstore_spec.cr | 19 ++++++++++++++ .../client/petstore/crystal/src/petstore.cr | 25 ++++++++++-------- .../crystal/src/petstore/configuration.cr | 18 ++++++++++--- 6 files changed, 103 insertions(+), 28 deletions(-) create mode 100644 samples/client/petstore/crystal/spec/configuration_spec.cr create mode 100644 samples/client/petstore/crystal/spec/petstore_spec.cr diff --git a/modules/openapi-generator/src/main/resources/crystal/configuration.mustache b/modules/openapi-generator/src/main/resources/crystal/configuration.mustache index eec2509376d9..103cf1820b28 100644 --- a/modules/openapi-generator/src/main/resources/crystal/configuration.mustache +++ b/modules/openapi-generator/src/main/resources/crystal/configuration.mustache @@ -119,6 +119,7 @@ module {{moduleName}} # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96 #property params_encoding : String? + # Create a new `Configuration`. def initialize @scheme = "{{scheme}}" @host = "{{host}}{{#port}}:{{{.}}}{{/port}}" @@ -141,9 +142,19 @@ module {{moduleName}} @password = nil @access_token = nil @temp_folder_path = nil + end - # TODO revise below to support block - #yield(self) if block_given? + # Create a new `Configuration` with block. + # + # ``` + # config = Petstore::Configuration.new do |config| + # config.username = "xxx" + # config.password = "xxx" + # end + # ``` + def initialize + initialize + yield self end # The default Configuration object. @@ -151,8 +162,9 @@ module {{moduleName}} @@default ||= Configuration.new end + # Configure object with block. def configure - yield(self) if block_given? + yield self end def scheme=(scheme) diff --git a/modules/openapi-generator/src/main/resources/crystal/shard_name.mustache b/modules/openapi-generator/src/main/resources/crystal/shard_name.mustache index 7e3e9b162d4b..6d2de8333a37 100644 --- a/modules/openapi-generator/src/main/resources/crystal/shard_name.mustache +++ b/modules/openapi-generator/src/main/resources/crystal/shard_name.mustache @@ -9,18 +9,21 @@ module {{moduleName}} VERSION = {{ `shards version #{__DIR__}`.chomp.stringify }} + # Return the default `Configuration` object. + def self.configure + Configuration.default + end + # Customize default settings for the SDK using block. - # {{moduleName}}.configure do |config| - # config.username = "xxx" - # config.password = "xxx" - # end - # If no block given, return the default Configuration object. - def configure - if block_given? - yield(Configuration.default) - else - Configuration.default - end + # + # ``` + # {{moduleName}}.configure do |config| + # config.username = "xxx" + # config.password = "xxx" + # end + # ``` + def self.configure + yield Configuration.default end end diff --git a/samples/client/petstore/crystal/spec/configuration_spec.cr b/samples/client/petstore/crystal/spec/configuration_spec.cr new file mode 100644 index 000000000000..a99e77166dde --- /dev/null +++ b/samples/client/petstore/crystal/spec/configuration_spec.cr @@ -0,0 +1,26 @@ +require "./spec_helper" + +describe Petstore::Configuration do + describe "#initialize" do + context "with block" do + it "works" do + config = Petstore::Configuration.new do |config| + config.username = "xxx" + end + + config.username.should eq "xxx" + end + end + end + + describe "#configure" do + it "works" do + config = Petstore::Configuration.new + config.configure do |config| + config.username = "xxx" + end + + config.username.should eq "xxx" + end + end +end diff --git a/samples/client/petstore/crystal/spec/petstore_spec.cr b/samples/client/petstore/crystal/spec/petstore_spec.cr new file mode 100644 index 000000000000..cca7698a536d --- /dev/null +++ b/samples/client/petstore/crystal/spec/petstore_spec.cr @@ -0,0 +1,19 @@ +require "./spec_helper" + +describe Petstore do + describe "#configure" do + it "works" do + Petstore.configure do |config| + config.username = "xxx" + end + + config = Petstore.configure + + config.should eq Petstore::Configuration.default + config.username.should eq "xxx" + + # Clean up + Petstore::Configuration.default.username = nil + end + end +end diff --git a/samples/client/petstore/crystal/src/petstore.cr b/samples/client/petstore/crystal/src/petstore.cr index 1f02cc1930df..fadebdc48488 100644 --- a/samples/client/petstore/crystal/src/petstore.cr +++ b/samples/client/petstore/crystal/src/petstore.cr @@ -17,18 +17,21 @@ module Petstore VERSION = {{ `shards version #{__DIR__}`.chomp.stringify }} + # Return the default `Configuration` object. + def self.configure + Configuration.default + end + # Customize default settings for the SDK using block. - # Petstore.configure do |config| - # config.username = "xxx" - # config.password = "xxx" - # end - # If no block given, return the default Configuration object. - def configure - if block_given? - yield(Configuration.default) - else - Configuration.default - end + # + # ``` + # Petstore.configure do |config| + # config.username = "xxx" + # config.password = "xxx" + # end + # ``` + def self.configure + yield Configuration.default end end diff --git a/samples/client/petstore/crystal/src/petstore/configuration.cr b/samples/client/petstore/crystal/src/petstore/configuration.cr index b3d1c1ca2025..18ef2969ac36 100644 --- a/samples/client/petstore/crystal/src/petstore/configuration.cr +++ b/samples/client/petstore/crystal/src/petstore/configuration.cr @@ -127,6 +127,7 @@ module Petstore # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96 #property params_encoding : String? + # Create a new `Configuration`. def initialize @scheme = "http" @host = "petstore.swagger.io" @@ -149,9 +150,19 @@ module Petstore @password = nil @access_token = nil @temp_folder_path = nil + end - # TODO revise below to support block - #yield(self) if block_given? + # Create a new `Configuration` with block. + # + # ``` + # config = Petstore::Configuration.new do |config| + # config.username = "xxx" + # config.password = "xxx" + # end + # ``` + def initialize + initialize + yield self end # The default Configuration object. @@ -159,8 +170,9 @@ module Petstore @@default ||= Configuration.new end + # Configure object with block. def configure - yield(self) if block_given? + yield self end def scheme=(scheme) From 4948ce78ed001ccf4a870934e7713025be2ac46a Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 21 May 2021 12:54:40 +0800 Subject: [PATCH 132/186] update samples --- .../PetstoreClient/Classes/OpenAPIs/Extensions.swift | 6 +++++- .../Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Animal.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift | 2 ++ .../Classes/OpenAPIs/Models/ApiResponse.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift | 2 ++ .../Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift | 2 ++ .../Classes/OpenAPIs/Models/Capitalization.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Cat.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Category.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Client.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Dog.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/File.swift | 2 ++ .../Classes/OpenAPIs/Models/FileSchemaTestClass.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift | 2 ++ .../Classes/OpenAPIs/Models/HasOnlyReadOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/List.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift | 2 ++ .../MixedPropertiesAndAdditionalPropertiesClass.swift | 2 ++ .../Classes/OpenAPIs/Models/Model200Response.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Name.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Order.swift | 2 ++ .../Classes/OpenAPIs/Models/OuterComposite.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Pet.swift | 2 ++ .../Classes/OpenAPIs/Models/ReadOnlyFirst.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Return.swift | 2 ++ .../Classes/OpenAPIs/Models/SpecialModelName.swift | 2 ++ .../Classes/OpenAPIs/Models/StringBooleanMap.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/Tag.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderDefault.swift | 2 ++ .../Classes/OpenAPIs/Models/TypeHolderExample.swift | 2 ++ .../PetstoreClient/Classes/OpenAPIs/Models/User.swift | 2 ++ samples/client/petstore/swift5/x-swift-hashable/project.yml | 2 +- 42 files changed, 86 insertions(+), 2 deletions(-) diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 3aef2d1d6c54..11e807937bdc 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -5,7 +5,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif extension Bool: JSONEncodable { func encodeToJSON() -> Any { return self as Any } @@ -185,6 +187,7 @@ extension HTTPURLResponse { } } +#if canImport(AnyCodable) extension AnyCodable: Hashable { public func hash(into hasher: inout Hasher) { switch value { @@ -224,4 +227,5 @@ extension AnyCodable: Hashable { hasher.combine(0) } } -} \ No newline at end of file +} +#endif diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift index 5e200855eb86..9080af3e9608 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct AdditionalPropertiesClass: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift index bd89731cf339..c26cc3b6a8d7 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Animal.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Animal: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift index b20b894a1adb..a0b09cb97615 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/AnimalFarm.swift @@ -6,6 +6,8 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift index efc4b6998154..7d81a45adbed 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ApiResponse.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ApiResponse: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift index 8f042bcafcf9..d25598464fbe 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfArrayOfNumberOnly: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift index 216ddb963034..1d28ec680cc5 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayOfNumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayOfNumberOnly: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift index 0c81613f51d4..6f1028d15077 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ArrayTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ArrayTest: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift index 86d95d462a9e..74ec197ecda2 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Capitalization.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Capitalization: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift index 8bcdaa52c2a5..8645c52b44f7 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Cat.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Cat: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift index af61714a29b9..ed986d32cc6e 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/CatAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct CatAllOf: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Category.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Category.swift index 0def88b1fc8c..398da60aa73b 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Category.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Category.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Category: Codable, Hashable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift index 7a15b3a7c3b8..c38e0db828f6 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ClassModel.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model with \"_class\" property */ public struct ClassModel: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Client.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Client.swift index 82451c589234..170939891b6a 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Client.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Client.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Client: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift index f935e75ea71f..57ed7a20a3c1 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Dog.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Dog: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift index 378eb3c38478..5be7f8b08ca1 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/DogAllOf.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct DogAllOf: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift index 6502415e4f7f..67c2e914a2ec 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumArrays.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumArrays: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift index ab01cf297f8e..6ea2895aee53 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift index 11883eb92b45..a70a595f214b 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/EnumTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct EnumTest: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/File.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/File.swift index beed22f4452b..69e3da33b3f6 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/File.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/File.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Must be named `File` for test. */ public struct File: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift index 286fd1363ecd..68387be7c4ca 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FileSchemaTestClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FileSchemaTestClass: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift index 0c3ae8c0c520..fcbb5c3f7be6 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/FormatTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct FormatTest: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift index 5139c97869ea..42fe810e04a1 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/HasOnlyReadOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct HasOnlyReadOnly: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/List.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/List.swift index 5774c22584b5..e5c7ec7f3d63 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/List.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/List.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct List: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift index 245b554c5b18..c1d8412cda0c 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MapTest.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MapTest: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index 353dfe0095c4..e2b084551587 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct MixedPropertiesAndAdditionalPropertiesClass: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift index b05878fec393..3e02e71a66fc 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Model200Response.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name starting with number */ public struct Model200Response: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Name.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Name.swift index 9f37e7a69d98..9cef79be16ce 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Name.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Name.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing model name same as property name */ public struct Name: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift index f790388df53b..9da0be0af2bf 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/NumberOnly.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct NumberOnly: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Order.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Order.swift index 2b038b6a6a71..adde2ac76243 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Order.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Order.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Order: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift index 940ba71637a9..0a520ef9ae79 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterComposite.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct OuterComposite: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift index 9bd6f3bef8f6..76c34b3c2ce6 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/OuterEnum.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift index ea9ece39161f..a87ab825ea0b 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Pet.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Pet: Codable, Hashable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift index f54c2e9ddab5..eeaf9625e38a 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/ReadOnlyFirst.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct ReadOnlyFirst: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Return.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Return.swift index 0053e62ba10e..b1abd5c64859 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Return.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Return.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif /** Model for testing reserved words */ public struct Return: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift index 373a7e8fc8cd..65d9147f3e62 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/SpecialModelName.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct SpecialModelName: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index a103da75ea3e..517b23a181f3 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct StringBooleanMap: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift index 5d90c8a74009..cd5acc827db7 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/Tag.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct Tag: Codable, Hashable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift index 2c4ecd20ddea..ac7d4626df75 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderDefault.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderDefault: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift index c6a93c87f8bc..2de070c49279 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/TypeHolderExample.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct TypeHolderExample: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/User.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/User.swift index c905a34d516a..c25aec1dc049 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/User.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/User.swift @@ -6,7 +6,9 @@ // import Foundation +#if canImport(AnyCodable) import AnyCodable +#endif public struct User: Codable { diff --git a/samples/client/petstore/swift5/x-swift-hashable/project.yml b/samples/client/petstore/swift5/x-swift-hashable/project.yml index 5528eeee5135..0493cf65896e 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/project.yml +++ b/samples/client/petstore/swift5/x-swift-hashable/project.yml @@ -11,5 +11,5 @@ targets: settings: APPLICATION_EXTENSION_API_ONLY: true scheme: {} - + dependencies: - carthage: AnyCodable From ab6d66147b858dca268119456e084a6540512329 Mon Sep 17 00:00:00 2001 From: Arthur Mogliev Date: Fri, 21 May 2021 10:40:38 +0400 Subject: [PATCH 133/186] [php-mezzio-ph] PHP 8 support (#9445) * Huge update for php-mezzio-ph generator: - proper container support for data types - support for query parameter references and query parameter schema references - dependency update (PHP 7.3+, PathHandler 0.7+, DataTransfer 0.5+) * Sample regeneration after rebasing for php-mezzio-ph * - added custom CLI option for php-mezzio-ph to generate code using modern PHP syntax - removed obsolete php-mezzio-ph samples in samples/openapi3/server/petstore/php-mezzio-ph * - fixes for JavaDoc declarations that seems to break CI * - fix for outdated sample file --- .gitignore | 1 - bin/configs/php-mezzio-ph-modern.yaml | 6 + docs/generators/php-mezzio-ph.md | 1 + .../PhpMezzioPathHandlerServerCodegen.java | 223 +++++++++++++----- .../php-mezzio-ph-modern/Factory.php.mustache | 53 +++++ .../InternalServerError.php.mustache | 45 ++++ .../php-mezzio-ph-modern/README.md.mustache | 34 +++ .../php-mezzio-ph-modern/api.mustache | 73 ++++++ .../php-mezzio-ph-modern/app.yml.mustache | 0 .../composer.json.mustache | 26 ++ .../php-mezzio-ph-modern}/config.yml | 11 +- .../php-mezzio-ph-modern}/container.php | 3 - .../data_transfer.yml.mustache | 34 +++ .../resources/php-mezzio-ph-modern/gitignore | 0 .../resources/php-mezzio-ph-modern}/index.php | 0 .../list_item_type.mustache | 8 + .../map_item_type.mustache | 8 + .../php-mezzio-ph-modern/model.mustache | 13 + .../model_container.mustache | 57 +++++ .../model_normal_var.mustache | 45 ++++ .../model_object.mustache | 23 ++ .../model_query_var.mustache | 51 ++++ .../path_handler.yml.mustache | 44 ++++ .../php-mezzio-ph/Factory.php.mustache | 16 +- .../php-mezzio-ph/README.md.mustache | 4 +- .../main/resources/php-mezzio-ph/api.mustache | 17 +- .../php-mezzio-ph/composer.json.mustache | 8 +- .../main/resources/php-mezzio-ph/config.yml | 9 +- .../php-mezzio-ph/data_transfer.yml.mustache | 8 + .../php-mezzio-ph/list_item_type.mustache | 8 + .../php-mezzio-ph/map_item_type.mustache | 8 + .../resources/php-mezzio-ph/model.mustache | 26 +- .../php-mezzio-ph/model_container.mustache | 59 +++++ .../php-mezzio-ph/model_normal_var.mustache | 105 ++++----- .../php-mezzio-ph/model_object.mustache | 24 ++ .../php-mezzio-ph/model_query_var.mustache | 99 ++++---- .../php-mezzio-ph/path_handler.yml.mustache | 37 +-- .../php-mezzio-ph/.openapi-generator/FILES | 36 --- .../php-mezzio-ph/.openapi-generator/VERSION | 1 - .../petstore/php-mezzio-ph/composer.json | 27 --- .../php-mezzio-ph/src/App/DTO/ApiResponse.php | 31 --- .../php-mezzio-ph/src/App/DTO/Category.php | 26 -- .../src/App/DTO/FindPetsByStatusQueryData.php | 22 -- .../src/App/DTO/FindPetsByTagsQueryData.php | 22 -- .../src/App/DTO/InlineObject.php | 26 -- .../src/App/DTO/InlineObject1.php | 27 --- .../src/App/DTO/LoginUserQueryData.php | 30 --- .../php-mezzio-ph/src/App/DTO/Order.php | 51 ---- .../php-mezzio-ph/src/App/DTO/Pet.php | 58 ----- .../php-mezzio-ph/src/App/DTO/Tag.php | 25 -- .../php-mezzio-ph/src/App/DTO/User.php | 62 ----- .../php-mezzio-ph/src/App/Handler/Pet.php | 68 ------ .../src/App/Handler/PetFindByStatus.php | 44 ---- .../src/App/Handler/PetFindByTags.php | 44 ---- .../src/App/Handler/StoreOrder.php | 41 ---- .../src/App/Handler/UserLogin.php | 43 ---- .../petstore/php-mezzio-ph-modern/.gitignore | 9 + .../.openapi-generator-ignore | 0 .../.openapi-generator/FILES | 71 ++++++ .../.openapi-generator/VERSION | 1 + .../petstore/php-mezzio-ph-modern}/README.md | 6 +- .../application/config.yml | 21 ++ .../application/config/app.yml | 22 ++ .../application/config/data_transfer.yml | 14 +- .../application/config/path_handler.yml | 37 +-- .../application/container.php | 43 ++++ .../php-mezzio-ph-modern/composer.json | 26 ++ .../php-mezzio-ph-modern/public/index.php | 11 + .../src/App/DTO/ApiResponse.php | 25 ++ .../src/App/DTO/Category.php | 22 ++ .../src/App/DTO/Collection.php | 14 ++ .../src/App/DTO/Collection1.php | 14 ++ .../src/App/DTO/Collection10.php | 14 ++ .../src/App/DTO/Collection11.php | 14 ++ .../src/App/DTO/Collection12.php | 14 ++ .../src/App/DTO/Collection13.php | 14 ++ .../src/App/DTO/Collection14.php | 14 ++ .../src/App/DTO/Collection15.php | 14 ++ .../src/App/DTO/Collection16.php | 14 ++ .../src/App/DTO/Collection17.php | 14 ++ .../src/App/DTO/Collection18.php | 14 ++ .../src/App/DTO/Collection19.php | 14 ++ .../src/App/DTO/Collection2.php | 14 ++ .../src/App/DTO/Collection20.php | 14 ++ .../src/App/DTO/Collection21.php | 14 ++ .../src/App/DTO/Collection22.php | 14 ++ .../src/App/DTO/Collection23.php | 14 ++ .../src/App/DTO/Collection24.php | 14 ++ .../src/App/DTO/Collection25.php | 14 ++ .../src/App/DTO/Collection26.php | 14 ++ .../src/App/DTO/Collection27.php | 14 ++ .../src/App/DTO/Collection28.php | 14 ++ .../src/App/DTO/Collection29.php | 14 ++ .../src/App/DTO/Collection3.php | 14 ++ .../src/App/DTO/Collection30.php | 14 ++ .../src/App/DTO/Collection31.php | 14 ++ .../src/App/DTO/Collection32.php | 14 ++ .../src/App/DTO/Collection33.php | 14 ++ .../src/App/DTO/Collection34.php | 14 ++ .../src/App/DTO/Collection35.php | 14 ++ .../src/App/DTO/Collection36.php | 14 ++ .../src/App/DTO/Collection4.php | 14 ++ .../src/App/DTO/Collection5.php | 14 ++ .../src/App/DTO/Collection6.php | 14 ++ .../src/App/DTO/Collection7.php | 14 ++ .../src/App/DTO/Collection8.php | 14 ++ .../src/App/DTO/Collection9.php | 14 ++ .../src/App/DTO/FindPetsByStatusQueryData.php | 21 ++ .../src/App/DTO/FindPetsByTagsQueryData.php | 21 ++ .../src/App/DTO/LoginUserQueryData.php | 30 +++ .../src/App/DTO/Order.php | 41 ++++ .../php-mezzio-ph-modern/src/App/DTO/Pet.php | 43 ++++ .../php-mezzio-ph-modern/src/App/DTO/Tag.php | 21 ++ .../php-mezzio-ph-modern/src/App/DTO/User.php | 48 ++++ .../php-mezzio-ph-modern}/src/App/Factory.php | 19 +- .../src/App/Handler/Pet.php | 56 +++++ .../src/App/Handler/PetFindByStatus.php | 36 +++ .../src/App/Handler/PetFindByTags.php | 36 +++ .../src/App/Handler/PetPetId.php | 31 +-- .../src/App/Handler/PetPetIdUploadImage.php | 17 +- .../src/App/Handler/StoreInventory.php | 20 +- .../src/App/Handler/StoreOrder.php | 34 +++ .../src/App/Handler/StoreOrderOrderId.php | 26 +- .../src/App/Handler/User.php | 17 +- .../src/App/Handler/UserCreateWithArray.php | 20 +- .../src/App/Handler/UserCreateWithList.php | 20 +- .../src/App/Handler/UserLogin.php | 36 +++ .../src/App/Handler/UserLogout.php | 11 +- .../src/App/Handler/UserUsername.php | 37 +-- .../App/Middleware/InternalServerError.php | 11 +- .../php-mezzio-ph/.openapi-generator/FILES | 37 +++ .../server/petstore/php-mezzio-ph/README.md | 4 +- .../php-mezzio-ph/application/config.yml | 9 +- .../application/config/data_transfer.yml | 8 + .../application/config/path_handler.yml | 37 +-- .../petstore/php-mezzio-ph/composer.json | 8 +- .../php-mezzio-ph/src/App/DTO/ApiResponse.php | 3 + .../php-mezzio-ph/src/App/DTO/Category.php | 2 + .../php-mezzio-ph/src/App/DTO/Collection.php | 16 ++ .../php-mezzio-ph/src/App/DTO/Collection1.php | 16 ++ .../src/App/DTO/Collection10.php | 16 ++ .../src/App/DTO/Collection11.php | 16 ++ .../src/App/DTO/Collection12.php | 16 ++ .../src/App/DTO/Collection13.php | 16 ++ .../src/App/DTO/Collection14.php | 16 ++ .../src/App/DTO/Collection15.php | 16 ++ .../src/App/DTO/Collection16.php | 16 ++ .../src/App/DTO/Collection17.php | 16 ++ .../src/App/DTO/Collection18.php | 16 ++ .../src/App/DTO/Collection19.php | 16 ++ .../php-mezzio-ph/src/App/DTO/Collection2.php | 16 ++ .../src/App/DTO/Collection20.php | 16 ++ .../src/App/DTO/Collection21.php | 16 ++ .../src/App/DTO/Collection22.php | 16 ++ .../src/App/DTO/Collection23.php | 16 ++ .../src/App/DTO/Collection24.php | 16 ++ .../src/App/DTO/Collection25.php | 16 ++ .../src/App/DTO/Collection26.php | 16 ++ .../src/App/DTO/Collection27.php | 16 ++ .../src/App/DTO/Collection28.php | 16 ++ .../src/App/DTO/Collection29.php | 16 ++ .../php-mezzio-ph/src/App/DTO/Collection3.php | 16 ++ .../src/App/DTO/Collection30.php | 16 ++ .../src/App/DTO/Collection31.php | 16 ++ .../src/App/DTO/Collection32.php | 16 ++ .../src/App/DTO/Collection33.php | 16 ++ .../src/App/DTO/Collection34.php | 16 ++ .../src/App/DTO/Collection35.php | 16 ++ .../src/App/DTO/Collection36.php | 16 ++ .../php-mezzio-ph/src/App/DTO/Collection4.php | 16 ++ .../php-mezzio-ph/src/App/DTO/Collection5.php | 16 ++ .../php-mezzio-ph/src/App/DTO/Collection6.php | 16 ++ .../php-mezzio-ph/src/App/DTO/Collection7.php | 16 ++ .../php-mezzio-ph/src/App/DTO/Collection8.php | 16 ++ .../php-mezzio-ph/src/App/DTO/Collection9.php | 16 ++ .../src/App/DTO/FindPetsByStatusQueryData.php | 2 +- .../src/App/DTO/FindPetsByTagsQueryData.php | 2 +- .../src/App/DTO/InlineObject.php | 26 -- .../src/App/DTO/InlineObject1.php | 27 --- .../src/App/DTO/LoginUserQueryData.php | 2 + .../php-mezzio-ph/src/App/DTO/Order.php | 6 + .../php-mezzio-ph/src/App/DTO/Pet.php | 23 +- .../php-mezzio-ph/src/App/DTO/Tag.php | 2 + .../php-mezzio-ph/src/App/DTO/User.php | 8 + .../php-mezzio-ph/src/App/Factory.php | 16 +- .../src/App/Handler/PetFindByStatus.php | 5 +- .../src/App/Handler/PetFindByTags.php | 5 +- .../src/App/Handler/StoreInventory.php | 5 +- .../src/App/Handler/UserCreateWithArray.php | 5 +- .../src/App/Handler/UserCreateWithList.php | 5 +- 190 files changed, 2967 insertions(+), 1221 deletions(-) create mode 100644 bin/configs/php-mezzio-ph-modern.yaml create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/Factory.php.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/InternalServerError.php.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/README.md.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/api.mustache rename samples/openapi3/server/petstore/php-mezzio-ph/application/config/app.yml => modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/app.yml.mustache (100%) create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/composer.json.mustache rename {samples/openapi3/server/petstore/php-mezzio-ph/application => modules/openapi-generator/src/main/resources/php-mezzio-ph-modern}/config.yml (68%) rename {samples/openapi3/server/petstore/php-mezzio-ph/application => modules/openapi-generator/src/main/resources/php-mezzio-ph-modern}/container.php (91%) create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/data_transfer.yml.mustache rename samples/openapi3/server/petstore/php-mezzio-ph/.gitignore => modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/gitignore (100%) rename {samples/openapi3/server/petstore/php-mezzio-ph/public => modules/openapi-generator/src/main/resources/php-mezzio-ph-modern}/index.php (100%) create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/list_item_type.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/map_item_type.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_container.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_normal_var.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_object.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_query_var.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/path_handler.yml.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph/list_item_type.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph/map_item_type.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph/model_container.mustache create mode 100644 modules/openapi-generator/src/main/resources/php-mezzio-ph/model_object.mustache delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/.openapi-generator/FILES delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/.openapi-generator/VERSION delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/composer.json delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/ApiResponse.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/Category.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/FindPetsByStatusQueryData.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/FindPetsByTagsQueryData.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/InlineObject.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/InlineObject1.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/LoginUserQueryData.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/Order.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/Pet.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/Tag.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/User.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/Pet.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByStatus.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByTags.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/StoreOrder.php delete mode 100644 samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserLogin.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/.gitignore rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/.openapi-generator-ignore (100%) create mode 100644 samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/FILES create mode 100644 samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/VERSION rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/README.md (93%) create mode 100644 samples/server/petstore/php-mezzio-ph-modern/application/config.yml create mode 100644 samples/server/petstore/php-mezzio-ph-modern/application/config/app.yml rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/application/config/data_transfer.yml (69%) rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/application/config/path_handler.yml (53%) create mode 100644 samples/server/petstore/php-mezzio-ph-modern/application/container.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/composer.json create mode 100644 samples/server/petstore/php-mezzio-ph-modern/public/index.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/ApiResponse.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Category.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection1.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection10.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection11.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection12.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection13.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection14.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection15.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection16.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection17.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection18.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection19.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection2.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection20.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection21.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection22.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection23.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection24.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection25.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection26.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection27.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection28.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection29.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection3.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection30.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection31.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection32.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection33.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection34.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection35.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection36.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection4.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection5.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection6.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection7.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection8.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection9.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/FindPetsByStatusQueryData.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/FindPetsByTagsQueryData.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/LoginUserQueryData.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Order.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Pet.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Tag.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/User.php rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Factory.php (71%) create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/Pet.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetFindByStatus.php create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetFindByTags.php rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Handler/PetPetId.php (55%) rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Handler/PetPetIdUploadImage.php (58%) rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Handler/StoreInventory.php (54%) create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/StoreOrder.php rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Handler/StoreOrderOrderId.php (54%) rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Handler/User.php (57%) rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Handler/UserCreateWithArray.php (52%) rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Handler/UserCreateWithList.php (52%) create mode 100644 samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserLogin.php rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Handler/UserLogout.php (70%) rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Handler/UserUsername.php (51%) rename samples/{openapi3/server/petstore/php-mezzio-ph => server/petstore/php-mezzio-ph-modern}/src/App/Middleware/InternalServerError.php (82%) create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection1.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection10.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection11.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection12.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection13.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection14.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection15.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection16.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection17.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection18.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection19.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection2.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection20.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection21.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection22.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection23.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection24.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection25.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection26.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection27.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection28.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection29.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection3.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection30.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection31.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection32.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection33.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection34.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection35.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection36.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection4.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection5.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection6.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection7.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection8.php create mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection9.php delete mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/InlineObject.php delete mode 100644 samples/server/petstore/php-mezzio-ph/src/App/DTO/InlineObject1.php diff --git a/.gitignore b/.gitignore index b56824e26e3c..3a964a0bc5e3 100644 --- a/.gitignore +++ b/.gitignore @@ -177,7 +177,6 @@ samples/client/petstore/python-tornado/.venv/ # PHP samples/client/petstore/php/OpenAPIClient-php/composer.lock samples/openapi3/server/petstore/php-symfony/SymfonyBundle-php/composer.lock -samples/openapi3/server/petstore/php-mezzio-ph/composer.lock samples/server/petstore/php-laravel/lib/composer.lock samples/server/petstore/php-lumen/lib/composer.lock samples/server/petstore/php-slim4/composer.lock diff --git a/bin/configs/php-mezzio-ph-modern.yaml b/bin/configs/php-mezzio-ph-modern.yaml new file mode 100644 index 000000000000..accaa2dfe30d --- /dev/null +++ b/bin/configs/php-mezzio-ph-modern.yaml @@ -0,0 +1,6 @@ +generatorName: php-mezzio-ph +outputDir: samples/server/petstore/php-mezzio-ph-modern +inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml +templateDir: modules/openapi-generator/src/main/resources/php-mezzio-ph-modern +additionalProperties: + modern: "true" diff --git a/docs/generators/php-mezzio-ph.md b/docs/generators/php-mezzio-ph.md index f691e8f57fb2..93f31d7fbca2 100644 --- a/docs/generators/php-mezzio-ph.md +++ b/docs/generators/php-mezzio-ph.md @@ -15,6 +15,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |invokerPackage|The main namespace to use for all classes. e.g. Yay\Pets| |null| |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| |modelPackage|package for generated models| |null| +|modern|use modern language features (generated code will require PHP 8.0)| |false| |packageName|The main package name for classes. e.g. GeneratedPetstore| |null| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpMezzioPathHandlerServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpMezzioPathHandlerServerCodegen.java index 658537e414b2..529c5a27e217 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpMezzioPathHandlerServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpMezzioPathHandlerServerCodegen.java @@ -21,9 +21,13 @@ import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.PathItem.HttpMethod; +import io.swagger.v3.oas.models.Paths; import io.swagger.v3.oas.models.media.*; import io.swagger.v3.oas.models.parameters.Parameter; import io.swagger.v3.oas.models.parameters.QueryParameter; +import io.swagger.v3.oas.models.parameters.RequestBody; +import io.swagger.v3.oas.models.responses.ApiResponse; +import io.swagger.v3.oas.models.responses.ApiResponses; import org.openapitools.codegen.*; import org.openapitools.codegen.meta.features.*; import org.openapitools.codegen.utils.ModelUtils; @@ -35,12 +39,17 @@ public class PhpMezzioPathHandlerServerCodegen extends AbstractPhpCodegen { private final Logger LOGGER = LoggerFactory.getLogger(PhpMezzioPathHandlerServerCodegen.class); - - // TODO: Rename to x- prefixed vendor extensions, per specification. + // Custom generator option names + public static final String OPT_MODERN = "modern"; + // Internal vendor extension names for extra template data that should not be set in specification public static final String VEN_FROM_QUERY = "internal.ze-ph.fromQuery"; public static final String VEN_COLLECTION_FORMAT = "internal.ze-ph.collectionFormat"; public static final String VEN_QUERY_DATA_TYPE = "internal.ze-ph.queryDataType"; public static final String VEN_HAS_QUERY_DATA = "internal.ze-ph.hasQueryData"; + public static final String VEN_FROM_CONTAINER = "internal.ze-ph.fromContainer"; + public static final String VEN_CONTAINER_DATA_TYPE = "internal.ze-ph.containerDataType"; + + private boolean useModernSyntax = false; @Override public CodegenType getTag() { @@ -85,6 +94,8 @@ public PhpMezzioPathHandlerServerCodegen() { modelDirName = "DTO"; apiPackage = invokerPackage + "\\" + apiDirName; modelPackage = invokerPackage + "\\" + modelDirName; + //"Api" classes have dedicated namespace so there is no need to add non-empty suffix by default + apiNameSuffix = ""; apiTestTemplateFiles.clear(); modelTestTemplateFiles.clear(); @@ -103,6 +114,17 @@ public PhpMezzioPathHandlerServerCodegen() { supportingFiles.add(new SupportingFile("InternalServerError.php.mustache", srcBasePath + File.separator + "Middleware", "InternalServerError.php")); additionalProperties.put(CodegenConstants.ARTIFACT_VERSION, "1.0.0"); + //Register custom CLI options + addSwitch(OPT_MODERN, "use modern language features (generated code will require PHP 8.0)", useModernSyntax); + } + + @Override + public void processOpts() { + super.processOpts(); + if (additionalProperties.containsKey(OPT_MODERN)) { + embeddedTemplateDir = templateDir = "php-mezzio-ph-modern"; + useModernSyntax = true; + } } /** @@ -136,29 +158,31 @@ public void addOperationToGroup(String tag, String resourcePath, Operation opera } } - /** - * Return the file name of the Api Test - * - * @param name the file name of the Api - * @return the file name of the Api - */ @Override - public String toApiFilename(String name) { - return toApiName(name); + public String toApiName(String name) { + return super.toApiName(toModelName(name)); } - /** - * Output the API (class) name (capitalized) ending with "Api" - * Return DefaultApi if name is empty - * - * @param name the name of the Api - * @return capitalized Api name ending with "Api" - */ @Override - public String toApiName(String name) { - //Remove } - name = name.replaceAll("[\\}]", ""); - return super.toModelName(name); + public String getTypeDeclaration(Schema p) { + String result; + Map extensions = p.getExtensions(); + if ((extensions != null) && extensions.containsKey(VEN_CONTAINER_DATA_TYPE)) { + result = (String) extensions.get(VEN_CONTAINER_DATA_TYPE); + } else if (useModernSyntax && (ModelUtils.isArraySchema(p) || ModelUtils.isMapSchema(p))) { + result = "array"; + } else { + result = super.getTypeDeclaration(p); + } + return result; + } + + @Override + public void preprocessOpenAPI(OpenAPI openAPI) { + super.preprocessOpenAPI(openAPI); + + generateParameterSchemas(openAPI); + generateContainerSchemas(openAPI); } /** @@ -166,10 +190,7 @@ public String toApiName(String name) { * * @param openAPI OpenAPI object */ - @Override - public void preprocessOpenAPI(OpenAPI openAPI) { - super.preprocessOpenAPI(openAPI); - + protected void generateParameterSchemas(OpenAPI openAPI) { Map paths = openAPI.getPaths(); if (paths != null) { for (String pathname : paths.keySet()) { @@ -178,34 +199,34 @@ public void preprocessOpenAPI(OpenAPI openAPI) { if (operationMap != null) { for (HttpMethod method : operationMap.keySet()) { Operation operation = operationMap.get(method); - Map schemas = new HashMap<>(); + Map propertySchemas = new HashMap<>(); if (operation == null || operation.getParameters() == null) { continue; } List requiredProperties = new ArrayList<>(); for (Parameter parameter : operation.getParameters()) { - Schema schema = convertParameterToSchema(parameter); - if (schema != null) { - schemas.put(schema.getName(), schema); - if (Boolean.TRUE.equals(parameter.getRequired())) { - requiredProperties.add(schema.getName()); + Parameter referencedParameter = ModelUtils.getReferencedParameter(openAPI, parameter); + Schema propertySchema = convertParameterToSchema(openAPI, referencedParameter); + if (propertySchema != null) { + propertySchemas.put(propertySchema.getName(), propertySchema); + if (Boolean.TRUE.equals(referencedParameter.getRequired())) { + requiredProperties.add(propertySchema.getName()); } } } - if (!schemas.isEmpty()) { - ObjectSchema model = new ObjectSchema(); + if (!propertySchemas.isEmpty()) { + ObjectSchema schema = new ObjectSchema(); String operationId = getOrGenerateOperationId(operation, pathname, method.name()); - model.setDescription("Query parameters for " + operationId); - model.setProperties(schemas); - model.setRequired(requiredProperties); - //Add internal extension directly, because addExtension filters extension names - addInternalExtensionToSchema(model, VEN_FROM_QUERY, Boolean.TRUE); - String definitionName = generateUniqueDefinitionName(operationId + "QueryData", openAPI); - openAPI.getComponents().addSchemas(definitionName, model); - String definitionModel = "\\" + modelPackage + "\\" + toModelName(definitionName); - addInternalExtensionToOperation(operation, VEN_QUERY_DATA_TYPE, definitionModel); + schema.setDescription("Query parameters for " + operationId); + schema.setProperties(propertySchemas); + schema.setRequired(requiredProperties); + addInternalExtensionToSchema(schema, VEN_FROM_QUERY, Boolean.TRUE); + String schemaName = generateUniqueSchemaName(openAPI, operationId + "QueryData"); + openAPI.getComponents().addSchemas(schemaName, schema); + String schemaDataType = getTypeDeclaration(toModelName(schemaName)); + addInternalExtensionToOperation(operation, VEN_QUERY_DATA_TYPE, schemaDataType); addInternalExtensionToOperation(operation, VEN_HAS_QUERY_DATA, Boolean.TRUE); } } @@ -214,17 +235,18 @@ public void preprocessOpenAPI(OpenAPI openAPI) { } } - protected Schema convertParameterToSchema(Parameter parameter) { + protected Schema convertParameterToSchema(OpenAPI openAPI, Parameter parameter) { Schema property = null; if (parameter instanceof QueryParameter) { QueryParameter queryParameter = (QueryParameter) parameter; + Schema parameterSchema = ModelUtils.getReferencedSchema(openAPI, queryParameter.getSchema()); // array - if (ModelUtils.isArraySchema(queryParameter.getSchema())) { - Schema inner = ((ArraySchema) queryParameter.getSchema()).getItems(); + if (ModelUtils.isArraySchema(parameterSchema)) { + Schema itemSchema = ((ArraySchema) parameterSchema).getItems(); ArraySchema arraySchema = new ArraySchema(); - arraySchema.setMinItems(queryParameter.getSchema().getMinItems()); - arraySchema.setMaxItems(queryParameter.getSchema().getMaxItems()); - arraySchema.setItems(inner); + arraySchema.setMinItems(parameterSchema.getMinItems()); + arraySchema.setMaxItems(parameterSchema.getMaxItems()); + arraySchema.setItems(itemSchema); String collectionFormat = getCollectionFormat(queryParameter); if (collectionFormat == null) { collectionFormat = "csv"; @@ -232,25 +254,25 @@ protected Schema convertParameterToSchema(Parameter parameter) { addInternalExtensionToSchema(arraySchema, VEN_COLLECTION_FORMAT, collectionFormat); property = arraySchema; } else { // non-array e.g. string, integer - switch (queryParameter.getSchema().getType()) { + switch (parameterSchema.getType()) { case "string": StringSchema stringSchema = new StringSchema(); - stringSchema.setMinLength(queryParameter.getSchema().getMinLength()); - stringSchema.setMaxLength(queryParameter.getSchema().getMaxLength()); - stringSchema.setPattern(queryParameter.getSchema().getPattern()); - stringSchema.setEnum(queryParameter.getSchema().getEnum()); + stringSchema.setMinLength(parameterSchema.getMinLength()); + stringSchema.setMaxLength(parameterSchema.getMaxLength()); + stringSchema.setPattern(parameterSchema.getPattern()); + stringSchema.setEnum(parameterSchema.getEnum()); property = stringSchema; break; case "integer": IntegerSchema integerSchema = new IntegerSchema(); - integerSchema.setMinimum(queryParameter.getSchema().getMinimum()); - integerSchema.setMaximum(queryParameter.getSchema().getMaximum()); + integerSchema.setMinimum(parameterSchema.getMinimum()); + integerSchema.setMaximum(parameterSchema.getMaximum()); property = integerSchema; break; case "number": NumberSchema floatSchema = new NumberSchema(); - floatSchema.setMinimum(queryParameter.getSchema().getMinimum()); - floatSchema.setMaximum(queryParameter.getSchema().getMaximum()); + floatSchema.setMinimum(parameterSchema.getMinimum()); + floatSchema.setMaximum(parameterSchema.getMaximum()); property = floatSchema; break; case "boolean": @@ -264,6 +286,7 @@ protected Schema convertParameterToSchema(Parameter parameter) { break; } } + if (property != null) { property.setName(queryParameter.getName()); property.setDescription(queryParameter.getDescription()); @@ -289,7 +312,7 @@ protected void addInternalExtensionToOperation(Operation operation, String name, operation.getExtensions().put(name, value); } - protected String generateUniqueDefinitionName(String name, OpenAPI openAPI) { + protected String generateUniqueSchemaName(OpenAPI openAPI, String name) { String result = name; if (openAPI.getComponents().getSchemas() != null) { int count = 1; @@ -301,6 +324,90 @@ protected String generateUniqueDefinitionName(String name, OpenAPI openAPI) { return result; } + /** + * Generate additional model definitions for containers in whole specification + * + * @param openAPI OpenAPI object + */ + protected void generateContainerSchemas(OpenAPI openAPI) { + Paths paths = openAPI.getPaths(); + for (String pathName : paths.keySet()) { + for (Operation operation : paths.get(pathName).readOperations()) { + List parameters = operation.getParameters(); + if (parameters != null) { + for (Parameter parameter : parameters) { + generateContainerSchemas(openAPI, ModelUtils.getReferencedParameter(openAPI, parameter).getSchema()); + } + } + RequestBody requestBody = ModelUtils.getReferencedRequestBody(openAPI, operation.getRequestBody()); + if (requestBody != null) { + Content requestBodyContent = requestBody.getContent(); + if (requestBodyContent != null) { + for (String mediaTypeName : requestBodyContent.keySet()) { + generateContainerSchemas(openAPI, requestBodyContent.get(mediaTypeName).getSchema()); + } + } + } + ApiResponses responses = operation.getResponses(); + for (String responseCode : responses.keySet()) { + ApiResponse response = ModelUtils.getReferencedApiResponse(openAPI, responses.get(responseCode)); + Content responseContent = response.getContent(); + if (responseContent != null) { + for (String mediaTypeName : responseContent.keySet()) { + generateContainerSchemas(openAPI, responseContent.get(mediaTypeName).getSchema()); + } + } + } + } + } + } + + /** + * Generate additional model definitions for containers in specified schema + * + * @param openAPI OpenAPI object + * @param schema OAS schema to process + */ + protected void generateContainerSchemas(OpenAPI openAPI, Schema schema) { + if (schema != null) { + //Dereference schema + schema = ModelUtils.getReferencedSchema(openAPI, schema); + Boolean isContainer = Boolean.FALSE; + + if (ModelUtils.isObjectSchema(schema)) { + //Recursively process all schemas of object properties + Map properties = schema.getProperties(); + if (properties != null) { + for (String propertyName: properties.keySet()) { + generateContainerSchemas(openAPI, properties.get(propertyName)); + } + } + } else if (ModelUtils.isArraySchema(schema)) { + //Recursively process schema of array items + generateContainerSchemas(openAPI, ((ArraySchema) schema).getItems()); + isContainer = Boolean.TRUE; + } else if (ModelUtils.isMapSchema(schema)) { + //Recursively process schema of map items + Object itemSchema = schema.getAdditionalProperties(); + if (itemSchema instanceof Schema) { + generateContainerSchemas(openAPI, (Schema) itemSchema); + } + isContainer = Boolean.TRUE; + } + + if (isContainer) { + //Generate special component schema for container + String containerSchemaName = generateUniqueSchemaName(openAPI, "Collection"); + Schema containerSchema = new ObjectSchema(); + containerSchema.addProperties("inner", schema); + addInternalExtensionToSchema(containerSchema, VEN_FROM_CONTAINER, Boolean.TRUE); + openAPI.getComponents().addSchemas(containerSchemaName, containerSchema); + String containerDataType = getTypeDeclaration(toModelName(containerSchemaName)); + addInternalExtensionToSchema(schema, VEN_CONTAINER_DATA_TYPE, containerDataType); + } + } + } + @Override public Map postProcessOperationsWithModels(Map objs, List allModels) { objs = super.postProcessOperationsWithModels(objs, allModels); diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/Factory.php.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/Factory.php.mustache new file mode 100644 index 000000000000..c517b6936044 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/Factory.php.mustache @@ -0,0 +1,53 @@ +get(EmitterInterface::class), + $container->get(ServerRequestInterface::class), + static fn(\Throwable $error): ResponseInterface => $errorMiddleware->handleError($error) + ); + $application = new Application( + $container->get(MiddlewareFactory::class), + $pipeline, + $container->get(RouteCollector::class), + $runner + ); + $application->pipe($errorMiddleware); + $application->pipe(RouteMiddleware::class); + $application->pipe(MethodNotAllowedMiddleware::class); + $application->pipe(DispatchMiddleware::class); + $application->pipe(NotFoundHandler::class); + + return $application; + } + + protected static function getErrorMiddleware(ContainerInterface $container): Middleware\InternalServerError + { + return $container->get(Middleware\InternalServerError::class); + } +} diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/InternalServerError.php.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/InternalServerError.php.mustache new file mode 100644 index 000000000000..54f4d66a56dc --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/InternalServerError.php.mustache @@ -0,0 +1,45 @@ +handle($request); + ErrorHandler::stop(true); + } + catch (\Throwable $error) { + $result = $this->handleError($error); + } + return $result; + } + + public function handleError(\Throwable $error): ResponseInterface + { + \error_log((string)$error); + return $this->generateEmptyResponse()->withStatus(500, 'Internal server error'); + } + + protected function generateEmptyResponse(): ResponseInterface + { + return ($this->responseGenerator)(); + } +} diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/README.md.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/README.md.mustache new file mode 100644 index 000000000000..fd66369b261a --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/README.md.mustache @@ -0,0 +1,34 @@ +# OpenAPI generated server + +Generated by the [OpenAPI Generator](https://openapi-generator.tech) project. + +## Overview +This server stub aims to provide light, yet comprehensive structure for your API project using: + +- PHP: >=8.0 +- [Laminas Mezzio](https://docs.mezzio.dev/mezzio/): >=3.3 +- [Path Handler](https://github.com/Articus/PathHandler): >=0.7 + +## How to use +All you have to do to start development is: + +- install dependencies via [Composer](https://getcomposer.org/) (small note: [ext-yaml](https://pecl.php.net/package/yaml) is used only for configuration parsing, so if you want to drop this dependency, simply adjust `./application/container.php`) +- create cache folder: `mkdir -p ./data/cache` (you will need it later for configuration and metadata caches - check comments in `./application/config.yml`) +- start PHP development server: `php -S 0.0.0.0:8080 -t ./public` (or any other SAPI you prefer, just make sure that you configure webroot to `./public` and rewrites to `./public/index.php`) + +After that you should be able to call all methods from your API spec. Most of the negative scenarios should be handled: + +- `404 Not found` for unknown routes +- `406 Not acceptable` for invalid `Accept` header +- `415 Unsupported media type` for invalid `Content-Type` header +- `400 Malformed JSON` for unparsable JSON body +- `422 Unprocessable entity` for parsable JSON body that fails validation + +But for obvious reason you will not get any `200 OK`, only `501 Not implemented`. So your next steps are: + +- check all TODOs left in the stub code where generator was not smart enough and could not guarantee correct implementation +- implement your API security mechanism (either special attribute or separate middleware) - generator does not do anything about it yet +- implement your handlers - the most tricky part :) + +## Enjoy! +Hopefully this stub will reduce the amount of boilerplate code you have to write manually. If you have any suggestions or questions about `php-mezzio-ph` generator, feel free to create issue either in [Path Handler repository](https://github.com/Articus/PathHandler/issues) or in [OpenAPI Generator repository](https://openapi-generator.tech/issues). diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/api.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/api.mustache new file mode 100644 index 000000000000..fdba51f5e00c --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/api.mustache @@ -0,0 +1,73 @@ + {{internal.ze-ph.queryDataType}}::class, + "objectAttr" => "queryData", + "source" => PHAttribute\Transfer::SOURCE_GET + ])] +{{/internal.ze-ph.hasQueryData}} +{{/vendorExtensions}} +{{#bodyParam}} +{{#consumes}} + // TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Consumer("{{{mediaType}}}", PHConsumer\Json::class)] +{{/consumes}} +{{^isPrimitiveType}} + #[PHA\Attribute(PHAttribute\Transfer::class, ["type" => {{dataType}}::class, "objectAttr" => "bodyData"])] +{{/isPrimitiveType}} +{{/bodyParam}} +{{#produces}} + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("{{{mediaType}}}", PHProducer\Transfer::class)] +{{/produces}} + public function {{operationId}}(ServerRequestInterface $request){{#returnType}}: {{returnType}}{{/returnType}} + { + //TODO implement method +{{#vendorExtensions}} +{{#internal.ze-ph.hasQueryData}} + /** @var {{internal.ze-ph.queryDataType}} $queryData */ + $queryData = $request->getAttribute("queryData"); +{{/internal.ze-ph.hasQueryData}} +{{/vendorExtensions}} +{{#bodyParam}} +{{^isPrimitiveType}} + /** @var {{dataType}} $bodyData */ + $bodyData = $request->getAttribute("bodyData"); +{{/isPrimitiveType}} +{{/bodyParam}} + throw new PHException\HttpCode(501, "Not implemented"); + } +{{/operation}} +} +{{/operations}} diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/application/config/app.yml b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/app.yml.mustache similarity index 100% rename from samples/openapi3/server/petstore/php-mezzio-ph/application/config/app.yml rename to modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/app.yml.mustache diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/composer.json.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/composer.json.mustache new file mode 100644 index 000000000000..787d5fb97f28 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/composer.json.mustache @@ -0,0 +1,26 @@ +{ + "name": "{{#lambda.lowercase}}{{gitUserId}}/{{gitRepoId}}{{/lambda.lowercase}}", + "description": "{{description}}", + "license": "unlicense", + "version": "{{artifactVersion}}", + "type": "project", + "require": { + "php": "^8.0", + "ext-yaml": "^2.2", + "mezzio/mezzio": "^3.3", + "laminas/laminas-diactoros": "^2.5", + "articus/path-handler": "^0.7", + "articus/data-transfer": "^0.5", + "articus/openapi-generator-common": "^0.2", + "psr/simple-cache": "^1.0", + "laminas/laminas-config": "^3.4", + "laminas/laminas-stdlib": "^3.3", + "laminas/laminas-validator": "^2.14", + "nikic/fast-route": "^1.3" + }, + "autoload": { + "psr-4": { + "": "src/" + } + } +} \ No newline at end of file diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/application/config.yml b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/config.yml similarity index 68% rename from samples/openapi3/server/petstore/php-mezzio-ph/application/config.yml rename to modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/config.yml index 1f106812353f..58056552c5bc 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/application/config.yml +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/config.yml @@ -9,12 +9,13 @@ # router: # cache: # directory: ./data/cache/PathHandler -# #Enable handler metadata cache -# metadata: -# cache: -# directory: ./data/cache/PathHandler + +#Enable handler metadata cache +#Articus\PathHandler\MetadataProvider\PhpAttribute: +# cache: +# directory: ./data/cache/PathHandler #Enable data transfer metadata cache for DTOs -#Articus\DataTransfer\MetadataProvider\Annotation: +#Articus\DataTransfer\MetadataProvider\PhpAttribute: # cache: # directory: ./data/cache/DataTransfer diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/application/container.php b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/container.php similarity index 91% rename from samples/openapi3/server/petstore/php-mezzio-ph/application/container.php rename to modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/container.php index b9638c5584b4..9c54fafcfec7 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/application/container.php +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/container.php @@ -6,9 +6,6 @@ //Use Composer autoload that includes code both from ../src and ../vendor require __DIR__ . '/../vendor/autoload.php'; -//Register Doctrine annotation autoload -\Doctrine\Common\Annotations\AnnotationRegistry::registerLoader('class_exists'); - //Path to file for caching full configuration const CONFIG_CACHE_PATH = __DIR__ . '/../data/cache/config.php'; diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/data_transfer.yml.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/data_transfer.yml.mustache new file mode 100644 index 000000000000..7bdd139bb9ff --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/data_transfer.yml.mustache @@ -0,0 +1,34 @@ +dependencies: + factories: + Articus\DataTransfer\Service: Articus\DataTransfer\Factory + Articus\DataTransfer\MetadataProvider\PhpAttribute: Articus\DataTransfer\MetadataProvider\Factory\PhpAttribute + Articus\DataTransfer\Strategy\PluginManager: Articus\DataTransfer\Strategy\Factory\PluginManager + Articus\DataTransfer\Validator\PluginManager: Articus\DataTransfer\Validator\Factory\PluginManager + Laminas\Validator\ValidatorPluginManager: Laminas\Validator\ValidatorPluginManagerFactory + aliases: + Articus\DataTransfer\ClassMetadataProviderInterface: Articus\DataTransfer\MetadataProvider\PhpAttribute + Articus\DataTransfer\FieldMetadataProviderInterface: Articus\DataTransfer\MetadataProvider\PhpAttribute + +Articus\DataTransfer\Strategy\PluginManager: + invokables: + QueryStringScalar: OpenAPIGenerator\Common\Strategy\QueryStringScalar + QueryStringScalarArray: OpenAPIGenerator\Common\Strategy\QueryStringScalarArray + factories: + Date: OpenAPIGenerator\Common\Strategy\Factory\MutableDate + DateTime: OpenAPIGenerator\Common\Strategy\Factory\MutableDateTime + ObjectList: OpenAPIGenerator\Common\Strategy\Factory\NoArgObjectList + ObjectMap: OpenAPIGenerator\Common\Strategy\Factory\NoArgObjectMap + ScalarList: OpenAPIGenerator\Common\Strategy\Factory\ScalarList + ScalarMap: OpenAPIGenerator\Common\Strategy\Factory\ScalarMap + +Articus\DataTransfer\Validator\PluginManager: + invokables: + Scalar: OpenAPIGenerator\Common\Validator\Scalar + QueryStringScalar: OpenAPIGenerator\Common\Validator\QueryStringScalar + QueryStringScalarArray: OpenAPIGenerator\Common\Validator\QueryStringScalarArray + abstract_factories: + - Articus\DataTransfer\Validator\Factory\Laminas + +validators: + invokables: + Count: Laminas\Validator\IsCountable diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/.gitignore b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/gitignore similarity index 100% rename from samples/openapi3/server/petstore/php-mezzio-ph/.gitignore rename to modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/gitignore diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/public/index.php b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/index.php similarity index 100% rename from samples/openapi3/server/petstore/php-mezzio-ph/public/index.php rename to modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/index.php diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/list_item_type.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/list_item_type.mustache new file mode 100644 index 000000000000..254676614331 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/list_item_type.mustache @@ -0,0 +1,8 @@ +{{#items +}}{{^isContainer +}}{{#isPrimitiveType}}"{{dataType}}"{{/isPrimitiveType +}}{{^isPrimitiveType}}{{dataType}}::class{{/isPrimitiveType +}}{{/isContainer +}}{{#isContainer +}}{{dataType}}::class{{/isContainer +}}{{/items}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/map_item_type.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/map_item_type.mustache new file mode 100644 index 000000000000..a58e19beca54 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/map_item_type.mustache @@ -0,0 +1,8 @@ +{{#additionalProperties +}}{{^isContainer +}}{{#isPrimitiveType}}"{{dataType}}"{{/isPrimitiveType +}}{{^isPrimitiveType}}{{dataType}}::class{{/isPrimitiveType +}}{{/isContainer +}}{{#isContainer +}}{{dataType}}::class{{/isContainer +}}{{/additionalProperties}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model.mustache new file mode 100644 index 000000000000..4d73c1859451 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model.mustache @@ -0,0 +1,13 @@ +model_container}}{{/internal.ze-ph.fromContainer +}}{{^internal.ze-ph.fromContainer}}{{>model_object}}{{/internal.ze-ph.fromContainer +}}{{/vendorExtensions +}}{{^vendorExtensions}}{{>model_object}}{{/vendorExtensions +}}{{/model}}{{/models}} diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_container.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_container.mustache new file mode 100644 index 000000000000..543194c798b5 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_container.mustache @@ -0,0 +1,57 @@ +{{#vars +}}{{#isArray +}}#[DTA\Strategy("{{#isPrimitiveType}}ScalarList{{/isPrimitiveType}}{{^isPrimitiveType}}ObjectList{{/isPrimitiveType}}", ["type" => {{>list_item_type}}])] +{{#minItems}}{{^maxItems +}}#[DTA\Validator("Count", ["min" => {{minItems}}], blocker: true)] +{{/maxItems}}{{/minItems +}}{{^minItems}}{{#maxItems +}}#[DTA\Validator("Count", ["max" => {{maxItems}}], blocker: true)] +{{/maxItems}}{{/minItems +}}{{#minItems}}{{#maxItems +}}#[DTA\Validator("Count", ["min" => {{minItems}}, "max" => {{maxItems}}], blocker: true)] +{{/maxItems}}{{/minItems +}}#[DTA\Validator("Collection", ["validators" => [ +{{#isPrimitiveType +}} ["name" => "Scalar", "options" => ["type" => {{>list_item_type}}]] +{{/isPrimitiveType +}}{{#isDate +}} ["name" => "Date"] +{{/isDate +}}{{#isDateTime +}} ["name" => "Date", "options" => ["format" => \DateTime::RFC3339]] +{{/isDateTime +}}{{^isPrimitiveType}}{{^isDate}}{{^isDateTime +}} ["name" => "TypeCompliant", "options" => ["type" => {{>list_item_type}}]] +{{/isDateTime}}{{/isDate}}{{/isPrimitiveType +}}]])] +{{/isArray +}}{{#isMap +}}#[DTA\Strategy("{{#isPrimitiveType}}ScalarMap{{/isPrimitiveType}}{{^isPrimitiveType}}ObjectMap{{/isPrimitiveType}}", ["type" => {{>map_item_type}}])] +{{#minProperties}}{{^maxProperties +}}#[DTA\Validator("Count", ["min" => {{minProperties}}], blocker: true)] +{{/maxProperties}}{{/minProperties +}}{{^minProperties}}{{#maxProperties +}}#[DTA\Validator("Count", ["max" => {{maxProperties}}], blocker: true)] +{{/maxProperties}}{{/minProperties +}}{{#minProperties}}{{#maxProperties +}}#[DTA\Validator("Count", ["min" => {{minProperties}}, "max" => {{maxProperties}}], blocker: true)] +{{/maxProperties}}{{/minProperties +}}#[DTA\Validator("Collection", ["validators" => [ +{{#isPrimitiveType +}} ["name" => "Scalar", "options" => ["type" => {{>map_item_type}}]] +{{/isPrimitiveType +}}{{#isDate +}} ["name" => "Date"] +{{/isDate +}}{{#isDateTime +}} ["name" => "Date", "options" => ["format" => \DateTime::RFC3339]] +{{/isDateTime +}}{{^isPrimitiveType}}{{^isDate}}{{^isDateTime +}} ["name" => "TypeCompliant", "options" => ["type" => {{>map_item_type}}]] +{{/isDateTime}}{{/isDate}}{{/isPrimitiveType +}}]])] +{{/isMap +}}{{/vars +}}class {{classname}} extends \ArrayObject +{ +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_normal_var.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_normal_var.mustache new file mode 100644 index 000000000000..6e215f7fc632 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_normal_var.mustache @@ -0,0 +1,45 @@ +{{#isContainer +}} #[DTA\Strategy("Object", ["type" => {{internal.ze-ph.containerDataType}}::class])] + #[DTA\Validator("TypeCompliant", ["type" => {{internal.ze-ph.containerDataType}}::class])] +{{/isContainer +}}{{^isContainer +}}{{#isPrimitiveType +}} #[DTA\Validator("Scalar", ["type" => "{{dataType}}"])] +{{/isPrimitiveType +}}{{#isDate +}} #[DTA\Strategy("Date")] + #[DTA\Validator("Date")] +{{/isDate +}}{{#isDateTime +}} #[DTA\Strategy("DateTime")] + #[DTA\Validator("Date", ["format" => \DateTime::RFC3339])] +{{/isDateTime +}}{{^isPrimitiveType +}}{{^isDate +}}{{^isDateTime +}} #[DTA\Strategy("Object", ["type" => {{dataType}}::class])] + #[DTA\Validator("TypeCompliant", ["type" => {{dataType}}::class])] +{{/isDateTime +}}{{/isDate +}}{{/isPrimitiveType +}}{{/isContainer +}}{{#hasValidation +}}{{#minLength}}{{#maxLength +}} #[DTA\Validator("StringLength", ["min" => {{minLength}}, "max" => {{maxLength}}])] +{{/maxLength}}{{/minLength +}}{{^minLength}}{{#maxLength +}} #[DTA\Validator("StringLength", ["max" => {{maxLength}}])] +{{/maxLength}}{{/minLength +}}{{#minLength}}{{^maxLength +}} #[DTA\Validator("StringLength", ["min" => {{minLength}}])] +{{/maxLength}}{{/minLength +}}{{#minimum +}} #[DTA\Validator("GreaterThan", ["min" => {{minimum}}{{^exclusiveMinimum}}, "inclusive" => true{{/exclusiveMinimum}}])] +{{/minimum +}}{{#maximum +}} #[DTA\Validator("LessThan", ["max" => {{maximum}}{{^exclusiveMaximum}}, "inclusive" => true{{/exclusiveMaximum}}])] +{{/maximum +}}{{#pattern +}} #[DTA\Validator("Regex", ["pattern" => "{{{pattern}}}"])] +{{/pattern +}}{{/hasValidation}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_object.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_object.mustache new file mode 100644 index 000000000000..253d551e3c73 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_object.mustache @@ -0,0 +1,23 @@ +{{#description +}}/** + * {{description}} + */ +{{/description +}}class {{classname}} +{ +{{#vars +}}{{#description +}} /** + * {{description}} + */ +{{/description +}} #[DTA\Data(field: "{{baseName}}"{{^required}}, nullable: true{{/required}})] +{{#vendorExtensions +}}{{#internal.ze-ph.fromQuery}}{{>model_query_var}}{{/internal.ze-ph.fromQuery +}}{{^internal.ze-ph.fromQuery}}{{>model_normal_var}}{{/internal.ze-ph.fromQuery +}}{{/vendorExtensions +}}{{^vendorExtensions}}{{>model_normal_var}}{{/vendorExtensions +}} public {{dataType}}|null ${{name}} = null; + +{{/vars +}}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_query_var.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_query_var.mustache new file mode 100644 index 000000000000..f2e6525b9b93 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/model_query_var.mustache @@ -0,0 +1,51 @@ +{{#isArray +}}{{#isPrimitiveType +}} #[DTA\Strategy("QueryStringScalarArray", ["type" => {{>list_item_type}}, "format" => "{{internal.ze-ph.collectionFormat}}"])] + #[DTA\Validator("QueryStringScalarArray", ["type" => {{>list_item_type}}, "format" => "{{internal.ze-ph.collectionFormat}}"{{#minItems}}, "min_items" => {{minItems}}{{/minItems}}{{#maxItems}}, "max_items" => {{maxItems}}{{/maxItems}}])] +{{/isPrimitiveType +}}{{^isPrimitiveType +}} // TODO add validator(s) and strategy for list of {{>list_item_type}} and collection format {{internal.ze-ph.collectionFormat}} inside query string +{{/isPrimitiveType +}}{{/isArray +}}{{#isMap +}} // TODO add validator(s) and strategy for map of {{>map_item_type}} and collection format {{internal.ze-ph.collectionFormat}} inside query string +{{/isMap +}}{{^isContainer +}}{{#isPrimitiveType +}} #[DTA\Strategy("QueryStringScalar", ["type" => "{{dataType}}"])] + #[DTA\Validator("QueryStringScalar", ["type" => "{{dataType}}"])] +{{/isPrimitiveType +}}{{#isDate +}} #[DTA\Strategy("Date")] + #[DTA\Validator("Date")] +{{/isDate +}}{{#isDateTime +}} #[DTA\Strategy("DateTime")] + #[DTA\Validator("Date", ["format" => \DateTime::RFC3339])] +{{/isDateTime +}}{{^isPrimitiveType +}}{{^isDate}}{{^isDateTime +}} // TODO add validator(s) and strategy for {{dataType}} inside query string +{{/isDateTime}}{{/isDate +}}{{/isPrimitiveType +}}{{/isContainer +}}{{#hasValidation +}}{{#minLength}}{{#maxLength +}} #[DTA\Validator("StringLength", ["min" => {{minLength}}, "max" => {{maxLength}}])] +{{/maxLength}}{{/minLength +}}{{^minLength}}{{#maxLength +}} #[DTA\Validator("StringLength", ["max" => {{maxLength}}])] +{{/maxLength}}{{/minLength +}}{{#minLength}}{{^maxLength +}} #[DTA\Validator("StringLength", ["min" => {{minLength}}])] +{{/maxLength}}{{/minLength +}}{{#minimum +}} #[DTA\Validator("GreaterThan", ["min" => {{minimum}}{{^exclusiveMinimum}}, "inclusive" => true{{/exclusiveMinimum}}])] +{{/minimum +}}{{#maximum +}} #[DTA\Validator("LessThan", ["max" => {{maximum}}{{^exclusiveMaximum}}, "inclusive" => true{{/exclusiveMaximum}}])] +{{/maximum +}}{{#pattern +}} #[DTA\Validator("Regex", ["pattern" => "{{{pattern}}}"])] +{{/pattern +}}{{/hasValidation}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/path_handler.yml.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/path_handler.yml.mustache new file mode 100644 index 000000000000..a9739a17216c --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph-modern/path_handler.yml.mustache @@ -0,0 +1,44 @@ +dependencies: + factories: + Mezzio\Router\RouterInterface: Articus\PathHandler\RouteInjectionFactory + Articus\PathHandler\MetadataProviderInterface: Articus\PathHandler\MetadataProvider\Factory\PhpAttribute + Articus\PathHandler\Handler\PluginManager: Articus\PathHandler\Handler\Factory\PluginManager + Articus\PathHandler\Consumer\PluginManager: Articus\PathHandler\Consumer\Factory\PluginManager + Articus\PathHandler\Attribute\PluginManager: Articus\PathHandler\Attribute\Factory\PluginManager + Articus\PathHandler\Producer\PluginManager: Articus\PathHandler\Producer\Factory\PluginManager + +Articus\PathHandler\RouteInjectionFactory: + paths: + '{{basePathWithoutHost}}': +{{#apiInfo}} +{{#apis}} +{{#operations}} + - {{package}}\{{classname}} +{{/operations}} +{{/apis}} +{{/apiInfo}} + +Articus\PathHandler\Handler\PluginManager: + abstract_factories: + - Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory + +#Articus\PathHandler\Consumer\PluginManager: +# factories: +# invokables: + +#Articus\PathHandler\Attribute\PluginManager: +# factories: +# invokables: + +#Articus\PathHandler\Producer\PluginManager: +# factories: +# invokables: + +Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory: +{{#apiInfo}} +{{#apis}} +{{#operations}} + {{package}}\{{classname}}: [] +{{/operations}} +{{/apis}} +{{/apiInfo}} diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/Factory.php.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/Factory.php.mustache index 68787c5fd6c4..bee7ad98a781 100644 --- a/modules/openapi-generator/src/main/resources/php-mezzio-ph/Factory.php.mustache +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/Factory.php.mustache @@ -23,20 +23,13 @@ class Factory implements FactoryInterface { public function __invoke(ContainerInterface $container, $requestedName, array $options = null): Application { - $errorMiddleware = $container->get(Middleware\InternalServerError::class); - if (!($errorMiddleware instanceof Middleware\InternalServerError)) { - throw new \LogicException(\sprintf( - 'Invalid error middleware: expecting %s, not %s.', - Middleware\InternalServerError::class, - \is_object($errorMiddleware) ? \get_class($errorMiddleware) : \gettype($errorMiddleware) - )); - } + $errorMiddleware = self::getErrorMiddleware($container); $pipeline = new MiddlewarePipe(); $runner = new RequestHandlerRunner( $pipeline, $container->get(EmitterInterface::class), $container->get(ServerRequestInterface::class), - function(\Throwable $error) use ($errorMiddleware) : ResponseInterface + static function(\Throwable $error) use ($errorMiddleware) : ResponseInterface { return $errorMiddleware->handleError($error); } @@ -55,4 +48,9 @@ class Factory implements FactoryInterface return $application; } + + protected static function getErrorMiddleware(ContainerInterface $container): Middleware\InternalServerError + { + return $container->get(Middleware\InternalServerError::class); + } } diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/README.md.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/README.md.mustache index 584fd1568795..a80470059016 100644 --- a/modules/openapi-generator/src/main/resources/php-mezzio-ph/README.md.mustache +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/README.md.mustache @@ -5,9 +5,9 @@ Generated by the [OpenAPI Generator](https://openapi-generator.tech) project. ## Overview This server stub aims to provide light, yet comprehensive structure for your API project using: -- PHP: >=7.2 +- PHP: >=7.3 - [Laminas Mezzio](https://docs.mezzio.dev/mezzio/): >=3.2 -- [Path Handler](https://github.com/Articus/PathHandler): >=0.6 +- [Path Handler](https://github.com/Articus/PathHandler): >=0.7 ## How to use All you have to do to start development is: diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/api.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/api.mustache index d44e206de6f6..ec0d1df137b2 100644 --- a/modules/openapi-generator/src/main/resources/php-mezzio-ph/api.mustache +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/api.mustache @@ -43,13 +43,7 @@ class {{classname}} * @PHA\Consumer(name=PHConsumer\Json::class, mediaRange="{{{mediaType}}}") {{/consumes}} {{^isPrimitiveType}} -{{#isContainer}} - * TODO check if attribute is valid and can handle your container type - * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":"{{{dataType}}}","objectAttr":"bodyData"}) -{{/isContainer}} -{{^isContainer}} - * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":{{{dataType}}}::class,"objectAttr":"bodyData"}) -{{/isContainer}} + * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":{{dataType}}::class,"objectAttr":"bodyData"}) {{/isPrimitiveType}} {{/bodyParam}} {{#produces}} @@ -61,13 +55,10 @@ class {{classname}} * @throws PHException\HttpCode 501 if the method is not implemented {{#returnType}} * -{{#returnContainer}} - * TODO check if generated return container type is valid -{{/returnContainer}} - * @return {{{returnType}}} + * @return {{returnType}} {{/returnType}} */ - public function {{operationId}}(ServerRequestInterface $request){{#returnType}}: {{#returnContainer}}array{{/returnContainer}}{{^returnContainer}}{{returnType}}{{/returnContainer}}{{/returnType}} + public function {{operationId}}(ServerRequestInterface $request){{#returnType}}: {{returnType}}{{/returnType}} { //TODO implement method {{#vendorExtensions}} @@ -78,7 +69,7 @@ class {{classname}} {{/vendorExtensions}} {{#bodyParam}} {{^isPrimitiveType}} - /** @var {{{dataType}}} $bodyData */ + /** @var {{dataType}} $bodyData */ $bodyData = $request->getAttribute("bodyData"); {{/isPrimitiveType}} {{/bodyParam}} diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/composer.json.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/composer.json.mustache index a768982234ae..de46c4b20ead 100644 --- a/modules/openapi-generator/src/main/resources/php-mezzio-ph/composer.json.mustache +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/composer.json.mustache @@ -5,13 +5,13 @@ "version": "{{artifactVersion}}", "type": "project", "require": { - "php": "^7.2", + "php": "^7.3 || ^8.0", "ext-yaml": "^2.0", "mezzio/mezzio": "^3.2", "laminas/laminas-diactoros": "^2.1", - "articus/path-handler": "^0.6", - "articus/data-transfer": "^0.4", - "articus/openapi-generator-common": "^0.1", + "articus/path-handler": "^0.7", + "articus/data-transfer": "^0.5", + "articus/openapi-generator-common": "^0.2", "doctrine/annotations": "^1.10", "psr/simple-cache": "^1.0", "laminas/laminas-config": "^3.4", diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/config.yml b/modules/openapi-generator/src/main/resources/php-mezzio-ph/config.yml index 1f106812353f..71371becf217 100644 --- a/modules/openapi-generator/src/main/resources/php-mezzio-ph/config.yml +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/config.yml @@ -9,10 +9,11 @@ # router: # cache: # directory: ./data/cache/PathHandler -# #Enable handler metadata cache -# metadata: -# cache: -# directory: ./data/cache/PathHandler + +#Enable handler metadata cache +#Articus\PathHandler\MetadataProvider\Annotation: +# cache: +# directory: ./data/cache/PathHandler #Enable data transfer metadata cache for DTOs #Articus\DataTransfer\MetadataProvider\Annotation: diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/data_transfer.yml.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/data_transfer.yml.mustache index c5174147c236..548c898fb9c8 100644 --- a/modules/openapi-generator/src/main/resources/php-mezzio-ph/data_transfer.yml.mustache +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/data_transfer.yml.mustache @@ -16,6 +16,10 @@ Articus\DataTransfer\Strategy\PluginManager: factories: Date: OpenAPIGenerator\Common\Strategy\Factory\MutableDate DateTime: OpenAPIGenerator\Common\Strategy\Factory\MutableDateTime + ObjectList: OpenAPIGenerator\Common\Strategy\Factory\NoArgObjectList + ObjectMap: OpenAPIGenerator\Common\Strategy\Factory\NoArgObjectMap + ScalarList: OpenAPIGenerator\Common\Strategy\Factory\ScalarList + ScalarMap: OpenAPIGenerator\Common\Strategy\Factory\ScalarMap Articus\DataTransfer\Validator\PluginManager: invokables: @@ -24,3 +28,7 @@ Articus\DataTransfer\Validator\PluginManager: QueryStringScalarArray: OpenAPIGenerator\Common\Validator\QueryStringScalarArray abstract_factories: - Articus\DataTransfer\Validator\Factory\Laminas + +validators: + invokables: + Count: Laminas\Validator\IsCountable diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/list_item_type.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/list_item_type.mustache new file mode 100644 index 000000000000..254676614331 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/list_item_type.mustache @@ -0,0 +1,8 @@ +{{#items +}}{{^isContainer +}}{{#isPrimitiveType}}"{{dataType}}"{{/isPrimitiveType +}}{{^isPrimitiveType}}{{dataType}}::class{{/isPrimitiveType +}}{{/isContainer +}}{{#isContainer +}}{{dataType}}::class{{/isContainer +}}{{/items}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/map_item_type.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/map_item_type.mustache new file mode 100644 index 000000000000..a58e19beca54 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/map_item_type.mustache @@ -0,0 +1,8 @@ +{{#additionalProperties +}}{{^isContainer +}}{{#isPrimitiveType}}"{{dataType}}"{{/isPrimitiveType +}}{{^isPrimitiveType}}{{dataType}}::class{{/isPrimitiveType +}}{{/isContainer +}}{{#isContainer +}}{{dataType}}::class{{/isContainer +}}{{/additionalProperties}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/model.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/model.mustache index 57f70bfc7675..fd2a8cc62087 100644 --- a/modules/openapi-generator/src/main/resources/php-mezzio-ph/model.mustache +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/model.mustache @@ -5,23 +5,9 @@ namespace {{package}}; use Articus\DataTransfer\Annotation as DTA; -/** -{{#description}} - * {{description}} -{{/description}} - */ -class {{classname}} -{ -{{#vars}} - /** -{{#description}} - * {{description}} -{{/description}} - * @DTA\Data(field="{{baseName}}"{{^required}}, nullable=true{{/required}}){{#vendorExtensions}}{{#internal.ze-ph.fromQuery}} -{{>model_query_var}}{{/internal.ze-ph.fromQuery}}{{/vendorExtensions}}{{#vendorExtensions}}{{^internal.ze-ph.fromQuery}} -{{>model_normal_var}}{{/internal.ze-ph.fromQuery}}{{/vendorExtensions}}{{^vendorExtensions}} -{{>model_normal_var}}{{/vendorExtensions}} * @var {{dataType}}|null - */ - public ${{name}}; -{{/vars}} -}{{/model}}{{/models}} +{{#vendorExtensions +}}{{#internal.ze-ph.fromContainer}}{{>model_container}}{{/internal.ze-ph.fromContainer +}}{{^internal.ze-ph.fromContainer}}{{>model_object}}{{/internal.ze-ph.fromContainer +}}{{/vendorExtensions +}}{{^vendorExtensions}}{{>model_object}}{{/vendorExtensions +}}{{/model}}{{/models}} diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_container.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_container.mustache new file mode 100644 index 000000000000..bbecf5ed1900 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_container.mustache @@ -0,0 +1,59 @@ +/** +{{#vars +}}{{#isArray +}} * @DTA\Strategy(name="{{#isPrimitiveType}}ScalarList{{/isPrimitiveType}}{{^isPrimitiveType}}ObjectList{{/isPrimitiveType}}", options={"type":{{>list_item_type}}}) +{{#minItems}}{{^maxItems +}} * @DTA\Validator(name="Count", options={"min":{{minItems}}}, blocker=true) +{{/maxItems}}{{/minItems +}}{{^minItems}}{{#maxItems +}} * @DTA\Validator(name="Count", options={"max":{{maxItems}}}, blocker=true) +{{/maxItems}}{{/minItems +}}{{#minItems}}{{#maxItems +}} * @DTA\Validator(name="Count", options={"min":{{minItems}},"max":{{maxItems}}}, blocker=true) +{{/maxItems}}{{/minItems +}} * @DTA\Validator(name="Collection", options={"validators":{ +{{#isPrimitiveType +}} * {"name":"Scalar", "options":{"type":{{>list_item_type}}}} +{{/isPrimitiveType +}}{{#isDate +}} * {"name":"Date"} +{{/isDate +}}{{#isDateTime +}} * {"name":"Date", "options":{"format": \DateTime::RFC3339}} +{{/isDateTime +}}{{^isPrimitiveType}}{{^isDate}}{{^isDateTime +}} * {"name":"TypeCompliant", "options":{"type":{{>list_item_type}}}} +{{/isDateTime}}{{/isDate}}{{/isPrimitiveType +}} * }}) +{{/isArray +}}{{#isMap +}} * @DTA\Strategy(name="{{#isPrimitiveType}}ScalarMap{{/isPrimitiveType}}{{^isPrimitiveType}}ObjectMap{{/isPrimitiveType}}", options={"type":{{>map_item_type}}}) +{{#minProperties}}{{^maxProperties +}} * @DTA\Validator(name="Count", options={"min":{{minProperties}}}, blocker=true) +{{/maxProperties}}{{/minProperties +}}{{^minProperties}}{{#maxProperties +}} * @DTA\Validator(name="Count", options={"max":{{maxProperties}}}, blocker=true) +{{/maxProperties}}{{/minProperties +}}{{#minProperties}}{{#maxProperties +}} * @DTA\Validator(name="Count", options={"min":{{minProperties}},"max":{{maxProperties}}}, blocker=true) +{{/maxProperties}}{{/minProperties +}} * @DTA\Validator(name="Collection", options={"validators":{ +{{#isPrimitiveType +}} * {"name":"Scalar", "options":{"type":{{>map_item_type}}}} +{{/isPrimitiveType +}}{{#isDate +}} * {"name":"Date"} +{{/isDate +}}{{#isDateTime +}} * {"name":"Date", "options":{"format": \DateTime::RFC3339}} +{{/isDateTime +}}{{^isPrimitiveType}}{{^isDate}}{{^isDateTime +}} * {"name":"TypeCompliant", "options":{"type":{{>map_item_type}}}} +{{/isDateTime}}{{/isDate}}{{/isPrimitiveType +}} * }}) +{{/isMap +}}{{/vars +}} */ +class {{classname}} extends \ArrayObject +{ +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_normal_var.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_normal_var.mustache index 33c6e46337a8..fe568901f9b1 100644 --- a/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_normal_var.mustache +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_normal_var.mustache @@ -1,64 +1,45 @@ -{{^isPrimitiveType}} -{{^isContainer}} -{{^isDate}} -{{^isDateTime}} - * @DTA\Strategy(name="Object", options={"type":{{dataType}}::class}) - * @DTA\Validator(name="TypeCompliant", options={"type":{{dataType}}::class}) -{{/isDateTime}} -{{/isDate}} -{{#isDate}} - * @DTA\Strategy(name="Date") +{{#isContainer +}} * @DTA\Strategy(name="Object", options={"type":{{internal.ze-ph.containerDataType}}::class}) + * @DTA\Validator(name="TypeCompliant", options={"type":{{internal.ze-ph.containerDataType}}::class}) +{{/isContainer +}}{{^isContainer +}}{{#isPrimitiveType +}} * @DTA\Validator(name="Scalar", options={"type":"{{dataType}}"}) +{{/isPrimitiveType +}}{{#isDate +}} * @DTA\Strategy(name="Date") * @DTA\Validator(name="Date") -{{/isDate}} -{{#isDateTime}} - * @DTA\Strategy(name="DateTime") +{{/isDate +}}{{#isDateTime +}} * @DTA\Strategy(name="DateTime") * @DTA\Validator(name="Date", options={"format": \DateTime::RFC3339}) -{{/isDateTime}} -{{/isContainer}} -{{#isContainer}} - * TODO check validator and strategy are correct and can handle container item type - * @DTA\Strategy(name="ObjectArray", options={"type":{{#items}}{{dataType}}{{/items}}::class}) - * @DTA\Validator(name="Collection", options={"validators":{ - * {"name":"TypeCompliant", "options":{"type":{{#items}}{{dataType}}{{/items}}::class}} - * }}) -{{/isContainer}} -{{/isPrimitiveType}} -{{#isPrimitiveType}} -{{#isContainer}} -{{#items}} - * TODO check validator and strategy are correct and can handle container item type - * @DTA\Validator(name="Collection", options={"validators":{ - * {"name":"Scalar", "options":{"type":"{{dataType}}"}} - * }}) -{{/items}} -{{/isContainer}} -{{^isContainer}} - * @DTA\Validator(name="Scalar", options={"type":"{{dataType}}"}) -{{/isContainer}} -{{/isPrimitiveType}} -{{#hasValidation}} -{{#minLength}} -{{#maxLength}} - * @DTA\Validator(name="StringLength", options={"min":{{minLength}}, "max":{{maxLength}}}) -{{/maxLength}} -{{/minLength}} -{{^minLength}} -{{#maxLength}} - * @DTA\Validator(name="StringLength", options={"max":{{maxLength}}}) -{{/maxLength}} -{{/minLength}} -{{#minLength}} -{{^maxLength}} - * @DTA\Validator(name="StringLength", options={"min":{{minLength}}}) -{{/maxLength}} -{{/minLength}} -{{#minimum}} - * @DTA\Validator(name="GreaterThan", options={"min":{{minimum}}{{^exclusiveMinimum}}, "inclusive":true{{/exclusiveMinimum}}}) -{{/minimum}} -{{#maximum}} - * @DTA\Validator(name="LessThan", options={"max":{{maximum}}{{^exclusiveMaximum}}, "inclusive":true{{/exclusiveMaximum}}}) -{{/maximum}} -{{#pattern}} - * @DTA\Validator(name="Regex", options={"pattern":"{{{pattern}}}"}) -{{/pattern}} -{{/hasValidation}} \ No newline at end of file +{{/isDateTime +}}{{^isPrimitiveType +}}{{^isDate +}}{{^isDateTime +}} * @DTA\Strategy(name="Object", options={"type":{{dataType}}::class}) + * @DTA\Validator(name="TypeCompliant", options={"type":{{dataType}}::class}) +{{/isDateTime +}}{{/isDate +}}{{/isPrimitiveType +}}{{/isContainer +}}{{#hasValidation +}}{{#minLength}}{{#maxLength +}} * @DTA\Validator(name="StringLength", options={"min":{{minLength}}, "max":{{maxLength}}}) +{{/maxLength}}{{/minLength +}}{{^minLength}}{{#maxLength +}} * @DTA\Validator(name="StringLength", options={"max":{{maxLength}}}) +{{/maxLength}}{{/minLength +}}{{#minLength}}{{^maxLength +}} * @DTA\Validator(name="StringLength", options={"min":{{minLength}}}) +{{/maxLength}}{{/minLength +}}{{#minimum +}} * @DTA\Validator(name="GreaterThan", options={"min":{{minimum}}{{^exclusiveMinimum}}, "inclusive":true{{/exclusiveMinimum}}}) +{{/minimum +}}{{#maximum +}} * @DTA\Validator(name="LessThan", options={"max":{{maximum}}{{^exclusiveMaximum}}, "inclusive":true{{/exclusiveMaximum}}}) +{{/maximum +}}{{#pattern +}} * @DTA\Validator(name="Regex", options={"pattern":"{{{pattern}}}"}) +{{/pattern +}}{{/hasValidation}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_object.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_object.mustache new file mode 100644 index 000000000000..2e7d61fde458 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_object.mustache @@ -0,0 +1,24 @@ +/** +{{#description +}} * {{description}} +{{/description +}} */ +class {{classname}} +{ +{{#vars +}} /** +{{#description +}} * {{description}} +{{/description +}} * @DTA\Data(field="{{baseName}}"{{^required}}, nullable=true{{/required}}) +{{#vendorExtensions +}}{{#internal.ze-ph.fromQuery}}{{>model_query_var}}{{/internal.ze-ph.fromQuery +}}{{^internal.ze-ph.fromQuery}}{{>model_normal_var}}{{/internal.ze-ph.fromQuery +}}{{/vendorExtensions +}}{{^vendorExtensions}}{{>model_normal_var}}{{/vendorExtensions +}} * @var {{dataType}}|null + */ + public ${{name}}; + +{{/vars +}}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_query_var.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_query_var.mustache index 27f0a72c955e..deaf0e370494 100644 --- a/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_query_var.mustache +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/model_query_var.mustache @@ -1,52 +1,51 @@ -{{^isPrimitiveType}} -{{^isContainer}} -{{#isDate}} - * @DTA\Strategy(name="Date") +{{#isArray +}}{{#isPrimitiveType +}} * @DTA\Strategy(name="QueryStringScalarArray", options={"type":{{>list_item_type}}, "format":"{{internal.ze-ph.collectionFormat}}"}) + * @DTA\Validator(name="QueryStringScalarArray", options={"type":{{>list_item_type}}, "format":"{{internal.ze-ph.collectionFormat}}"{{#minItems}}, "min_items":{{minItems}}{{/minItems}}{{#maxItems}}, "max_items":{{maxItems}}{{/maxItems}}}) +{{/isPrimitiveType +}}{{^isPrimitiveType +}} * TODO add validator(s) and strategy for list of {{>list_item_type}} and collection format {{internal.ze-ph.collectionFormat}} inside query string +{{/isPrimitiveType +}}{{/isArray +}}{{#isMap +}} * TODO add validator(s) and strategy for map of {{>map_item_type}} and collection format {{internal.ze-ph.collectionFormat}} inside query string +{{/isMap +}}{{^isContainer +}}{{#isPrimitiveType +}} * @DTA\Strategy(name="QueryStringScalar", options={"type":"{{dataType}}"}) + * @DTA\Validator(name="QueryStringScalar", options={"type":"{{dataType}}"}) +{{/isPrimitiveType +}}{{#isDate +}} * @DTA\Strategy(name="Date") * @DTA\Validator(name="Date") -{{/isDate}} -{{#isDateTime}} - * @DTA\Strategy(name="DateTime") +{{/isDate +}}{{#isDateTime +}} * @DTA\Strategy(name="DateTime") * @DTA\Validator(name="Date", options={"format": \DateTime::RFC3339}) -{{/isDateTime}} -{{/isContainer}} -{{#isContainer}} - * TODO add validator(s) and strategy for {{dataType}} and collection format {{internal.ze-ph.collectionFormat}} -{{/isContainer}} -{{/isPrimitiveType}} -{{#isPrimitiveType}} -{{#isContainer}} - * TODO check validator and strategy are correct and can handle container item type - * @DTA\Strategy(name="QueryStringScalarArray", options={"type":"{{#items}}{{dataType}}{{/items}}", "format":"{{internal.ze-ph.collectionFormat}}"}) - * @DTA\Validator(name="QueryStringScalarArray", options={"type":"{{#items}}{{dataType}}{{/items}}", "format":"{{internal.ze-ph.collectionFormat}}"{{#minItems}}, "min_items":{{minItems}}{{/minItems}}{{#maxItems}}, "max_items":{{maxItems}}{{/maxItems}}}) -{{/isContainer}} -{{^isContainer}} - * @DTA\Strategy(name="QueryStringScalar", options={"type":"{{dataType}}"}) - * @DTA\Validator(name="QueryStringScalar", options={"type":"{{dataType}}"}) -{{/isContainer}} -{{/isPrimitiveType}} -{{#hasValidation}} -{{#minLength}} -{{#maxLength}} - * @DTA\Validator(name="StringLength", options={"min":{{minLength}}, "max":{{maxLength}}}) -{{/maxLength}} -{{/minLength}} -{{^minLength}} -{{#maxLength}} - * @DTA\Validator(name="StringLength", options={"max":{{maxLength}}}) -{{/maxLength}} -{{/minLength}} -{{#minLength}} -{{^maxLength}} - * @DTA\Validator(name="StringLength", options={"min":{{minLength}}}) -{{/maxLength}} -{{/minLength}} -{{#minimum}} - * @DTA\Validator(name="GreaterThan", options={"min":{{minimum}}{{^exclusiveMinimum}}, "inclusive":true{{/exclusiveMinimum}}}) -{{/minimum}} -{{#maximum}} - * @DTA\Validator(name="LessThan", options={"max":{{maximum}}{{^exclusiveMaximum}}, "inclusive":true{{/exclusiveMaximum}}}) -{{/maximum}} -{{#pattern}} - * @DTA\Validator(name="Regex", options={"pattern":"{{{pattern}}}"}) -{{/pattern}} -{{/hasValidation}} \ No newline at end of file +{{/isDateTime +}}{{^isPrimitiveType +}}{{^isDate}}{{^isDateTime +}} * TODO add validator(s) and strategy for {{dataType}} inside query string +{{/isDateTime}}{{/isDate +}}{{/isPrimitiveType +}}{{/isContainer +}}{{#hasValidation +}}{{#minLength}}{{#maxLength +}} * @DTA\Validator(name="StringLength", options={"min":{{minLength}}, "max":{{maxLength}}}) +{{/maxLength}}{{/minLength +}}{{^minLength}}{{#maxLength +}} * @DTA\Validator(name="StringLength", options={"max":{{maxLength}}}) +{{/maxLength}}{{/minLength +}}{{#minLength}}{{^maxLength +}} * @DTA\Validator(name="StringLength", options={"min":{{minLength}}}) +{{/maxLength}}{{/minLength +}}{{#minimum +}} * @DTA\Validator(name="GreaterThan", options={"min":{{minimum}}{{^exclusiveMinimum}}, "inclusive":true{{/exclusiveMinimum}}}) +{{/minimum +}}{{#maximum +}} * @DTA\Validator(name="LessThan", options={"max":{{maximum}}{{^exclusiveMaximum}}, "inclusive":true{{/exclusiveMaximum}}}) +{{/maximum +}}{{#pattern +}} * @DTA\Validator(name="Regex", options={"pattern":"{{{pattern}}}"}) +{{/pattern +}}{{/hasValidation}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/php-mezzio-ph/path_handler.yml.mustache b/modules/openapi-generator/src/main/resources/php-mezzio-ph/path_handler.yml.mustache index dd01611f359d..1f9167a0fa4e 100644 --- a/modules/openapi-generator/src/main/resources/php-mezzio-ph/path_handler.yml.mustache +++ b/modules/openapi-generator/src/main/resources/php-mezzio-ph/path_handler.yml.mustache @@ -1,8 +1,13 @@ dependencies: factories: - Mezzio\Router\RouterInterface: Articus\PathHandler\RouteInjection\Factory + Mezzio\Router\RouterInterface: Articus\PathHandler\RouteInjectionFactory + Articus\PathHandler\MetadataProviderInterface: Articus\PathHandler\MetadataProvider\Factory\Annotation + Articus\PathHandler\Handler\PluginManager: Articus\PathHandler\Handler\Factory\PluginManager + Articus\PathHandler\Consumer\PluginManager: Articus\PathHandler\Consumer\Factory\PluginManager + Articus\PathHandler\Attribute\PluginManager: Articus\PathHandler\Attribute\Factory\PluginManager + Articus\PathHandler\Producer\PluginManager: Articus\PathHandler\Producer\Factory\PluginManager -Articus\PathHandler\RouteInjection\Factory: +Articus\PathHandler\RouteInjectionFactory: paths: '{{basePathWithoutHost}}': {{#apiInfo}} @@ -12,18 +17,22 @@ Articus\PathHandler\RouteInjection\Factory: {{/operations}} {{/apis}} {{/apiInfo}} - handlers: - abstract_factories: - - Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory -# consumers: -# factories: -# invokables: -# attributes: -# factories: -# invokables: -# producers: -# factories: -# invokables: + +Articus\PathHandler\Handler\PluginManager: + abstract_factories: + - Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory + +#Articus\PathHandler\Consumer\PluginManager: +# factories: +# invokables: + +#Articus\PathHandler\Attribute\PluginManager: +# factories: +# invokables: + +#Articus\PathHandler\Producer\PluginManager: +# factories: +# invokables: Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory: {{#apiInfo}} diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/.openapi-generator/FILES b/samples/openapi3/server/petstore/php-mezzio-ph/.openapi-generator/FILES deleted file mode 100644 index fd268242a0e6..000000000000 --- a/samples/openapi3/server/petstore/php-mezzio-ph/.openapi-generator/FILES +++ /dev/null @@ -1,36 +0,0 @@ -.gitignore -README.md -application/config.yml -application/config/app.yml -application/config/data_transfer.yml -application/config/path_handler.yml -application/container.php -composer.json -public/index.php -src/App/DTO/ApiResponse.php -src/App/DTO/Category.php -src/App/DTO/FindPetsByStatusQueryData.php -src/App/DTO/FindPetsByTagsQueryData.php -src/App/DTO/InlineObject.php -src/App/DTO/InlineObject1.php -src/App/DTO/LoginUserQueryData.php -src/App/DTO/Order.php -src/App/DTO/Pet.php -src/App/DTO/Tag.php -src/App/DTO/User.php -src/App/Factory.php -src/App/Handler/Pet.php -src/App/Handler/PetFindByStatus.php -src/App/Handler/PetFindByTags.php -src/App/Handler/PetPetId.php -src/App/Handler/PetPetIdUploadImage.php -src/App/Handler/StoreInventory.php -src/App/Handler/StoreOrder.php -src/App/Handler/StoreOrderOrderId.php -src/App/Handler/User.php -src/App/Handler/UserCreateWithArray.php -src/App/Handler/UserCreateWithList.php -src/App/Handler/UserLogin.php -src/App/Handler/UserLogout.php -src/App/Handler/UserUsername.php -src/App/Middleware/InternalServerError.php diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/.openapi-generator/VERSION b/samples/openapi3/server/petstore/php-mezzio-ph/.openapi-generator/VERSION deleted file mode 100644 index d99e7162d01f..000000000000 --- a/samples/openapi3/server/petstore/php-mezzio-ph/.openapi-generator/VERSION +++ /dev/null @@ -1 +0,0 @@ -5.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/composer.json b/samples/openapi3/server/petstore/php-mezzio-ph/composer.json deleted file mode 100644 index 54f8e97226c6..000000000000 --- a/samples/openapi3/server/petstore/php-mezzio-ph/composer.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "git_user_id/git_repo_id", - "description": "", - "license": "unlicense", - "version": "1.0.0", - "type": "project", - "require": { - "php": "^7.2", - "ext-yaml": "^2.0", - "mezzio/mezzio": "^3.2", - "laminas/laminas-diactoros": "^2.1", - "articus/path-handler": "^0.6", - "articus/data-transfer": "^0.4", - "articus/openapi-generator-common": "^0.1", - "doctrine/annotations": "^1.10", - "psr/simple-cache": "^1.0", - "laminas/laminas-config": "^3.4", - "laminas/laminas-stdlib": "^3.2", - "laminas/laminas-validator": "^2.13", - "nikic/fast-route": "^1.3" - }, - "autoload": { - "psr-4": { - "": "src/" - } - } -} \ No newline at end of file diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/ApiResponse.php b/samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/ApiResponse.php deleted file mode 100644 index a08cb2c92757..000000000000 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/DTO/ApiResponse.php +++ /dev/null @@ -1,31 +0,0 @@ -getAttribute("bodyData"); - throw new PHException\HttpCode(501, "Not implemented"); - } - /** - * Update an existing pet - * @PHA\Put() - * TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Consumer(name=PHConsumer\Json::class, mediaRange="application/json") - * TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Consumer(name=PHConsumer\Json::class, mediaRange="application/xml") - * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":\App\DTO\Pet::class,"objectAttr":"bodyData"}) - * TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Producer(name=PHProducer\Transfer::class, mediaType="application/xml") - * TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Producer(name=PHProducer\Transfer::class, mediaType="application/json") - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented - * - * @return \App\DTO\Pet - */ - public function updatePet(ServerRequestInterface $request): \App\DTO\Pet - { - //TODO implement method - /** @var \App\DTO\Pet $bodyData */ - $bodyData = $request->getAttribute("bodyData"); - throw new PHException\HttpCode(501, "Not implemented"); - } -} diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByStatus.php b/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByStatus.php deleted file mode 100644 index c1c1ce754007..000000000000 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByStatus.php +++ /dev/null @@ -1,44 +0,0 @@ -getAttribute("queryData"); - throw new PHException\HttpCode(501, "Not implemented"); - } -} diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByTags.php b/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByTags.php deleted file mode 100644 index b722a310efb0..000000000000 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByTags.php +++ /dev/null @@ -1,44 +0,0 @@ -getAttribute("queryData"); - throw new PHException\HttpCode(501, "Not implemented"); - } -} diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/StoreOrder.php b/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/StoreOrder.php deleted file mode 100644 index be6af69243aa..000000000000 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/StoreOrder.php +++ /dev/null @@ -1,41 +0,0 @@ -getAttribute("bodyData"); - throw new PHException\HttpCode(501, "Not implemented"); - } -} diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserLogin.php b/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserLogin.php deleted file mode 100644 index 577e7c3f5629..000000000000 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserLogin.php +++ /dev/null @@ -1,43 +0,0 @@ -getAttribute("queryData"); - throw new PHException\HttpCode(501, "Not implemented"); - } -} diff --git a/samples/server/petstore/php-mezzio-ph-modern/.gitignore b/samples/server/petstore/php-mezzio-ph-modern/.gitignore new file mode 100644 index 000000000000..1ddcdf2a7099 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/.gitignore @@ -0,0 +1,9 @@ +#based on .gitignore generated by https://github.com/zendframework/zend-expressive-skeleton +.idea + +# Composer files +composer.phar +vendor/ + +# Default cache folder +data/cache/ diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/.openapi-generator-ignore b/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator-ignore similarity index 100% rename from samples/openapi3/server/petstore/php-mezzio-ph/.openapi-generator-ignore rename to samples/server/petstore/php-mezzio-ph-modern/.openapi-generator-ignore diff --git a/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/FILES b/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/FILES new file mode 100644 index 000000000000..bc9a68917b63 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/FILES @@ -0,0 +1,71 @@ +.gitignore +README.md +application/config.yml +application/config/app.yml +application/config/data_transfer.yml +application/config/path_handler.yml +application/container.php +composer.json +public/index.php +src/App/DTO/ApiResponse.php +src/App/DTO/Category.php +src/App/DTO/Collection.php +src/App/DTO/Collection1.php +src/App/DTO/Collection10.php +src/App/DTO/Collection11.php +src/App/DTO/Collection12.php +src/App/DTO/Collection13.php +src/App/DTO/Collection14.php +src/App/DTO/Collection15.php +src/App/DTO/Collection16.php +src/App/DTO/Collection17.php +src/App/DTO/Collection18.php +src/App/DTO/Collection19.php +src/App/DTO/Collection2.php +src/App/DTO/Collection20.php +src/App/DTO/Collection21.php +src/App/DTO/Collection22.php +src/App/DTO/Collection23.php +src/App/DTO/Collection24.php +src/App/DTO/Collection25.php +src/App/DTO/Collection26.php +src/App/DTO/Collection27.php +src/App/DTO/Collection28.php +src/App/DTO/Collection29.php +src/App/DTO/Collection3.php +src/App/DTO/Collection30.php +src/App/DTO/Collection31.php +src/App/DTO/Collection32.php +src/App/DTO/Collection33.php +src/App/DTO/Collection34.php +src/App/DTO/Collection35.php +src/App/DTO/Collection36.php +src/App/DTO/Collection4.php +src/App/DTO/Collection5.php +src/App/DTO/Collection6.php +src/App/DTO/Collection7.php +src/App/DTO/Collection8.php +src/App/DTO/Collection9.php +src/App/DTO/FindPetsByStatusQueryData.php +src/App/DTO/FindPetsByTagsQueryData.php +src/App/DTO/LoginUserQueryData.php +src/App/DTO/Order.php +src/App/DTO/Pet.php +src/App/DTO/Tag.php +src/App/DTO/User.php +src/App/Factory.php +src/App/Handler/Pet.php +src/App/Handler/PetFindByStatus.php +src/App/Handler/PetFindByTags.php +src/App/Handler/PetPetId.php +src/App/Handler/PetPetIdUploadImage.php +src/App/Handler/StoreInventory.php +src/App/Handler/StoreOrder.php +src/App/Handler/StoreOrderOrderId.php +src/App/Handler/User.php +src/App/Handler/UserCreateWithArray.php +src/App/Handler/UserCreateWithList.php +src/App/Handler/UserLogin.php +src/App/Handler/UserLogout.php +src/App/Handler/UserUsername.php +src/App/Middleware/InternalServerError.php diff --git a/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/VERSION b/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/VERSION new file mode 100644 index 000000000000..6555596f9311 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/README.md b/samples/server/petstore/php-mezzio-ph-modern/README.md similarity index 93% rename from samples/openapi3/server/petstore/php-mezzio-ph/README.md rename to samples/server/petstore/php-mezzio-ph-modern/README.md index 584fd1568795..fd66369b261a 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/README.md +++ b/samples/server/petstore/php-mezzio-ph-modern/README.md @@ -5,9 +5,9 @@ Generated by the [OpenAPI Generator](https://openapi-generator.tech) project. ## Overview This server stub aims to provide light, yet comprehensive structure for your API project using: -- PHP: >=7.2 -- [Laminas Mezzio](https://docs.mezzio.dev/mezzio/): >=3.2 -- [Path Handler](https://github.com/Articus/PathHandler): >=0.6 +- PHP: >=8.0 +- [Laminas Mezzio](https://docs.mezzio.dev/mezzio/): >=3.3 +- [Path Handler](https://github.com/Articus/PathHandler): >=0.7 ## How to use All you have to do to start development is: diff --git a/samples/server/petstore/php-mezzio-ph-modern/application/config.yml b/samples/server/petstore/php-mezzio-ph-modern/application/config.yml new file mode 100644 index 000000000000..58056552c5bc --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/application/config.yml @@ -0,0 +1,21 @@ +#Empty configuration placeholder, remove when you add any real configuration settings to this file +{} + +#Enable configuration cache +#cache_configuration: true + +#Articus\PathHandler\RouteInjection\Factory: +# #Enable routing table cache +# router: +# cache: +# directory: ./data/cache/PathHandler + +#Enable handler metadata cache +#Articus\PathHandler\MetadataProvider\PhpAttribute: +# cache: +# directory: ./data/cache/PathHandler + +#Enable data transfer metadata cache for DTOs +#Articus\DataTransfer\MetadataProvider\PhpAttribute: +# cache: +# directory: ./data/cache/DataTransfer diff --git a/samples/server/petstore/php-mezzio-ph-modern/application/config/app.yml b/samples/server/petstore/php-mezzio-ph-modern/application/config/app.yml new file mode 100644 index 000000000000..0ffd5e8864cf --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/application/config/app.yml @@ -0,0 +1,22 @@ +dependencies: + invokables: + Laminas\HttpHandlerRunner\Emitter\EmitterInterface: Laminas\HttpHandlerRunner\Emitter\SapiStreamEmitter + factories: + Mezzio\Application: App\Factory + Mezzio\MiddlewareContainer: Mezzio\Container\MiddlewareContainerFactory + Mezzio\MiddlewareFactory: Mezzio\Container\MiddlewareFactoryFactory + Mezzio\Router\RouteCollector: Mezzio\Router\RouteCollectorFactory + + Psr\Http\Message\ServerRequestInterface: Mezzio\Container\ServerRequestFactoryFactory + Psr\Http\Message\StreamInterface: Mezzio\Container\StreamFactoryFactory + Psr\Http\Message\ResponseInterface: Mezzio\Container\ResponseFactoryFactory + + App\Middleware\InternalServerError: Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory + Mezzio\Router\Middleware\RouteMiddleware: Mezzio\Router\Middleware\RouteMiddlewareFactory + Mezzio\Router\Middleware\DispatchMiddleware: Mezzio\Router\Middleware\DispatchMiddlewareFactory + Mezzio\Router\Middleware\MethodNotAllowedMiddleware: Mezzio\Router\Middleware\MethodNotAllowedMiddlewareFactory + Mezzio\Handler\NotFoundHandler: Mezzio\Container\NotFoundHandlerFactory + +Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory: + App\Middleware\InternalServerError: + - Psr\Http\Message\ResponseInterface diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/application/config/data_transfer.yml b/samples/server/petstore/php-mezzio-ph-modern/application/config/data_transfer.yml similarity index 69% rename from samples/openapi3/server/petstore/php-mezzio-ph/application/config/data_transfer.yml rename to samples/server/petstore/php-mezzio-ph-modern/application/config/data_transfer.yml index c5174147c236..7bdd139bb9ff 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/application/config/data_transfer.yml +++ b/samples/server/petstore/php-mezzio-ph-modern/application/config/data_transfer.yml @@ -1,13 +1,13 @@ dependencies: factories: Articus\DataTransfer\Service: Articus\DataTransfer\Factory - Articus\DataTransfer\MetadataProvider\Annotation: Articus\DataTransfer\MetadataProvider\Factory\Annotation + Articus\DataTransfer\MetadataProvider\PhpAttribute: Articus\DataTransfer\MetadataProvider\Factory\PhpAttribute Articus\DataTransfer\Strategy\PluginManager: Articus\DataTransfer\Strategy\Factory\PluginManager Articus\DataTransfer\Validator\PluginManager: Articus\DataTransfer\Validator\Factory\PluginManager Laminas\Validator\ValidatorPluginManager: Laminas\Validator\ValidatorPluginManagerFactory aliases: - Articus\DataTransfer\ClassMetadataProviderInterface: Articus\DataTransfer\MetadataProvider\Annotation - Articus\DataTransfer\FieldMetadataProviderInterface: Articus\DataTransfer\MetadataProvider\Annotation + Articus\DataTransfer\ClassMetadataProviderInterface: Articus\DataTransfer\MetadataProvider\PhpAttribute + Articus\DataTransfer\FieldMetadataProviderInterface: Articus\DataTransfer\MetadataProvider\PhpAttribute Articus\DataTransfer\Strategy\PluginManager: invokables: @@ -16,6 +16,10 @@ Articus\DataTransfer\Strategy\PluginManager: factories: Date: OpenAPIGenerator\Common\Strategy\Factory\MutableDate DateTime: OpenAPIGenerator\Common\Strategy\Factory\MutableDateTime + ObjectList: OpenAPIGenerator\Common\Strategy\Factory\NoArgObjectList + ObjectMap: OpenAPIGenerator\Common\Strategy\Factory\NoArgObjectMap + ScalarList: OpenAPIGenerator\Common\Strategy\Factory\ScalarList + ScalarMap: OpenAPIGenerator\Common\Strategy\Factory\ScalarMap Articus\DataTransfer\Validator\PluginManager: invokables: @@ -24,3 +28,7 @@ Articus\DataTransfer\Validator\PluginManager: QueryStringScalarArray: OpenAPIGenerator\Common\Validator\QueryStringScalarArray abstract_factories: - Articus\DataTransfer\Validator\Factory\Laminas + +validators: + invokables: + Count: Laminas\Validator\IsCountable diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/application/config/path_handler.yml b/samples/server/petstore/php-mezzio-ph-modern/application/config/path_handler.yml similarity index 53% rename from samples/openapi3/server/petstore/php-mezzio-ph/application/config/path_handler.yml rename to samples/server/petstore/php-mezzio-ph-modern/application/config/path_handler.yml index 25995b20d6f6..eb46b1891a37 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/application/config/path_handler.yml +++ b/samples/server/petstore/php-mezzio-ph-modern/application/config/path_handler.yml @@ -1,8 +1,13 @@ dependencies: factories: - Mezzio\Router\RouterInterface: Articus\PathHandler\RouteInjection\Factory + Mezzio\Router\RouterInterface: Articus\PathHandler\RouteInjectionFactory + Articus\PathHandler\MetadataProviderInterface: Articus\PathHandler\MetadataProvider\Factory\PhpAttribute + Articus\PathHandler\Handler\PluginManager: Articus\PathHandler\Handler\Factory\PluginManager + Articus\PathHandler\Consumer\PluginManager: Articus\PathHandler\Consumer\Factory\PluginManager + Articus\PathHandler\Attribute\PluginManager: Articus\PathHandler\Attribute\Factory\PluginManager + Articus\PathHandler\Producer\PluginManager: Articus\PathHandler\Producer\Factory\PluginManager -Articus\PathHandler\RouteInjection\Factory: +Articus\PathHandler\RouteInjectionFactory: paths: '/v2': - App\Handler\Pet @@ -19,18 +24,22 @@ Articus\PathHandler\RouteInjection\Factory: - App\Handler\UserLogin - App\Handler\UserLogout - App\Handler\UserUsername - handlers: - abstract_factories: - - Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory -# consumers: -# factories: -# invokables: -# attributes: -# factories: -# invokables: -# producers: -# factories: -# invokables: + +Articus\PathHandler\Handler\PluginManager: + abstract_factories: + - Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory + +#Articus\PathHandler\Consumer\PluginManager: +# factories: +# invokables: + +#Articus\PathHandler\Attribute\PluginManager: +# factories: +# invokables: + +#Articus\PathHandler\Producer\PluginManager: +# factories: +# invokables: Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory: App\Handler\Pet: [] diff --git a/samples/server/petstore/php-mezzio-ph-modern/application/container.php b/samples/server/petstore/php-mezzio-ph-modern/application/container.php new file mode 100644 index 000000000000..9c54fafcfec7 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/application/container.php @@ -0,0 +1,43 @@ +setService('config', $config); +$container->setAlias('Config', 'config'); + +return $container; diff --git a/samples/server/petstore/php-mezzio-ph-modern/composer.json b/samples/server/petstore/php-mezzio-ph-modern/composer.json new file mode 100644 index 000000000000..7f03f079e4af --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/composer.json @@ -0,0 +1,26 @@ +{ + "name": "git_user_id/git_repo_id", + "description": "", + "license": "unlicense", + "version": "1.0.0", + "type": "project", + "require": { + "php": "^8.0", + "ext-yaml": "^2.2", + "mezzio/mezzio": "^3.3", + "laminas/laminas-diactoros": "^2.5", + "articus/path-handler": "^0.7", + "articus/data-transfer": "^0.5", + "articus/openapi-generator-common": "^0.2", + "psr/simple-cache": "^1.0", + "laminas/laminas-config": "^3.4", + "laminas/laminas-stdlib": "^3.3", + "laminas/laminas-validator": "^2.14", + "nikic/fast-route": "^1.3" + }, + "autoload": { + "psr-4": { + "": "src/" + } + } +} \ No newline at end of file diff --git a/samples/server/petstore/php-mezzio-ph-modern/public/index.php b/samples/server/petstore/php-mezzio-ph-modern/public/index.php new file mode 100644 index 000000000000..7c3de73df161 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/public/index.php @@ -0,0 +1,11 @@ +get(\Mezzio\Application::class); +$app->run(); diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/ApiResponse.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/ApiResponse.php new file mode 100644 index 000000000000..bfe65906ea50 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/ApiResponse.php @@ -0,0 +1,25 @@ + "int"])] + public int|null $code = null; + + #[DTA\Data(field: "type", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $type = null; + + #[DTA\Data(field: "message", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $message = null; + +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Category.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Category.php new file mode 100644 index 000000000000..e6b28c29028e --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Category.php @@ -0,0 +1,22 @@ + "int"])] + public int|null $id = null; + + #[DTA\Data(field: "name", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + #[DTA\Validator("Regex", ["pattern" => "/^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$/"])] + public string|null $name = null; + +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection.php new file mode 100644 index 000000000000..f0e14da6cd80 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection1.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection1.php new file mode 100644 index 000000000000..c05da2858bd8 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection1.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection1 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection10.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection10.php new file mode 100644 index 000000000000..29e6ccdb3472 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection10.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection10 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection11.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection11.php new file mode 100644 index 000000000000..89b2d0d01f8a --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection11.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection11 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection12.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection12.php new file mode 100644 index 000000000000..e0657b0d467f --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection12.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection12 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection13.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection13.php new file mode 100644 index 000000000000..26f88d9685dd --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection13.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection13 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection14.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection14.php new file mode 100644 index 000000000000..d1e0e11495b3 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection14.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection14 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection15.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection15.php new file mode 100644 index 000000000000..085f17e1e972 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection15.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection15 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection16.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection16.php new file mode 100644 index 000000000000..1b1523c7d09b --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection16.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection16 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection17.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection17.php new file mode 100644 index 000000000000..eb5b0e828f8d --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection17.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection17 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection18.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection18.php new file mode 100644 index 000000000000..dd55bd5840a7 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection18.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection18 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection19.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection19.php new file mode 100644 index 000000000000..45da36c73017 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection19.php @@ -0,0 +1,14 @@ + \App\DTO\Pet::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Pet::class]] +]])] +class Collection19 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection2.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection2.php new file mode 100644 index 000000000000..26176dcc5e59 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection2.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection2 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection20.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection20.php new file mode 100644 index 000000000000..26b16ef104e3 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection20.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection20 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection21.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection21.php new file mode 100644 index 000000000000..9e0c2429bde1 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection21.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection21 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection22.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection22.php new file mode 100644 index 000000000000..6f7a04ff4bd9 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection22.php @@ -0,0 +1,14 @@ + \App\DTO\Pet::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Pet::class]] +]])] +class Collection22 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection23.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection23.php new file mode 100644 index 000000000000..608c9ad50206 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection23.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection23 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection24.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection24.php new file mode 100644 index 000000000000..b876816c2ddb --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection24.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection24 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection25.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection25.php new file mode 100644 index 000000000000..ad3a8102ad3e --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection25.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection25 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection26.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection26.php new file mode 100644 index 000000000000..f8e958fcb402 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection26.php @@ -0,0 +1,14 @@ + \App\DTO\Pet::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Pet::class]] +]])] +class Collection26 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection27.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection27.php new file mode 100644 index 000000000000..b53e9e87a729 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection27.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection27 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection28.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection28.php new file mode 100644 index 000000000000..3b6e05419ef1 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection28.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection28 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection29.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection29.php new file mode 100644 index 000000000000..24a1ee261d86 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection29.php @@ -0,0 +1,14 @@ + \App\DTO\Pet::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Pet::class]] +]])] +class Collection29 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection3.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection3.php new file mode 100644 index 000000000000..1833307cd7e6 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection3.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection3 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection30.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection30.php new file mode 100644 index 000000000000..916229afc92b --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection30.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection30 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection31.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection31.php new file mode 100644 index 000000000000..12b771c1c16a --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection31.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection31 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection32.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection32.php new file mode 100644 index 000000000000..e89cbcd4397a --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection32.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection32 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection33.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection33.php new file mode 100644 index 000000000000..91229b175cfc --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection33.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection33 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection34.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection34.php new file mode 100644 index 000000000000..1670c4ee7e3d --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection34.php @@ -0,0 +1,14 @@ + "int"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "int"]] +]])] +class Collection34 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection35.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection35.php new file mode 100644 index 000000000000..4b1082abc1b1 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection35.php @@ -0,0 +1,14 @@ + \App\DTO\User::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\User::class]] +]])] +class Collection35 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection36.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection36.php new file mode 100644 index 000000000000..38595c2f5d39 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection36.php @@ -0,0 +1,14 @@ + \App\DTO\User::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\User::class]] +]])] +class Collection36 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection4.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection4.php new file mode 100644 index 000000000000..54e2f1a12de5 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection4.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection4 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection5.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection5.php new file mode 100644 index 000000000000..3f32f4513a74 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection5.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection5 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection6.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection6.php new file mode 100644 index 000000000000..79abc43f3398 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection6.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection6 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection7.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection7.php new file mode 100644 index 000000000000..8574d82b3658 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection7.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection7 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection8.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection8.php new file mode 100644 index 000000000000..c264d8076a1f --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection8.php @@ -0,0 +1,14 @@ + "string"])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "Scalar", "options" => ["type" => "string"]] +]])] +class Collection8 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection9.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection9.php new file mode 100644 index 000000000000..99cc837d6a59 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Collection9.php @@ -0,0 +1,14 @@ + \App\DTO\Tag::class])] +#[DTA\Validator("Collection", ["validators" => [ + ["name" => "TypeCompliant", "options" => ["type" => \App\DTO\Tag::class]] +]])] +class Collection9 extends \ArrayObject +{ +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/FindPetsByStatusQueryData.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/FindPetsByStatusQueryData.php new file mode 100644 index 000000000000..178b4949794b --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/FindPetsByStatusQueryData.php @@ -0,0 +1,21 @@ + "string", "format" => "csv"])] + #[DTA\Validator("QueryStringScalarArray", ["type" => "string", "format" => "csv"])] + public array|null $status = null; + +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/FindPetsByTagsQueryData.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/FindPetsByTagsQueryData.php new file mode 100644 index 000000000000..cbf9e1d0c39b --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/FindPetsByTagsQueryData.php @@ -0,0 +1,21 @@ + "string", "format" => "csv"])] + #[DTA\Validator("QueryStringScalarArray", ["type" => "string", "format" => "csv"])] + public array|null $tags = null; + +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/LoginUserQueryData.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/LoginUserQueryData.php new file mode 100644 index 000000000000..2c01e944c918 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/LoginUserQueryData.php @@ -0,0 +1,30 @@ + "string"])] + #[DTA\Validator("QueryStringScalar", ["type" => "string"])] + public string|null $password = null; + + /** + * The user name for login + */ + #[DTA\Data(field: "username")] + #[DTA\Strategy("QueryStringScalar", ["type" => "string"])] + #[DTA\Validator("QueryStringScalar", ["type" => "string"])] + #[DTA\Validator("Regex", ["pattern" => "/^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$/"])] + public string|null $username = null; + +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Order.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Order.php new file mode 100644 index 000000000000..8dd384b4475d --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Order.php @@ -0,0 +1,41 @@ + "int"])] + public int|null $id = null; + + #[DTA\Data(field: "petId", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "int"])] + public int|null $pet_id = null; + + #[DTA\Data(field: "quantity", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "int"])] + public int|null $quantity = null; + + #[DTA\Data(field: "shipDate", nullable: true)] + #[DTA\Strategy("DateTime")] + #[DTA\Validator("Date", ["format" => \DateTime::RFC3339])] + public \DateTime|null $ship_date = null; + + /** + * Order Status + */ + #[DTA\Data(field: "status", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $status = null; + + #[DTA\Data(field: "complete", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "bool"])] + public bool|null $complete = null; + +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Pet.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Pet.php new file mode 100644 index 000000000000..bcd5cdb6e813 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Pet.php @@ -0,0 +1,43 @@ + "int"])] + public int|null $id = null; + + #[DTA\Data(field: "category", nullable: true)] + #[DTA\Strategy("Object", ["type" => \App\DTO\Category::class])] + #[DTA\Validator("TypeCompliant", ["type" => \App\DTO\Category::class])] + public \App\DTO\Category|null $category = null; + + #[DTA\Data(field: "name")] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $name = null; + + #[DTA\Data(field: "photoUrls")] + #[DTA\Strategy("Object", ["type" => \App\DTO\Collection32::class])] + #[DTA\Validator("TypeCompliant", ["type" => \App\DTO\Collection32::class])] + public \App\DTO\Collection32|null $photo_urls = null; + + #[DTA\Data(field: "tags", nullable: true)] + #[DTA\Strategy("Object", ["type" => \App\DTO\Collection33::class])] + #[DTA\Validator("TypeCompliant", ["type" => \App\DTO\Collection33::class])] + public \App\DTO\Collection33|null $tags = null; + + /** + * pet status in the store + */ + #[DTA\Data(field: "status", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $status = null; + +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Tag.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Tag.php new file mode 100644 index 000000000000..5fcc6c116b03 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/Tag.php @@ -0,0 +1,21 @@ + "int"])] + public int|null $id = null; + + #[DTA\Data(field: "name", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $name = null; + +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/User.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/User.php new file mode 100644 index 000000000000..c257dfea3192 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/DTO/User.php @@ -0,0 +1,48 @@ + "int"])] + public int|null $id = null; + + #[DTA\Data(field: "username", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $username = null; + + #[DTA\Data(field: "firstName", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $first_name = null; + + #[DTA\Data(field: "lastName", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $last_name = null; + + #[DTA\Data(field: "email", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $email = null; + + #[DTA\Data(field: "password", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $password = null; + + #[DTA\Data(field: "phone", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "string"])] + public string|null $phone = null; + + /** + * User Status + */ + #[DTA\Data(field: "userStatus", nullable: true)] + #[DTA\Validator("Scalar", ["type" => "int"])] + public int|null $user_status = null; + +} diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Factory.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Factory.php similarity index 71% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Factory.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Factory.php index 0757bcfbea74..24eb21b492c0 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Factory.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Factory.php @@ -23,23 +23,13 @@ class Factory implements FactoryInterface { public function __invoke(ContainerInterface $container, $requestedName, array $options = null): Application { - $errorMiddleware = $container->get(Middleware\InternalServerError::class); - if (!($errorMiddleware instanceof Middleware\InternalServerError)) { - throw new \LogicException(\sprintf( - 'Invalid error middleware: expecting %s, not %s.', - Middleware\InternalServerError::class, - \is_object($errorMiddleware) ? \get_class($errorMiddleware) : \gettype($errorMiddleware) - )); - } + $errorMiddleware = self::getErrorMiddleware($container); $pipeline = new MiddlewarePipe(); $runner = new RequestHandlerRunner( $pipeline, $container->get(EmitterInterface::class), $container->get(ServerRequestInterface::class), - function(\Throwable $error) use ($errorMiddleware) : ResponseInterface - { - return $errorMiddleware->handleError($error); - } + static fn(\Throwable $error): ResponseInterface => $errorMiddleware->handleError($error) ); $application = new Application( $container->get(MiddlewareFactory::class), @@ -55,4 +45,9 @@ function(\Throwable $error) use ($errorMiddleware) : ResponseInterface return $application; } + + protected static function getErrorMiddleware(ContainerInterface $container): Middleware\InternalServerError + { + return $container->get(Middleware\InternalServerError::class); + } } diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/Pet.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/Pet.php new file mode 100644 index 000000000000..625b36f693a3 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/Pet.php @@ -0,0 +1,56 @@ + \App\DTO\Pet::class, "objectAttr" => "bodyData"])] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/xml", PHProducer\Transfer::class)] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] + public function addPet(ServerRequestInterface $request): \App\DTO\Pet + { + //TODO implement method + /** @var \App\DTO\Pet $bodyData */ + $bodyData = $request->getAttribute("bodyData"); + throw new PHException\HttpCode(501, "Not implemented"); + } + /** + * Update an existing pet + */ + #[PHA\Put()] + // TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Consumer("application/json", PHConsumer\Json::class)] + // TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Consumer("application/xml", PHConsumer\Json::class)] + #[PHA\Attribute(PHAttribute\Transfer::class, ["type" => \App\DTO\Pet::class, "objectAttr" => "bodyData"])] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/xml", PHProducer\Transfer::class)] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] + public function updatePet(ServerRequestInterface $request): \App\DTO\Pet + { + //TODO implement method + /** @var \App\DTO\Pet $bodyData */ + $bodyData = $request->getAttribute("bodyData"); + throw new PHException\HttpCode(501, "Not implemented"); + } +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetFindByStatus.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetFindByStatus.php new file mode 100644 index 000000000000..53d217f9969a --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetFindByStatus.php @@ -0,0 +1,36 @@ + \App\DTO\FindPetsByStatusQueryData::class, + "objectAttr" => "queryData", + "source" => PHAttribute\Transfer::SOURCE_GET + ])] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/xml", PHProducer\Transfer::class)] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] + public function findPetsByStatus(ServerRequestInterface $request): \App\DTO\Collection19 + { + //TODO implement method + /** @var \App\DTO\FindPetsByStatusQueryData $queryData */ + $queryData = $request->getAttribute("queryData"); + throw new PHException\HttpCode(501, "Not implemented"); + } +} diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetFindByTags.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetFindByTags.php new file mode 100644 index 000000000000..a40122909bcb --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetFindByTags.php @@ -0,0 +1,36 @@ + \App\DTO\FindPetsByTagsQueryData::class, + "objectAttr" => "queryData", + "source" => PHAttribute\Transfer::SOURCE_GET + ])] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/xml", PHProducer\Transfer::class)] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] + public function findPetsByTags(ServerRequestInterface $request): \App\DTO\Collection26 + { + //TODO implement method + /** @var \App\DTO\FindPetsByTagsQueryData $queryData */ + $queryData = $request->getAttribute("queryData"); + throw new PHException\HttpCode(501, "Not implemented"); + } +} diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetPetId.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetPetId.php similarity index 55% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetPetId.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetPetId.php index 625bbf5832c3..8da421be6782 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetPetId.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetPetId.php @@ -3,25 +3,20 @@ namespace App\Handler; -use Articus\PathHandler\Annotation as PHA; +use Articus\PathHandler\PhpAttribute as PHA; use Articus\PathHandler\Consumer as PHConsumer; use Articus\PathHandler\Producer as PHProducer; use Articus\PathHandler\Attribute as PHAttribute; use Articus\PathHandler\Exception as PHException; use Psr\Http\Message\ServerRequestInterface; -/** - * @PHA\Route(pattern="/pet/{petId}") - */ +#[PHA\Route("/pet/{petId}")] class PetPetId { /** * Deletes a pet - * @PHA\Delete() - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented */ + #[PHA\Delete()] public function deletePet(ServerRequestInterface $request) { //TODO implement method @@ -29,17 +24,12 @@ public function deletePet(ServerRequestInterface $request) } /** * Find pet by ID - * @PHA\Get() - * TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Producer(name=PHProducer\Transfer::class, mediaType="application/xml") - * TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Producer(name=PHProducer\Transfer::class, mediaType="application/json") - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented - * - * @return \App\DTO\Pet */ + #[PHA\Get()] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/xml", PHProducer\Transfer::class)] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] public function getPetById(ServerRequestInterface $request): \App\DTO\Pet { //TODO implement method @@ -47,11 +37,8 @@ public function getPetById(ServerRequestInterface $request): \App\DTO\Pet } /** * Updates a pet in the store with form data - * @PHA\Post() - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented */ + #[PHA\Post()] public function updatePetWithForm(ServerRequestInterface $request) { //TODO implement method diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetPetIdUploadImage.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetPetIdUploadImage.php similarity index 58% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetPetIdUploadImage.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetPetIdUploadImage.php index 67cc0784caac..886a35c1e325 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/PetPetIdUploadImage.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/PetPetIdUploadImage.php @@ -3,29 +3,22 @@ namespace App\Handler; -use Articus\PathHandler\Annotation as PHA; +use Articus\PathHandler\PhpAttribute as PHA; use Articus\PathHandler\Consumer as PHConsumer; use Articus\PathHandler\Producer as PHProducer; use Articus\PathHandler\Attribute as PHAttribute; use Articus\PathHandler\Exception as PHException; use Psr\Http\Message\ServerRequestInterface; -/** - * @PHA\Route(pattern="/pet/{petId}/uploadImage") - */ +#[PHA\Route("/pet/{petId}/uploadImage")] class PetPetIdUploadImage { /** * uploads an image - * @PHA\Post() - * TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Producer(name=PHProducer\Transfer::class, mediaType="application/json") - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented - * - * @return \App\DTO\ApiResponse */ + #[PHA\Post()] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] public function uploadFile(ServerRequestInterface $request): \App\DTO\ApiResponse { //TODO implement method diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/StoreInventory.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/StoreInventory.php similarity index 54% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/StoreInventory.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/StoreInventory.php index 6d6d3ceb9464..bc35720421c2 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/StoreInventory.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/StoreInventory.php @@ -3,31 +3,23 @@ namespace App\Handler; -use Articus\PathHandler\Annotation as PHA; +use Articus\PathHandler\PhpAttribute as PHA; use Articus\PathHandler\Consumer as PHConsumer; use Articus\PathHandler\Producer as PHProducer; use Articus\PathHandler\Attribute as PHAttribute; use Articus\PathHandler\Exception as PHException; use Psr\Http\Message\ServerRequestInterface; -/** - * @PHA\Route(pattern="/store/inventory") - */ +#[PHA\Route("/store/inventory")] class StoreInventory { /** * Returns pet inventories by status - * @PHA\Get() - * TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Producer(name=PHProducer\Transfer::class, mediaType="application/json") - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented - * - * TODO check if generated return container type is valid - * @return map[string,int] */ - public function getInventory(ServerRequestInterface $request): array + #[PHA\Get()] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] + public function getInventory(ServerRequestInterface $request): \App\DTO\Collection34 { //TODO implement method throw new PHException\HttpCode(501, "Not implemented"); diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/StoreOrder.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/StoreOrder.php new file mode 100644 index 000000000000..9399d0e4d3b6 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/StoreOrder.php @@ -0,0 +1,34 @@ + \App\DTO\Order::class, "objectAttr" => "bodyData"])] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/xml", PHProducer\Transfer::class)] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] + public function placeOrder(ServerRequestInterface $request): \App\DTO\Order + { + //TODO implement method + /** @var \App\DTO\Order $bodyData */ + $bodyData = $request->getAttribute("bodyData"); + throw new PHException\HttpCode(501, "Not implemented"); + } +} diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/StoreOrderOrderId.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/StoreOrderOrderId.php similarity index 54% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/StoreOrderOrderId.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/StoreOrderOrderId.php index 31c53e597eb3..ae8313b20ea1 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/StoreOrderOrderId.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/StoreOrderOrderId.php @@ -3,25 +3,20 @@ namespace App\Handler; -use Articus\PathHandler\Annotation as PHA; +use Articus\PathHandler\PhpAttribute as PHA; use Articus\PathHandler\Consumer as PHConsumer; use Articus\PathHandler\Producer as PHProducer; use Articus\PathHandler\Attribute as PHAttribute; use Articus\PathHandler\Exception as PHException; use Psr\Http\Message\ServerRequestInterface; -/** - * @PHA\Route(pattern="/store/order/{orderId}") - */ +#[PHA\Route("/store/order/{orderId}")] class StoreOrderOrderId { /** * Delete purchase order by ID - * @PHA\Delete() - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented */ + #[PHA\Delete()] public function deleteOrder(ServerRequestInterface $request) { //TODO implement method @@ -29,17 +24,12 @@ public function deleteOrder(ServerRequestInterface $request) } /** * Find purchase order by ID - * @PHA\Get() - * TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Producer(name=PHProducer\Transfer::class, mediaType="application/xml") - * TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Producer(name=PHProducer\Transfer::class, mediaType="application/json") - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented - * - * @return \App\DTO\Order */ + #[PHA\Get()] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/xml", PHProducer\Transfer::class)] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] public function getOrderById(ServerRequestInterface $request): \App\DTO\Order { //TODO implement method diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/User.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/User.php similarity index 57% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/User.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/User.php index 5a48f2ec0728..8ad9221e2636 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/User.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/User.php @@ -3,28 +3,23 @@ namespace App\Handler; -use Articus\PathHandler\Annotation as PHA; +use Articus\PathHandler\PhpAttribute as PHA; use Articus\PathHandler\Consumer as PHConsumer; use Articus\PathHandler\Producer as PHProducer; use Articus\PathHandler\Attribute as PHAttribute; use Articus\PathHandler\Exception as PHException; use Psr\Http\Message\ServerRequestInterface; -/** - * @PHA\Route(pattern="/user") - */ +#[PHA\Route("/user")] class User { /** * Create user - * @PHA\Post() - * TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Consumer(name=PHConsumer\Json::class, mediaRange="application/json") - * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":\App\DTO\User::class,"objectAttr":"bodyData"}) - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented */ + #[PHA\Post()] + // TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Consumer("application/json", PHConsumer\Json::class)] + #[PHA\Attribute(PHAttribute\Transfer::class, ["type" => \App\DTO\User::class, "objectAttr" => "bodyData"])] public function createUser(ServerRequestInterface $request) { //TODO implement method diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithArray.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserCreateWithArray.php similarity index 52% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithArray.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserCreateWithArray.php index a8a39215baba..304f85782c5b 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithArray.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserCreateWithArray.php @@ -3,33 +3,27 @@ namespace App\Handler; -use Articus\PathHandler\Annotation as PHA; +use Articus\PathHandler\PhpAttribute as PHA; use Articus\PathHandler\Consumer as PHConsumer; use Articus\PathHandler\Producer as PHProducer; use Articus\PathHandler\Attribute as PHAttribute; use Articus\PathHandler\Exception as PHException; use Psr\Http\Message\ServerRequestInterface; -/** - * @PHA\Route(pattern="/user/createWithArray") - */ +#[PHA\Route("/user/createWithArray")] class UserCreateWithArray { /** * Creates list of users with given input array - * @PHA\Post() - * TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Consumer(name=PHConsumer\Json::class, mediaRange="application/json") - * TODO check if attribute is valid and can handle your container type - * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":"\App\DTO\User[]","objectAttr":"bodyData"}) - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented */ + #[PHA\Post()] + // TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Consumer("application/json", PHConsumer\Json::class)] + #[PHA\Attribute(PHAttribute\Transfer::class, ["type" => \App\DTO\Collection36::class, "objectAttr" => "bodyData"])] public function createUsersWithArrayInput(ServerRequestInterface $request) { //TODO implement method - /** @var \App\DTO\User[] $bodyData */ + /** @var \App\DTO\Collection36 $bodyData */ $bodyData = $request->getAttribute("bodyData"); throw new PHException\HttpCode(501, "Not implemented"); } diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithList.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserCreateWithList.php similarity index 52% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithList.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserCreateWithList.php index b34cca7045f2..1d415fcee237 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithList.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserCreateWithList.php @@ -3,33 +3,27 @@ namespace App\Handler; -use Articus\PathHandler\Annotation as PHA; +use Articus\PathHandler\PhpAttribute as PHA; use Articus\PathHandler\Consumer as PHConsumer; use Articus\PathHandler\Producer as PHProducer; use Articus\PathHandler\Attribute as PHAttribute; use Articus\PathHandler\Exception as PHException; use Psr\Http\Message\ServerRequestInterface; -/** - * @PHA\Route(pattern="/user/createWithList") - */ +#[PHA\Route("/user/createWithList")] class UserCreateWithList { /** * Creates list of users with given input array - * @PHA\Post() - * TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Consumer(name=PHConsumer\Json::class, mediaRange="application/json") - * TODO check if attribute is valid and can handle your container type - * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":"\App\DTO\User[]","objectAttr":"bodyData"}) - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented */ + #[PHA\Post()] + // TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Consumer("application/json", PHConsumer\Json::class)] + #[PHA\Attribute(PHAttribute\Transfer::class, ["type" => \App\DTO\Collection36::class, "objectAttr" => "bodyData"])] public function createUsersWithListInput(ServerRequestInterface $request) { //TODO implement method - /** @var \App\DTO\User[] $bodyData */ + /** @var \App\DTO\Collection36 $bodyData */ $bodyData = $request->getAttribute("bodyData"); throw new PHException\HttpCode(501, "Not implemented"); } diff --git a/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserLogin.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserLogin.php new file mode 100644 index 000000000000..38a502537f71 --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserLogin.php @@ -0,0 +1,36 @@ + \App\DTO\LoginUserQueryData::class, + "objectAttr" => "queryData", + "source" => PHAttribute\Transfer::SOURCE_GET + ])] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/xml", PHProducer\Transfer::class)] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] + public function loginUser(ServerRequestInterface $request): string + { + //TODO implement method + /** @var \App\DTO\LoginUserQueryData $queryData */ + $queryData = $request->getAttribute("queryData"); + throw new PHException\HttpCode(501, "Not implemented"); + } +} diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserLogout.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserLogout.php similarity index 70% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserLogout.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserLogout.php index 4c0d8b1bb06e..7cb7b9a8a2eb 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserLogout.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserLogout.php @@ -3,25 +3,20 @@ namespace App\Handler; -use Articus\PathHandler\Annotation as PHA; +use Articus\PathHandler\PhpAttribute as PHA; use Articus\PathHandler\Consumer as PHConsumer; use Articus\PathHandler\Producer as PHProducer; use Articus\PathHandler\Attribute as PHAttribute; use Articus\PathHandler\Exception as PHException; use Psr\Http\Message\ServerRequestInterface; -/** - * @PHA\Route(pattern="/user/logout") - */ +#[PHA\Route("/user/logout")] class UserLogout { /** * Logs out current logged in user session - * @PHA\Get() - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented */ + #[PHA\Get()] public function logoutUser(ServerRequestInterface $request) { //TODO implement method diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserUsername.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserUsername.php similarity index 51% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserUsername.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserUsername.php index ce3de9849696..68be5f4fc1a2 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Handler/UserUsername.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Handler/UserUsername.php @@ -3,25 +3,20 @@ namespace App\Handler; -use Articus\PathHandler\Annotation as PHA; +use Articus\PathHandler\PhpAttribute as PHA; use Articus\PathHandler\Consumer as PHConsumer; use Articus\PathHandler\Producer as PHProducer; use Articus\PathHandler\Attribute as PHAttribute; use Articus\PathHandler\Exception as PHException; use Psr\Http\Message\ServerRequestInterface; -/** - * @PHA\Route(pattern="/user/{username}") - */ +#[PHA\Route("/user/{username}")] class UserUsername { /** * Delete user - * @PHA\Delete() - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented */ + #[PHA\Delete()] public function deleteUser(ServerRequestInterface $request) { //TODO implement method @@ -29,17 +24,12 @@ public function deleteUser(ServerRequestInterface $request) } /** * Get user by user name - * @PHA\Get() - * TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Producer(name=PHProducer\Transfer::class, mediaType="application/xml") - * TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Producer(name=PHProducer\Transfer::class, mediaType="application/json") - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented - * - * @return \App\DTO\User */ + #[PHA\Get()] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/xml", PHProducer\Transfer::class)] + // TODO check if producer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Producer("application/json", PHProducer\Transfer::class)] public function getUserByName(ServerRequestInterface $request): \App\DTO\User { //TODO implement method @@ -47,14 +37,11 @@ public function getUserByName(ServerRequestInterface $request): \App\DTO\User } /** * Updated user - * @PHA\Put() - * TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation - * @PHA\Consumer(name=PHConsumer\Json::class, mediaRange="application/json") - * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":\App\DTO\User::class,"objectAttr":"bodyData"}) - * @param ServerRequestInterface $request - * - * @throws PHException\HttpCode 501 if the method is not implemented */ + #[PHA\Put()] + // TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation + #[PHA\Consumer("application/json", PHConsumer\Json::class)] + #[PHA\Attribute(PHAttribute\Transfer::class, ["type" => \App\DTO\User::class, "objectAttr" => "bodyData"])] public function updateUser(ServerRequestInterface $request) { //TODO implement method diff --git a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Middleware/InternalServerError.php b/samples/server/petstore/php-mezzio-ph-modern/src/App/Middleware/InternalServerError.php similarity index 82% rename from samples/openapi3/server/petstore/php-mezzio-ph/src/App/Middleware/InternalServerError.php rename to samples/server/petstore/php-mezzio-ph-modern/src/App/Middleware/InternalServerError.php index f0354421e004..bc6d5969e2af 100644 --- a/samples/openapi3/server/petstore/php-mezzio-ph/src/App/Middleware/InternalServerError.php +++ b/samples/server/petstore/php-mezzio-ph-modern/src/App/Middleware/InternalServerError.php @@ -11,17 +11,8 @@ class InternalServerError implements MiddlewareInterface { - /** - * @var callable - */ - protected $responseGenerator; - - /** - * @param callable $responseGenerator - */ - public function __construct(callable $responseGenerator) + public function __construct(protected \Closure $responseGenerator) { - $this->responseGenerator = $responseGenerator; } /** diff --git a/samples/server/petstore/php-mezzio-ph/.openapi-generator/FILES b/samples/server/petstore/php-mezzio-ph/.openapi-generator/FILES index fc8224fecb8e..bc9a68917b63 100644 --- a/samples/server/petstore/php-mezzio-ph/.openapi-generator/FILES +++ b/samples/server/petstore/php-mezzio-ph/.openapi-generator/FILES @@ -9,6 +9,43 @@ composer.json public/index.php src/App/DTO/ApiResponse.php src/App/DTO/Category.php +src/App/DTO/Collection.php +src/App/DTO/Collection1.php +src/App/DTO/Collection10.php +src/App/DTO/Collection11.php +src/App/DTO/Collection12.php +src/App/DTO/Collection13.php +src/App/DTO/Collection14.php +src/App/DTO/Collection15.php +src/App/DTO/Collection16.php +src/App/DTO/Collection17.php +src/App/DTO/Collection18.php +src/App/DTO/Collection19.php +src/App/DTO/Collection2.php +src/App/DTO/Collection20.php +src/App/DTO/Collection21.php +src/App/DTO/Collection22.php +src/App/DTO/Collection23.php +src/App/DTO/Collection24.php +src/App/DTO/Collection25.php +src/App/DTO/Collection26.php +src/App/DTO/Collection27.php +src/App/DTO/Collection28.php +src/App/DTO/Collection29.php +src/App/DTO/Collection3.php +src/App/DTO/Collection30.php +src/App/DTO/Collection31.php +src/App/DTO/Collection32.php +src/App/DTO/Collection33.php +src/App/DTO/Collection34.php +src/App/DTO/Collection35.php +src/App/DTO/Collection36.php +src/App/DTO/Collection4.php +src/App/DTO/Collection5.php +src/App/DTO/Collection6.php +src/App/DTO/Collection7.php +src/App/DTO/Collection8.php +src/App/DTO/Collection9.php src/App/DTO/FindPetsByStatusQueryData.php src/App/DTO/FindPetsByTagsQueryData.php src/App/DTO/LoginUserQueryData.php diff --git a/samples/server/petstore/php-mezzio-ph/README.md b/samples/server/petstore/php-mezzio-ph/README.md index 584fd1568795..a80470059016 100644 --- a/samples/server/petstore/php-mezzio-ph/README.md +++ b/samples/server/petstore/php-mezzio-ph/README.md @@ -5,9 +5,9 @@ Generated by the [OpenAPI Generator](https://openapi-generator.tech) project. ## Overview This server stub aims to provide light, yet comprehensive structure for your API project using: -- PHP: >=7.2 +- PHP: >=7.3 - [Laminas Mezzio](https://docs.mezzio.dev/mezzio/): >=3.2 -- [Path Handler](https://github.com/Articus/PathHandler): >=0.6 +- [Path Handler](https://github.com/Articus/PathHandler): >=0.7 ## How to use All you have to do to start development is: diff --git a/samples/server/petstore/php-mezzio-ph/application/config.yml b/samples/server/petstore/php-mezzio-ph/application/config.yml index 1f106812353f..71371becf217 100644 --- a/samples/server/petstore/php-mezzio-ph/application/config.yml +++ b/samples/server/petstore/php-mezzio-ph/application/config.yml @@ -9,10 +9,11 @@ # router: # cache: # directory: ./data/cache/PathHandler -# #Enable handler metadata cache -# metadata: -# cache: -# directory: ./data/cache/PathHandler + +#Enable handler metadata cache +#Articus\PathHandler\MetadataProvider\Annotation: +# cache: +# directory: ./data/cache/PathHandler #Enable data transfer metadata cache for DTOs #Articus\DataTransfer\MetadataProvider\Annotation: diff --git a/samples/server/petstore/php-mezzio-ph/application/config/data_transfer.yml b/samples/server/petstore/php-mezzio-ph/application/config/data_transfer.yml index c5174147c236..548c898fb9c8 100644 --- a/samples/server/petstore/php-mezzio-ph/application/config/data_transfer.yml +++ b/samples/server/petstore/php-mezzio-ph/application/config/data_transfer.yml @@ -16,6 +16,10 @@ Articus\DataTransfer\Strategy\PluginManager: factories: Date: OpenAPIGenerator\Common\Strategy\Factory\MutableDate DateTime: OpenAPIGenerator\Common\Strategy\Factory\MutableDateTime + ObjectList: OpenAPIGenerator\Common\Strategy\Factory\NoArgObjectList + ObjectMap: OpenAPIGenerator\Common\Strategy\Factory\NoArgObjectMap + ScalarList: OpenAPIGenerator\Common\Strategy\Factory\ScalarList + ScalarMap: OpenAPIGenerator\Common\Strategy\Factory\ScalarMap Articus\DataTransfer\Validator\PluginManager: invokables: @@ -24,3 +28,7 @@ Articus\DataTransfer\Validator\PluginManager: QueryStringScalarArray: OpenAPIGenerator\Common\Validator\QueryStringScalarArray abstract_factories: - Articus\DataTransfer\Validator\Factory\Laminas + +validators: + invokables: + Count: Laminas\Validator\IsCountable diff --git a/samples/server/petstore/php-mezzio-ph/application/config/path_handler.yml b/samples/server/petstore/php-mezzio-ph/application/config/path_handler.yml index 25995b20d6f6..174f6fc3d269 100644 --- a/samples/server/petstore/php-mezzio-ph/application/config/path_handler.yml +++ b/samples/server/petstore/php-mezzio-ph/application/config/path_handler.yml @@ -1,8 +1,13 @@ dependencies: factories: - Mezzio\Router\RouterInterface: Articus\PathHandler\RouteInjection\Factory + Mezzio\Router\RouterInterface: Articus\PathHandler\RouteInjectionFactory + Articus\PathHandler\MetadataProviderInterface: Articus\PathHandler\MetadataProvider\Factory\Annotation + Articus\PathHandler\Handler\PluginManager: Articus\PathHandler\Handler\Factory\PluginManager + Articus\PathHandler\Consumer\PluginManager: Articus\PathHandler\Consumer\Factory\PluginManager + Articus\PathHandler\Attribute\PluginManager: Articus\PathHandler\Attribute\Factory\PluginManager + Articus\PathHandler\Producer\PluginManager: Articus\PathHandler\Producer\Factory\PluginManager -Articus\PathHandler\RouteInjection\Factory: +Articus\PathHandler\RouteInjectionFactory: paths: '/v2': - App\Handler\Pet @@ -19,18 +24,22 @@ Articus\PathHandler\RouteInjection\Factory: - App\Handler\UserLogin - App\Handler\UserLogout - App\Handler\UserUsername - handlers: - abstract_factories: - - Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory -# consumers: -# factories: -# invokables: -# attributes: -# factories: -# invokables: -# producers: -# factories: -# invokables: + +Articus\PathHandler\Handler\PluginManager: + abstract_factories: + - Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory + +#Articus\PathHandler\Consumer\PluginManager: +# factories: +# invokables: + +#Articus\PathHandler\Attribute\PluginManager: +# factories: +# invokables: + +#Articus\PathHandler\Producer\PluginManager: +# factories: +# invokables: Laminas\ServiceManager\AbstractFactory\ConfigAbstractFactory: App\Handler\Pet: [] diff --git a/samples/server/petstore/php-mezzio-ph/composer.json b/samples/server/petstore/php-mezzio-ph/composer.json index 54f8e97226c6..c98cf9983029 100644 --- a/samples/server/petstore/php-mezzio-ph/composer.json +++ b/samples/server/petstore/php-mezzio-ph/composer.json @@ -5,13 +5,13 @@ "version": "1.0.0", "type": "project", "require": { - "php": "^7.2", + "php": "^7.3 || ^8.0", "ext-yaml": "^2.0", "mezzio/mezzio": "^3.2", "laminas/laminas-diactoros": "^2.1", - "articus/path-handler": "^0.6", - "articus/data-transfer": "^0.4", - "articus/openapi-generator-common": "^0.1", + "articus/path-handler": "^0.7", + "articus/data-transfer": "^0.5", + "articus/openapi-generator-common": "^0.2", "doctrine/annotations": "^1.10", "psr/simple-cache": "^1.0", "laminas/laminas-config": "^3.4", diff --git a/samples/server/petstore/php-mezzio-ph/src/App/DTO/ApiResponse.php b/samples/server/petstore/php-mezzio-ph/src/App/DTO/ApiResponse.php index a08cb2c92757..0161f75b2b29 100644 --- a/samples/server/petstore/php-mezzio-ph/src/App/DTO/ApiResponse.php +++ b/samples/server/petstore/php-mezzio-ph/src/App/DTO/ApiResponse.php @@ -16,16 +16,19 @@ class ApiResponse * @var int|null */ public $code; + /** * @DTA\Data(field="type", nullable=true) * @DTA\Validator(name="Scalar", options={"type":"string"}) * @var string|null */ public $type; + /** * @DTA\Data(field="message", nullable=true) * @DTA\Validator(name="Scalar", options={"type":"string"}) * @var string|null */ public $message; + } diff --git a/samples/server/petstore/php-mezzio-ph/src/App/DTO/Category.php b/samples/server/petstore/php-mezzio-ph/src/App/DTO/Category.php index 7b65c273d408..41a221be1cf7 100644 --- a/samples/server/petstore/php-mezzio-ph/src/App/DTO/Category.php +++ b/samples/server/petstore/php-mezzio-ph/src/App/DTO/Category.php @@ -16,6 +16,7 @@ class Category * @var int|null */ public $id; + /** * @DTA\Data(field="name", nullable=true) * @DTA\Validator(name="Scalar", options={"type":"string"}) @@ -23,4 +24,5 @@ class Category * @var string|null */ public $name; + } diff --git a/samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection.php b/samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection.php new file mode 100644 index 000000000000..0e478eb4bd8e --- /dev/null +++ b/samples/server/petstore/php-mezzio-ph/src/App/DTO/Collection.php @@ -0,0 +1,16 @@ +get(Middleware\InternalServerError::class); - if (!($errorMiddleware instanceof Middleware\InternalServerError)) { - throw new \LogicException(\sprintf( - 'Invalid error middleware: expecting %s, not %s.', - Middleware\InternalServerError::class, - \is_object($errorMiddleware) ? \get_class($errorMiddleware) : \gettype($errorMiddleware) - )); - } + $errorMiddleware = self::getErrorMiddleware($container); $pipeline = new MiddlewarePipe(); $runner = new RequestHandlerRunner( $pipeline, $container->get(EmitterInterface::class), $container->get(ServerRequestInterface::class), - function(\Throwable $error) use ($errorMiddleware) : ResponseInterface + static function(\Throwable $error) use ($errorMiddleware) : ResponseInterface { return $errorMiddleware->handleError($error); } @@ -55,4 +48,9 @@ function(\Throwable $error) use ($errorMiddleware) : ResponseInterface return $application; } + + protected static function getErrorMiddleware(ContainerInterface $container): Middleware\InternalServerError + { + return $container->get(Middleware\InternalServerError::class); + } } diff --git a/samples/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByStatus.php b/samples/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByStatus.php index c1c1ce754007..917f9f767a36 100644 --- a/samples/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByStatus.php +++ b/samples/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByStatus.php @@ -31,10 +31,9 @@ class PetFindByStatus * * @throws PHException\HttpCode 501 if the method is not implemented * - * TODO check if generated return container type is valid - * @return \App\DTO\Pet[] + * @return \App\DTO\Collection19 */ - public function findPetsByStatus(ServerRequestInterface $request): array + public function findPetsByStatus(ServerRequestInterface $request): \App\DTO\Collection19 { //TODO implement method /** @var \App\DTO\FindPetsByStatusQueryData $queryData */ diff --git a/samples/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByTags.php b/samples/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByTags.php index b722a310efb0..b74484da909c 100644 --- a/samples/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByTags.php +++ b/samples/server/petstore/php-mezzio-ph/src/App/Handler/PetFindByTags.php @@ -31,10 +31,9 @@ class PetFindByTags * * @throws PHException\HttpCode 501 if the method is not implemented * - * TODO check if generated return container type is valid - * @return \App\DTO\Pet[] + * @return \App\DTO\Collection26 */ - public function findPetsByTags(ServerRequestInterface $request): array + public function findPetsByTags(ServerRequestInterface $request): \App\DTO\Collection26 { //TODO implement method /** @var \App\DTO\FindPetsByTagsQueryData $queryData */ diff --git a/samples/server/petstore/php-mezzio-ph/src/App/Handler/StoreInventory.php b/samples/server/petstore/php-mezzio-ph/src/App/Handler/StoreInventory.php index c1ca1be83d16..c9150110c440 100644 --- a/samples/server/petstore/php-mezzio-ph/src/App/Handler/StoreInventory.php +++ b/samples/server/petstore/php-mezzio-ph/src/App/Handler/StoreInventory.php @@ -24,10 +24,9 @@ class StoreInventory * * @throws PHException\HttpCode 501 if the method is not implemented * - * TODO check if generated return container type is valid - * @return array + * @return \App\DTO\Collection34 */ - public function getInventory(ServerRequestInterface $request): array + public function getInventory(ServerRequestInterface $request): \App\DTO\Collection34 { //TODO implement method throw new PHException\HttpCode(501, "Not implemented"); diff --git a/samples/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithArray.php b/samples/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithArray.php index a8a39215baba..8df1e8b18fd7 100644 --- a/samples/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithArray.php +++ b/samples/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithArray.php @@ -20,8 +20,7 @@ class UserCreateWithArray * @PHA\Post() * TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation * @PHA\Consumer(name=PHConsumer\Json::class, mediaRange="application/json") - * TODO check if attribute is valid and can handle your container type - * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":"\App\DTO\User[]","objectAttr":"bodyData"}) + * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":\App\DTO\Collection36::class,"objectAttr":"bodyData"}) * @param ServerRequestInterface $request * * @throws PHException\HttpCode 501 if the method is not implemented @@ -29,7 +28,7 @@ class UserCreateWithArray public function createUsersWithArrayInput(ServerRequestInterface $request) { //TODO implement method - /** @var \App\DTO\User[] $bodyData */ + /** @var \App\DTO\Collection36 $bodyData */ $bodyData = $request->getAttribute("bodyData"); throw new PHException\HttpCode(501, "Not implemented"); } diff --git a/samples/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithList.php b/samples/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithList.php index b34cca7045f2..dae1cc0f2643 100644 --- a/samples/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithList.php +++ b/samples/server/petstore/php-mezzio-ph/src/App/Handler/UserCreateWithList.php @@ -20,8 +20,7 @@ class UserCreateWithList * @PHA\Post() * TODO check if consumer is valid, if it has correct priority and if it can be moved to class annotation * @PHA\Consumer(name=PHConsumer\Json::class, mediaRange="application/json") - * TODO check if attribute is valid and can handle your container type - * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":"\App\DTO\User[]","objectAttr":"bodyData"}) + * @PHA\Attribute(name=PHAttribute\Transfer::class, options={"type":\App\DTO\Collection36::class,"objectAttr":"bodyData"}) * @param ServerRequestInterface $request * * @throws PHException\HttpCode 501 if the method is not implemented @@ -29,7 +28,7 @@ class UserCreateWithList public function createUsersWithListInput(ServerRequestInterface $request) { //TODO implement method - /** @var \App\DTO\User[] $bodyData */ + /** @var \App\DTO\Collection36 $bodyData */ $bodyData = $request->getAttribute("bodyData"); throw new PHException\HttpCode(501, "Not implemented"); } From 071dc3413dd1227e2af41c83abc562bb309a72aa Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 21 May 2021 14:45:14 +0800 Subject: [PATCH 134/186] fix typescript node due to @types/bluebird 3.5.35 (#9533) --- .../src/main/resources/typescript-node/package.mustache | 2 +- samples/client/petstore/typescript-node/npm/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/typescript-node/package.mustache b/modules/openapi-generator/src/main/resources/typescript-node/package.mustache index ff1c5c44519d..3679a80fadd9 100644 --- a/modules/openapi-generator/src/main/resources/typescript-node/package.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-node/package.mustache @@ -15,7 +15,7 @@ "dependencies": { "bluebird": "^3.5.0", "request": "^2.81.0", - "@types/bluebird": "*", + "@types/bluebird": "3.5.33", "@types/request": "*", "rewire": "^3.0.2" }, diff --git a/samples/client/petstore/typescript-node/npm/package.json b/samples/client/petstore/typescript-node/npm/package.json index 0ff014f766ae..2bab750c5bab 100644 --- a/samples/client/petstore/typescript-node/npm/package.json +++ b/samples/client/petstore/typescript-node/npm/package.json @@ -15,7 +15,7 @@ "dependencies": { "bluebird": "^3.5.0", "request": "^2.81.0", - "@types/bluebird": "*", + "@types/bluebird": "3.5.33", "@types/request": "*", "rewire": "^3.0.2" }, From b8c5a647e0bbd6c29138edaed5d820177687084f Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Fri, 21 May 2021 08:45:50 +0200 Subject: [PATCH 135/186] [dart][ci] Move Dart samples from CircleCI to Github actions (#9515) * [dart] Move Dart samples from CircleCI to Github actions * Fix format failing with latest Dart version * Workflow naming * Split dart samples depending on version * use fixed version to prevent flaky builds * Change branch pattern for release branches --- .github/actions/run-samples/action.yaml | 19 +++++ .github/workflows/samples-dart.yaml | 78 +++++++++++++++++++ CI/circle_parallel.sh | 13 ---- pom.xml | 59 ++++++++++---- .../petstore_client_lib_fake/pom.xml | 20 ----- .../test/model/date_serializer_test.dart | 15 +++- 6 files changed, 154 insertions(+), 50 deletions(-) create mode 100644 .github/actions/run-samples/action.yaml create mode 100644 .github/workflows/samples-dart.yaml diff --git a/.github/actions/run-samples/action.yaml b/.github/actions/run-samples/action.yaml new file mode 100644 index 000000000000..64bc77458620 --- /dev/null +++ b/.github/actions/run-samples/action.yaml @@ -0,0 +1,19 @@ +name: 'Run samples' +description: 'Runs sample integration test profile with Maven' +inputs: + name: + description: 'The Maven profile name' + required: true + goal: + description: 'Maven goal' + required: false + default: 'verify' + args: + description: 'Additional maven arguments' + required: false + default: '' +runs: + using: "composite" + steps: + - run: mvn --no-snapshot-updates --batch-mode --quiet ${{ inputs.goal }} -P${{ inputs.name }} -Dintegration-test -Dmaven.javadoc.skip=true ${{ inputs.args }} + shell: bash \ No newline at end of file diff --git a/.github/workflows/samples-dart.yaml b/.github/workflows/samples-dart.yaml new file mode 100644 index 000000000000..a1392d65e7c8 --- /dev/null +++ b/.github/workflows/samples-dart.yaml @@ -0,0 +1,78 @@ +name: Samples Dart + +on: + push: + branches: + - master + - '[5-9]+.[0-9]+.x' + pull_request: + branches: + - master + - '[5-9]+.[0-9]+.x' + +jobs: + tests-dart-2-10: + name: Tests Dart 2.10 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v2 + with: + distribution: 'adopt' + java-version: 8 + - name: Cache maven dependencies + uses: actions/cache@v2 + env: + cache-name: maven-repository + with: + path: | + ~/.m2/repository + ~/.gradle + key: ${{ runner.os }}-${{ github.job }}-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} + - name: Cache test dependencies + uses: actions/cache@v2 + env: + cache-name: pub-cache + with: + path: $PUB_CACHE + key: ${{ runner.os }}-${{ github.job }}-${{ env.cache-name }}-${{ hashFiles('samples/**/pubspec.yaml') }} + - uses: dart-lang/setup-dart@v1 + with: + sdk: 2.10.5 + - name: Run tests + uses: ./.github/actions/run-samples + with: + name: samples.dart-2.10 + + tests-dart-2-13: + name: Tests Dart 2.13 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v2 + with: + distribution: 'adopt' + java-version: 8 + - name: Cache maven dependencies + uses: actions/cache@v2 + env: + cache-name: maven-repository + with: + path: | + ~/.m2/repository + ~/.gradle + key: ${{ runner.os }}-${{ github.job }}-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} + - name: Cache test dependencies + uses: actions/cache@v2 + env: + cache-name: pub-cache + with: + path: $PUB_CACHE + key: ${{ runner.os }}-${{ github.job }}-${{ env.cache-name }}-${{ hashFiles('samples/**/pubspec.yaml') }} + - uses: dart-lang/setup-dart@v1 + with: + sdk: 2.13.0 + - name: Run tests + uses: ./.github/actions/run-samples + with: + name: samples.dart-2.13 diff --git a/CI/circle_parallel.sh b/CI/circle_parallel.sh index b647131c7d70..36e0c179b240 100755 --- a/CI/circle_parallel.sh +++ b/CI/circle_parallel.sh @@ -14,17 +14,6 @@ function cleanup { trap cleanup EXIT -function installDart { - # install dart2 - sudo apt-get update - sudo apt-get install apt-transport-https - sudo sh -c 'wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' - sudo sh -c 'wget -qO- https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list' - sudo apt-get update - sudo apt-get install dart - export PATH="$PATH:/usr/lib/dart/bin" -} - if [ "$NODE_INDEX" = "1" ]; then echo "Running node $NODE_INDEX to test 'samples.circleci' defined in pom.xml ..." java -version @@ -35,8 +24,6 @@ if [ "$NODE_INDEX" = "1" ]; then ls -l /home/circleci/.ivy2/cache elif [ "$NODE_INDEX" = "2" ]; then - installDart - # run ensure-up-to-date sample script on SNAPSHOT version only project_version=`mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.version -q -DforceStdout` if [[ $project_version == *"-SNAPSHOT" ]]; then diff --git a/pom.xml b/pom.xml index f5954bbd850a..b968a4769008 100644 --- a/pom.xml +++ b/pom.xml @@ -1418,18 +1418,40 @@ - samples/openapi3/client/petstore/dart2/petstore_client_lib - samples/openapi3/client/petstore/dart2/petstore - samples/openapi3/client/petstore/dart-dio/petstore_client_lib - samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake - samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake - samples/client/petstore/R + + samples.dart-2.13 + + + env + samples.dart-2.13 + + + + samples/openapi3/client/petstore/dart2/petstore_client_lib + samples/openapi3/client/petstore/dart2/petstore + + samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake + + + + samples.dart-2.10 + + + env + samples.dart-2.10 + + + + samples/openapi3/client/petstore/dart-dio/petstore_client_lib + samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake + + samples.ios @@ -1475,15 +1497,24 @@ samples/client/petstore/objc/core-data/SwaggerClientTests--> + + openapi-generator + + true + + !integration-test + + + + modules/openapi-generator-core + modules/openapi-generator + modules/openapi-generator-cli + modules/openapi-generator-maven-plugin + modules/openapi-generator-gradle-plugin + modules/openapi-generator-online + + - - modules/openapi-generator-core - modules/openapi-generator - modules/openapi-generator-cli - modules/openapi-generator-maven-plugin - modules/openapi-generator-gradle-plugin - modules/openapi-generator-online - target/site diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pom.xml b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pom.xml index 86285381f975..dec7604a53ac 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pom.xml +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pom.xml @@ -39,26 +39,6 @@ - - format - pre-integration-test - - exec - - - dart - - format - - --output=none - . - - - pub-run-build-runner pre-integration-test diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_serializer_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_serializer_test.dart index acae38e3d904..9422fe8e47dd 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_serializer_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/model/date_serializer_test.dart @@ -8,15 +8,24 @@ void main() { group(DateSerializer, () { test('serialize', () { - expect(serializer.serialize(serializers, date1), '1999-03-25'); + expect( + serializer.serialize(serializers, date1), + '1999-03-25', + ); }); test('deserialize date', () { - expect(serializer.deserialize(serializers, '1999-03-25'), date1); + expect( + serializer.deserialize(serializers, '1999-03-25'), + date1, + ); }); test('deserialize ISO', () { - expect(serializer.deserialize(serializers, '1999-03-25T12:30:55.123Z'), date1); + expect( + serializer.deserialize(serializers, '1999-03-25T12:30:55.123Z'), + date1, + ); }); }); } From 2c4e79f45c843b98ab797f8fac5e0a1859b0492a Mon Sep 17 00:00:00 2001 From: Blackclaws Date: Fri, 21 May 2021 08:49:33 +0200 Subject: [PATCH 136/186] [csharp][httpclient] Introduce FileParameter as an abstraction (#9426) * Introduce FileParameter as an abstraction * Update Samples * Add new file to samples * Fix hardcoded package name * Fix hardcoded package name, import FileParameter in Model * Remove unneccesary warning --- .../languages/CSharpNetCoreClientCodegen.java | 5 ++ .../libraries/httpclient/ApiClient.mustache | 10 ++- .../httpclient/FileParameter.mustache | 54 +++++++++++++++ .../httpclient/RequestOptions.mustache | 66 +++++++++++++++++++ .../libraries/httpclient/model.mustache | 48 ++++++++++++++ .../.openapi-generator/FILES | 1 + .../OpenAPIClient-httpclient/docs/FakeApi.md | 6 +- .../docs/FormatTest.md | 2 +- .../OpenAPIClient-httpclient/docs/PetApi.md | 12 ++-- .../src/Org.OpenAPITools/Api/FakeApi.cs | 16 ++--- .../src/Org.OpenAPITools/Api/PetApi.cs | 32 ++++----- .../src/Org.OpenAPITools/Client/ApiClient.cs | 10 ++- .../Org.OpenAPITools/Client/FileParameter.cs | 62 +++++++++++++++++ .../Org.OpenAPITools/Client/RequestOptions.cs | 4 +- .../Model/AdditionalPropertiesClass.cs | 1 + .../src/Org.OpenAPITools/Model/Animal.cs | 1 + .../src/Org.OpenAPITools/Model/ApiResponse.cs | 1 + .../src/Org.OpenAPITools/Model/Apple.cs | 1 + .../src/Org.OpenAPITools/Model/AppleReq.cs | 1 + .../Model/ArrayOfArrayOfNumberOnly.cs | 1 + .../Model/ArrayOfNumberOnly.cs | 1 + .../src/Org.OpenAPITools/Model/ArrayTest.cs | 1 + .../src/Org.OpenAPITools/Model/Banana.cs | 1 + .../src/Org.OpenAPITools/Model/BananaReq.cs | 1 + .../src/Org.OpenAPITools/Model/BasquePig.cs | 1 + .../Org.OpenAPITools/Model/Capitalization.cs | 1 + .../src/Org.OpenAPITools/Model/Cat.cs | 1 + .../src/Org.OpenAPITools/Model/CatAllOf.cs | 1 + .../src/Org.OpenAPITools/Model/Category.cs | 1 + .../src/Org.OpenAPITools/Model/ChildCat.cs | 1 + .../Org.OpenAPITools/Model/ChildCatAllOf.cs | 1 + .../src/Org.OpenAPITools/Model/ClassModel.cs | 1 + .../Model/ComplexQuadrilateral.cs | 1 + .../src/Org.OpenAPITools/Model/DanishPig.cs | 1 + .../src/Org.OpenAPITools/Model/Dog.cs | 1 + .../src/Org.OpenAPITools/Model/DogAllOf.cs | 1 + .../src/Org.OpenAPITools/Model/Drawing.cs | 1 + .../src/Org.OpenAPITools/Model/EnumArrays.cs | 1 + .../src/Org.OpenAPITools/Model/EnumClass.cs | 1 + .../src/Org.OpenAPITools/Model/EnumTest.cs | 1 + .../Model/EquilateralTriangle.cs | 1 + .../src/Org.OpenAPITools/Model/File.cs | 1 + .../Model/FileSchemaTestClass.cs | 1 + .../src/Org.OpenAPITools/Model/Foo.cs | 1 + .../src/Org.OpenAPITools/Model/FormatTest.cs | 5 +- .../src/Org.OpenAPITools/Model/Fruit.cs | 1 + .../src/Org.OpenAPITools/Model/FruitReq.cs | 1 + .../src/Org.OpenAPITools/Model/GmFruit.cs | 1 + .../Model/GrandparentAnimal.cs | 1 + .../Org.OpenAPITools/Model/HasOnlyReadOnly.cs | 1 + .../Model/HealthCheckResult.cs | 1 + .../Model/InlineResponseDefault.cs | 1 + .../Model/IsoscelesTriangle.cs | 1 + .../src/Org.OpenAPITools/Model/List.cs | 1 + .../src/Org.OpenAPITools/Model/Mammal.cs | 1 + .../src/Org.OpenAPITools/Model/MapTest.cs | 1 + ...dPropertiesAndAdditionalPropertiesClass.cs | 1 + .../Model/Model200Response.cs | 1 + .../src/Org.OpenAPITools/Model/ModelClient.cs | 1 + .../src/Org.OpenAPITools/Model/Name.cs | 1 + .../Org.OpenAPITools/Model/NullableClass.cs | 1 + .../Org.OpenAPITools/Model/NullableShape.cs | 1 + .../src/Org.OpenAPITools/Model/NumberOnly.cs | 1 + .../src/Org.OpenAPITools/Model/Order.cs | 1 + .../Org.OpenAPITools/Model/OuterComposite.cs | 1 + .../src/Org.OpenAPITools/Model/OuterEnum.cs | 1 + .../Model/OuterEnumDefaultValue.cs | 1 + .../Model/OuterEnumInteger.cs | 1 + .../Model/OuterEnumIntegerDefaultValue.cs | 1 + .../src/Org.OpenAPITools/Model/ParentPet.cs | 1 + .../src/Org.OpenAPITools/Model/Pet.cs | 1 + .../src/Org.OpenAPITools/Model/Pig.cs | 1 + .../Org.OpenAPITools/Model/Quadrilateral.cs | 1 + .../Model/QuadrilateralInterface.cs | 1 + .../Org.OpenAPITools/Model/ReadOnlyFirst.cs | 1 + .../src/Org.OpenAPITools/Model/Return.cs | 1 + .../Org.OpenAPITools/Model/ScaleneTriangle.cs | 1 + .../src/Org.OpenAPITools/Model/Shape.cs | 1 + .../Org.OpenAPITools/Model/ShapeInterface.cs | 1 + .../src/Org.OpenAPITools/Model/ShapeOrNull.cs | 1 + .../Model/SimpleQuadrilateral.cs | 1 + .../Model/SpecialModelName.cs | 1 + .../src/Org.OpenAPITools/Model/Tag.cs | 1 + .../src/Org.OpenAPITools/Model/Triangle.cs | 1 + .../Model/TriangleInterface.cs | 1 + .../src/Org.OpenAPITools/Model/User.cs | 1 + .../src/Org.OpenAPITools/Model/Whale.cs | 1 + .../src/Org.OpenAPITools/Model/Zebra.cs | 1 + 88 files changed, 356 insertions(+), 50 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/FileParameter.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/RequestOptions.mustache create mode 100644 modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/model.mustache create mode 100644 samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/FileParameter.cs diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNetCoreClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNetCoreClientCodegen.java index ff90d1e30e26..356c6a895b05 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNetCoreClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CSharpNetCoreClientCodegen.java @@ -681,6 +681,11 @@ public void processOpts() { binRelativePath += "vendor"; additionalProperties.put("binRelativePath", binRelativePath); + if(HTTPCLIENT.equals(getLibrary())) { + supportingFiles.add(new SupportingFile("FileParameter.mustache", clientPackageDir, "FileParameter.cs")); + typeMapping.put("file", "FileParameter"); + } + supportingFiles.add(new SupportingFile("IApiAccessor.mustache", clientPackageDir, "IApiAccessor.cs")); supportingFiles.add(new SupportingFile("Configuration.mustache", clientPackageDir, "Configuration.cs")); supportingFiles.add(new SupportingFile("ApiClient.mustache", clientPackageDir, "ApiClient.cs")); diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache index 5477cb0cc73d..3703a8521d0b 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache @@ -278,12 +278,10 @@ namespace {{packageName}}.Client { foreach (var fileParam in options.FileParameters) { - var fileStream = fileParam.Value as FileStream; - var fileStreamName = fileStream != null ? System.IO.Path.GetFileName(fileStream.Name) : null; - var content = new StreamContent(fileParam.Value); + var content = new StreamContent(fileParam.Value.Content); content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); multipartContent.Add(content, fileParam.Key, - fileStreamName ?? "no_file_name_provided"); + fileParam.Value.Name); } } return multipartContent; @@ -370,11 +368,11 @@ namespace {{packageName}}.Client { if (options.Data != null) { - if (options.Data is Stream s) + if (options.Data is FileParameter fp) { contentType = contentType ?? "application/octet-stream"; - var streamContent = new StreamContent(s); + var streamContent = new StreamContent(fp.Content); streamContent.Headers.ContentType = new MediaTypeHeaderValue(contentType); request.Content = streamContent; } diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/FileParameter.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/FileParameter.mustache new file mode 100644 index 000000000000..3fa243ed54fc --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/FileParameter.mustache @@ -0,0 +1,54 @@ +{{>partial_header}} + +using System.IO; + +namespace {{packageName}}.Client +{ + + /// + /// Represents a File passed to the API as a Parameter, allows using different backends for files + /// + public class FileParameter + { + /// + /// The filename + /// + public string Name { get; set; } = "no_name_provided"; + + /// + /// The content of the file + /// + public Stream Content { get; set; } + + /// + /// Construct a FileParameter just from the contents, will extract the filename from a filestream + /// + /// The file content + public FileParameter(Stream content) + { + if (content is FileStream fs) + { + Name = fs.Name; + } + Content = content; + } + + /// + /// Construct a FileParameter from name and content + /// + /// The filename + /// The file content + public FileParameter(string filename, Stream content) + { + Name = filename; + Content = content; + } + + /// + /// Implicit conversion of stream to file parameter. Useful for backwards compatibility. + /// + /// Stream to convert + /// FileParameter + public static implicit operator FileParameter(Stream s) => new FileParameter(s); + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/RequestOptions.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/RequestOptions.mustache new file mode 100644 index 000000000000..b0137d979976 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/RequestOptions.mustache @@ -0,0 +1,66 @@ +{{>partial_header}} + +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; + +namespace {{packageName}}.Client +{ + /// + /// A container for generalized request inputs. This type allows consumers to extend the request functionality + /// by abstracting away from the default (built-in) request framework (e.g. RestSharp). + /// + public class RequestOptions + { + /// + /// Parameters to be bound to path parts of the Request's URL + /// + public Dictionary PathParameters { get; set; } + + /// + /// Query parameters to be applied to the request. + /// Keys may have 1 or more values associated. + /// + public Multimap QueryParameters { get; set; } + + /// + /// Header parameters to be applied to to the request. + /// Keys may have 1 or more values associated. + /// + public Multimap HeaderParameters { get; set; } + + /// + /// Form parameters to be sent along with the request. + /// + public Dictionary FormParameters { get; set; } + + /// + /// File parameters to be sent along with the request. + /// + public Dictionary FileParameters { get; set; } + + /// + /// Cookies to be sent along with the request. + /// + public List Cookies { get; set; } + + /// + /// Any data associated with a request body. + /// + public Object Data { get; set; } + + /// + /// Constructs a new instance of + /// + public RequestOptions() + { + PathParameters = new Dictionary(); + QueryParameters = new Multimap(); + HeaderParameters = new Multimap(); + FormParameters = new Dictionary(); + FileParameters = new Dictionary(); + Cookies = new List(); + } + } +} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/model.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/model.mustache new file mode 100644 index 000000000000..0de1e05e5140 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/model.mustache @@ -0,0 +1,48 @@ +{{>partial_header}} + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; +{{#models}} +{{#model}} +{{#discriminator}} +using JsonSubTypes; +{{/discriminator}} +{{/model}} +{{/models}} +{{#validatable}} +using System.ComponentModel.DataAnnotations; +{{/validatable}} +using FileParameter = {{packageName}}.Client.FileParameter; +using OpenAPIDateConverter = {{packageName}}.Client.OpenAPIDateConverter; +{{#useCompareNetObjects}} +using OpenAPIClientUtils = {{packageName}}.Client.ClientUtils; +{{/useCompareNetObjects}} +{{#models}} +{{#model}} +{{#oneOf}} +{{#-first}} +using System.Reflection; +{{/-first}} +{{/oneOf}} +{{#aneOf}} +{{#-first}} +using System.Reflection; +{{/-first}} +{{/aneOf}} + +namespace {{packageName}}.{{modelPackage}} +{ +{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{#oneOf}}{{#-first}}{{>modelOneOf}}{{/-first}}{{/oneOf}}{{#anyOf}}{{#-first}}{{>modelAnyOf}}{{/-first}}{{/anyOf}}{{^oneOf}}{{^anyOf}}{{>modelGeneric}}{{/anyOf}}{{/oneOf}}{{/isEnum}} +{{/model}} +{{/models}} +} diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/FILES b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/FILES index e6b9861f3320..d317e6120516 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/FILES +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/.openapi-generator/FILES @@ -97,6 +97,7 @@ src/Org.OpenAPITools/Client/ApiResponse.cs src/Org.OpenAPITools/Client/ClientUtils.cs src/Org.OpenAPITools/Client/Configuration.cs src/Org.OpenAPITools/Client/ExceptionFactory.cs +src/Org.OpenAPITools/Client/FileParameter.cs src/Org.OpenAPITools/Client/GlobalConfiguration.cs src/Org.OpenAPITools/Client/HttpSigningConfiguration.cs src/Org.OpenAPITools/Client/IApiAccessor.cs diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeApi.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeApi.md index 947fbb114ef3..c5a0b767f3d2 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeApi.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FakeApi.md @@ -678,7 +678,7 @@ No authorization required # **TestEndpointParameters** -> void TestEndpointParameters (decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = null, int? int32 = null, long? int64 = null, float? _float = null, string _string = null, System.IO.Stream binary = null, DateTime? date = null, DateTime? dateTime = null, string password = null, string callback = null) +> void TestEndpointParameters (decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = null, int? int32 = null, long? int64 = null, float? _float = null, string _string = null, FileParameter binary = null, DateTime? date = null, DateTime? dateTime = null, string password = null, string callback = null) Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -718,7 +718,7 @@ namespace Example var int64 = 789; // long? | None (optional) var _float = 3.4F; // float? | None (optional) var _string = _string_example; // string | None (optional) - var binary = BINARY_DATA_HERE; // System.IO.Stream | None (optional) + var binary = BINARY_DATA_HERE; // FileParameter | None (optional) var date = 2013-10-20; // DateTime? | None (optional) var dateTime = 2013-10-20T19:20:30+01:00; // DateTime? | None (optional) (default to "2010-02-01T10:20:10.111110+01:00") var password = password_example; // string | None (optional) @@ -753,7 +753,7 @@ Name | Type | Description | Notes **int64** | **long?**| None | [optional] **_float** | **float?**| None | [optional] **_string** | **string**| None | [optional] - **binary** | **System.IO.Stream****System.IO.Stream**| None | [optional] + **binary** | **FileParameter****FileParameter**| None | [optional] **date** | **DateTime?**| None | [optional] **dateTime** | **DateTime?**| None | [optional] [default to "2010-02-01T10:20:10.111110+01:00"] **password** | **string**| None | [optional] diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FormatTest.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FormatTest.md index 39a70be7ad47..505dbad52df7 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FormatTest.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/FormatTest.md @@ -13,7 +13,7 @@ Name | Type | Description | Notes **Decimal** | **decimal** | | [optional] **String** | **string** | | [optional] **Byte** | **byte[]** | | -**Binary** | **System.IO.Stream** | | [optional] +**Binary** | [**FileParameter**](FileParameter.md) | | [optional] **Date** | **DateTime** | | **DateTime** | **DateTime** | | [optional] **Uuid** | **Guid** | | [optional] diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/PetApi.md b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/PetApi.md index 9f4ec108d05f..02d0e8e111a6 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/PetApi.md +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/docs/PetApi.md @@ -565,7 +565,7 @@ void (empty response body) # **UploadFile** -> ApiResponse UploadFile (long petId, string additionalMetadata = null, System.IO.Stream file = null) +> ApiResponse UploadFile (long petId, string additionalMetadata = null, FileParameter file = null) uploads an image @@ -595,7 +595,7 @@ namespace Example var apiInstance = new PetApi(httpClient, config, httpClientHandler); var petId = 789; // long | ID of pet to update var additionalMetadata = additionalMetadata_example; // string | Additional data to pass to server (optional) - var file = BINARY_DATA_HERE; // System.IO.Stream | file to upload (optional) + var file = BINARY_DATA_HERE; // FileParameter | file to upload (optional) try { @@ -620,7 +620,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **long**| ID of pet to update | **additionalMetadata** | **string**| Additional data to pass to server | [optional] - **file** | **System.IO.Stream****System.IO.Stream**| file to upload | [optional] + **file** | **FileParameter****FileParameter**| file to upload | [optional] ### Return type @@ -645,7 +645,7 @@ Name | Type | Description | Notes # **UploadFileWithRequiredFile** -> ApiResponse UploadFileWithRequiredFile (long petId, System.IO.Stream requiredFile, string additionalMetadata = null) +> ApiResponse UploadFileWithRequiredFile (long petId, FileParameter requiredFile, string additionalMetadata = null) uploads an image (required) @@ -674,7 +674,7 @@ namespace Example HttpClientHandler httpClientHandler = new HttpClientHandler(); var apiInstance = new PetApi(httpClient, config, httpClientHandler); var petId = 789; // long | ID of pet to update - var requiredFile = BINARY_DATA_HERE; // System.IO.Stream | file to upload + var requiredFile = BINARY_DATA_HERE; // FileParameter | file to upload var additionalMetadata = additionalMetadata_example; // string | Additional data to pass to server (optional) try @@ -699,7 +699,7 @@ namespace Example Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **long**| ID of pet to update | - **requiredFile** | **System.IO.Stream****System.IO.Stream**| file to upload | + **requiredFile** | **FileParameter****FileParameter**| file to upload | **additionalMetadata** | **string**| Additional data to pass to server | [optional] ### Return type diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs index 66f86c619fcf..5631e484c0c3 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/FakeApi.cs @@ -227,7 +227,7 @@ public interface IFakeApiSync : IApiAccessor /// None (optional) /// None (optional) /// - void TestEndpointParameters(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), System.IO.Stream binary = default(System.IO.Stream), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string)); + void TestEndpointParameters(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), FileParameter binary = default(FileParameter), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string)); /// /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -251,7 +251,7 @@ public interface IFakeApiSync : IApiAccessor /// None (optional) /// None (optional) /// ApiResponse of Object(void) - ApiResponse TestEndpointParametersWithHttpInfo(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), System.IO.Stream binary = default(System.IO.Stream), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string)); + ApiResponse TestEndpointParametersWithHttpInfo(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), FileParameter binary = default(FileParameter), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string)); /// /// To test enum parameters /// @@ -622,7 +622,7 @@ public interface IFakeApiAsync : IApiAccessor /// None (optional) /// Cancellation Token to cancel the request. /// Task of void - System.Threading.Tasks.Task TestEndpointParametersAsync(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), System.IO.Stream binary = default(System.IO.Stream), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task TestEndpointParametersAsync(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), FileParameter binary = default(FileParameter), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); /// /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -647,7 +647,7 @@ public interface IFakeApiAsync : IApiAccessor /// None (optional) /// Cancellation Token to cancel the request. /// Task of ApiResponse - System.Threading.Tasks.Task> TestEndpointParametersWithHttpInfoAsync(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), System.IO.Stream binary = default(System.IO.Stream), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> TestEndpointParametersWithHttpInfoAsync(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), FileParameter binary = default(FileParameter), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); /// /// To test enum parameters /// @@ -2024,7 +2024,7 @@ public async System.Threading.Tasks.TaskNone (optional) /// None (optional) /// - public void TestEndpointParameters(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), System.IO.Stream binary = default(System.IO.Stream), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string)) + public void TestEndpointParameters(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), FileParameter binary = default(FileParameter), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string)) { TestEndpointParametersWithHttpInfo(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, _string, binary, date, dateTime, password, callback); } @@ -2048,7 +2048,7 @@ public void TestEndpointParameters(decimal number, double _double, string patter /// None (optional) /// None (optional) /// ApiResponse of Object(void) - public Org.OpenAPITools.Client.ApiResponse TestEndpointParametersWithHttpInfo(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), System.IO.Stream binary = default(System.IO.Stream), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string)) + public Org.OpenAPITools.Client.ApiResponse TestEndpointParametersWithHttpInfo(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), FileParameter binary = default(FileParameter), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string)) { // verify the required parameter 'patternWithoutDelimiter' is set if (patternWithoutDelimiter == null) @@ -2158,7 +2158,7 @@ public Org.OpenAPITools.Client.ApiResponse TestEndpointParametersWithHtt /// None (optional) /// Cancellation Token to cancel the request. /// Task of void - public async System.Threading.Tasks.Task TestEndpointParametersAsync(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), System.IO.Stream binary = default(System.IO.Stream), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + public async System.Threading.Tasks.Task TestEndpointParametersAsync(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), FileParameter binary = default(FileParameter), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { await TestEndpointParametersWithHttpInfoAsync(number, _double, patternWithoutDelimiter, _byte, integer, int32, int64, _float, _string, binary, date, dateTime, password, callback, cancellationToken).ConfigureAwait(false); } @@ -2183,7 +2183,7 @@ public async System.Threading.Tasks.Task TestEndpointParametersAsync(decimal num /// None (optional) /// Cancellation Token to cancel the request. /// Task of ApiResponse - public async System.Threading.Tasks.Task> TestEndpointParametersWithHttpInfoAsync(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), System.IO.Stream binary = default(System.IO.Stream), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + public async System.Threading.Tasks.Task> TestEndpointParametersWithHttpInfoAsync(decimal number, double _double, string patternWithoutDelimiter, byte[] _byte, int? integer = default(int?), int? int32 = default(int?), long? int64 = default(long?), float? _float = default(float?), string _string = default(string), FileParameter binary = default(FileParameter), DateTime? date = default(DateTime?), DateTime? dateTime = default(DateTime?), string password = default(string), string callback = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { // verify the required parameter 'patternWithoutDelimiter' is set if (patternWithoutDelimiter == null) diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs index 7f9a79b6bb3d..1f74cee9c586 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Api/PetApi.cs @@ -176,7 +176,7 @@ public interface IPetApiSync : IApiAccessor /// Additional data to pass to server (optional) /// file to upload (optional) /// ApiResponse - ApiResponse UploadFile(long petId, string additionalMetadata = default(string), System.IO.Stream file = default(System.IO.Stream)); + ApiResponse UploadFile(long petId, string additionalMetadata = default(string), FileParameter file = default(FileParameter)); /// /// uploads an image @@ -189,7 +189,7 @@ public interface IPetApiSync : IApiAccessor /// Additional data to pass to server (optional) /// file to upload (optional) /// ApiResponse of ApiResponse - ApiResponse UploadFileWithHttpInfo(long petId, string additionalMetadata = default(string), System.IO.Stream file = default(System.IO.Stream)); + ApiResponse UploadFileWithHttpInfo(long petId, string additionalMetadata = default(string), FileParameter file = default(FileParameter)); /// /// uploads an image (required) /// @@ -198,7 +198,7 @@ public interface IPetApiSync : IApiAccessor /// file to upload /// Additional data to pass to server (optional) /// ApiResponse - ApiResponse UploadFileWithRequiredFile(long petId, System.IO.Stream requiredFile, string additionalMetadata = default(string)); + ApiResponse UploadFileWithRequiredFile(long petId, FileParameter requiredFile, string additionalMetadata = default(string)); /// /// uploads an image (required) @@ -211,7 +211,7 @@ public interface IPetApiSync : IApiAccessor /// file to upload /// Additional data to pass to server (optional) /// ApiResponse of ApiResponse - ApiResponse UploadFileWithRequiredFileWithHttpInfo(long petId, System.IO.Stream requiredFile, string additionalMetadata = default(string)); + ApiResponse UploadFileWithRequiredFileWithHttpInfo(long petId, FileParameter requiredFile, string additionalMetadata = default(string)); #endregion Synchronous Operations } @@ -400,7 +400,7 @@ public interface IPetApiAsync : IApiAccessor /// file to upload (optional) /// Cancellation Token to cancel the request. /// Task of ApiResponse - System.Threading.Tasks.Task UploadFileAsync(long petId, string additionalMetadata = default(string), System.IO.Stream file = default(System.IO.Stream), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task UploadFileAsync(long petId, string additionalMetadata = default(string), FileParameter file = default(FileParameter), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); /// /// uploads an image @@ -414,7 +414,7 @@ public interface IPetApiAsync : IApiAccessor /// file to upload (optional) /// Cancellation Token to cancel the request. /// Task of ApiResponse (ApiResponse) - System.Threading.Tasks.Task> UploadFileWithHttpInfoAsync(long petId, string additionalMetadata = default(string), System.IO.Stream file = default(System.IO.Stream), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> UploadFileWithHttpInfoAsync(long petId, string additionalMetadata = default(string), FileParameter file = default(FileParameter), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); /// /// uploads an image (required) /// @@ -427,7 +427,7 @@ public interface IPetApiAsync : IApiAccessor /// Additional data to pass to server (optional) /// Cancellation Token to cancel the request. /// Task of ApiResponse - System.Threading.Tasks.Task UploadFileWithRequiredFileAsync(long petId, System.IO.Stream requiredFile, string additionalMetadata = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task UploadFileWithRequiredFileAsync(long petId, FileParameter requiredFile, string additionalMetadata = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); /// /// uploads an image (required) @@ -441,7 +441,7 @@ public interface IPetApiAsync : IApiAccessor /// Additional data to pass to server (optional) /// Cancellation Token to cancel the request. /// Task of ApiResponse (ApiResponse) - System.Threading.Tasks.Task> UploadFileWithRequiredFileWithHttpInfoAsync(long petId, System.IO.Stream requiredFile, string additionalMetadata = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> UploadFileWithRequiredFileWithHttpInfoAsync(long petId, FileParameter requiredFile, string additionalMetadata = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); #endregion Asynchronous Operations } @@ -1690,7 +1690,7 @@ public async System.Threading.Tasks.TaskAdditional data to pass to server (optional) /// file to upload (optional) /// ApiResponse - public ApiResponse UploadFile(long petId, string additionalMetadata = default(string), System.IO.Stream file = default(System.IO.Stream)) + public ApiResponse UploadFile(long petId, string additionalMetadata = default(string), FileParameter file = default(FileParameter)) { Org.OpenAPITools.Client.ApiResponse localVarResponse = UploadFileWithHttpInfo(petId, additionalMetadata, file); return localVarResponse.Data; @@ -1704,7 +1704,7 @@ public ApiResponse UploadFile(long petId, string additionalMetadata = default(st /// Additional data to pass to server (optional) /// file to upload (optional) /// ApiResponse of ApiResponse - public Org.OpenAPITools.Client.ApiResponse UploadFileWithHttpInfo(long petId, string additionalMetadata = default(string), System.IO.Stream file = default(System.IO.Stream)) + public Org.OpenAPITools.Client.ApiResponse UploadFileWithHttpInfo(long petId, string additionalMetadata = default(string), FileParameter file = default(FileParameter)) { Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); @@ -1761,7 +1761,7 @@ public Org.OpenAPITools.Client.ApiResponse UploadFileWithHttpInfo(l /// file to upload (optional) /// Cancellation Token to cancel the request. /// Task of ApiResponse - public async System.Threading.Tasks.Task UploadFileAsync(long petId, string additionalMetadata = default(string), System.IO.Stream file = default(System.IO.Stream), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + public async System.Threading.Tasks.Task UploadFileAsync(long petId, string additionalMetadata = default(string), FileParameter file = default(FileParameter), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { Org.OpenAPITools.Client.ApiResponse localVarResponse = await UploadFileWithHttpInfoAsync(petId, additionalMetadata, file, cancellationToken).ConfigureAwait(false); return localVarResponse.Data; @@ -1776,7 +1776,7 @@ public async System.Threading.Tasks.Task UploadFileAsync(long petId /// file to upload (optional) /// Cancellation Token to cancel the request. /// Task of ApiResponse (ApiResponse) - public async System.Threading.Tasks.Task> UploadFileWithHttpInfoAsync(long petId, string additionalMetadata = default(string), System.IO.Stream file = default(System.IO.Stream), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + public async System.Threading.Tasks.Task> UploadFileWithHttpInfoAsync(long petId, string additionalMetadata = default(string), FileParameter file = default(FileParameter), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { Org.OpenAPITools.Client.RequestOptions localVarRequestOptions = new Org.OpenAPITools.Client.RequestOptions(); @@ -1835,7 +1835,7 @@ public async System.Threading.Tasks.Taskfile to upload /// Additional data to pass to server (optional) /// ApiResponse - public ApiResponse UploadFileWithRequiredFile(long petId, System.IO.Stream requiredFile, string additionalMetadata = default(string)) + public ApiResponse UploadFileWithRequiredFile(long petId, FileParameter requiredFile, string additionalMetadata = default(string)) { Org.OpenAPITools.Client.ApiResponse localVarResponse = UploadFileWithRequiredFileWithHttpInfo(petId, requiredFile, additionalMetadata); return localVarResponse.Data; @@ -1849,7 +1849,7 @@ public ApiResponse UploadFileWithRequiredFile(long petId, System.IO.Stream requi /// file to upload /// Additional data to pass to server (optional) /// ApiResponse of ApiResponse - public Org.OpenAPITools.Client.ApiResponse UploadFileWithRequiredFileWithHttpInfo(long petId, System.IO.Stream requiredFile, string additionalMetadata = default(string)) + public Org.OpenAPITools.Client.ApiResponse UploadFileWithRequiredFileWithHttpInfo(long petId, FileParameter requiredFile, string additionalMetadata = default(string)) { // verify the required parameter 'requiredFile' is set if (requiredFile == null) @@ -1907,7 +1907,7 @@ public Org.OpenAPITools.Client.ApiResponse UploadFileWithRequiredFi /// Additional data to pass to server (optional) /// Cancellation Token to cancel the request. /// Task of ApiResponse - public async System.Threading.Tasks.Task UploadFileWithRequiredFileAsync(long petId, System.IO.Stream requiredFile, string additionalMetadata = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + public async System.Threading.Tasks.Task UploadFileWithRequiredFileAsync(long petId, FileParameter requiredFile, string additionalMetadata = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { Org.OpenAPITools.Client.ApiResponse localVarResponse = await UploadFileWithRequiredFileWithHttpInfoAsync(petId, requiredFile, additionalMetadata, cancellationToken).ConfigureAwait(false); return localVarResponse.Data; @@ -1922,7 +1922,7 @@ public async System.Threading.Tasks.Task UploadFileWithRequiredFile /// Additional data to pass to server (optional) /// Cancellation Token to cancel the request. /// Task of ApiResponse (ApiResponse) - public async System.Threading.Tasks.Task> UploadFileWithRequiredFileWithHttpInfoAsync(long petId, System.IO.Stream requiredFile, string additionalMetadata = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + public async System.Threading.Tasks.Task> UploadFileWithRequiredFileWithHttpInfoAsync(long petId, FileParameter requiredFile, string additionalMetadata = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { // verify the required parameter 'requiredFile' is set if (requiredFile == null) diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs index 526a43111178..fa9fe409ea0d 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs @@ -277,12 +277,10 @@ HttpContent PrepareMultipartFormDataContent(RequestOptions options) { foreach (var fileParam in options.FileParameters) { - var fileStream = fileParam.Value as FileStream; - var fileStreamName = fileStream != null ? System.IO.Path.GetFileName(fileStream.Name) : null; - var content = new StreamContent(fileParam.Value); + var content = new StreamContent(fileParam.Value.Content); content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); multipartContent.Add(content, fileParam.Key, - fileStreamName ?? "no_file_name_provided"); + fileParam.Value.Name); } } return multipartContent; @@ -368,11 +366,11 @@ HttpContent PrepareMultipartFormDataContent(RequestOptions options) { if (options.Data != null) { - if (options.Data is Stream s) + if (options.Data is FileParameter fp) { contentType = contentType ?? "application/octet-stream"; - var streamContent = new StreamContent(s); + var streamContent = new StreamContent(fp.Content); streamContent.Headers.ContentType = new MediaTypeHeaderValue(contentType); request.Content = streamContent; } diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/FileParameter.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/FileParameter.cs new file mode 100644 index 000000000000..4a83ada8588f --- /dev/null +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/FileParameter.cs @@ -0,0 +1,62 @@ +/* + * OpenAPI Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * The version of the OpenAPI document: 1.0.0 + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System.IO; + +namespace Org.OpenAPITools.Client +{ + + /// + /// Represents a File passed to the API as a Parameter, allows using different backends for files + /// + public class FileParameter + { + /// + /// The filename + /// + public string Name { get; set; } = "no_name_provided"; + + /// + /// The content of the file + /// + public Stream Content { get; set; } + + /// + /// Construct a FileParameter just from the contents, will extract the filename from a filestream + /// + /// The file content + public FileParameter(Stream content) + { + if (content is FileStream fs) + { + Name = fs.Name; + } + Content = content; + } + + /// + /// Construct a FileParameter from name and content + /// + /// The filename + /// The file content + public FileParameter(string filename, Stream content) + { + Name = filename; + Content = content; + } + + /// + /// Implicit conversion of stream to file parameter. Useful for backwards compatibility. + /// + /// Stream to convert + /// FileParameter + public static implicit operator FileParameter(Stream s) => new FileParameter(s); + } +} \ No newline at end of file diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/RequestOptions.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/RequestOptions.cs index d8da585db9c0..9c0a9a9f968f 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/RequestOptions.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/RequestOptions.cs @@ -46,7 +46,7 @@ public class RequestOptions /// /// File parameters to be sent along with the request. /// - public Dictionary FileParameters { get; set; } + public Dictionary FileParameters { get; set; } /// /// Cookies to be sent along with the request. @@ -67,7 +67,7 @@ public RequestOptions() QueryParameters = new Multimap(); HeaderParameters = new Multimap(); FormParameters = new Dictionary(); - FileParameters = new Dictionary(); + FileParameters = new Dictionary(); Cookies = new List(); } } diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/AdditionalPropertiesClass.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/AdditionalPropertiesClass.cs index 5f212ec734f2..5c88c5a5ce9b 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/AdditionalPropertiesClass.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/AdditionalPropertiesClass.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Animal.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Animal.cs index 95c79122ad70..c39799127da3 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Animal.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Animal.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ApiResponse.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ApiResponse.cs index c9a0a78efa72..5a990e9f881f 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ApiResponse.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ApiResponse.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Apple.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Apple.cs index b414d3021a66..d52db06ca2e9 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Apple.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Apple.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/AppleReq.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/AppleReq.cs index a12033584928..3354d6a5932c 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/AppleReq.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/AppleReq.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayOfArrayOfNumberOnly.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayOfArrayOfNumberOnly.cs index bf2c8663ff64..52f424010d5c 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayOfArrayOfNumberOnly.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayOfArrayOfNumberOnly.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayOfNumberOnly.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayOfNumberOnly.cs index 09a9bbb88500..da6a1f502007 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayOfNumberOnly.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayOfNumberOnly.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayTest.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayTest.cs index 4406ffb33ea8..3b9b986b9aeb 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayTest.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ArrayTest.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Banana.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Banana.cs index a7513bb453af..630ae7ecf0d3 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Banana.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Banana.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/BananaReq.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/BananaReq.cs index 4a52e918a46e..0a22d500b132 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/BananaReq.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/BananaReq.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/BasquePig.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/BasquePig.cs index 5c6f9a0e83db..ade2a65ef240 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/BasquePig.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/BasquePig.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Capitalization.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Capitalization.cs index a4ab27bd8986..1ca2387e23cd 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Capitalization.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Capitalization.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Cat.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Cat.cs index 3fd19648bb9c..e62e22180fe4 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Cat.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Cat.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/CatAllOf.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/CatAllOf.cs index 8d61cf77b64c..c47a05d16c2b 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/CatAllOf.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/CatAllOf.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Category.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Category.cs index 581a23ef2a59..35dd26746958 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Category.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Category.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ChildCat.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ChildCat.cs index e883d3d20bb3..66e6c4ec0eea 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ChildCat.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ChildCat.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ChildCatAllOf.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ChildCatAllOf.cs index 36268a8093a2..5c28c73530cf 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ChildCatAllOf.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ChildCatAllOf.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ClassModel.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ClassModel.cs index bb2121cd5177..52cedf0979d3 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ClassModel.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ClassModel.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ComplexQuadrilateral.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ComplexQuadrilateral.cs index 78f3c6c03e3a..cccb856a6509 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ComplexQuadrilateral.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ComplexQuadrilateral.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/DanishPig.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/DanishPig.cs index dd2de1d038a5..68bf604b95f8 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/DanishPig.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/DanishPig.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Dog.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Dog.cs index 1ff9ab1624dc..5abe5bc73b3c 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Dog.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Dog.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/DogAllOf.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/DogAllOf.cs index cd2f1a0eeecc..b33fdf12c682 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/DogAllOf.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/DogAllOf.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Drawing.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Drawing.cs index 28e2ea556933..7240327f31e0 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Drawing.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Drawing.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumArrays.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumArrays.cs index be9b0c5e801f..ca4515c95da1 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumArrays.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumArrays.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumClass.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumClass.cs index 48b3d7d0e7e0..324fb5fba895 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumClass.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumClass.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumTest.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumTest.cs index c9c56e18386f..a5135a7f39a8 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumTest.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EnumTest.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EquilateralTriangle.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EquilateralTriangle.cs index ed443f68cf77..751b3b8a99a4 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EquilateralTriangle.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/EquilateralTriangle.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/File.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/File.cs index af4a38ae023d..81bd9c7fbef1 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/File.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/File.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FileSchemaTestClass.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FileSchemaTestClass.cs index cc6b3e34c5db..1195e6656500 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FileSchemaTestClass.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FileSchemaTestClass.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Foo.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Foo.cs index 836374681193..b1fa5a8fa438 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Foo.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Foo.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FormatTest.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FormatTest.cs index 9e7466bb502e..c2dd5cc4d71f 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FormatTest.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FormatTest.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; @@ -59,7 +60,7 @@ protected FormatTest() /// password (required). /// A string that is a 10 digit number. Can have leading zeros.. /// A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.. - public FormatTest(int integer = default(int), int int32 = default(int), long int64 = default(long), decimal number = default(decimal), float _float = default(float), double _double = default(double), decimal _decimal = default(decimal), string _string = default(string), byte[] _byte = default(byte[]), System.IO.Stream binary = default(System.IO.Stream), DateTime date = default(DateTime), DateTime dateTime = default(DateTime), Guid uuid = default(Guid), string password = default(string), string patternWithDigits = default(string), string patternWithDigitsAndDelimiter = default(string)) + public FormatTest(int integer = default(int), int int32 = default(int), long int64 = default(long), decimal number = default(decimal), float _float = default(float), double _double = default(double), decimal _decimal = default(decimal), string _string = default(string), byte[] _byte = default(byte[]), FileParameter binary = default(FileParameter), DateTime date = default(DateTime), DateTime dateTime = default(DateTime), Guid uuid = default(Guid), string password = default(string), string patternWithDigits = default(string), string patternWithDigitsAndDelimiter = default(string)) { this.Number = number; // to ensure "_byte" is required (not null) @@ -140,7 +141,7 @@ public FormatTest(int integer = default(int), int int32 = default(int), long int /// Gets or Sets Binary /// [DataMember(Name = "binary", EmitDefaultValue = false)] - public System.IO.Stream Binary { get; set; } + public FileParameter Binary { get; set; } /// /// Gets or Sets Date diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Fruit.cs index 132be5b4d3bd..40a654afced5 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Fruit.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; using System.Reflection; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FruitReq.cs index 380896933df8..170960035f4d 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/FruitReq.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; using System.Reflection; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/GmFruit.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/GmFruit.cs index c168aa41d4ce..4aef7618a378 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/GmFruit.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/GmFruit.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/GrandparentAnimal.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/GrandparentAnimal.cs index 9352d27022f2..129aae285549 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/GrandparentAnimal.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/GrandparentAnimal.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/HasOnlyReadOnly.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/HasOnlyReadOnly.cs index 3a2c3d26a92c..84c369eb4786 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/HasOnlyReadOnly.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/HasOnlyReadOnly.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/HealthCheckResult.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/HealthCheckResult.cs index 1cd90560cbed..e6b4399e926b 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/HealthCheckResult.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/HealthCheckResult.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/InlineResponseDefault.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/InlineResponseDefault.cs index 5f4b24acafa1..0352d11ac24d 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/InlineResponseDefault.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/InlineResponseDefault.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/IsoscelesTriangle.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/IsoscelesTriangle.cs index 46963173f71a..a7416acf77b9 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/IsoscelesTriangle.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/IsoscelesTriangle.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/List.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/List.cs index ecf4e8ff00ea..10cd9420a74d 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/List.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/List.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Mammal.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Mammal.cs index 2e847a10eb6c..55f278a25ac0 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Mammal.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Mammal.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; using System.Reflection; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/MapTest.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/MapTest.cs index b88cfef72c10..76f2c995a93e 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/MapTest.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/MapTest.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/MixedPropertiesAndAdditionalPropertiesClass.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/MixedPropertiesAndAdditionalPropertiesClass.cs index dc3d45a080a4..88d8e6493d9f 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/MixedPropertiesAndAdditionalPropertiesClass.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/MixedPropertiesAndAdditionalPropertiesClass.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Model200Response.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Model200Response.cs index b1e76d250816..50eb434c96d0 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Model200Response.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Model200Response.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ModelClient.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ModelClient.cs index 4ee431a9b2f2..744bda615644 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ModelClient.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ModelClient.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Name.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Name.cs index a6a01dd4ed3e..25cd5ddb6356 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Name.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Name.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NullableClass.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NullableClass.cs index 4ceaab61bc63..f3fdf07243cf 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NullableClass.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NullableClass.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NullableShape.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NullableShape.cs index 80339ebf79bb..b2be225d54cb 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NullableShape.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NullableShape.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; using System.Reflection; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NumberOnly.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NumberOnly.cs index e9b006094cf6..3932b5404eec 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NumberOnly.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/NumberOnly.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Order.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Order.cs index 4f327640915d..d7a06f4eef80 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Order.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Order.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterComposite.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterComposite.cs index 1e4e03993e05..c9d3dd0b595a 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterComposite.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterComposite.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnum.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnum.cs index 2aa496a2e074..f3ee68510aa5 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnum.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnum.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumDefaultValue.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumDefaultValue.cs index dd79c7010d6b..60fb98c58dc6 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumDefaultValue.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumDefaultValue.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumInteger.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumInteger.cs index 44dc91c700ad..8624155f7451 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumInteger.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumInteger.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumIntegerDefaultValue.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumIntegerDefaultValue.cs index b927507cf97a..5d6d21bf8008 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumIntegerDefaultValue.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/OuterEnumIntegerDefaultValue.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ParentPet.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ParentPet.cs index a205b59b6d09..c2c91753d7cb 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ParentPet.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ParentPet.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Pet.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Pet.cs index db3cdd72606d..88c2fb08970f 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Pet.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Pet.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Pig.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Pig.cs index d8605861e63a..b1c57219d9f0 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Pig.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Pig.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; using System.Reflection; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Quadrilateral.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Quadrilateral.cs index 17463ca09a4b..028b84f07527 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Quadrilateral.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Quadrilateral.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; using System.Reflection; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/QuadrilateralInterface.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/QuadrilateralInterface.cs index e7727cf856c9..555fb636825f 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/QuadrilateralInterface.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/QuadrilateralInterface.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ReadOnlyFirst.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ReadOnlyFirst.cs index 4ab8f7d5c6a8..99ad2a8307cb 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ReadOnlyFirst.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ReadOnlyFirst.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Return.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Return.cs index 75e7f1f25305..18802e2b7f15 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Return.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Return.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ScaleneTriangle.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ScaleneTriangle.cs index c539590907c7..527bcfab54c5 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ScaleneTriangle.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ScaleneTriangle.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Shape.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Shape.cs index e75e0e8b167f..7186154a9615 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Shape.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Shape.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; using System.Reflection; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ShapeInterface.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ShapeInterface.cs index 051100b4e6c1..6d2208e202fc 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ShapeInterface.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ShapeInterface.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ShapeOrNull.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ShapeOrNull.cs index 7471bafb3799..eb9191dbc4d2 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ShapeOrNull.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/ShapeOrNull.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; using System.Reflection; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/SimpleQuadrilateral.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/SimpleQuadrilateral.cs index 5280a0c308a7..33787f755a71 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/SimpleQuadrilateral.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/SimpleQuadrilateral.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/SpecialModelName.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/SpecialModelName.cs index 26861d98d34d..1023ae9a402d 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/SpecialModelName.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/SpecialModelName.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Tag.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Tag.cs index aba43e338beb..dce80a7cbc36 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Tag.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Tag.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Triangle.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Triangle.cs index cccaa79a8ff5..ba1fd6d00ec4 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Triangle.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Triangle.cs @@ -22,6 +22,7 @@ using Newtonsoft.Json.Linq; using JsonSubTypes; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; using System.Reflection; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/TriangleInterface.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/TriangleInterface.cs index 4b7274465ce0..66f49d7c2dea 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/TriangleInterface.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/TriangleInterface.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/User.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/User.cs index ea24f093e147..532f743af53f 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/User.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/User.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Whale.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Whale.cs index 80fbf9c368c2..2abe262ebbd4 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Whale.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Whale.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Zebra.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Zebra.cs index cfa92d1b708a..91dce88b9232 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Zebra.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Model/Zebra.cs @@ -21,6 +21,7 @@ using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System.ComponentModel.DataAnnotations; +using FileParameter = Org.OpenAPITools.Client.FileParameter; using OpenAPIDateConverter = Org.OpenAPITools.Client.OpenAPIDateConverter; using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils; From 696bcb3e856d5573902f2709b40113dd78ea7912 Mon Sep 17 00:00:00 2001 From: Blackclaws Date: Fri, 21 May 2021 08:50:42 +0200 Subject: [PATCH 137/186] [csharp][httpclient] Remove noncompliant post behaviour (#9427) * Remove behaviour that does not 1:1 represent spec * Update samples --- .../csharp-netcore/libraries/httpclient/ApiClient.mustache | 6 +----- .../src/Org.OpenAPITools/Client/ApiClient.cs | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache index 3703a8521d0b..fe83457311c0 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache @@ -313,11 +313,7 @@ namespace {{packageName}}.Client builder.AddPathParameters(options.PathParameters); - // In case of POST or PUT pass query parameters in request body - if (method != HttpMethod.Post && method != HttpMethod.Put) - { - builder.AddQueryParameters(options.QueryParameters); - } + builder.AddQueryParameters(options.QueryParameters); HttpRequestMessage request = new HttpRequestMessage(method, builder.GetFullUri()); diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs index fa9fe409ea0d..69d9bb714e32 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs @@ -312,11 +312,7 @@ HttpContent PrepareMultipartFormDataContent(RequestOptions options) builder.AddPathParameters(options.PathParameters); - // In case of POST or PUT pass query parameters in request body - if (method != HttpMethod.Post && method != HttpMethod.Put) - { - builder.AddQueryParameters(options.QueryParameters); - } + builder.AddQueryParameters(options.QueryParameters); HttpRequestMessage request = new HttpRequestMessage(method, builder.GetFullUri()); From 9eb9c30a927b0d03b867490e841350e852034b54 Mon Sep 17 00:00:00 2001 From: Rinish Sam <36656347+CaptainIRS@users.noreply.github.com> Date: Sun, 23 May 2021 08:57:07 +0530 Subject: [PATCH 138/186] [dart][dart-dio] Fix gitignore comment style (#9554) * Fix gitignore comment style in templates * Update samples --- .../src/main/resources/dart-dio/gitignore.mustache | 14 +++++++++----- .../dart/libraries/dio/gitignore.mustache | 14 +++++++++----- .../petstore_client_lib_fake/.gitignore | 14 +++++++++----- .../dart-dio/petstore_client_lib/.gitignore | 14 +++++++++----- .../dart-dio/petstore_client_lib_fake/.gitignore | 14 +++++++++----- 5 files changed, 45 insertions(+), 25 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/dart-dio/gitignore.mustache b/modules/openapi-generator/src/main/resources/dart-dio/gitignore.mustache index 8092a49d5152..6d2ac22c0b41 100644 --- a/modules/openapi-generator/src/main/resources/dart-dio/gitignore.mustache +++ b/modules/openapi-generator/src/main/resources/dart-dio/gitignore.mustache @@ -30,8 +30,12 @@ pubspec.lock # Don’t commit files and directories created by other development environments. # For example, if your development environment creates any of the following files, # consider putting them in a global ignore file: -*.iml // IntelliJ -*.ipr // IntelliJ -*.iws // IntelliJ -.idea/ // IntelliJ -.DS_Store // Mac + +# IntelliJ +*.iml +*.ipr +*.iws +.idea/ + +# Mac +.DS_Store diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/gitignore.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/gitignore.mustache index 8092a49d5152..6d2ac22c0b41 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/gitignore.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/gitignore.mustache @@ -30,8 +30,12 @@ pubspec.lock # Don’t commit files and directories created by other development environments. # For example, if your development environment creates any of the following files, # consider putting them in a global ignore file: -*.iml // IntelliJ -*.ipr // IntelliJ -*.iws // IntelliJ -.idea/ // IntelliJ -.DS_Store // Mac + +# IntelliJ +*.iml +*.ipr +*.iws +.idea/ + +# Mac +.DS_Store diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.gitignore b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.gitignore index 8092a49d5152..6d2ac22c0b41 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.gitignore +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/.gitignore @@ -30,8 +30,12 @@ pubspec.lock # Don’t commit files and directories created by other development environments. # For example, if your development environment creates any of the following files, # consider putting them in a global ignore file: -*.iml // IntelliJ -*.ipr // IntelliJ -*.iws // IntelliJ -.idea/ // IntelliJ -.DS_Store // Mac + +# IntelliJ +*.iml +*.ipr +*.iws +.idea/ + +# Mac +.DS_Store diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.gitignore b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.gitignore index 8092a49d5152..6d2ac22c0b41 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.gitignore +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/.gitignore @@ -30,8 +30,12 @@ pubspec.lock # Don’t commit files and directories created by other development environments. # For example, if your development environment creates any of the following files, # consider putting them in a global ignore file: -*.iml // IntelliJ -*.ipr // IntelliJ -*.iws // IntelliJ -.idea/ // IntelliJ -.DS_Store // Mac + +# IntelliJ +*.iml +*.ipr +*.iws +.idea/ + +# Mac +.DS_Store diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.gitignore b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.gitignore index 8092a49d5152..6d2ac22c0b41 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.gitignore +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/.gitignore @@ -30,8 +30,12 @@ pubspec.lock # Don’t commit files and directories created by other development environments. # For example, if your development environment creates any of the following files, # consider putting them in a global ignore file: -*.iml // IntelliJ -*.ipr // IntelliJ -*.iws // IntelliJ -.idea/ // IntelliJ -.DS_Store // Mac + +# IntelliJ +*.iml +*.ipr +*.iws +.idea/ + +# Mac +.DS_Store From b1cba96627e07d4b1bbe49f6926a464c90efb4aa Mon Sep 17 00:00:00 2001 From: agilob Date: Sun, 23 May 2021 14:59:51 +0000 Subject: [PATCH 139/186] Revert "[Java][Spring] Fix for #8659 - Different in-parameter types generated for api and delegate for files (#9331)" (#9555) This reverts commit b9a1c8f016711307b9c718dbbdf60a137372c7af. --- .../codegen/languages/SpringCodegen.java | 4 ++-- .../Java/libraries/resttemplate/api.mustache | 4 ++-- .../Java/libraries/resttemplate/api_test.mustache | 2 +- .../resources/JavaSpring/homeController.mustache | 2 +- .../codegen/java/JavaClientCodegenTest.java | 12 ++++++------ .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../openapitools/configuration/HomeController.java | 2 +- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- .../org/openapitools/virtualan/model/FormatTest.java | 8 ++++---- .../main/java/org/openapitools/model/FormatTest.java | 8 ++++---- 24 files changed, 85 insertions(+), 85 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java index 4c4f0e19496c..058acbed956a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java @@ -336,8 +336,8 @@ public void processOpts() { } additionalProperties.put(UNHANDLED_EXCEPTION_HANDLING, this.isUnhandledException()); - typeMapping.put("file", "org.springframework.web.multipart.MultipartFile"); - importMapping.put("org.springframework.web.multipart.MultipartFile", "org.springframework.web.multipart.MultipartFile"); + typeMapping.put("file", "org.springframework.core.io.Resource"); + importMapping.put("org.springframework.core.io.Resource", "org.springframework.core.io.Resource"); if (useOptional) { writePropertyBack(USE_OPTIONAL, useOptional); diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache index dce5d6472677..006e6cf8f931 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache @@ -71,7 +71,7 @@ public class {{classname}} { {{#isDeprecated}} @Deprecated {{/isDeprecated}} - public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}}{{operationId}}({{#allParams}}{{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.web.multipart.MultipartFile{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws RestClientException { + public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}}{{operationId}}({{#allParams}}{{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.core.io.Resource{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws RestClientException { {{#returnType}} return {{operationId}}WithHttpInfo({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}).getBody(); {{/returnType}} @@ -99,7 +99,7 @@ public class {{classname}} { {{#isDeprecated}} @Deprecated {{/isDeprecated}} - public ResponseEntity<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {{operationId}}WithHttpInfo({{#allParams}}{{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.web.multipart.MultipartFile{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws RestClientException { + public ResponseEntity<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> {{operationId}}WithHttpInfo({{#allParams}}{{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.core.io.Resource{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}) throws RestClientException { Object postBody = {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}; {{#allParams}}{{#required}} // verify the required parameter '{{paramName}}' is set diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api_test.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api_test.mustache index 56d89a842d44..119194543c37 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api_test.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api_test.mustache @@ -34,7 +34,7 @@ public class {{classname}}Test { @Test public void {{operationId}}Test() { {{#allParams}} - {{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.web.multipart.MultipartFile{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}} = null; + {{#isFile}}{{#useAbstractionForFiles}}{{#collectionFormat}}java.util.Collection{{/collectionFormat}}{{^collectionFormat}}org.springframework.core.io.Resource{{/collectionFormat}}{{/useAbstractionForFiles}}{{^useAbstractionForFiles}}{{{dataType}}}{{/useAbstractionForFiles}}{{/isFile}}{{^isFile}}{{{dataType}}}{{/isFile}} {{paramName}} = null; {{/allParams}} {{#returnType}}{{{returnType}}} response = {{/returnType}}api.{{operationId}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}); diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/homeController.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/homeController.mustache index 2b244c540bc4..f909a15b37df 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/homeController.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/homeController.mustache @@ -4,7 +4,7 @@ package {{configPackage}}; import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.core.io.Resource; {{/useSpringfox}} import org.springframework.stereotype.Controller; {{^useSpringfox}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index 3a7636d631c5..3ead6f31f9e0 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -1028,18 +1028,18 @@ public void testRestTemplateWithUseAbstractionForFiles() throws IOException { Path defaultApi = Paths.get(output + "/src/main/java/xyz/abcdef/api/MultipartApi.java"); TestUtils.assertFileContains(defaultApi, //multiple files - "multipartArray(java.util.Collection files)", - "multipartArrayWithHttpInfo(java.util.Collection files)", + "multipartArray(java.util.Collection files)", + "multipartArrayWithHttpInfo(java.util.Collection files)", "formParams.addAll(\"files\", files.stream().collect(Collectors.toList()));", //mixed - "multipartMixed(org.springframework.web.multipart.MultipartFile file, MultipartMixedMarker marker)", - "multipartMixedWithHttpInfo(org.springframework.web.multipart.MultipartFile file, MultipartMixedMarker marker)", + "multipartMixed(org.springframework.core.io.Resource file, MultipartMixedMarker marker)", + "multipartMixedWithHttpInfo(org.springframework.core.io.Resource file, MultipartMixedMarker marker)", "formParams.add(\"file\", file);", //single file - "multipartSingle(org.springframework.web.multipart.MultipartFile file)", - "multipartSingleWithHttpInfo(org.springframework.web.multipart.MultipartFile file)", + "multipartSingle(org.springframework.core.io.Resource file)", + "multipartSingleWithHttpInfo(org.springframework.core.io.Resource file)", "formParams.add(\"file\", file);" ); } diff --git a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/spring-mvc-j8-async/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/FormatTest.java index 9efca6d654bc..04e164b1c521 100644 --- a/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/spring-mvc-j8-localdatetime/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/model/FormatTest.java index 06978db9b9ea..0962957d79fc 100644 --- a/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/spring-mvc-no-nullable/src/main/java/org/openapitools/model/FormatTest.java @@ -43,7 +43,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -235,7 +235,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -248,11 +248,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/spring-mvc-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/FormatTest.java index 2a1722c3190b..80ea59cef112 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/spring-mvc/src/main/java/org/openapitools/model/FormatTest.java @@ -46,7 +46,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -238,7 +238,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -251,11 +251,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java index 99f755655a9d..60247deff4c6 100644 --- a/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-beanvalidation-no-nullable/src/main/java/org/openapitools/model/FormatTest.java @@ -43,7 +43,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -235,7 +235,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -248,11 +248,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-beanvalidation/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-delegate-j8/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-delegate/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-implicitHeaders/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java index 5e4aeb0ea868..b1e5bfc21ee5 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/configuration/HomeController.java @@ -3,7 +3,7 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; -import org.springframework.web.multipart.MultipartFile; +import org.springframework.core.io.Resource; import org.springframework.stereotype.Controller; import org.springframework.util.StreamUtils; import org.springframework.web.bind.annotation.GetMapping; diff --git a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/model/FormatTest.java index 354373c3d6ce..dedb11fe758b 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern-without-j8/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-spring-pageable-delegatePattern/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/model/FormatTest.java index 354373c3d6ce..dedb11fe758b 100644 --- a/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-spring-pageable-without-j8/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-spring-pageable/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot-useoptional/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/model/FormatTest.java b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/model/FormatTest.java index 07241a089c8a..d58e787c3684 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/model/FormatTest.java +++ b/samples/server/petstore/springboot-virtualan/src/main/java/org/openapitools/virtualan/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } diff --git a/samples/server/petstore/springboot/src/main/java/org/openapitools/model/FormatTest.java b/samples/server/petstore/springboot/src/main/java/org/openapitools/model/FormatTest.java index 72f64c2b3704..e894f561fc6e 100644 --- a/samples/server/petstore/springboot/src/main/java/org/openapitools/model/FormatTest.java +++ b/samples/server/petstore/springboot/src/main/java/org/openapitools/model/FormatTest.java @@ -44,7 +44,7 @@ public class FormatTest { private byte[] _byte; @JsonProperty("binary") - private org.springframework.web.multipart.MultipartFile binary; + private org.springframework.core.io.Resource binary; @JsonProperty("date") @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE) @@ -236,7 +236,7 @@ public void setByte(byte[] _byte) { this._byte = _byte; } - public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) { + public FormatTest binary(org.springframework.core.io.Resource binary) { this.binary = binary; return this; } @@ -249,11 +249,11 @@ public FormatTest binary(org.springframework.web.multipart.MultipartFile binary) @Valid - public org.springframework.web.multipart.MultipartFile getBinary() { + public org.springframework.core.io.Resource getBinary() { return binary; } - public void setBinary(org.springframework.web.multipart.MultipartFile binary) { + public void setBinary(org.springframework.core.io.Resource binary) { this.binary = binary; } From 7c152daa482be272ab949ae48686288b0cc5a4a0 Mon Sep 17 00:00:00 2001 From: Julian G <23147553+JulianGmp@users.noreply.github.com> Date: Sun, 23 May 2021 17:02:22 +0200 Subject: [PATCH 140/186] fix missing default values for string types (#9541) --- .../codegen/languages/CppPistacheServerCodegen.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java index 3064af52c20d..cb21ea5a6de7 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java @@ -401,7 +401,11 @@ public String toDefaultValue(Schema p) { } else if (!StringUtils.isEmpty(p.get$ref())) { // model return toModelName(ModelUtils.getSimpleRef(p.get$ref())) + "()"; } else if (ModelUtils.isStringSchema(p)) { - return "\"\""; + if (p.getDefault() == null) { + return "\"\""; + } else { + return "\"" + p.getDefault().toString() + "\""; + } } return ""; From 1e92469b9f9f56acc8c2d472a4ed27475e439517 Mon Sep 17 00:00:00 2001 From: Yuriy Belenko Date: Mon, 24 May 2021 05:43:18 +0300 Subject: [PATCH 141/186] Decouple Slim4 codegen from deprecated Slim3 (#9208) It was a mistake to extend Slim4 from Slim3 codegen. When I need to fix something in Slim4 I have to overwrite code from Slim3 somehow and it's not always possible. It's even more important that Slim3 codegen shouldn't be touched as soon as it's deprecated long time ago. --- .../languages/PhpSlim4ServerCodegen.java | 208 +++++++++++++++++- 1 file changed, 207 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java index d45bf289e7f2..9105a4fe8de4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PhpSlim4ServerCodegen.java @@ -16,6 +16,14 @@ package org.openapitools.codegen.languages; +import io.swagger.v3.oas.models.Operation; +import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; +import org.openapitools.codegen.CodegenType; +import org.openapitools.codegen.CodegenOperation; +import org.openapitools.codegen.CodegenSecurity; import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CodegenConstants; import org.openapitools.codegen.SupportingFile; @@ -26,12 +34,22 @@ import org.slf4j.LoggerFactory; import java.io.File; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.*; -public class PhpSlim4ServerCodegen extends PhpSlimServerCodegen { +import static org.openapitools.codegen.utils.StringUtils.camelize; + +public class PhpSlim4ServerCodegen extends AbstractPhpCodegen { private final Logger LOGGER = LoggerFactory.getLogger(PhpSlim4ServerCodegen.class); + public static final String USER_CLASSNAME_KEY = "userClassname"; public static final String PSR7_IMPLEMENTATION = "psr7Implementation"; + protected String groupId = "org.openapitools"; + protected String artifactId = "openapi-server"; + protected String authDirName = "Auth"; + protected String authPackage = ""; protected String psr7Implementation = "slim-psr7"; protected String interfacesDirName = "Interfaces"; protected String interfacesPackage = ""; @@ -40,6 +58,18 @@ public PhpSlim4ServerCodegen() { super(); modifyFeatureSet(features -> features + .includeDocumentationFeatures(DocumentationFeature.Readme) + .wireFormatFeatures(EnumSet.of(WireFormatFeature.JSON, WireFormatFeature.XML)) + .securityFeatures(EnumSet.noneOf(SecurityFeature.class)) + .excludeGlobalFeatures( + GlobalFeature.XMLStructureDefinitions, + GlobalFeature.Callbacks, + GlobalFeature.LinkObjects, + GlobalFeature.ParameterStyling + ) + .excludeSchemaSupportFeatures( + SchemaSupportFeature.Polymorphism + ) .includeClientModificationFeatures(ClientModificationFeature.MockServer) ); @@ -47,10 +77,29 @@ public PhpSlim4ServerCodegen() { .stability(Stability.STABLE) .build(); + // clear import mapping (from default generator) as slim does not use it + // at the moment + importMapping.clear(); + + variableNamingConvention = "camelCase"; + artifactVersion = "1.0.0"; + setInvokerPackage("OpenAPIServer"); + apiPackage = invokerPackage + "\\" + apiDirName; + modelPackage = invokerPackage + "\\" + modelDirName; + authPackage = invokerPackage + "\\" + authDirName; interfacesPackage = invokerPackage + "\\" + interfacesDirName; outputFolder = "generated-code" + File.separator + "slim4"; + + modelTestTemplateFiles.put("model_test.mustache", ".php"); + // no doc files + modelDocTemplateFiles.clear(); + apiDocTemplateFiles.clear(); + embeddedTemplateDir = templateDir = "php-slim4-server"; + additionalProperties.put(CodegenConstants.GROUP_ID, groupId); + additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId); + // override cliOptions from AbstractPhpCodegen updateOption(AbstractPhpCodegen.VARIABLE_NAMING_CONVENTION, "camelCase"); @@ -68,6 +117,11 @@ public PhpSlim4ServerCodegen() { cliOptions.add(psr7Option); } + @Override + public CodegenType getTag() { + return CodegenType.SERVER; + } + @Override public String getName() { return "php-slim4"; @@ -78,15 +132,39 @@ public String getHelp() { return "Generates a PHP Slim 4 Framework server library(with Mock server)."; } + @Override + public String apiFileFolder() { + if (apiPackage.startsWith(invokerPackage + "\\")) { + // need to strip out invokerPackage from path + return (outputFolder + File.separator + toSrcPath(StringUtils.removeStart(apiPackage, invokerPackage + "\\"), srcBasePath)); + } + return (outputFolder + File.separator + toSrcPath(apiPackage, srcBasePath)); + } + + @Override + public String modelFileFolder() { + if (modelPackage.startsWith(invokerPackage + "\\")) { + // need to strip out invokerPackage from path + return (outputFolder + File.separator + toSrcPath(StringUtils.removeStart(modelPackage, invokerPackage + "\\"), srcBasePath)); + } + return (outputFolder + File.separator + toSrcPath(modelPackage, srcBasePath)); + } + @Override public void processOpts() { super.processOpts(); if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) { + // Update the invokerPackage for the default authPackage + authPackage = invokerPackage + "\\" + authDirName; // Update interfacesPackage interfacesPackage = invokerPackage + "\\" + interfacesDirName; } + // make auth src path available in mustache template + additionalProperties.put("authPackage", authPackage); + additionalProperties.put("authSrcPath", "./" + toSrcPath(authPackage, srcBasePath)); + // same for interfaces package additionalProperties.put("interfacesPackage", interfacesPackage); additionalProperties.put("interfacesSrcPath", "./" + toSrcPath(interfacesPackage, srcBasePath)); @@ -121,6 +199,14 @@ public void processOpts() { additionalProperties.put("isSlimPsr7", Boolean.TRUE); } + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + supportingFiles.add(new SupportingFile("composer.mustache", "", "composer.json")); + supportingFiles.add(new SupportingFile("index.mustache", "", "index.php")); + supportingFiles.add(new SupportingFile(".htaccess", "", ".htaccess")); + supportingFiles.add(new SupportingFile("SlimRouter.mustache", toSrcPath(invokerPackage, srcBasePath), "SlimRouter.php")); + supportingFiles.add(new SupportingFile("phpunit.xml.mustache", "", "phpunit.xml.dist")); + supportingFiles.add(new SupportingFile("phpcs.xml.mustache", "", "phpcs.xml.dist")); + // Slim 4 doesn't parse JSON body anymore we need to add suggested middleware // ref: https://www.slimframework.com/docs/v4/objects/request.html#the-request-body supportingFiles.add(new SupportingFile("htaccess_deny_all", "config", ".htaccess")); @@ -131,6 +217,126 @@ public void processOpts() { supportingFiles.add(new SupportingFile("base_model_test.mustache", toSrcPath(invokerPackage, testBasePath), "BaseModelTest.php")); } + @Override + public Map postProcessOperationsWithModels(Map objs, List allModels) { + Map operations = (Map) objs.get("operations"); + List operationList = (List) operations.get("operation"); + addUserClassnameToOperations(operations); + escapeMediaType(operationList); + return objs; + } + + @Override + public Map postProcessSupportingFileData(Map objs) { + Map apiInfo = (Map) objs.get("apiInfo"); + List> apiList = (List>) apiInfo.get("apis"); + for (HashMap api : apiList) { + HashMap operations = (HashMap) api.get("operations"); + List operationList = (List) operations.get("operation"); + + // Sort operations to avoid static routes shadowing + // ref: https://github.com/nikic/FastRoute/blob/master/src/DataGenerator/RegexBasedAbstract.php#L92-L101 + Collections.sort(operationList, new Comparator() { + @Override + public int compare(CodegenOperation one, CodegenOperation another) { + if (one.getHasPathParams() && !another.getHasPathParams()) return 1; + if (!one.getHasPathParams() && another.getHasPathParams()) return -1; + return 0; + } + }); + } + return objs; + } + + @Override + public List fromSecurity(Map securitySchemeMap) { + List codegenSecurities = super.fromSecurity(securitySchemeMap); + if (Boolean.FALSE.equals(codegenSecurities.isEmpty())) { + supportingFiles.add(new SupportingFile("abstract_authenticator.mustache", toSrcPath(authPackage, srcBasePath), toAbstractName("Authenticator") + ".php")); + } + return codegenSecurities; + } + + @Override + public String toApiName(String name) { + if (name.length() == 0) { + return toAbstractName("DefaultApi"); + } + return toAbstractName(camelize(name) + "Api"); + } + + @Override + public String toApiTestFilename(String name) { + if (name.length() == 0) { + return "DefaultApiTest"; + } + return camelize(name) + "ApiTest"; + } + + /** + * Strips out abstract prefix and suffix from classname and puts it in "userClassname" property of operations object. + * + * @param operations codegen object with operations + */ + private void addUserClassnameToOperations(Map operations) { + String classname = (String) operations.get("classname"); + classname = classname.replaceAll("^" + abstractNamePrefix, ""); + classname = classname.replaceAll(abstractNameSuffix + "$", ""); + operations.put(USER_CLASSNAME_KEY, classname); + } + + @Override + public String encodePath(String input) { + if (input == null) { + return input; + } + + // from DefaultCodegen.java + // remove \t, \n, \r + // replace \ with \\ + // replace " with \" + // outter unescape to retain the original multi-byte characters + // finally escalate characters avoiding code injection + input = super.escapeUnsafeCharacters( + StringEscapeUtils.unescapeJava( + StringEscapeUtils.escapeJava(input) + .replace("\\/", "/")) + .replaceAll("[\\t\\n\\r]", " ") + .replace("\\", "\\\\")); + // .replace("\"", "\\\"")); + + // from AbstractPhpCodegen.java + // Trim the string to avoid leading and trailing spaces. + input = input.trim(); + try { + + input = URLEncoder.encode(input, "UTF-8") + .replaceAll("\\+", "%20") + .replaceAll("\\%2F", "/") + .replaceAll("\\%7B", "{") // keep { part of complex placeholders + .replaceAll("\\%7D", "}") // } part + .replaceAll("\\%5B", "[") // [ part + .replaceAll("\\%5D", "]") // ] part + .replaceAll("\\%3A", ":") // : part + .replaceAll("\\%2B", "+") // + part + .replaceAll("\\%5C\\%5Cd", "\\\\d"); // \d part + } catch (UnsupportedEncodingException e) { + // continue + LOGGER.error(e.getMessage(), e); + } + return input; + } + + @Override + public CodegenOperation fromOperation(String path, + String httpMethod, + Operation operation, + List servers) { + CodegenOperation op = super.fromOperation(path, httpMethod, operation, servers); + op.path = encodePath(path); + return op; + } + /** * Set PSR-7 implementation package. * Ref: https://www.slimframework.com/docs/v4/concepts/value-objects.html From 48924eb1a08e6ce1726ce15ef03ae5bcf96e5d0c Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Mon, 24 May 2021 04:53:39 +0200 Subject: [PATCH 142/186] [dart] Improve content-type handling (#9517) * [dart] Improve content-type handling * fixes #9334 * superseeds #9454 * use `prioritizedContentTypes` in the same way `JavaClientCodegen` does * move `application/json` to the front if it exists * don't do anything if it is multi-part or url-encoded as for this the first content-type already needs to match * log warning if an unsupported content-type is first after prioritizing * remove some unused code blocks from dio generators * Only use first prioritized content-type in dio generators * don't default to any content-type in dio-next, dio defaults itself to JSON --- .../languages/AbstractDartCodegen.java | 66 ++++++++++++++- .../languages/DartDioClientCodegen.java | 24 +----- .../languages/DartDioNextClientCodegen.java | 24 +----- .../src/main/resources/dart-dio/api.mustache | 5 +- .../resources/dart/libraries/dio/api.mustache | 7 +- .../src/main/resources/dart2/api.mustache | 2 +- .../petstore_client_lib_fake/README.md | 80 +++++++++---------- .../doc/AnotherFakeApi.md | 2 +- .../doc/DefaultApi.md | 2 +- .../petstore_client_lib_fake/doc/FakeApi.md | 32 ++++---- .../doc/FakeClassnameTags123Api.md | 2 +- .../petstore_client_lib_fake/doc/PetApi.md | 18 ++--- .../petstore_client_lib_fake/doc/StoreApi.md | 8 +- .../petstore_client_lib_fake/doc/UserApi.md | 16 ++-- .../lib/src/api/another_fake_api.dart | 4 +- .../lib/src/api/default_api.dart | 3 - .../lib/src/api/fake_api.dart | 62 +++----------- .../src/api/fake_classname_tags123_api.dart | 4 +- .../lib/src/api/pet_api.dart | 34 ++------ .../lib/src/api/store_api.dart | 13 +-- .../lib/src/api/user_api.dart | 28 +------ .../dart-dio/petstore_client_lib/README.md | 40 +++++----- .../petstore_client_lib/doc/PetApi.md | 16 ++-- .../petstore_client_lib/doc/StoreApi.md | 8 +- .../petstore_client_lib/doc/UserApi.md | 16 ++-- .../petstore_client_lib/lib/api/pet_api.dart | 34 ++------ .../lib/api/store_api.dart | 16 +--- .../petstore_client_lib/lib/api/user_api.dart | 32 ++------ .../petstore_client_lib_fake/README.md | 80 +++++++++---------- .../doc/AnotherFakeApi.md | 2 +- .../doc/DefaultApi.md | 2 +- .../petstore_client_lib_fake/doc/FakeApi.md | 32 ++++---- .../doc/FakeClassnameTags123Api.md | 2 +- .../petstore_client_lib_fake/doc/PetApi.md | 18 ++--- .../petstore_client_lib_fake/doc/StoreApi.md | 8 +- .../petstore_client_lib_fake/doc/UserApi.md | 16 ++-- .../lib/api/another_fake_api.dart | 4 +- .../lib/api/default_api.dart | 4 +- .../lib/api/fake_api.dart | 65 ++++----------- .../lib/api/fake_classname_tags123_api.dart | 4 +- .../lib/api/pet_api.dart | 38 +++------ .../lib/api/store_api.dart | 16 +--- .../lib/api/user_api.dart | 32 ++------ 43 files changed, 358 insertions(+), 563 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 6cd5d2926e83..c5d8f65516d2 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,7 +1,6 @@ package org.openapitools.codegen.languages; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.google.common.collect.Sets; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.media.ArraySchema; @@ -29,6 +28,9 @@ public abstract class AbstractDartCodegen extends DefaultCodegen { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractDartCodegen.class); + protected static final List DEFAULT_SUPPORTED_CONTENT_TYPES = Arrays.asList( + "application/json", "application/x-www-form-urlencoded", "multipart/form-data"); + public static final String PUB_LIBRARY = "pubLibrary"; public static final String PUB_NAME = "pubName"; public static final String PUB_VERSION = "pubVersion"; @@ -556,6 +558,68 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation return op; } + @Override + public Map postProcessOperationsWithModels(Map objs, List allModels) { + super.postProcessOperationsWithModels(objs, allModels); + Map operations = (Map) objs.get("operations"); + if (operations != null) { + List ops = (List) operations.get("operation"); + for (CodegenOperation op : ops) { + if (op.hasConsumes) { + if (!op.formParams.isEmpty() || op.isMultipart) { + // DefaultCodegen only sets this if the first consumes mediaType + // is application/x-www-form-urlencoded or multipart. + // Can just use the original + op.prioritizedContentTypes = op.consumes; + } else { + // Prioritize content types by moving application/json to the front + // similar to JavaCodegen + op.prioritizedContentTypes = prioritizeContentTypes(op.consumes); + String mediaType = op.prioritizedContentTypes.get(0).get("mediaType"); + if (!DEFAULT_SUPPORTED_CONTENT_TYPES.contains(mediaType)) { + LOGGER.warn("The media-type '{}' for operation '{}' is not support in the Dart generators by default.", mediaType, op.path); + } + } + } + } + } + return objs; + } + + private List> prioritizeContentTypes(List> consumes) { + if (consumes.size() <= 1) { + // no need to change any order + return consumes; + } + + List> prioritizedContentTypes = new ArrayList<>(consumes.size()); + + List> jsonVendorMimeTypes = new ArrayList<>(consumes.size()); + List> jsonMimeTypes = new ArrayList<>(consumes.size()); + + for (Map consume : consumes) { + String mediaType = consume.get("mediaType"); + if (isJsonVendorMimeType(mediaType)) { + jsonVendorMimeTypes.add(consume); + } else if (isJsonMimeType(mediaType)) { + jsonMimeTypes.add(consume); + } else { + prioritizedContentTypes.add(consume); + } + } + + prioritizedContentTypes.addAll(0, jsonMimeTypes); + prioritizedContentTypes.addAll(0, jsonVendorMimeTypes); + return prioritizedContentTypes; + } + + private static boolean isMultipartType(String mediaType) { + if (mediaType != null) { + return "multipart/form-data".equals(mediaType); + } + return false; + } + @Override protected void updateEnumVarsWithExtensions(List> enumVars, Map vendorExtensions, String dataType) { if (vendorExtensions != null && useEnumExtension && vendorExtensions.containsKey("x-enum-values")) { 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 23b50b2f7566..517d1023b980 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 @@ -264,7 +264,7 @@ private void appendCollection(StringBuilder sb, CodegenProperty property) { @Override public Map postProcessOperationsWithModels(Map objs, List allModels) { - objs = super.postProcessOperationsWithModels(objs, allModels); + super.postProcessOperationsWithModels(objs, allModels); Map operations = (Map) objs.get("operations"); List operationList = (List) operations.get("operation"); @@ -272,24 +272,8 @@ public Map postProcessOperationsWithModels(Map o Set resultImports = new HashSet<>(); for (CodegenOperation op : operationList) { - op.httpMethod = op.httpMethod.toLowerCase(Locale.ROOT); - boolean isJson = true; //default to JSON - boolean isForm = false; - boolean isMultipart = false; - if (op.consumes != null) { - for (Map consume : op.consumes) { - if (consume.containsKey("mediaType")) { - String type = consume.get("mediaType"); - isJson = type.equalsIgnoreCase("application/json"); - isForm = type.equalsIgnoreCase("application/x-www-form-urlencoded"); - isMultipart = type.equalsIgnoreCase("multipart/form-data"); - break; - } - } - } - for (CodegenParameter param : op.bodyParams) { - if (param.baseType != null && param.baseType.equalsIgnoreCase("Uint8List") && isMultipart) { + if (param.baseType != null && param.baseType.equalsIgnoreCase("Uint8List") && op.isMultipart) { param.baseType = "MultipartFile"; param.dataType = "MultipartFile"; } @@ -303,10 +287,6 @@ public Map postProcessOperationsWithModels(Map o } } - op.vendorExtensions.put("x-is-json", isJson); - op.vendorExtensions.put("x-is-form", isForm); - op.vendorExtensions.put("x-is-multipart", isMultipart); - resultImports.addAll(rewriteImports(op.imports)); if (op.getHasFormParams()) { resultImports.add("package:" + pubName + "/api_util.dart"); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java index 764c11464261..3beb4ca9a4ad 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java @@ -305,7 +305,7 @@ private void appendBuiltValueCollection(StringBuilder sb, CodegenProperty proper @Override public Map postProcessOperationsWithModels(Map objs, List allModels) { - objs = super.postProcessOperationsWithModels(objs, allModels); + super.postProcessOperationsWithModels(objs, allModels); Map operations = (Map) objs.get("operations"); List operationList = (List) operations.get("operation"); @@ -313,24 +313,8 @@ public Map postProcessOperationsWithModels(Map o Set resultImports = new HashSet<>(); for (CodegenOperation op : operationList) { - op.httpMethod = op.httpMethod.toLowerCase(Locale.ROOT); - boolean isJson = true; //default to JSON - boolean isForm = false; - boolean isMultipart = false; - if (op.consumes != null) { - for (Map consume : op.consumes) { - if (consume.containsKey("mediaType")) { - String type = consume.get("mediaType"); - isJson = type.equalsIgnoreCase("application/json"); - isForm = type.equalsIgnoreCase("application/x-www-form-urlencoded"); - isMultipart = type.equalsIgnoreCase("multipart/form-data"); - break; - } - } - } - for (CodegenParameter param : op.bodyParams) { - if (param.baseType != null && param.baseType.equalsIgnoreCase("Uint8List") && isMultipart) { + if (param.baseType != null && param.baseType.equalsIgnoreCase("Uint8List") && op.isMultipart) { param.baseType = "MultipartFile"; param.dataType = "MultipartFile"; } @@ -344,10 +328,6 @@ public Map postProcessOperationsWithModels(Map o } } - op.vendorExtensions.put("x-is-json", isJson); - op.vendorExtensions.put("x-is-form", isForm); - op.vendorExtensions.put("x-is-multipart", isMultipart); - resultImports.addAll(rewriteImports(op.imports)); if (op.getHasFormParams()) { resultImports.add("package:" + pubName + "/src/api_util.dart"); diff --git a/modules/openapi-generator/src/main/resources/dart-dio/api.mustache b/modules/openapi-generator/src/main/resources/dart-dio/api.mustache index dff1dcd42354..522815498c5c 100644 --- a/modules/openapi-generator/src/main/resources/dart-dio/api.mustache +++ b/modules/openapi-generator/src/main/resources/dart-dio/api.mustache @@ -63,10 +63,7 @@ class {{classname}} { ...?extra, }, validateStatus: validateStatus, - contentType: [{{^hasConsumes}} - 'application/json',{{/hasConsumes}}{{#hasConsumes}}{{#consumes}} - '{{{mediaType}}}',{{/consumes}}{{/hasConsumes}} - ].first, + contentType: '{{^hasConsumes}}application/json{{/hasConsumes}}{{#hasConsumes}}{{#prioritizedContentTypes}}{{#-first}}{{{mediaType}}}{{/-first}}{{/prioritizedContentTypes}}{{/hasConsumes}}', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache index 34cf9554991c..b019de39c660 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache @@ -60,11 +60,8 @@ class {{classname}} { },{{/authMethods}} ],{{/hasAuthMethods}} ...?extra, - }, - contentType: [{{^hasConsumes}} - 'application/json',{{/hasConsumes}}{{#hasConsumes}}{{#consumes}} - '{{{mediaType}}}',{{/consumes}}{{/hasConsumes}} - ].first, + },{{#hasConsumes}} + contentType: '{{#prioritizedContentTypes}}{{#-first}}{{{mediaType}}}{{/-first}}{{/prioritizedContentTypes}}',{{/hasConsumes}} validateStatus: validateStatus, ); diff --git a/modules/openapi-generator/src/main/resources/dart2/api.mustache b/modules/openapi-generator/src/main/resources/dart2/api.mustache index 6a53829cb59b..a7bb92891431 100644 --- a/modules/openapi-generator/src/main/resources/dart2/api.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/api.mustache @@ -95,7 +95,7 @@ class {{{classname}}} { {{/headerParams}} {{/hasHeaderParams}} - final contentTypes = [{{#consumes}}'{{{mediaType}}}'{{^-last}}, {{/-last}}{{/consumes}}]; + final contentTypes = [{{#prioritizedContentTypes}}'{{{mediaType}}}'{{^-last}}, {{/-last}}{{/prioritizedContentTypes}}]; final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; final authNames = [{{#authMethods}}'{{{name}}}'{{^-last}}, {{/-last}}{{/authMethods}}]; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md index f49dd295950e..31cdc5ce99bf 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md @@ -64,46 +64,46 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc/AnotherFakeApi.md#call123testspecialtags) | **patch** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc/DefaultApi.md#fooget) | **get** /foo | -*FakeApi* | [**fakeHealthGet**](doc/FakeApi.md#fakehealthget) | **get** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc/FakeApi.md#fakehttpsignaturetest) | **get** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc/FakeApi.md#fakeouterbooleanserialize) | **post** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc/FakeApi.md#fakeoutercompositeserialize) | **post** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **post** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **post** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **post** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **put** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **put** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **patch** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc/FakeApi.md#testendpointparameters) | **post** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc/FakeApi.md#testenumparameters) | **get** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc/FakeApi.md#testgroupparameters) | **delete** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc/FakeApi.md#testinlineadditionalproperties) | **post** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc/FakeApi.md#testjsonformdata) | **get** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc/FakeApi.md#testqueryparametercollectionformat) | **put** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc/FakeClassnameTags123Api.md#testclassname) | **patch** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **post** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **delete** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **get** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **get** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **get** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **put** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **post** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **post** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc/PetApi.md#uploadfilewithrequiredfile) | **post** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **delete** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **get** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **get** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **post** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **post** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **post** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **post** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **delete** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **get** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **get** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **get** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **put** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc/DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AnotherFakeApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AnotherFakeApi.md index d55663297c13..bb401f7c20cb 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AnotherFakeApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AnotherFakeApi.md @@ -9,7 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**call123testSpecialTags**](AnotherFakeApi.md#call123testspecialtags) | **patch** /another-fake/dummy | To test special tags +[**call123testSpecialTags**](AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags # **call123testSpecialTags** diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/DefaultApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/DefaultApi.md index be916c3037d5..5c305ecaa71f 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/DefaultApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/DefaultApi.md @@ -9,7 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**fooGet**](DefaultApi.md#fooget) | **get** /foo | +[**fooGet**](DefaultApi.md#fooget) | **GET** /foo | # **fooGet** diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md index c01cc40f97d8..8ceda8fa68d9 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md @@ -9,22 +9,22 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**fakeHealthGet**](FakeApi.md#fakehealthget) | **get** /fake/health | Health check endpoint -[**fakeHttpSignatureTest**](FakeApi.md#fakehttpsignaturetest) | **get** /fake/http-signature-test | test http signature authentication -[**fakeOuterBooleanSerialize**](FakeApi.md#fakeouterbooleanserialize) | **post** /fake/outer/boolean | -[**fakeOuterCompositeSerialize**](FakeApi.md#fakeoutercompositeserialize) | **post** /fake/outer/composite | -[**fakeOuterNumberSerialize**](FakeApi.md#fakeouternumberserialize) | **post** /fake/outer/number | -[**fakeOuterStringSerialize**](FakeApi.md#fakeouterstringserialize) | **post** /fake/outer/string | -[**fakePropertyEnumIntegerSerialize**](FakeApi.md#fakepropertyenumintegerserialize) | **post** /fake/property/enum-int | -[**testBodyWithFileSchema**](FakeApi.md#testbodywithfileschema) | **put** /fake/body-with-file-schema | -[**testBodyWithQueryParams**](FakeApi.md#testbodywithqueryparams) | **put** /fake/body-with-query-params | -[**testClientModel**](FakeApi.md#testclientmodel) | **patch** /fake | To test \"client\" model -[**testEndpointParameters**](FakeApi.md#testendpointparameters) | **post** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -[**testEnumParameters**](FakeApi.md#testenumparameters) | **get** /fake | To test enum parameters -[**testGroupParameters**](FakeApi.md#testgroupparameters) | **delete** /fake | Fake endpoint to test group parameters (optional) -[**testInlineAdditionalProperties**](FakeApi.md#testinlineadditionalproperties) | **post** /fake/inline-additionalProperties | test inline additionalProperties -[**testJsonFormData**](FakeApi.md#testjsonformdata) | **get** /fake/jsonFormData | test json serialization of form data -[**testQueryParameterCollectionFormat**](FakeApi.md#testqueryparametercollectionformat) | **put** /fake/test-query-paramters | +[**fakeHealthGet**](FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +[**fakeHttpSignatureTest**](FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +[**fakeOuterBooleanSerialize**](FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +[**fakeOuterCompositeSerialize**](FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +[**fakeOuterNumberSerialize**](FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +[**fakeOuterStringSerialize**](FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +[**fakePropertyEnumIntegerSerialize**](FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +[**testBodyWithFileSchema**](FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +[**testBodyWithQueryParams**](FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +[**testClientModel**](FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +[**testEndpointParameters**](FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +[**testEnumParameters**](FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +[**testGroupParameters**](FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +[**testInlineAdditionalProperties**](FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +[**testJsonFormData**](FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +[**testQueryParameterCollectionFormat**](FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | # **fakeHealthGet** diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md index 9745ca8e3ffe..98fe0b47358b 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md @@ -9,7 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**testClassname**](FakeClassnameTags123Api.md#testclassname) | **patch** /fake_classname_test | To test class name in snake case +[**testClassname**](FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case # **testClassname** diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md index d5a07d5046e2..841eed632916 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md @@ -9,15 +9,15 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**addPet**](PetApi.md#addpet) | **post** /pet | Add a new pet to the store -[**deletePet**](PetApi.md#deletepet) | **delete** /pet/{petId} | Deletes a pet -[**findPetsByStatus**](PetApi.md#findpetsbystatus) | **get** /pet/findByStatus | Finds Pets by status -[**findPetsByTags**](PetApi.md#findpetsbytags) | **get** /pet/findByTags | Finds Pets by tags -[**getPetById**](PetApi.md#getpetbyid) | **get** /pet/{petId} | Find pet by ID -[**updatePet**](PetApi.md#updatepet) | **put** /pet | Update an existing pet -[**updatePetWithForm**](PetApi.md#updatepetwithform) | **post** /pet/{petId} | Updates a pet in the store with form data -[**uploadFile**](PetApi.md#uploadfile) | **post** /pet/{petId}/uploadImage | uploads an image -[**uploadFileWithRequiredFile**](PetApi.md#uploadfilewithrequiredfile) | **post** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +[**addPet**](PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +[**deletePet**](PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +[**findPetsByStatus**](PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +[**findPetsByTags**](PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +[**getPetById**](PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +[**updatePet**](PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +[**updatePetWithForm**](PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +[**uploadFile**](PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +[**uploadFileWithRequiredFile**](PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) # **addPet** diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/StoreApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/StoreApi.md index 1fcb8f71eea9..a7dbf9ad0197 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/StoreApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/StoreApi.md @@ -9,10 +9,10 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**deleteOrder**](StoreApi.md#deleteorder) | **delete** /store/order/{order_id} | Delete purchase order by ID -[**getInventory**](StoreApi.md#getinventory) | **get** /store/inventory | Returns pet inventories by status -[**getOrderById**](StoreApi.md#getorderbyid) | **get** /store/order/{order_id} | Find purchase order by ID -[**placeOrder**](StoreApi.md#placeorder) | **post** /store/order | Place an order for a pet +[**deleteOrder**](StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +[**getInventory**](StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +[**getOrderById**](StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +[**placeOrder**](StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet # **deleteOrder** diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/UserApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/UserApi.md index 62e01652e800..32bc2e675da9 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/UserApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/UserApi.md @@ -9,14 +9,14 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**createUser**](UserApi.md#createuser) | **post** /user | Create user -[**createUsersWithArrayInput**](UserApi.md#createuserswitharrayinput) | **post** /user/createWithArray | Creates list of users with given input array -[**createUsersWithListInput**](UserApi.md#createuserswithlistinput) | **post** /user/createWithList | Creates list of users with given input array -[**deleteUser**](UserApi.md#deleteuser) | **delete** /user/{username} | Delete user -[**getUserByName**](UserApi.md#getuserbyname) | **get** /user/{username} | Get user by user name -[**loginUser**](UserApi.md#loginuser) | **get** /user/login | Logs user into the system -[**logoutUser**](UserApi.md#logoutuser) | **get** /user/logout | Logs out current logged in user session -[**updateUser**](UserApi.md#updateuser) | **put** /user/{username} | Updated user +[**createUser**](UserApi.md#createuser) | **POST** /user | Create user +[**createUsersWithArrayInput**](UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +[**createUsersWithListInput**](UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +[**deleteUser**](UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +[**getUserByName**](UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +[**loginUser**](UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +[**logoutUser**](UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +[**updateUser**](UserApi.md#updateuser) | **PUT** /user/{username} | Updated user # **createUser** diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart index 00d88a5c1786..6730b6925adc 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart @@ -39,9 +39,7 @@ class AnotherFakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart index 48fc9b8c444a..1311f160e5b3 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart @@ -38,9 +38,6 @@ class DefaultApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart index fed890a78c1c..c3915495c81e 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart @@ -48,9 +48,6 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -126,10 +123,7 @@ class FakeApi { ], ...?extra, }, - contentType: [ - 'application/json', - 'application/xml', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -190,9 +184,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -274,9 +266,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -363,9 +353,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -447,9 +435,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -531,9 +517,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -620,9 +604,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -683,9 +665,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -746,9 +726,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -853,9 +831,7 @@ class FakeApi { ], ...?extra, }, - contentType: [ - 'application/x-www-form-urlencoded', - ].first, + contentType: 'application/x-www-form-urlencoded', validateStatus: validateStatus, ); @@ -938,9 +914,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/x-www-form-urlencoded', - ].first, + contentType: 'application/x-www-form-urlencoded', validateStatus: validateStatus, ); @@ -1018,9 +992,6 @@ class FakeApi { ], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -1065,9 +1036,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -1128,9 +1097,7 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/x-www-form-urlencoded', - ].first, + contentType: 'application/x-www-form-urlencoded', validateStatus: validateStatus, ); @@ -1196,9 +1163,6 @@ class FakeApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart index 01d0383fd160..a2b5a816bab0 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart @@ -46,9 +46,7 @@ class FakeClassnameTags123Api { ], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart index 219b0cecd269..8a684092fc24 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart @@ -48,10 +48,7 @@ class PetApi { ], ...?extra, }, - contentType: [ - 'application/json', - 'application/xml', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -118,9 +115,6 @@ class PetApi { ], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -166,9 +160,6 @@ class PetApi { ], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -242,9 +233,6 @@ class PetApi { ], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -320,9 +308,6 @@ class PetApi { ], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -395,10 +380,7 @@ class PetApi { ], ...?extra, }, - contentType: [ - 'application/json', - 'application/xml', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -465,9 +447,7 @@ class PetApi { ], ...?extra, }, - contentType: [ - 'application/x-www-form-urlencoded', - ].first, + contentType: 'application/x-www-form-urlencoded', validateStatus: validateStatus, ); @@ -536,9 +516,7 @@ class PetApi { ], ...?extra, }, - contentType: [ - 'multipart/form-data', - ].first, + contentType: 'multipart/form-data', validateStatus: validateStatus, ); @@ -634,9 +612,7 @@ class PetApi { ], ...?extra, }, - contentType: [ - 'multipart/form-data', - ].first, + contentType: 'multipart/form-data', validateStatus: validateStatus, ); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart index 0c0b9f44794f..3b77dd62607b 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart @@ -40,9 +40,6 @@ class StoreApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -89,9 +86,6 @@ class StoreApi { ], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -159,9 +153,6 @@ class StoreApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -229,9 +220,7 @@ class StoreApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart index c0551df5e516..ebfb06b1c97d 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart @@ -40,9 +40,7 @@ class UserApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -102,9 +100,7 @@ class UserApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -164,9 +160,7 @@ class UserApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); @@ -226,9 +220,6 @@ class UserApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -269,9 +260,6 @@ class UserApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -340,9 +328,6 @@ class UserApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -407,9 +392,6 @@ class UserApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, validateStatus: validateStatus, ); @@ -451,9 +433,7 @@ class UserApi { 'secure': >[], ...?extra, }, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', validateStatus: validateStatus, ); diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md index af1b22de4d52..ac04fa9f72b0 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md @@ -58,26 +58,26 @@ All URIs are relative to *http://petstore.swagger.io/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **post** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **delete** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **get** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **get** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **get** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **put** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **post** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **post** /pet/{petId}/uploadImage | uploads an image -*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **delete** /store/order/{orderId} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **get** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **get** /store/order/{orderId} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **post** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **post** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **post** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **post** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **delete** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **get** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **get** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **get** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **put** /user/{username} | Updated user +*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/PetApi.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/PetApi.md index 3a78296f3834..74c87b72acc6 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/PetApi.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/PetApi.md @@ -9,14 +9,14 @@ All URIs are relative to *http://petstore.swagger.io/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**addPet**](PetApi.md#addpet) | **post** /pet | Add a new pet to the store -[**deletePet**](PetApi.md#deletepet) | **delete** /pet/{petId} | Deletes a pet -[**findPetsByStatus**](PetApi.md#findpetsbystatus) | **get** /pet/findByStatus | Finds Pets by status -[**findPetsByTags**](PetApi.md#findpetsbytags) | **get** /pet/findByTags | Finds Pets by tags -[**getPetById**](PetApi.md#getpetbyid) | **get** /pet/{petId} | Find pet by ID -[**updatePet**](PetApi.md#updatepet) | **put** /pet | Update an existing pet -[**updatePetWithForm**](PetApi.md#updatepetwithform) | **post** /pet/{petId} | Updates a pet in the store with form data -[**uploadFile**](PetApi.md#uploadfile) | **post** /pet/{petId}/uploadImage | uploads an image +[**addPet**](PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +[**deletePet**](PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +[**findPetsByStatus**](PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +[**findPetsByTags**](PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +[**getPetById**](PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +[**updatePet**](PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +[**updatePetWithForm**](PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +[**uploadFile**](PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image # **addPet** diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/StoreApi.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/StoreApi.md index 0b016d70a84e..6075223c7412 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/StoreApi.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/StoreApi.md @@ -9,10 +9,10 @@ All URIs are relative to *http://petstore.swagger.io/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**deleteOrder**](StoreApi.md#deleteorder) | **delete** /store/order/{orderId} | Delete purchase order by ID -[**getInventory**](StoreApi.md#getinventory) | **get** /store/inventory | Returns pet inventories by status -[**getOrderById**](StoreApi.md#getorderbyid) | **get** /store/order/{orderId} | Find purchase order by ID -[**placeOrder**](StoreApi.md#placeorder) | **post** /store/order | Place an order for a pet +[**deleteOrder**](StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID +[**getInventory**](StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +[**getOrderById**](StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID +[**placeOrder**](StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet # **deleteOrder** diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/UserApi.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/UserApi.md index c939d874a997..b3b11fe67485 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/UserApi.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/doc/UserApi.md @@ -9,14 +9,14 @@ All URIs are relative to *http://petstore.swagger.io/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**createUser**](UserApi.md#createuser) | **post** /user | Create user -[**createUsersWithArrayInput**](UserApi.md#createuserswitharrayinput) | **post** /user/createWithArray | Creates list of users with given input array -[**createUsersWithListInput**](UserApi.md#createuserswithlistinput) | **post** /user/createWithList | Creates list of users with given input array -[**deleteUser**](UserApi.md#deleteuser) | **delete** /user/{username} | Delete user -[**getUserByName**](UserApi.md#getuserbyname) | **get** /user/{username} | Get user by user name -[**loginUser**](UserApi.md#loginuser) | **get** /user/login | Logs user into the system -[**logoutUser**](UserApi.md#logoutuser) | **get** /user/logout | Logs out current logged in user session -[**updateUser**](UserApi.md#updateuser) | **put** /user/{username} | Updated user +[**createUser**](UserApi.md#createuser) | **POST** /user | Create user +[**createUsersWithArrayInput**](UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +[**createUsersWithListInput**](UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +[**deleteUser**](UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +[**getUserByName**](UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +[**loginUser**](UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +[**logoutUser**](UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +[**updateUser**](UserApi.md#updateuser) | **PUT** /user/{username} | Updated user # **createUser** diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/pet_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/pet_api.dart index 9b378a4b3fa1..70fc2b2dbe66 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/pet_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/pet_api.dart @@ -51,10 +51,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - 'application/xml', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -119,9 +116,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -169,9 +164,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -234,9 +227,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -298,9 +289,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -360,10 +349,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - 'application/xml', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -428,9 +414,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/x-www-form-urlencoded', - ].first, + contentType: 'application/x-www-form-urlencoded', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -482,9 +466,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'multipart/form-data', - ].first, + contentType: 'multipart/form-data', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/store_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/store_api.dart index d0184f6eda8a..80b074645c82 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/store_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/store_api.dart @@ -43,9 +43,7 @@ class StoreApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -91,9 +89,7 @@ class StoreApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -148,9 +144,7 @@ class StoreApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -205,9 +199,7 @@ class StoreApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/user_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/user_api.dart index 5253ac660280..fef22be0b977 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/user_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/api/user_api.dart @@ -50,9 +50,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -102,9 +100,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -154,9 +150,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -206,9 +200,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -248,9 +240,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -310,9 +300,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -369,9 +357,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -419,9 +405,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md index af00b20ee1d5..22789ae77619 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md @@ -58,46 +58,46 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc/AnotherFakeApi.md#call123testspecialtags) | **patch** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc/DefaultApi.md#fooget) | **get** /foo | -*FakeApi* | [**fakeHealthGet**](doc/FakeApi.md#fakehealthget) | **get** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc/FakeApi.md#fakehttpsignaturetest) | **get** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc/FakeApi.md#fakeouterbooleanserialize) | **post** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc/FakeApi.md#fakeoutercompositeserialize) | **post** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **post** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **post** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **post** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **put** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **put** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **patch** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc/FakeApi.md#testendpointparameters) | **post** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc/FakeApi.md#testenumparameters) | **get** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc/FakeApi.md#testgroupparameters) | **delete** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc/FakeApi.md#testinlineadditionalproperties) | **post** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc/FakeApi.md#testjsonformdata) | **get** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc/FakeApi.md#testqueryparametercollectionformat) | **put** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc/FakeClassnameTags123Api.md#testclassname) | **patch** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **post** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **delete** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **get** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **get** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **get** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **put** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **post** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **post** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc/PetApi.md#uploadfilewithrequiredfile) | **post** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **delete** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **get** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **get** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **post** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **post** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **post** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **post** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **delete** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **get** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **get** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **get** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **put** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc/DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/AnotherFakeApi.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/AnotherFakeApi.md index d55663297c13..bb401f7c20cb 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/AnotherFakeApi.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/AnotherFakeApi.md @@ -9,7 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**call123testSpecialTags**](AnotherFakeApi.md#call123testspecialtags) | **patch** /another-fake/dummy | To test special tags +[**call123testSpecialTags**](AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags # **call123testSpecialTags** diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/DefaultApi.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/DefaultApi.md index be916c3037d5..5c305ecaa71f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/DefaultApi.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/DefaultApi.md @@ -9,7 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**fooGet**](DefaultApi.md#fooget) | **get** /foo | +[**fooGet**](DefaultApi.md#fooget) | **GET** /foo | # **fooGet** diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeApi.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeApi.md index 41ab4e4fc126..b28fe4abbe33 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeApi.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeApi.md @@ -9,22 +9,22 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**fakeHealthGet**](FakeApi.md#fakehealthget) | **get** /fake/health | Health check endpoint -[**fakeHttpSignatureTest**](FakeApi.md#fakehttpsignaturetest) | **get** /fake/http-signature-test | test http signature authentication -[**fakeOuterBooleanSerialize**](FakeApi.md#fakeouterbooleanserialize) | **post** /fake/outer/boolean | -[**fakeOuterCompositeSerialize**](FakeApi.md#fakeoutercompositeserialize) | **post** /fake/outer/composite | -[**fakeOuterNumberSerialize**](FakeApi.md#fakeouternumberserialize) | **post** /fake/outer/number | -[**fakeOuterStringSerialize**](FakeApi.md#fakeouterstringserialize) | **post** /fake/outer/string | -[**fakePropertyEnumIntegerSerialize**](FakeApi.md#fakepropertyenumintegerserialize) | **post** /fake/property/enum-int | -[**testBodyWithFileSchema**](FakeApi.md#testbodywithfileschema) | **put** /fake/body-with-file-schema | -[**testBodyWithQueryParams**](FakeApi.md#testbodywithqueryparams) | **put** /fake/body-with-query-params | -[**testClientModel**](FakeApi.md#testclientmodel) | **patch** /fake | To test \"client\" model -[**testEndpointParameters**](FakeApi.md#testendpointparameters) | **post** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -[**testEnumParameters**](FakeApi.md#testenumparameters) | **get** /fake | To test enum parameters -[**testGroupParameters**](FakeApi.md#testgroupparameters) | **delete** /fake | Fake endpoint to test group parameters (optional) -[**testInlineAdditionalProperties**](FakeApi.md#testinlineadditionalproperties) | **post** /fake/inline-additionalProperties | test inline additionalProperties -[**testJsonFormData**](FakeApi.md#testjsonformdata) | **get** /fake/jsonFormData | test json serialization of form data -[**testQueryParameterCollectionFormat**](FakeApi.md#testqueryparametercollectionformat) | **put** /fake/test-query-paramters | +[**fakeHealthGet**](FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +[**fakeHttpSignatureTest**](FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +[**fakeOuterBooleanSerialize**](FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +[**fakeOuterCompositeSerialize**](FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +[**fakeOuterNumberSerialize**](FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +[**fakeOuterStringSerialize**](FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +[**fakePropertyEnumIntegerSerialize**](FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +[**testBodyWithFileSchema**](FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +[**testBodyWithQueryParams**](FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +[**testClientModel**](FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +[**testEndpointParameters**](FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +[**testEnumParameters**](FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +[**testGroupParameters**](FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +[**testInlineAdditionalProperties**](FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +[**testJsonFormData**](FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +[**testQueryParameterCollectionFormat**](FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | # **fakeHealthGet** diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md index 9745ca8e3ffe..98fe0b47358b 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md @@ -9,7 +9,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**testClassname**](FakeClassnameTags123Api.md#testclassname) | **patch** /fake_classname_test | To test class name in snake case +[**testClassname**](FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case # **testClassname** diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/PetApi.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/PetApi.md index d5a07d5046e2..841eed632916 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/PetApi.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/PetApi.md @@ -9,15 +9,15 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**addPet**](PetApi.md#addpet) | **post** /pet | Add a new pet to the store -[**deletePet**](PetApi.md#deletepet) | **delete** /pet/{petId} | Deletes a pet -[**findPetsByStatus**](PetApi.md#findpetsbystatus) | **get** /pet/findByStatus | Finds Pets by status -[**findPetsByTags**](PetApi.md#findpetsbytags) | **get** /pet/findByTags | Finds Pets by tags -[**getPetById**](PetApi.md#getpetbyid) | **get** /pet/{petId} | Find pet by ID -[**updatePet**](PetApi.md#updatepet) | **put** /pet | Update an existing pet -[**updatePetWithForm**](PetApi.md#updatepetwithform) | **post** /pet/{petId} | Updates a pet in the store with form data -[**uploadFile**](PetApi.md#uploadfile) | **post** /pet/{petId}/uploadImage | uploads an image -[**uploadFileWithRequiredFile**](PetApi.md#uploadfilewithrequiredfile) | **post** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +[**addPet**](PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +[**deletePet**](PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +[**findPetsByStatus**](PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +[**findPetsByTags**](PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +[**getPetById**](PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +[**updatePet**](PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +[**updatePetWithForm**](PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +[**uploadFile**](PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +[**uploadFileWithRequiredFile**](PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) # **addPet** diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/StoreApi.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/StoreApi.md index 1fcb8f71eea9..a7dbf9ad0197 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/StoreApi.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/StoreApi.md @@ -9,10 +9,10 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**deleteOrder**](StoreApi.md#deleteorder) | **delete** /store/order/{order_id} | Delete purchase order by ID -[**getInventory**](StoreApi.md#getinventory) | **get** /store/inventory | Returns pet inventories by status -[**getOrderById**](StoreApi.md#getorderbyid) | **get** /store/order/{order_id} | Find purchase order by ID -[**placeOrder**](StoreApi.md#placeorder) | **post** /store/order | Place an order for a pet +[**deleteOrder**](StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +[**getInventory**](StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +[**getOrderById**](StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +[**placeOrder**](StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet # **deleteOrder** diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/UserApi.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/UserApi.md index 62e01652e800..32bc2e675da9 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/UserApi.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/UserApi.md @@ -9,14 +9,14 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**createUser**](UserApi.md#createuser) | **post** /user | Create user -[**createUsersWithArrayInput**](UserApi.md#createuserswitharrayinput) | **post** /user/createWithArray | Creates list of users with given input array -[**createUsersWithListInput**](UserApi.md#createuserswithlistinput) | **post** /user/createWithList | Creates list of users with given input array -[**deleteUser**](UserApi.md#deleteuser) | **delete** /user/{username} | Delete user -[**getUserByName**](UserApi.md#getuserbyname) | **get** /user/{username} | Get user by user name -[**loginUser**](UserApi.md#loginuser) | **get** /user/login | Logs user into the system -[**logoutUser**](UserApi.md#logoutuser) | **get** /user/logout | Logs out current logged in user session -[**updateUser**](UserApi.md#updateuser) | **put** /user/{username} | Updated user +[**createUser**](UserApi.md#createuser) | **POST** /user | Create user +[**createUsersWithArrayInput**](UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +[**createUsersWithListInput**](UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +[**deleteUser**](UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +[**getUserByName**](UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +[**loginUser**](UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +[**logoutUser**](UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +[**updateUser**](UserApi.md#updateuser) | **PUT** /user/{username} | Updated user # **createUser** diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/another_fake_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/another_fake_api.dart index 4bea8f87dbdf..cabc80b7798b 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/another_fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/another_fake_api.dart @@ -42,9 +42,7 @@ class AnotherFakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/default_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/default_api.dart index ab47f0a65716..51dd7ea125ee 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/default_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/default_api.dart @@ -41,9 +41,7 @@ class DefaultApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_api.dart index b50d02d5cf60..a8310d5f4a21 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_api.dart @@ -50,9 +50,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -118,10 +116,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - 'application/xml', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -164,9 +159,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -219,9 +212,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -279,9 +270,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -334,9 +323,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -389,9 +376,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -449,9 +434,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -498,9 +481,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -543,9 +524,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -621,9 +600,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/x-www-form-urlencoded', - ].first, + contentType: 'application/x-www-form-urlencoded', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -695,9 +672,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/x-www-form-urlencoded', - ].first, + contentType: 'application/x-www-form-urlencoded', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -760,9 +735,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -802,9 +775,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -848,9 +819,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/x-www-form-urlencoded', - ].first, + contentType: 'application/x-www-form-urlencoded', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -906,9 +875,7 @@ class FakeApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_classname_tags123_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_classname_tags123_api.dart index f9b44deb6d52..54c40f0e3437 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_classname_tags123_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_classname_tags123_api.dart @@ -49,9 +49,7 @@ class FakeClassnameTags123Api { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/pet_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/pet_api.dart index 56bdd8556bc4..9cc7beeb57ed 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/pet_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/pet_api.dart @@ -51,10 +51,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - 'application/xml', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -104,9 +101,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -154,9 +149,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -219,9 +212,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -283,9 +274,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -345,10 +334,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - 'application/xml', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -398,9 +384,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/x-www-form-urlencoded', - ].first, + contentType: 'application/x-www-form-urlencoded', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -452,9 +436,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'multipart/form-data', - ].first, + contentType: 'multipart/form-data', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -521,9 +503,7 @@ class PetApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'multipart/form-data', - ].first, + contentType: 'multipart/form-data', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/store_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/store_api.dart index e6c7679d1cdf..14fa8b601219 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/store_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/store_api.dart @@ -43,9 +43,7 @@ class StoreApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -91,9 +89,7 @@ class StoreApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -148,9 +144,7 @@ class StoreApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -205,9 +199,7 @@ class StoreApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/user_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/user_api.dart index d85fbcc85855..86032dba94ae 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/user_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/user_api.dart @@ -43,9 +43,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -88,9 +86,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -133,9 +129,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -178,9 +172,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -220,9 +212,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -282,9 +272,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -334,9 +322,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, @@ -377,9 +363,7 @@ class UserApi { ...?extra, }, validateStatus: validateStatus, - contentType: [ - 'application/json', - ].first, + contentType: 'application/json', cancelToken: cancelToken, onSendProgress: onSendProgress, onReceiveProgress: onReceiveProgress, From be84c44fccb45c41655b8908d684859544846817 Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Mon, 24 May 2021 04:54:51 +0200 Subject: [PATCH 143/186] [dart][dart-dio-next] Add stacktraces to manual DioError instances (#9549) --- .../resources/dart/libraries/dio/api.mustache | 8 +- .../lib/src/api/another_fake_api.dart | 8 +- .../lib/src/api/default_api.dart | 4 +- .../lib/src/api/fake_api.dart | 80 +++++++++---------- .../src/api/fake_classname_tags123_api.dart | 8 +- .../lib/src/api/pet_api.dart | 40 +++++----- .../lib/src/api/store_api.dart | 16 ++-- .../lib/src/api/user_api.dart | 24 +++--- 8 files changed, 94 insertions(+), 94 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache index b019de39c660..328506457c04 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache @@ -76,7 +76,7 @@ class {{classname}} { try { {{#useBuiltValue}}{{>serialization/built_value/serialize}}{{/useBuiltValue}} - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -85,7 +85,7 @@ class {{classname}} { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } {{/hasBodyOrFormParams}} @@ -104,13 +104,13 @@ class {{classname}} { try { {{#useBuiltValue}}{{>serialization/built_value/deserialize}}{{/useBuiltValue}} - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response<{{{returnType}}}>( diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart index 6730b6925adc..a65b96479442 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart @@ -52,7 +52,7 @@ class AnotherFakeApi { const _type = FullType(ModelClient); _bodyData = _serializers.serialize(modelClient, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -61,7 +61,7 @@ class AnotherFakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -83,13 +83,13 @@ class AnotherFakeApi { specifiedType: _responseType, ) as ModelClient; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart index 1311f160e5b3..22b4500214c8 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart @@ -62,13 +62,13 @@ class DefaultApi { specifiedType: _responseType, ) as InlineResponseDefault; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart index c3915495c81e..b5d03c9bda1f 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart @@ -72,13 +72,13 @@ class FakeApi { specifiedType: _responseType, ) as HealthCheckResult; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -137,7 +137,7 @@ class FakeApi { const _type = FullType(Pet); _bodyData = _serializers.serialize(pet, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -146,7 +146,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -196,7 +196,7 @@ class FakeApi { try { _bodyData = body; - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -205,7 +205,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -223,13 +223,13 @@ class FakeApi { try { _responseData = _response.data as bool; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -279,7 +279,7 @@ class FakeApi { const _type = FullType(OuterComposite); _bodyData = outerComposite == null ? null : _serializers.serialize(outerComposite, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -288,7 +288,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -310,13 +310,13 @@ class FakeApi { specifiedType: _responseType, ) as OuterComposite; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -365,7 +365,7 @@ class FakeApi { try { _bodyData = body; - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -374,7 +374,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -392,13 +392,13 @@ class FakeApi { try { _responseData = _response.data as num; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -447,7 +447,7 @@ class FakeApi { try { _bodyData = body; - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -456,7 +456,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -474,13 +474,13 @@ class FakeApi { try { _responseData = _response.data as String; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -530,7 +530,7 @@ class FakeApi { const _type = FullType(OuterObjectWithEnumProperty); _bodyData = _serializers.serialize(outerObjectWithEnumProperty, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -539,7 +539,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -561,13 +561,13 @@ class FakeApi { specifiedType: _responseType, ) as OuterObjectWithEnumProperty; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -617,7 +617,7 @@ class FakeApi { const _type = FullType(FileSchemaTestClass); _bodyData = _serializers.serialize(fileSchemaTestClass, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -626,7 +626,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -679,7 +679,7 @@ class FakeApi { const _type = FullType(User); _bodyData = _serializers.serialize(user, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -688,7 +688,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -739,7 +739,7 @@ class FakeApi { const _type = FullType(ModelClient); _bodyData = _serializers.serialize(modelClient, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -748,7 +748,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -770,13 +770,13 @@ class FakeApi { specifiedType: _responseType, ) as ModelClient; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -858,7 +858,7 @@ class FakeApi { if (callback != null) r'callback': encodeFormParameter(_serializers, callback, const FullType(String)), }; - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -867,7 +867,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -933,7 +933,7 @@ class FakeApi { if (enumFormString != null) r'enum_form_string': encodeFormParameter(_serializers, enumFormString, const FullType(String)), }; - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -942,7 +942,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -1049,7 +1049,7 @@ class FakeApi { const _type = FullType(BuiltMap, [FullType(String), FullType(String)]); _bodyData = _serializers.serialize(requestBody, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -1058,7 +1058,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -1112,7 +1112,7 @@ class FakeApi { r'param2': encodeFormParameter(_serializers, param2, const FullType(String)), }; - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -1121,7 +1121,7 @@ class FakeApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart index a2b5a816bab0..e97d899d0be1 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart @@ -59,7 +59,7 @@ class FakeClassnameTags123Api { const _type = FullType(ModelClient); _bodyData = _serializers.serialize(modelClient, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -68,7 +68,7 @@ class FakeClassnameTags123Api { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -90,13 +90,13 @@ class FakeClassnameTags123Api { specifiedType: _responseType, ) as ModelClient; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart index 8a684092fc24..e3f1473c5be5 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart @@ -61,7 +61,7 @@ class PetApi { const _type = FullType(Pet); _bodyData = _serializers.serialize(pet, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -70,7 +70,7 @@ class PetApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -185,13 +185,13 @@ class PetApi { specifiedType: _responseType, ) as BuiltList; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response>( @@ -258,13 +258,13 @@ class PetApi { specifiedType: _responseType, ) as BuiltSet; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response>( @@ -332,13 +332,13 @@ class PetApi { specifiedType: _responseType, ) as Pet; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -393,7 +393,7 @@ class PetApi { const _type = FullType(Pet); _bodyData = _serializers.serialize(pet, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -402,7 +402,7 @@ class PetApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -462,7 +462,7 @@ class PetApi { if (status != null) r'status': encodeFormParameter(_serializers, status, const FullType(String)), }; - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -471,7 +471,7 @@ class PetApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -531,7 +531,7 @@ class PetApi { if (file != null) r'file': MultipartFile.fromBytes(file, filename: r'file'), }); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -540,7 +540,7 @@ class PetApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -562,13 +562,13 @@ class PetApi { specifiedType: _responseType, ) as ApiResponse; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -627,7 +627,7 @@ class PetApi { r'requiredFile': MultipartFile.fromBytes(requiredFile, filename: r'requiredFile'), }); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -636,7 +636,7 @@ class PetApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -658,13 +658,13 @@ class PetApi { specifiedType: _responseType, ) as ApiResponse; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart index 3b77dd62607b..66fccc40e4bc 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart @@ -110,13 +110,13 @@ class StoreApi { specifiedType: _responseType, ) as BuiltMap; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response>( @@ -177,13 +177,13 @@ class StoreApi { specifiedType: _responseType, ) as Order; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -233,7 +233,7 @@ class StoreApi { const _type = FullType(Order); _bodyData = _serializers.serialize(order, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -242,7 +242,7 @@ class StoreApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -264,13 +264,13 @@ class StoreApi { specifiedType: _responseType, ) as Order; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart index ebfb06b1c97d..d8f42219111b 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart @@ -53,7 +53,7 @@ class UserApi { const _type = FullType(User); _bodyData = _serializers.serialize(user, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -62,7 +62,7 @@ class UserApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -113,7 +113,7 @@ class UserApi { const _type = FullType(BuiltList, [FullType(User)]); _bodyData = _serializers.serialize(user, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -122,7 +122,7 @@ class UserApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -173,7 +173,7 @@ class UserApi { const _type = FullType(BuiltList, [FullType(User)]); _bodyData = _serializers.serialize(user, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -182,7 +182,7 @@ class UserApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( @@ -284,13 +284,13 @@ class UserApi { specifiedType: _responseType, ) as User; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -350,13 +350,13 @@ class UserApi { try { _responseData = _response.data as String; - } catch (error) { + } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, response: _response, type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } return Response( @@ -446,7 +446,7 @@ class UserApi { const _type = FullType(User); _bodyData = _serializers.serialize(user, specifiedType: _type); - } catch(error) { + } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( _dio.options, @@ -455,7 +455,7 @@ class UserApi { ), type: DioErrorType.other, error: error, - ); + )..stackTrace = stackTrace; } final _response = await _dio.request( From 22db406c3536c071d827446bb41cac20ad244b77 Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Mon, 24 May 2021 04:59:35 +0200 Subject: [PATCH 144/186] [ci] Move openapi-generator build/docs/samples to github actions (#9550) * [ci] Move openapi-generator build/docs/samples to github actions * Naming * Test failure on samples and docs * Revert code changes after successful docs/sample failure --- .../openapi-generator-test-results.yaml | 19 ++ .github/workflows/openapi-generator.yaml | 214 ++++++++++++++++++ CI/.drone.yml | 2 - CI/circle_parallel.sh | 13 -- shippable.yml | 10 - 5 files changed, 233 insertions(+), 25 deletions(-) create mode 100644 .github/workflows/openapi-generator-test-results.yaml create mode 100644 .github/workflows/openapi-generator.yaml diff --git a/.github/workflows/openapi-generator-test-results.yaml b/.github/workflows/openapi-generator-test-results.yaml new file mode 100644 index 000000000000..f246b16c36b1 --- /dev/null +++ b/.github/workflows/openapi-generator-test-results.yaml @@ -0,0 +1,19 @@ +name: OpenAPI Generator Test Report + +on: + workflow_run: + workflows: ['OpenAPI Generator'] + types: + - completed + +# separate workflow required due to https://github.com/dorny/test-reporter#recommended-setup-for-public-repositories +jobs: + report: + runs-on: ubuntu-latest + steps: + - uses: dorny/test-reporter@v1 + with: + artifact: surefire-test-results + name: JUnit Test results + path: '**/surefire-reports/TEST-*.xml' + reporter: java-junit diff --git a/.github/workflows/openapi-generator.yaml b/.github/workflows/openapi-generator.yaml new file mode 100644 index 000000000000..5bb78a6f3b02 --- /dev/null +++ b/.github/workflows/openapi-generator.yaml @@ -0,0 +1,214 @@ +name: OpenAPI Generator + +on: + push: + branches: + - master + - '[5-9]+.[0-9]+.x' + pull_request: + branches: + - master + - '[5-9]+.[0-9]+.x' + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 8 + uses: actions/setup-java@v1 + with: + java-version: 8 + - name: Cache maven dependencies + uses: actions/cache@v2 + env: + cache-name: cache-maven-repository + with: + path: | + ~/.m2/repository + ~/.gradle + !~/.gradle/caches/*/plugin-resolution/ + !~/.m2/repository/org/openapitools/ + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + - name: Run maven + run: mvn --no-snapshot-updates --batch-mode --quiet install -DskipTests -Dorg.slf4j.simpleLogger.defaultLogLevel=error + - run: ls -la modules/openapi-generator-cli/target + - name: Upload openapi-generator-cli.jar artifact + uses: actions/upload-artifact@v2 + with: + name: openapi-generator-cli.jar + path: modules/openapi-generator-cli/target/openapi-generator-cli.jar + retention-days: 1 + + test: + name: Unit tests + runs-on: ubuntu-latest + needs: + - build + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 8 + uses: actions/setup-java@v1 + with: + java-version: 8 + - name: Cache maven dependencies + uses: actions/cache@v2 + env: + cache-name: cache-maven-repository + with: + path: | + ~/.m2/repository + ~/.gradle + !~/.gradle/caches/*/plugin-resolution/ + !~/.m2/repository/org/openapitools/ + key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + - name: Run unit tests + run: mvn --no-snapshot-updates --batch-mode --quiet --fail-at-end test -Dorg.slf4j.simpleLogger.defaultLogLevel=error + - name: Publish unit test reports + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: surefire-test-results + path: '**/surefire-reports/TEST-*.xml' + + documentation: + name: Docs up-to-date + runs-on: ubuntu-latest + needs: + - build + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 8 + uses: actions/setup-java@v1 + with: + java-version: 8 + - name: Download openapi-generator-cli.jar artifact + uses: actions/download-artifact@v2 + with: + name: openapi-generator-cli.jar + path: modules/openapi-generator-cli/target + - name: Generate docs + run: | + bash bin/meta-codegen.sh + bash bin/utils/export_docs_generators.sh + bash bin/utils/copy-to-website.sh + bash bin/utils/export_generators_readme.sh + - name: Verify git status + run: | + if [[ "$(git status --porcelain)" != "" ]]; then + echo "UNCOMMITTED CHANGES ERROR" + echo "There are uncommitted changes in working tree after execution of 'bin/ensure-up-to-date'" + echo "Perform git diff" + git --no-pager diff + echo "Perform git status" + git status + echo -e "\nThis script runs in pull requests against the anticipated merge commit (as if the PR was merged now)." + echo "When you see unexpected files here, it likely means that there are newer commits in master that you need to " + echo -e "rebase or merge into your branch.\n" + echo "Please run 'bin/utils/ensure-up-to-date' locally and commit changes (UNCOMMITTED CHANGES ERROR)" + exit 1 + fi + + samples: + name: Samples up-to-date + needs: + - build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 8 + uses: actions/setup-java@v1 + with: + java-version: 8 + - name: Download openapi-generator-cli.jar artifact + uses: actions/download-artifact@v2 + with: + name: openapi-generator-cli.jar + path: modules/openapi-generator-cli/target + - name: Generate samples + run: bash bin/generate-samples.sh + - name: Verify git status + run: | + if [[ "$(git status --porcelain)" != "" ]]; then + echo "UNCOMMITTED CHANGES ERROR" + echo "There are uncommitted changes in working tree after execution of 'bin/generate-samples.sh'" + echo "Perform git diff" + git --no-pager diff + echo "Perform git status" + git status + echo -e "\nThis script runs in pull requests against the anticipated merge commit (as if the PR was merged now)." + echo "When you see unexpected files here, it likely means that there are newer commits in master that you need to " + echo -e "rebase or merge into your branch.\n" + echo "Please run 'bin/generate-samples.sh' locally and commit changes (UNCOMMITTED CHANGES ERROR)" + exit 1 + fi + + test-maven-plugin: + name: Maven plugin tests + runs-on: ubuntu-latest + needs: + - build + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + java-version: 11 + - name: Cache maven dependencies + uses: actions/cache@v2 + env: + cache-name: cache-maven-repository + with: + path: | + ~/.m2/repository + ~/.gradle + !~/.gradle/caches/*/plugin-resolution/ + !~/.m2/repository/org/openapitools/ + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-test-maven-plugin-${{ env.cache-name }}- + ${{ runner.os }}-test-maven-plugin- + - name: Run tests + run: | + mvn --no-snapshot-updates --quiet clean compile -f modules/openapi-generator-maven-plugin/examples/java-client.xml -Dorg.slf4j.simpleLogger.defaultLogLevel=error + mvn --no-snapshot-updates --quiet clean compile -f modules/openapi-generator-maven-plugin/examples/multi-module/pom.xml -Dorg.slf4j.simpleLogger.defaultLogLevel=error + mvn --no-snapshot-updates --quiet clean compile -f modules/openapi-generator-maven-plugin/examples/kotlin.xml -Dorg.slf4j.simpleLogger.defaultLogLevel=error + mvn --no-snapshot-updates --quiet clean compile -f modules/openapi-generator-maven-plugin/examples/spring.xml -Dorg.slf4j.simpleLogger.defaultLogLevel=error + + test-gradle-plugin: + name: Gradle plugin tests + runs-on: ubuntu-latest + needs: + - build + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + java-version: 11 + - name: Cache maven dependencies + uses: actions/cache@v2 + env: + cache-name: cache-maven-repository + with: + path: | + ~/.m2/repository + ~/.gradle + !~/.gradle/caches/modules-2/modules-2.lock + !~/.gradle/caches/*/plugin-resolution/ + !~/.m2/repository/org/openapitools/ + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-test-gradle-plugin-${{ env.cache-name }}- + ${{ runner.os }}-test-gradle-plugin- + - name: Run tests + run: | + (cd modules/openapi-generator-gradle-plugin/samples/local-spec && ./gradlew buildGoSdk) + (cd modules/openapi-generator-gradle-plugin/samples/local-spec && ./gradlew openApiGenerate) diff --git a/CI/.drone.yml b/CI/.drone.yml index 032d64b9e154..073d7332a433 100644 --- a/CI/.drone.yml +++ b/CI/.drone.yml @@ -7,8 +7,6 @@ steps: commands: - ./mvnw --quiet clean install -Dorg.slf4j.simpleLogger.defaultLogLevel=error - ./mvnw --quiet verify -Psamples.droneio -Dorg.slf4j.simpleLogger.defaultLogLevel=error - # run ensure up-to-date - - /bin/bash bin/utils/ensure-up-to-date # test java native client - ./mvnw clean test -f samples/client/petstore/java/native/pom.xml - ./mvnw clean test -f samples/client/petstore/java/native-async/pom.xml diff --git a/CI/circle_parallel.sh b/CI/circle_parallel.sh index 36e0c179b240..f1a5a529a791 100755 --- a/CI/circle_parallel.sh +++ b/CI/circle_parallel.sh @@ -24,19 +24,6 @@ if [ "$NODE_INDEX" = "1" ]; then ls -l /home/circleci/.ivy2/cache elif [ "$NODE_INDEX" = "2" ]; then - # run ensure-up-to-date sample script on SNAPSHOT version only - project_version=`mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.version -q -DforceStdout` - if [[ $project_version == *"-SNAPSHOT" ]]; then - echo "Running node $NODE_INDEX to test ensure-up-to-date" - java -version - - # clear any changes to the samples - git checkout -- . - - # look for outdated samples - #./bin/utils/ensure-up-to-date - # UPDATE: moved to drone.io - fi echo "Running node $NODE_INDEX to test haskell" # install haskell curl -sSL https://get.haskellstack.org/ | sh diff --git a/shippable.yml b/shippable.yml index 5dc40c6fa41b..009806b31a34 100644 --- a/shippable.yml +++ b/shippable.yml @@ -21,7 +21,6 @@ build: - export PATH=/opt/gradle/gradle-5.6.4/bin:$PATH - gradle -v - java -version - - mvn --no-snapshot-updates --quiet clean install -Dmaven.javadoc.skip=true # ensure all modifications created by 'mature' generators are in the git repo # below move to CircleCI ./bin/utils/ensure-up-to-date # prepare environment for tests @@ -49,12 +48,3 @@ build: - mix --version # test samples defined in pom.xml - mvn --no-snapshot-updates --quiet verify -P samples.shippable -Dmaven.javadoc.skip=true - # test maven plugin - - mvn --no-snapshot-updates --quiet clean compile -f modules/openapi-generator-maven-plugin/examples/java-client.xml -Dorg.slf4j.simpleLogger.defaultLogLevel=error - - mvn --no-snapshot-updates --quiet clean compile -f modules/openapi-generator-maven-plugin/examples/multi-module/pom.xml -Dorg.slf4j.simpleLogger.defaultLogLevel=error - - mvn --no-snapshot-updates --quiet clean compile -f modules/openapi-generator-maven-plugin/examples/kotlin.xml -Dorg.slf4j.simpleLogger.defaultLogLevel=error - - mvn --no-snapshot-updates --quiet clean compile -f modules/openapi-generator-maven-plugin/examples/spring.xml -Dorg.slf4j.simpleLogger.defaultLogLevel=error - # test gradle plugin - - (cd modules/openapi-generator-gradle-plugin/samples/local-spec && ./gradlew buildGoSdk) - - (cd modules/openapi-generator-gradle-plugin/samples/local-spec && ./gradlew openApiGenerate) - From e360228a76d31c78267f0f166e426c38adc1081b Mon Sep 17 00:00:00 2001 From: alespour <42931850+alespour@users.noreply.github.com> Date: Mon, 24 May 2021 05:01:53 +0200 Subject: [PATCH 145/186] fix: dart2 mustache templates minor improvements (#9539) * fix: prefer_is_not_empty linter suggestion * fix: annotate_overrides linter suggestion * chore: update samples --- .../src/main/resources/dart2/api_exception.mustache | 1 + .../src/main/resources/dart2/api_helper.mustache | 2 +- .../petstore/dart2/petstore_client_lib/lib/api_exception.dart | 1 + .../petstore/dart2/petstore_client_lib/lib/api_helper.dart | 2 +- .../dart2/petstore_client_lib_fake/lib/api_exception.dart | 1 + .../petstore/dart2/petstore_client_lib_fake/lib/api_helper.dart | 2 +- .../lib/api_exception.dart | 1 + .../lib/api_helper.dart | 2 +- 8 files changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/dart2/api_exception.mustache b/modules/openapi-generator/src/main/resources/dart2/api_exception.mustache index 40f4fda731ee..28f734e55879 100644 --- a/modules/openapi-generator/src/main/resources/dart2/api_exception.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/api_exception.mustache @@ -10,6 +10,7 @@ class ApiException implements Exception { Exception innerException; StackTrace stackTrace; + @override String toString() { if (message == null) { return 'ApiException'; diff --git a/modules/openapi-generator/src/main/resources/dart2/api_helper.mustache b/modules/openapi-generator/src/main/resources/dart2/api_helper.mustache index 92f394176f61..e99fbb0505d5 100644 --- a/modules/openapi-generator/src/main/resources/dart2/api_helper.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/api_helper.mustache @@ -19,7 +19,7 @@ Iterable _convertParametersForCollectionFormat( final params = []; // preconditions - if (name != null && !name.isEmpty && value != null) { + if (name != null && name.isNotEmpty && value != null) { if (value is List) { // get the collection format, default: csv collectionFormat = (collectionFormat == null || collectionFormat.isEmpty) diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_exception.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_exception.dart index 1537c9769b21..86e2054bffec 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_exception.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_exception.dart @@ -19,6 +19,7 @@ class ApiException implements Exception { Exception innerException; StackTrace stackTrace; + @override String toString() { if (message == null) { return 'ApiException'; diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_helper.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_helper.dart index 4135dcf95b26..cb1db7f0a015 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_helper.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/lib/api_helper.dart @@ -28,7 +28,7 @@ Iterable _convertParametersForCollectionFormat( final params = []; // preconditions - if (name != null && !name.isEmpty && value != null) { + if (name != null && name.isNotEmpty && value != null) { if (value is List) { // get the collection format, default: csv collectionFormat = (collectionFormat == null || collectionFormat.isEmpty) diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_exception.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_exception.dart index 1537c9769b21..86e2054bffec 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_exception.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_exception.dart @@ -19,6 +19,7 @@ class ApiException implements Exception { Exception innerException; StackTrace stackTrace; + @override String toString() { if (message == null) { return 'ApiException'; diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_helper.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_helper.dart index 96214037944d..474cfb4294fb 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_helper.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api_helper.dart @@ -28,7 +28,7 @@ Iterable _convertParametersForCollectionFormat( final params = []; // preconditions - if (name != null && !name.isEmpty && value != null) { + if (name != null && name.isNotEmpty && value != null) { if (value is List) { // get the collection format, default: csv collectionFormat = (collectionFormat == null || collectionFormat.isEmpty) diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_exception.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_exception.dart index 1537c9769b21..86e2054bffec 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_exception.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_exception.dart @@ -19,6 +19,7 @@ class ApiException implements Exception { Exception innerException; StackTrace stackTrace; + @override String toString() { if (message == null) { return 'ApiException'; diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_helper.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_helper.dart index 51db433eb307..e88f8cc2987a 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_helper.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api_helper.dart @@ -28,7 +28,7 @@ Iterable _convertParametersForCollectionFormat( final params = []; // preconditions - if (name != null && !name.isEmpty && value != null) { + if (name != null && name.isNotEmpty && value != null) { if (value is List) { // get the collection format, default: csv collectionFormat = (collectionFormat == null || collectionFormat.isEmpty) From 4e48dae8e4b824d84c84930d2fc05d23ccbcad21 Mon Sep 17 00:00:00 2001 From: Anders Aaen Springborg Date: Mon, 24 May 2021 05:11:44 +0200 Subject: [PATCH 146/186] New generator | Arduino cpp (#9489) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * initil tiny client generator * Helper string * WIP: added helper file with json helper functions * WIP: model implementation.. Working on JSON * Added codegen files for model and helper * WIP: toJson() * Added mapping configurations * Upadet string compare * Removed redundant namespaces * Added files for example * fixed syntax errors * fixed syntax errors * header generation * unittest example for pet class * Refactored mustache & fixed logical errors * WIP: unit test mustache format * Removed legacy file * mustache service * Declare service in Java file * Removed legacy file * removed legacy code * Documentation * Added folder structure + new supporting files * Added file to run all unittests * Refactored unit tests * typemappings and new paths * First service impl * Added esp32 and esp8266 env * Added default values * Added cli option to specify controller * added type decl method * Added stringify methods * service get requests * Fix helper header * post merge fix * fix long test * Tiny namespace * remove shared pointer * include petapi * stringify * return problems * Canged logic for response-body handling * Implemented last logic for reponse handeling * Implemented constructor logic * first tiny sample * update basepath to petstore v3 * standard main example * root certificate example * root folder * TODO cleanup * exclude features * supports delete again!👷 * remove todo ❌ * new main example ❣️ * new main example ❣️ * Make our feature set realistic * fix indentation * HTTP / HTTPS Connection * Root certificate sample * https vs http 👨🏻‍🔬 * fix lint in template * default value for controller in config * new readme 📜 * remove old comments * removed unused testfile * no default root certificate * new main * remove test * Update platformio.ini.mustache 🤷‍♂️ * Update platformio.ini.mustache remove native * added support info * Add namespace to Pet 🐅 * bourne compatibility fix * spelling error in python file * bourne python script 🐍 * Version bump * Add bourne script to readme * update main sample, from template * pre_compiling_bourne.py.mustache to samples folder 📃 * set header Content'type to json * map todo🗺️ * remove unused debug flag⚒️ * added support for ESP8266 ༼ つ ◕_◕ ༽つ * added new sample for ESP32 📀 * 🎯 * removed use of namespace std ❌ * removed use of "__" in variables * removed unused code in destructor * fixed type comparison * move default ctor to header * added zero initialized primitive variables * moved variable to TypeMappings * updated ifndefines * Extra comment for build error in standard example 🦸🏽‍ * afer cpp-ish cast from std::string to uint8* cast🏰 * excluded maps type * Documentation og generator Co-authored-by: kaareHH Co-authored-by: mkakbas <45030188+mkakbas@users.noreply.github.com> Co-authored-by: mkakbas --- bin/configs/tiny-cpp-client-petstore-new.yaml | 7 + docs/generators/tiny-cpp.md | 243 ++++++++++ .../languages/TinyCppClientCodegen.java | 338 ++++++++++++++ .../org.openapitools.codegen.CodegenConfig | 1 + .../resources/tiny-cpp-client/README.mustache | 43 ++ .../tiny-cpp-client/helpers-body.mustache | 102 +++++ .../tiny-cpp-client/helpers-header.mustache | 22 + .../resources/tiny-cpp-client/main.mustache | 40 ++ .../tiny-cpp-client/model-body.mustache | 160 +++++++ .../tiny-cpp-client/model-header.mustache | 81 ++++ .../tiny-cpp-client/platformio.ini.mustache | 19 + .../pre_compiling_bourne.py.mustache | 25 ++ .../tiny-cpp-client/root.cert.mustache | 53 +++ .../tiny-cpp-client/run-tests.mustache | 44 ++ .../service/AbstractService.cpp.mustache | 15 + .../service/AbstractService.h.mustache | 39 ++ .../service/Response.h.mustache | 25 ++ .../tiny-cpp-client/service/api-body.mustache | 219 +++++++++ .../service/api-header.mustache | 74 ++++ .../tiny-cpp-client/unit-test-model.mustache | 161 +++++++ .../tiny-cpp-client/unittest.mustache | 132 ++++++ samples/client/petstore/tiny/cpp/.gitignore | 5 + .../tiny/cpp/.openapi-generator-ignore | 23 + .../tiny/cpp/.openapi-generator/FILES | 30 ++ .../tiny/cpp/.openapi-generator/VERSION | 1 + samples/client/petstore/tiny/cpp/README.md | 73 +++ .../tiny/cpp/lib/Models/ApiResponse.cpp | 139 ++++++ .../tiny/cpp/lib/Models/ApiResponse.h | 78 ++++ .../petstore/tiny/cpp/lib/Models/Category.cpp | 106 +++++ .../petstore/tiny/cpp/lib/Models/Category.h | 70 +++ .../petstore/tiny/cpp/lib/Models/Helpers.cpp | 102 +++++ .../petstore/tiny/cpp/lib/Models/Helpers.h | 22 + .../petstore/tiny/cpp/lib/Models/Order.cpp | 238 ++++++++++ .../petstore/tiny/cpp/lib/Models/Order.h | 102 +++++ .../petstore/tiny/cpp/lib/Models/Pet.cpp | 274 ++++++++++++ .../client/petstore/tiny/cpp/lib/Models/Pet.h | 105 +++++ .../petstore/tiny/cpp/lib/Models/Tag.cpp | 106 +++++ .../client/petstore/tiny/cpp/lib/Models/Tag.h | 70 +++ .../petstore/tiny/cpp/lib/Models/User.cpp | 304 +++++++++++++ .../petstore/tiny/cpp/lib/Models/User.h | 118 +++++ .../cpp/lib/TestFiles/ApiResponseTest.cpp | 139 ++++++ .../tiny/cpp/lib/TestFiles/CategoryTest.cpp | 97 ++++ .../tiny/cpp/lib/TestFiles/OrderTest.cpp | 245 ++++++++++ .../tiny/cpp/lib/TestFiles/PetTest.cpp | 145 ++++++ .../tiny/cpp/lib/TestFiles/TagTest.cpp | 97 ++++ .../tiny/cpp/lib/TestFiles/UserTest.cpp | 349 +++++++++++++++ .../tiny/cpp/lib/service/AbstractService.cpp | 8 + .../tiny/cpp/lib/service/AbstractService.h | 28 ++ .../petstore/tiny/cpp/lib/service/PetApi.cpp | 418 ++++++++++++++++++ .../petstore/tiny/cpp/lib/service/PetApi.h | 163 +++++++ .../petstore/tiny/cpp/lib/service/Response.h | 25 ++ .../tiny/cpp/lib/service/StoreApi.cpp | 185 ++++++++ .../petstore/tiny/cpp/lib/service/StoreApi.h | 83 ++++ .../petstore/tiny/cpp/lib/service/UserApi.cpp | 366 +++++++++++++++ .../petstore/tiny/cpp/lib/service/UserApi.h | 147 ++++++ .../client/petstore/tiny/cpp/platformio.ini | 7 + .../petstore/tiny/cpp/pre_compiling_bourne.py | 25 ++ samples/client/petstore/tiny/cpp/root.cert | 53 +++ samples/client/petstore/tiny/cpp/src/main.cpp | 37 ++ .../petstore/tiny/cpp/test/RunTests.cpp | 204 +++++++++ 60 files changed, 6630 insertions(+) create mode 100644 bin/configs/tiny-cpp-client-petstore-new.yaml create mode 100644 docs/generators/tiny-cpp.md create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TinyCppClientCodegen.java create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/README.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-body.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-header.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/main.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/model-body.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/model-header.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/platformio.ini.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/pre_compiling_bourne.py.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/root.cert.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/run-tests.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.cpp.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.h.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/service/Response.h.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-body.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-header.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/unit-test-model.mustache create mode 100644 modules/openapi-generator/src/main/resources/tiny-cpp-client/unittest.mustache create mode 100644 samples/client/petstore/tiny/cpp/.gitignore create mode 100644 samples/client/petstore/tiny/cpp/.openapi-generator-ignore create mode 100644 samples/client/petstore/tiny/cpp/.openapi-generator/FILES create mode 100644 samples/client/petstore/tiny/cpp/.openapi-generator/VERSION create mode 100644 samples/client/petstore/tiny/cpp/README.md create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/ApiResponse.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/ApiResponse.h create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/Category.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/Category.h create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/Helpers.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/Helpers.h create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/Order.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/Order.h create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/Pet.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/Pet.h create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/Tag.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/Tag.h create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/User.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/Models/User.h create mode 100644 samples/client/petstore/tiny/cpp/lib/TestFiles/ApiResponseTest.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/TestFiles/CategoryTest.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/TestFiles/OrderTest.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/TestFiles/PetTest.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/TestFiles/TagTest.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/TestFiles/UserTest.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/service/AbstractService.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/service/AbstractService.h create mode 100644 samples/client/petstore/tiny/cpp/lib/service/PetApi.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/service/PetApi.h create mode 100644 samples/client/petstore/tiny/cpp/lib/service/Response.h create mode 100644 samples/client/petstore/tiny/cpp/lib/service/StoreApi.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/service/StoreApi.h create mode 100644 samples/client/petstore/tiny/cpp/lib/service/UserApi.cpp create mode 100644 samples/client/petstore/tiny/cpp/lib/service/UserApi.h create mode 100644 samples/client/petstore/tiny/cpp/platformio.ini create mode 100644 samples/client/petstore/tiny/cpp/pre_compiling_bourne.py create mode 100644 samples/client/petstore/tiny/cpp/root.cert create mode 100644 samples/client/petstore/tiny/cpp/src/main.cpp create mode 100644 samples/client/petstore/tiny/cpp/test/RunTests.cpp diff --git a/bin/configs/tiny-cpp-client-petstore-new.yaml b/bin/configs/tiny-cpp-client-petstore-new.yaml new file mode 100644 index 000000000000..e80824e989a6 --- /dev/null +++ b/bin/configs/tiny-cpp-client-petstore-new.yaml @@ -0,0 +1,7 @@ +generatorName: tiny-cpp +outputDir: samples/client/petstore/tiny/cpp +inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml +templateDir: modules/openapi-generator/src/main/resources/tiny-cpp-client +additionalProperties: + hideGenerationTimestamp: "true" + controller: "esp32" diff --git a/docs/generators/tiny-cpp.md b/docs/generators/tiny-cpp.md new file mode 100644 index 000000000000..cd3877236ec7 --- /dev/null +++ b/docs/generators/tiny-cpp.md @@ -0,0 +1,243 @@ +--- +title: Config Options for tiny-cpp +sidebar_label: tiny-cpp +--- + +These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. + +| Option | Description | Values | Default | +| ------ | ----------- | ------ | ------- | +|allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| +|controller|name of microcontroller (e.g esp32 or esp8266)| |esp32| +|disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| +|ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |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| +|prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| +|reservedWordPrefix|Prefix to prepend to reserved words in order to avoid conflicts| |r_| +|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| +|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| +|variableNameFirstCharacterUppercase|Make first character of variable name uppercase (eg. value -> Value)| |true| + +## IMPORT MAPPING + +| Type/Alias | Imports | +| ---------- | ------- | + + +## INSTANTIATION TYPES + +| Type/Alias | Instantiated By | +| ---------- | --------------- | + + +## LANGUAGE PRIMITIVES + +
      +
    • bool
    • +
    • double
    • +
    • float
    • +
    • int
    • +
    • long
    • +
    • std::string
    • +
    + +## RESERVED WORDS + +
      +
    • alignas
    • +
    • alignof
    • +
    • and
    • +
    • and_eq
    • +
    • asm
    • +
    • auto
    • +
    • bitand
    • +
    • bitor
    • +
    • bool
    • +
    • break
    • +
    • case
    • +
    • catch
    • +
    • char
    • +
    • char16_t
    • +
    • char32_t
    • +
    • class
    • +
    • compl
    • +
    • concept
    • +
    • const
    • +
    • const_cast
    • +
    • constexpr
    • +
    • continue
    • +
    • decltype
    • +
    • default
    • +
    • delete
    • +
    • do
    • +
    • double
    • +
    • dynamic_cast
    • +
    • else
    • +
    • enum
    • +
    • explicit
    • +
    • export
    • +
    • extern
    • +
    • false
    • +
    • float
    • +
    • for
    • +
    • friend
    • +
    • goto
    • +
    • if
    • +
    • inline
    • +
    • int
    • +
    • linux
    • +
    • long
    • +
    • mutable
    • +
    • namespace
    • +
    • new
    • +
    • noexcept
    • +
    • not
    • +
    • not_eq
    • +
    • nullptr
    • +
    • operator
    • +
    • or
    • +
    • or_eq
    • +
    • private
    • +
    • protected
    • +
    • public
    • +
    • register
    • +
    • reinterpret_cast
    • +
    • requires
    • +
    • return
    • +
    • short
    • +
    • signed
    • +
    • sizeof
    • +
    • static
    • +
    • static_assert
    • +
    • static_cast
    • +
    • struct
    • +
    • switch
    • +
    • template
    • +
    • this
    • +
    • thread_local
    • +
    • throw
    • +
    • true
    • +
    • try
    • +
    • typedef
    • +
    • typeid
    • +
    • typename
    • +
    • union
    • +
    • unsigned
    • +
    • using
    • +
    • virtual
    • +
    • void
    • +
    • volatile
    • +
    • wchar_t
    • +
    • while
    • +
    • xor
    • +
    • xor_eq
    • +
    + +## FEATURE SET + + +### Client Modification Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasePath|✗|ToolingExtension +|Authorizations|✗|ToolingExtension +|UserAgent|✗|ToolingExtension +|MockServer|✗|ToolingExtension + +### Data Type Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Custom|✗|OAS2,OAS3 +|Int32|✓|OAS2,OAS3 +|Int64|✓|OAS2,OAS3 +|Float|✓|OAS2,OAS3 +|Double|✓|OAS2,OAS3 +|Decimal|✓|ToolingExtension +|String|✓|OAS2,OAS3 +|Byte|✓|OAS2,OAS3 +|Binary|✓|OAS2,OAS3 +|Boolean|✓|OAS2,OAS3 +|Date|✓|OAS2,OAS3 +|DateTime|✓|OAS2,OAS3 +|Password|✓|OAS2,OAS3 +|File|✓|OAS2 +|Array|✓|OAS2,OAS3 +|Maps|✗|ToolingExtension +|CollectionFormat|✓|OAS2 +|CollectionFormatMulti|✓|OAS2 +|Enum|✓|OAS2,OAS3 +|ArrayOfEnum|✓|ToolingExtension +|ArrayOfModel|✓|ToolingExtension +|ArrayOfCollectionOfPrimitives|✓|ToolingExtension +|ArrayOfCollectionOfModel|✓|ToolingExtension +|ArrayOfCollectionOfEnum|✓|ToolingExtension +|MapOfEnum|✗|ToolingExtension +|MapOfModel|✗|ToolingExtension +|MapOfCollectionOfPrimitives|✗|ToolingExtension +|MapOfCollectionOfModel|✗|ToolingExtension +|MapOfCollectionOfEnum|✗|ToolingExtension + +### Documentation Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Readme|✓|ToolingExtension +|Model|✓|ToolingExtension +|Api|✓|ToolingExtension + +### Global Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Host|✓|OAS2,OAS3 +|BasePath|✓|OAS2,OAS3 +|Info|✓|OAS2,OAS3 +|Schemes|✗|OAS2,OAS3 +|PartialSchemes|✓|OAS2,OAS3 +|Consumes|✓|OAS2 +|Produces|✓|OAS2 +|ExternalDocumentation|✓|OAS2,OAS3 +|Examples|✓|OAS2,OAS3 +|XMLStructureDefinitions|✗|OAS2,OAS3 +|MultiServer|✗|OAS3 +|ParameterizedServer|✗|OAS3 +|ParameterStyling|✗|OAS3 +|Callbacks|✗|OAS3 +|LinkObjects|✗|OAS3 + +### Parameter Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Path|✓|OAS2,OAS3 +|Query|✗|OAS2,OAS3 +|Header|✗|OAS2,OAS3 +|Body|✓|OAS2 +|FormUnencoded|✗|OAS2 +|FormMultipart|✗|OAS2 +|Cookie|✗|OAS3 + +### Schema Support Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Simple|✓|OAS2,OAS3 +|Composite|✓|OAS2,OAS3 +|Polymorphism|✗|OAS2,OAS3 +|Union|✗|OAS3 + +### Security Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasicAuth|✓|OAS2,OAS3 +|ApiKey|✓|OAS2,OAS3 +|OpenIDConnect|✗|OAS3 +|BearerToken|✓|OAS3 +|OAuth2_Implicit|✓|OAS2,OAS3 +|OAuth2_Password|✓|OAS2,OAS3 +|OAuth2_ClientCredentials|✓|OAS2,OAS3 +|OAuth2_AuthorizationCode|✓|OAS2,OAS3 + +### Wire Format Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|JSON|✓|OAS2,OAS3 +|XML|✗|OAS2,OAS3 +|PROTOBUF|✗|ToolingExtension +|Custom|✗|OAS2,OAS3 diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TinyCppClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TinyCppClientCodegen.java new file mode 100644 index 000000000000..91a9a95b5e41 --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TinyCppClientCodegen.java @@ -0,0 +1,338 @@ +package org.openapitools.codegen.languages; + +import org.openapitools.codegen.*; +import io.swagger.v3.oas.models.media.Schema; +import io.swagger.v3.parser.util.SchemaTypeUtil; +import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.utils.ModelUtils; + +import java.io.File; +import java.util.*; + +import org.apache.commons.lang3.StringUtils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TinyCppClientCodegen extends AbstractCppCodegen implements CodegenConfig { + public static final String PROJECT_NAME = "TinyClient"; + + static final Logger LOGGER = LoggerFactory.getLogger(TinyCppClientCodegen.class); + + public static final String MICROCONTROLLER = "controller"; + public static final String rootFolder = ""; + protected String controller = "esp32"; + + + public CodegenType getTag() { + return CodegenType.CLIENT; + } + + /** + * Configures a friendly name for the generator. This will be used by the + * generator to select the library with the -g flag. + * + * @return the friendly name for the generator + */ + public String getName() { + return "tiny-cpp"; + } + + /** + * Returns human-friendly help for the generator. Provide the consumer with + * help tips, parameters here + * + * @return A string value for the help message + */ + public String getHelp() { + return "Generates a Arduino rest client."; + } + + public void addControllerToAdditionalProperties(){ + Map supportedControllers = new HashMap(){{ + put("esp32", "isESP32"); + put("esp8266", "isESP8266"); + }}; + if (supportedControllers.containsKey(controller)) { + additionalProperties.put(supportedControllers.get(controller), true); + } + else { + //String msg = String.format("The specified controller: %s is not supported.\nSupported controllers are: %s", + // controller, + // supportedControllers.keySet()); + throw new UnsupportedOperationException("Supported controllers are: ESP32, ESP8266"); + } + } + + public TinyCppClientCodegen() { + super(); + + modifyFeatureSet(feature -> feature + .excludeGlobalFeatures( + GlobalFeature.XMLStructureDefinitions, + GlobalFeature.Callbacks, + GlobalFeature.LinkObjects, + GlobalFeature.ParameterStyling, + GlobalFeature.MultiServer) + .excludeSchemaSupportFeatures( + SchemaSupportFeature.Polymorphism + ) + .excludeParameterFeatures( + ParameterFeature.Cookie, + ParameterFeature.Header, + ParameterFeature.FormUnencoded, + ParameterFeature.FormMultipart, + ParameterFeature.Query + ) + .excludeDataTypeFeatures( + DataTypeFeature.Enum, + DataTypeFeature.Maps, + DataTypeFeature.MapOfCollectionOfEnum, + DataTypeFeature.MapOfCollectionOfModel, + DataTypeFeature.MapOfCollectionOfPrimitives, + DataTypeFeature.MapOfEnum, + DataTypeFeature.MapOfModel + + ) + .excludeWireFormatFeatures( + WireFormatFeature.XML, + WireFormatFeature.PROTOBUF, + WireFormatFeature.Custom + ) + .includeDocumentationFeatures( + DocumentationFeature.Readme + )); + + outputFolder = "generated-code" + File.separator + "tiny-cpp"; + embeddedTemplateDir = templateDir = "tiny-cpp-client"; + + String libFolder = "lib"; + // MODELS + modelPackage = libFolder + File.separator + "Models"; + modelTemplateFiles.put("model-header.mustache", ".h"); + modelTemplateFiles.put("model-body.mustache", ".cpp"); + + // MODELS: Helpers + supportingFiles.add(new SupportingFile("helpers-header.mustache", modelPackage, "Helpers.h")); + supportingFiles.add(new SupportingFile("helpers-body.mustache", modelPackage, "Helpers.cpp")); + + // MODELS: TESTS + testPackage = libFolder + File.separator + "TestFiles"; + modelTestTemplateFiles.put("unit-test-model.mustache", ".cpp"); + supportingFiles.add(new SupportingFile("run-tests.mustache", "test", "RunTests.cpp")); + + // SERVICES + apiPackage = TinyCppClientCodegen.libFolder + File.separator + "service"; + apiTemplateFiles.put("service/api-header.mustache".replace('/', File.separatorChar), ".h"); + apiTemplateFiles.put("service/api-body.mustache".replace('/', File.separatorChar), ".cpp"); + + // SERVICES: Helpers + supportingFiles.add(new SupportingFile("service/Response.h.mustache", serviceFolder, "Response.h")); + supportingFiles.add(new SupportingFile("service/AbstractService.h.mustache", serviceFolder, "AbstractService.h")); + supportingFiles.add(new SupportingFile("service/AbstractService.cpp.mustache", serviceFolder, "AbstractService.cpp")); + + + // Main + supportingFiles.add(new SupportingFile("main.mustache", TinyCppClientCodegen.sourceFolder, "main.cpp")); + + // Config files + supportingFiles.add(new SupportingFile("README.mustache", rootFolder, "README.md")); + supportingFiles.add(new SupportingFile("platformio.ini.mustache", rootFolder, "platformio.ini")); + supportingFiles.add(new SupportingFile("root.cert.mustache", rootFolder, "root.cert")); + supportingFiles.add(new SupportingFile("README.mustache", rootFolder, "README.md")); + supportingFiles.add(new SupportingFile("pre_compiling_bourne.py.mustache", rootFolder, "pre_compiling_bourne.py")); + + + + defaultIncludes = new HashSet( + Arrays.asList( + "bool", + "int", + "long", + "double", + "float") + ); + languageSpecificPrimitives = new HashSet( + Arrays.asList( + "bool", + "int", + "long", + "double", + "float", + "std::string") + ); + + + + + + super.typeMapping = new HashMap(); + typeMapping.put("string", "std::string"); + typeMapping.put("integer", "int"); + typeMapping.put("boolean", "bool"); + typeMapping.put("array", "std::list"); + typeMapping.put("DateTime", "std::string"); + + cliOptions.add(new CliOption(MICROCONTROLLER, "name of microcontroller (e.g esp32 or esp8266)"). + defaultValue("esp32")); + + makeTypeMappings(); + + } + + + // FilePaths + private static final String sourceFolder = "src"; + private static final String libFolder = "lib"; + private static final String serviceFolder = libFolder + File.separator + "service"; + + @Override + public String getTypeDeclaration(String str) { + return str; + } + + private void makeTypeMappings() { + // Types + String cpp_array_type = "std::list"; + typeMapping = new HashMap<>(); + + typeMapping.put("string", "std::string"); + typeMapping.put("integer", "int"); + typeMapping.put("float", "float"); + typeMapping.put("long", "long"); + typeMapping.put("boolean", "bool"); + typeMapping.put("double", "double"); + typeMapping.put("array", cpp_array_type); + typeMapping.put("number", "long"); + typeMapping.put("binary", "std::string"); + typeMapping.put("password", "std::string"); + typeMapping.put("file", "std::string"); + typeMapping.put("DateTime", "std::string"); + typeMapping.put("Date", "std::string"); + typeMapping.put("UUID", "std::string"); + typeMapping.put("URI", "std::string"); + } + + + + @Override + public void processOpts() { + super.processOpts(); + // Throw exception if http and esp8266 + + // -- --additional-properties=controller= + if (additionalProperties.containsKey(MICROCONTROLLER)) { + controller = additionalProperties.get(MICROCONTROLLER).toString(); + } + + addControllerToAdditionalProperties(); + + LOGGER.info("Generator targeting the following microcontroller: {}", controller); + } + + + @Override + public String toInstantiationType(Schema p) { + if (ModelUtils.isArraySchema(p)) { + return instantiationTypes.get("array"); + } else { + return null; + } + } + + + @Override + public String getTypeDeclaration(Schema p) { + String openAPIType = getSchemaType(p); + if (languageSpecificPrimitives.contains(openAPIType)) { + return toModelName(openAPIType); + } else { + return openAPIType + ""; + } + } + + + @Override + public String getSchemaType(Schema p) { + String openAPIType = super.getSchemaType(p); + String type = null; + if (typeMapping.containsKey(openAPIType)) { + type = typeMapping.get(openAPIType); + if (languageSpecificPrimitives.contains(type)) { + return toModelName(type); + } + } else { + type = openAPIType; + } + return toModelName(type); + } + + @Override + public String toModelName(String type) { + if (typeMapping.keySet().contains(type) || + typeMapping.values().contains(type) || + defaultIncludes.contains(type) || + languageSpecificPrimitives.contains(type)) { + return type; + } else { + return Character.toUpperCase(type.charAt(0)) + type.substring(1); + } + } + + @Override + public String toModelImport(String name) { + if (name.equals("std::string")) { + return "#include "; + } else if (name.equals("std::list")) { + return "#include "; + } else if (name.equals("Map")) { + return "#include "; + } + return "#include \"" + name + ".h\""; + } + + + + @Override + public String toApiImport(String name) { + return super.toApiImport(name); + } + + @Override + public String toVarName(String name) { + String paramName = name.replaceAll("[^a-zA-Z0-9_]", ""); + if (name.length() > 0 ) { + paramName = Character.toLowerCase(paramName.charAt(0)) + paramName.substring(1); + } + if (isReservedWord(paramName)) { + return escapeReservedWord(paramName); + } + return "" + paramName; + } + + public String toDefaultValue(Schema p) { + if (ModelUtils.isBooleanSchema(p)) { + return "bool(false)"; + } else if (ModelUtils.isNumberSchema(p)) { + return "float(0)"; + } else if (ModelUtils.isIntegerSchema(p)) { + if (SchemaTypeUtil.INTEGER64_FORMAT.equals(p.getFormat())) { + return "long(0)"; + } + return "int(0)"; + } else if (ModelUtils.isArraySchema(p)) { + return "std::list"; + } else if (!StringUtils.isEmpty(p.get$ref())) { + return toModelName(ModelUtils.getSimpleRef(p.get$ref())) + "()"; + } else if (ModelUtils.isDateSchema(p) || ModelUtils.isDateTimeSchema(p)) { + return "std::string()"; + } else if (ModelUtils.isStringSchema(p)) { + return "std::string()"; + } + return "null"; + } + + + + +} diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig index eacec0f51278..1d4ef4f2568a 100644 --- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig +++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig @@ -132,4 +132,5 @@ org.openapitools.codegen.languages.TypeScriptNestjsClientCodegen org.openapitools.codegen.languages.TypeScriptNodeClientCodegen org.openapitools.codegen.languages.TypeScriptReduxQueryClientCodegen org.openapitools.codegen.languages.TypeScriptRxjsClientCodegen +org.openapitools.codegen.languages.TinyCppClientCodegen org.openapitools.codegen.languages.GoEchoServerCodegen diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/README.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/README.mustache new file mode 100644 index 000000000000..e749562a0aa3 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/README.mustache @@ -0,0 +1,43 @@ +# Documentation for OpenAPI Petstore +This is a client generator for microcontrollers on the Espressif32 platform and the Arduino framework +After the client have been generated, you have to change these following variablies: +- root.cert | Provide your service root certificate. +- src/main.cpp | Change wifi name +- src/main.cpp | Change wifi password +- lib/service/AbstractService.h | Change to your url + +# Documentation for {{#openAPI}}{{#info}}{{title}} {{version}} Tiny client cpp (Arduino) {{/info}}{{/openAPI}} + +The project is structured like this: +``` +samples/client/petstore/tiny/cpp/ +├── lib +│ ├── Models +│ ├── service +│ └── TestFiles +├── platformio.ini +├── pre_compiling_bourne.py +├── README.md +├── root.cert +├── src +│ └── main.cpp +└── test + └── RunTests.cpp +``` + +All URIs are relative to {{{scheme}}}://{{{host}}}{{{basePath}}} +{{#apiInfo}}{{#apis}}{{#operations}} +### {{classname}} +|Method | HTTP request | Description| +|------------- | ------------- | -------------| + {{#operation}} +|*{{operationId}}* | *{{httpMethod}}* {{{path}}} | {{{summary}}}.| + {{/operation}} +{{/operations}}{{/apis}}{{/apiInfo}} + +## What are the Model files for the data structures/objects? +|Class | Description| +|------------- | -------------| +{{#models}}{{#model}}|*{{classname}}* | {{{description}}}| +{{/model}}{{/models}} + diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-body.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-body.mustache new file mode 100644 index 000000000000..c3935b37cde9 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-body.mustache @@ -0,0 +1,102 @@ +#include "Helpers.h" +#include +#include + +bool isprimitive(std::string type){ + if(type == "std::string" || + type == "int" || + type == "float" || + type == "long" || + type == "double" || + type == "bool" || + type == "std::map" || + type == "std::list") + { + return true; + } + return false; +} + + +void +jsonToValue(void* target, bourne::json value, std::string type) +{ + if (target == NULL || value.is_null()) { + return; + } + + else if (type.compare("bool") == 0) + { + bool* val = static_cast (target); + *val = value.to_bool(); + } + + else if (type.compare("int") == 0) + { + int* val = static_cast (target); + *val = value.to_int(); + } + + else if (type.compare("float") == 0) + { + float* val = static_cast (target); + *val = (float)(value.to_float()); + } + + else if (type.compare("long") == 0) + { + long* val = static_cast (target); + *val = (long)(value.to_int()); + } + + else if (type.compare("double") == 0) + { + double* val = static_cast (target); + *val = value.to_float(); + } + + else if (type.compare("std::string") == 0) + { + std::string* val = static_cast (target); + *val = value.to_string(); + } + else { + return; + } +} + +std::string +stringify(long input){ + std::stringstream stream; + stream << input; + return stream.str(); + +}; + +std::string +stringify(int input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; + +std::string +stringify(double input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; + +std::string +stringify(float input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; + +std::string +stringify(std::string input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-header.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-header.mustache new file mode 100644 index 000000000000..5ef7d9afdf77 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-header.mustache @@ -0,0 +1,22 @@ +#ifndef TINY_CPP_CLIENT_HELPERS_H_ +#define TINY_CPP_CLIENT_HELPERS_H_ + +#include +#include "bourne/json.hpp" + +bool isprimitive(std::string type); + +void jsonToValue(void* target, bourne::json value, std::string type); + +std::string stringify(long input); + +std::string stringify(int input); + +std::string stringify(double input); + +std::string stringify(float input); + +std::string stringify(std::string input); + +#endif /* TINY_CPP_CLIENT_HELPERS_H_ */ + diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/main.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/main.mustache new file mode 100644 index 000000000000..56170a91e0fc --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/main.mustache @@ -0,0 +1,40 @@ +#include "PetApi.h" +{{#isESP8266}} +#include "ESP8266WiFi.h" +{{/isESP8266}} + +const char* ssid = "your wifi name"; // TODO Change wifi name +const char* password = "Your wifi password"; //TODO Change wifi password + + +void setup(){ + //Initialize serial and wait for port to open: + Serial.begin(9600); + delay(100); + + Serial.print("Attempting to connect to SSID: "); + Serial.println(ssid); + WiFi.begin(ssid, password); + + // attempt to connect to Wifi network: + while (WiFi.status() != WL_CONNECTED) { + Serial.print("."); + // wait 1 second for re-trying + delay(1000); + } + + Serial.print("Connected to "); + Serial.println(ssid); + + //Print LAN IP. + Serial.print("IP address set: "); + Serial.println(WiFi.localIP()); + + Tiny::PetApi petapi; + auto resp = petapi.getPetById(10); + Serial.println(resp.code); + Tiny::Pet pet = resp.obj; + Serial.println(pet.toJson().dump().c_str()); +} + +void loop(){} diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/model-body.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/model-body.mustache new file mode 100644 index 000000000000..b2f2ee66fd9d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/model-body.mustache @@ -0,0 +1,160 @@ + +{{#models}}{{#model}} +#include "{{classname}}.h" + +using namespace Tiny; + +{{classname}}::{{classname}}() +{ + {{#vars}} + {{#isContainer}} + {{name}} = {{defaultValue}}<{{#items}}{{baseType}}{{/items}}>(); + {{/isContainer}} + {{^isContainer}} + {{name}} = {{defaultValue}}; + {{/isContainer}} + {{/vars}} +} + +{{classname}}::{{classname}}(std::string jsonString) +{ + this->fromJson(jsonString); +} + +{{classname}}::~{{classname}}() +{ + +} + +void +{{classname}}::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + {{#vars}} + const char *{{name}}Key = "{{baseName}}"; + + if(object.has_key({{name}}Key)) + { + bourne::json value = object[{{name}}Key]; + + {{#isContainer}} + {{#isArray}} + + std::list<{{#items}}{{dataType}}{{/items}}> {{name}}_list; + {{#items}}{{dataType}}{{/items}} element; + for(auto& var : value.array_range()) + { + {{#items}} + + {{#isPrimitiveType}} + jsonToValue(&element, var, "{{dataType}}"); + {{/isPrimitiveType}} + + {{^isPrimitiveType}} + element.fromJson(var.dump()); + {{/isPrimitiveType}} + + {{/items}} + {{name}}_list.push_back(element); + } + {{name}} = {{name}}_list; + + {{/isArray}} + {{/isContainer}} + + {{^isContainer}} + + {{#isPrimitiveType}} + jsonToValue(&{{name}}, value, "{{baseType}}"); + {{/isPrimitiveType}} + + {{^isPrimitiveType}} + {{baseType}}* obj = &{{name}}; + obj->fromJson(value.dump()); + {{/isPrimitiveType}} + + {{/isContainer}} + } + + {{/vars}} + +} + +bourne::json +{{classname}}::toJson() +{ + bourne::json object = bourne::json::object(); + + {{#vars}} + + {{#isContainer}} + {{#isArray}} + + {{#items}} + {{#isPrimitiveType}} + + std::list<{{dataType}}> {{name}}_list = {{getter}}(); + bourne::json {{name}}_arr = bourne::json::array(); + + for(auto& var : {{name}}_list) + { + {{name}}_arr.append(var); + } + object["{{name}}"] = {{name}}_arr; + + + {{/isPrimitiveType}} + + {{^isPrimitiveType}} + std::list<{{dataType}}> {{name}}_list = {{getter}}(); + bourne::json {{name}}_arr = bourne::json::array(); + + for(auto& var : {{name}}_list) + { + {{dataType}} obj = var; + {{name}}_arr.append(obj.toJson()); + } + object["{{name}}"] = {{name}}_arr; + + {{/isPrimitiveType}} + {{/items}} + {{/isArray}} + {{/isContainer}} + + + {{^isContainer}} + + {{#isPrimitiveType}} + object["{{name}}"] = {{getter}}(); + {{/isPrimitiveType}} + + {{^isPrimitiveType}} + object["{{name}}"] = {{getter}}().toJson(); + {{/isPrimitiveType}} + + {{/isContainer}} + {{/vars}} + + return object; + +} + +{{#vars}} +{{dataType}}{{#isContainer}}{{#isMap}}{{/isMap}}{{^isMap}}<{{#items}}{{dataType}}{{/items}}>{{/isMap}}{{/isContainer}} +{{classname}}::{{getter}}() +{ + return {{name}}; +} + +void +{{classname}}::{{setter}}({{dataType}} {{#isContainer}}{{#isMap}}{{/isMap}}{{^isMap}}<{{#items}}{{dataType}}{{/items}}>{{/isMap}}{{/isContainer}} {{name}}) +{ + this->{{name}} = {{name}}; +} + +{{/vars}} + + +{{/model}} +{{/models}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/model-header.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/model-header.mustache new file mode 100644 index 000000000000..a71ba0677c12 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/model-header.mustache @@ -0,0 +1,81 @@ + +{{#models}}{{#model}}/* + * {{classname}}.h + * + * {{description}} + */ + +#ifndef TINY_CPP_CLIENT_{{classname}}_H_ +#define TINY_CPP_CLIENT_{{classname}}_H_ + +{{/model}}{{/models}} +#include +#include "bourne/json.hpp" +#include "Helpers.h" +{{#imports}} +{{{import}}} +{{/imports}} + +namespace Tiny { +{{#models}}{{#model}} + +/*! \brief {{{description}}} + * + * \ingroup Models + * + */ + +class {{classname}}{ +public: + + /*! \brief Constructor. + */ + {{classname}}(); + {{classname}}(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~{{classname}}(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + {{#vars}} + /*! \brief Get {{{description}}} + */ + {{dataType}}{{#isContainer}}{{#isMap}}{{/isMap}}{{^isMap}}<{{#items}}{{dataType}}{{/items}}>{{/isMap}}{{/isContainer}} {{getter}}(); + + /*! \brief Set {{{description}}} + */ + void {{setter}}({{dataType}} {{#isContainer}}{{#isMap}}{{/isMap}}{{^isMap}}<{{#items}}{{dataType}}{{/items}}>{{/isMap}}{{/isContainer}} {{name}}); + {{/vars}} + + + private: + {{#vars}} + {{^isContainer}} + {{#isPrimitiveType}} + {{dataType}} {{name}}{}; + {{/isPrimitiveType}} + {{^isPrimitiveType}} + {{dataType}} {{name}}; + {{/isPrimitiveType}} + {{/isContainer}} + {{#isContainer}} + {{dataType}}{{#isMap}}{{/isMap}}{{^isMap}}<{{#items}}{{dataType}}{{/items}}>{{/isMap}} {{name}}; + {{/isContainer}} + {{/vars}} +}; +{{/model}} +{{/models}} +} + +#endif /* TINY_CPP_CLIENT_{{classname}}_H_ */ diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/platformio.ini.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/platformio.ini.mustache new file mode 100644 index 000000000000..1e364ee0ab20 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/platformio.ini.mustache @@ -0,0 +1,19 @@ +{{#isESP32}} +[env:esp32] +platform = espressif32 +board = nodemcu-32s +framework = arduino +lib_deps = https://github.com/steinwurf/bourne.git +extra_scripts = pre_compiling_bourne.py +{{/isESP32}} + +{{#isESP8266}} +[env:esp8266] +platform = espressif8266 +board = d1_mini +framework = arduino +lib_deps = https://github.com/steinwurf/bourne.git +build_flags = -fexceptions +build_unflags = -fno-exceptions +extra_scripts = pre_compiling_bourne.py +{{/isESP8266}} diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/pre_compiling_bourne.py.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/pre_compiling_bourne.py.mustache new file mode 100644 index 000000000000..96356dcdf158 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/pre_compiling_bourne.py.mustache @@ -0,0 +1,25 @@ +Import("env") + +## Compatibility for bourne to work on microcontrollers +# We insert '#define _GLIBCXX_USE_C99' in files that use std::stoll or std::to_string +def insert_c99_into(file): + import fileinput + + path = env['PROJECT_LIBDEPS_DIR'] + "/" + env['PIOENV'] + "/bourne/src/bourne/" + file + value = '#define _GLIBCXX_USE_C99 1\n' + + for line in fileinput.FileInput(path,inplace=1): + if line.startswith('#define _GLIBCXX_USE_C99'): + continue + elif line.startswith('// D'): + line=line.replace(line,line+value) + print(line, end='') + +def fix_parser(): + insert_c99_into('detail/parser.cpp') + +def fix_json(): + insert_c99_into('json.cpp') + +fix_parser() +fix_json() \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/root.cert.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/root.cert.mustache new file mode 100644 index 000000000000..bad9c08efad1 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/root.cert.mustache @@ -0,0 +1,53 @@ +// TODO: Provide your service root certificate. +// Below is two examples of root certificates. + +// Let's encrypt root certificate +/** +"-----BEGIN CERTIFICATE-----\n" \ +"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n" \ +"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" \ +"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n" \ +"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n" \ +"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n" \ +"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n" \ +"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n" \ +"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n" \ +"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n" \ +"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n" \ +"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n" \ +"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n" \ +"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n" \ +"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n" \ +"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n" \ +"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n" \ +"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n" \ +"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n" \ +"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n" \ +"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n" \ +"-----END CERTIFICATE-----\n" +*/ + +// Amazon_Root_CA_1.pem +/** +"-----BEGIN CERTIFICATE-----\n" \ +"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n" \ +"ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\n" \ +"b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\n" \ +"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n" \ +"b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\n" \ +"ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n" \ +"9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\n" \ +"IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\n" \ +"VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n" \ +"93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\n" \ +"jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n" \ +"AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\n" \ +"A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\n" \ +"U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\n" \ +"N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\n" \ +"o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n" \ +"5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\n" \ +"rqXRfboQnoZsG4q5WTP468SQvvG5\n" \ +"-----END CERTIFICATE-----\n" \ +*/ + diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/run-tests.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/run-tests.mustache new file mode 100644 index 000000000000..54bf326c43a3 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/run-tests.mustache @@ -0,0 +1,44 @@ +{{#models}}{{#model}} +#include "{{classname}}Test.cpp" +{{/model}}{{/models}} + + +void setUp(){} + +void tearDown(){} + +void runTests(){ + {{#models}}{{#model}} + {{#vars}} + {{#isPrimitiveType}}{{^isArray}} + RUN_TEST(test_{{classname}}_{{name}}_is_assigned_from_json); + {{/isArray}}{{/isPrimitiveType}} + {{/vars}} + {{/model}}{{/models}} + + {{#models}}{{#model}} + {{#vars}} + {{#isPrimitiveType}}{{^isArray}} + RUN_TEST(test_{{classname}}_{{name}}_is_converted_to_json); + {{/isArray}}{{/isPrimitiveType}} + {{/vars}} + {{/model}}{{/models}} + + +} + +int main(void) { + UNITY_BEGIN(); + runTests(); + return UNITY_END(); +} + +void setup() { + UNITY_BEGIN(); + runTests(); + UNITY_END(); +} + +void loop() { + +} diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.cpp.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.cpp.mustache new file mode 100644 index 000000000000..0c056c85ae35 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.cpp.mustache @@ -0,0 +1,15 @@ +#include "AbstractService.h" +#include "Arduino.h" + +{{#isESP8266}} +void Tiny::AbstractService::begin(std::string url){ + http.begin(client, String(url.c_str())); +} +{{/isESP8266}} + + +{{#isESP32}} +void Tiny::AbstractService::begin(std::string url){ + http.begin(String(url.c_str()), test_root_ca); //HTTPS connection +} +{{/isESP32}} diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.h.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.h.mustache new file mode 100644 index 000000000000..7dc46b5b20f0 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.h.mustache @@ -0,0 +1,39 @@ +#ifndef TINY_CPP_CLIENT_ABSTRACTSERVICE_H_ +#define TINY_CPP_CLIENT_ABSTRACTSERVICE_H_ +{{#isESP8266}} +#include +#include +{{/isESP8266}} + +{{#isESP32}} +#include "HTTPClient.h" +{{/isESP32}} +#include "Response.h" +namespace Tiny { + +/** +* Class +* Generated with openapi::tiny-cpp-client +*/ +class AbstractService { +public: +HTTPClient http; +{{#isESP8266}} +WiFiClient client; +{{/isESP8266}} +std::string basepath = "https://petstore3.swagger.io/api/v3"; // TODO: change to your url + +void begin(std::string url); + +{{#isESP32}} +// Go and comment out a certificate in root.cert, if you get an error here +// Certificate from file +const char* test_root_ca = +#include "../../root.cert" +; +{{/isESP32}} + +}; // end class +}// namespace Tinyclient + +#endif /* TINY_CPP_CLIENT_ABSTRACTSERVICE_H_ */ diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/Response.h.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/Response.h.mustache new file mode 100644 index 000000000000..9b7b616b8f1b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/Response.h.mustache @@ -0,0 +1,25 @@ +#ifndef TINY_CPP_CLIENT_RESPONSE_H_ +#define TINY_CPP_CLIENT_RESPONSE_H_ +#include + +namespace Tiny { + +/** +* Class +* Generated with openapi::tiny-cpp-client +*/ +template + class Response { + public: + + Response(T _obj, int _code){ + obj = _obj; + code = _code; + } + + int code; + T obj; + }; + } // namespace Tinyclient + +#endif /* TINY_CPP_CLIENT_RESPONSE_H_ */ diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-body.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-body.mustache new file mode 100644 index 000000000000..dc1298688372 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-body.mustache @@ -0,0 +1,219 @@ +#include "{{classname}}.h" + +using namespace Tiny; + +{{#operations}} + + {{! Method }} + {{#operation}} + + Response< + {{#returnType}} + {{#returnContainer}} + {{#isArray}} + {{returnType}}<{{returnBaseType}}> + {{/isArray}} + {{#isMap}} + String + {{/isMap}} + {{/returnContainer}} + {{^returnContainer}} + {{returnType}} + {{/returnContainer}} + {{/returnType}} + {{^returnType}} + String + {{/returnType}} + > + {{classname}}:: + {{! Method name }} + {{nickname}}( + {{! Params }} + {{#allParams}} + {{! Arrays }} + {{#isContainer}}{{{dataType}}}<{{baseType}}> {{paramName}}{{/isContainer}}{{#isMap}}// TODO: Implement Maps{{/isMap}} + {{! Normal types/objects }} + {{^isContainer}}{{{dataType}}} {{paramName}}{{/isContainer}} + {{^-last}}, {{/-last}} + {{/allParams}} + ) + {{! Method start}} + { + std::string url = basepath + "{{{path}}}"; //{{#pathParams}}{{{paramName}}} {{/pathParams}} + // Query | {{#queryParams}}{{paramName}} {{/queryParams}} + // Headers | {{#headerParams}}{{paramName}} {{/headerParams}} + // Form | {{#formParams}}{{paramName}} {{/formParams}} + // Body | {{#bodyParam}}{{paramName}}{{/bodyParam}} + + {{#pathParams}} + std::string s_{{paramName}}("{"); + s_{{paramName}}.append("{{{baseName}}}"); + s_{{paramName}}.append("}"); + + int pos = url.find(s_{{paramName}}); + + url.erase(pos, s_{{paramName}}.length()); + url.insert(pos, stringify({{paramName}})); + {{/pathParams}} + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | {{httpMethod}} + {{#bodyParam}} + http.addHeader("Content-Type", "application/json"); + + {{#isContainer}} + {{#isArray}} + {{#items}} + {{#isPrimitiveType}} + bourne::json tmp_arr = bourne::json::array(); + for(auto& var : {{paramName}}) + { + tmp_arr.append(var); + } + payload = tmp_arr.dump(); + {{/isPrimitiveType}} + + {{^isPrimitiveType}} + bourne::json tmp_arr = bourne::json::array(); + for(auto& var : {{paramName}}) + { + auto tmp = var.toJson(); + tmp_arr.append(tmp); + + } + payload = tmp_arr.dump(); + {{/isPrimitiveType}} + {{/items}} + {{/isArray}} + {{/isContainer}} + + {{^isContainer}} + {{#isPrimitiveType}} + payload = stringify({{paramName}}); + {{/isPrimitiveType}} + + {{^isPrimitiveType}} + payload = {{paramName}}.toJson().dump(); + {{/isPrimitiveType}} + {{/isContainer}} + + {{/bodyParam}} + int httpCode = http.sendRequest("{{httpMethod}}", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + {{#returnType}} + + {{#returnContainer}} + {{#isArray}} + + std::list<{{returnBaseType}}> obj = std::list<{{returnBaseType}}>(); + bourne::json jsonPayload(output_string); + + {{#returnBaseType}} + + {{#isBool}} + for(auto& var : jsonPayload.array_range()) + { + {{returnBaseType}} tmp = var.to_bool(); + obj.push_back(tmp); + } + {{/isBool}} + + {{#isInteger}} + for(auto& var : jsonPayload.array_range()) + { + {{returnBaseType}} tmp = var.to_int(); + obj.push_back(tmp); + } + {{/isInteger}} + + {{#isLong}} + for(auto& var : jsonPayload.array_range()) + { + {{returnBaseType}} tmp = (long)(var.to_int()); + obj.push_back(tmp); + } + {{/isLong}} + + {{#isFloat}} + for(auto& var : jsonPayload.array_range()) + { + {{returnBaseType}} tmp = (float)(var.to_float()); + obj.push_back(tmp); + } + {{/isFloat}} + + {{#isString}} + for(auto& var : jsonPayload.array_range()) + { + {{returnBaseType}} tmp = var.to_string(); + obj.push_back(tmp); + } + {{/isString}} + + + {{^isBool}}{{^isInteger}}{{^isLong}}{{^isString}}{{^isFloat}} + for(auto& var : jsonPayload.array_range()) + { + {{returnBaseType}} tmp(var.dump()); + obj.push_back(tmp); + } + {{/isFloat}}{{/isString}}{{/isLong}}{{/isInteger}}{{/isBool}} + + {{/returnBaseType}} + + {{/isArray}} + + {{#isMap}} + //TODO: Implement map logic here + {{/isMap}} + + {{/returnContainer}} + + {{^returnContainer}} + {{#returnTypeIsPrimitive}} + bourne::json jsonPayload(output_string); + {{returnType}} obj; + jsonToValue(&obj, jsonPayload, "{{returnType}}"); + {{/returnTypeIsPrimitive}} + + {{^returnTypeIsPrimitive}} + {{returnType}} obj(output_string); + {{/returnTypeIsPrimitive}} + {{/returnContainer}} + + {{/returnType}} + + {{#returnType}} + {{#returnContainer}} + {{#isArray}} + Response<{{returnType}}<{{returnBaseType}}>> response(obj, httpCode); + {{/isArray}} + {{#isMap}} + //TODO: No support for maps. + Response response(output, httpCode); + {{/isMap}} + {{/returnContainer}} + {{^returnContainer}} + Response<{{returnType}}> response(obj, httpCode); + {{/returnContainer}} + {{/returnType}} + {{^returnType}} + Response response(output, httpCode); + {{/returnType}} + return response; + } + {{/operation}} + + + +{{/operations}} + diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-header.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-header.mustache new file mode 100644 index 000000000000..416369dcf31a --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-header.mustache @@ -0,0 +1,74 @@ +#ifndef TINY_CPP_CLIENT_{{classname}}_H_ +#define TINY_CPP_CLIENT_{{classname}}_H_ + +{{{defaultInclude}}} +#include "Response.h" +#include "Arduino.h" +#include "AbstractService.h" +#include "Helpers.h" +#include + +{{#imports}} +{{{import}}} +{{/imports}} + +namespace Tiny { + +{{#operations}} +/** + * Class {{basename}} + * Generated with openapi::tiny-cpp-client + */ + +class {{classname}} : public AbstractService { +public: + {{! Constructor }} + {{classname}}() = default; + + {{! Destructor }} + virtual ~{{classname}}() = default; + + {{! Service endpoint }} + {{#operation}} + /** + * {{{summary}}}. + * + * {{{notes}}}{{#allParams}} + * \param {{paramName}} {{{description}}}{{#required}} *Required*{{/required}}{{/allParams}} + */ + Response< + {{#returnType}} + {{#returnContainer}} + {{#isArray}} + {{returnType}}<{{returnBaseType}}> + {{/isArray}} + {{#isMap}} + String + {{/isMap}} + {{/returnContainer}} + {{^returnContainer}} + {{returnType}} + {{/returnContainer}} + {{/returnType}} + {{^returnType}} + String + {{/returnType}} + > + {{! Method name }} + {{nickname}}( + {{! Params }} + {{#allParams}} + {{! Arrays }} + {{#isContainer}}{{{dataType}}}<{{baseType}}> {{paramName}}{{/isContainer}} + {{! Normal types/objects }} + {{^isContainer}}{{{dataType}}} {{paramName}}{{/isContainer}} + {{^-last}}, {{/-last}} + {{/allParams}} + ); + {{/operation}} +}; {{! Service endpoint end }} +{{/operations}} + +} {{! namespace end }} + +#endif /* TINY_CPP_CLIENT_{{classname}}_H_ */ \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/unit-test-model.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/unit-test-model.mustache new file mode 100644 index 000000000000..14894973b81f --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/unit-test-model.mustache @@ -0,0 +1,161 @@ +{{#models}}{{#model}} +#include "{{classname}}.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + +{{#vars}} +{{#isPrimitiveType}}{{^isArray}} +void test_{{classname}}_{{name}}_is_assigned_from_json() +{ + {{#isInteger}} + bourne::json input = + { + "{{name}}", 1 + }; + + {{classname}} obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.{{getter}}()); + {{/isInteger}} + + + {{#isString}} + bourne::json input = + { + "{{name}}", "hello" + }; + + {{classname}} obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.{{getter}}().c_str()); + {{/isString}} + + + {{#isBoolean}} + bourne::json input = + { + "{{name}}", true + }; + + {{classname}} obj(input.dump()); + + TEST_ASSERT(true == obj.{{getter}}()); + {{/isBoolean}} + + + {{#isLong}} + bourne::json input = + { + "{{name}}", 1 + }; + + {{classname}} obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.{{getter}}()); + {{/isLong}} + + + {{#isFloat}} + bourne::json input = + { + "{{name}}", 1.0 + }; + + {{classname}} obj(input.dump()); + + TEST_ASSERT_EQUAL_FLOAT(1.0, obj.{{getter}}()); + {{/isFloat}} +} +{{/isArray}}{{/isPrimitiveType}} +{{/vars}} + +{{#vars}} +{{#isPrimitiveType}}{{^isArray}} +void test_{{classname}}_{{name}}_is_converted_to_json() +{ + {{#isInteger}} + bourne::json input = + { + "{{name}}", 1 + }; + + {{classname}} obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["{{name}}"] == output["{{name}}"]); + {{/isInteger}} + + {{#isString}} + bourne::json input = + { + "{{name}}", "hello" + }; + + {{classname}} obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["{{name}}"] == output["{{name}}"]); + {{/isString}} + + {{#isBoolean}} + bourne::json input = + { + "{{name}}", true + }; + + {{classname}} obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["{{name}}"] == output["{{name}}"]); + {{/isBoolean}} + + {{#isLong}} + bourne::json input = + { + "{{name}}", 1 + }; + + {{classname}} obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["{{name}}"] == output["{{name}}"]); + {{/isLong}} + + {{#isFloat}} + bourne::json input = + { + "{{name}}", 1.0 + }; + + {{classname}} obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["{{name}}"] == output["{{name}}"]); + {{/isFloat}} +} +{{/isArray}}{{/isPrimitiveType}} +{{/vars}} + +{{/model}} +{{/models}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/unittest.mustache b/modules/openapi-generator/src/main/resources/tiny-cpp-client/unittest.mustache new file mode 100644 index 000000000000..c6a1f23a6e39 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/tiny-cpp-client/unittest.mustache @@ -0,0 +1,132 @@ +#include "Pet.h" +#include +#include +#include +#include "bourne/json.hpp" + +void setUp(){ +} + + +void tearDown(){ +} + +void test_id_is_assigned(){ + bourne::json petJSON = + { + "id", 1 + }; + + Tiny::Pet pet(petJSON.dump()); + + + TEST_ASSERT_EQUAL_INT(1, pet.getId()); +} + +void test_name_is_assigned(){ + bourne::json petJSON = + { + "name", "Shiba" + }; + + Tiny::Pet pet(petJSON.dump()); + + TEST_ASSERT_EQUAL_STRING("Shiba", pet.getName().c_str()); + +} + +void test_status_is_assigned(){ + bourne::json petJSON = + { + "status", "Sold" + }; + + Tiny::Pet pet(petJSON.dump()); + + TEST_ASSERT_EQUAL_STRING("Sold", pet.getStatus().c_str()); +} + +void test_category_object_is_assigned(){ + + bourne::json catJSON = + { + "id", 3, + "name", "Small dog" + }; + + bourne::json petJSON = + { + "category", catJSON, + }; + + Tiny::Pet pet(petJSON.dump()); + + TEST_ASSERT_EQUAL_STRING("Small dog", pet.getCategory().getName().c_str()); + TEST_ASSERT_EQUAL_INT(3, pet.getCategory().getId()); + +} + + +void test_photo_string_list_is_assigned(){ + + std::list photoList = {"url1", "url2", "url3", "url4"}; + + bourne::json photoARR = bourne::json::array("url1", "url2", "url3", "url4"); + + bourne::json petJSON = + { + "photoUrls", photoARR, + }; + + Tiny::Pet pet(petJSON.dump()); + + TEST_ASSERT(photoList == pet.getPhotoUrls()); +} + +void test_tags_object_list_is_assigned(){ + bourne::json aTag = + { + "id", 2, + "name", "Hello" + }; + + bourne::json tagsARR = bourne::json::array(aTag); + bourne::json petJSON = + { + "tags", tagsARR, + }; + + Tiny::Pet pet(petJSON.dump()); + + TEST_ASSERT_EQUAL_INT(2, pet.getTags().front().getId()); + TEST_ASSERT_EQUAL_STRING("Hello", pet.getTags().front().getName().c_str()); +} + + + +void runTests(){ + RUN_TEST(test_id_is_assigned); + RUN_TEST(test_category_object_is_assigned); + RUN_TEST(test_name_is_assigned); + RUN_TEST(test_status_is_assigned); + RUN_TEST(test_photo_string_list_is_assigned); + RUN_TEST(test_tags_object_list_is_assigned); +} + +int main(void) { + UNITY_BEGIN(); + runTests(); + return UNITY_END(); +} + +void setup() { + UNITY_BEGIN(); + runTests(); + UNITY_END(); +} + +void loop() { + +} + + diff --git a/samples/client/petstore/tiny/cpp/.gitignore b/samples/client/petstore/tiny/cpp/.gitignore new file mode 100644 index 000000000000..89cc49cbd652 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/.gitignore @@ -0,0 +1,5 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch diff --git a/samples/client/petstore/tiny/cpp/.openapi-generator-ignore b/samples/client/petstore/tiny/cpp/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/client/petstore/tiny/cpp/.openapi-generator/FILES b/samples/client/petstore/tiny/cpp/.openapi-generator/FILES new file mode 100644 index 000000000000..1024d9450644 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/.openapi-generator/FILES @@ -0,0 +1,30 @@ +README.md +README.md +lib/Models/ApiResponse.cpp +lib/Models/ApiResponse.h +lib/Models/Category.cpp +lib/Models/Category.h +lib/Models/Helpers.cpp +lib/Models/Helpers.h +lib/Models/Order.cpp +lib/Models/Order.h +lib/Models/Pet.cpp +lib/Models/Pet.h +lib/Models/Tag.cpp +lib/Models/Tag.h +lib/Models/User.cpp +lib/Models/User.h +lib/service/AbstractService.cpp +lib/service/AbstractService.h +lib/service/PetApi.cpp +lib/service/PetApi.h +lib/service/Response.h +lib/service/StoreApi.cpp +lib/service/StoreApi.h +lib/service/UserApi.cpp +lib/service/UserApi.h +platformio.ini +pre_compiling_bourne.py +root.cert +src/main.cpp +test/RunTests.cpp diff --git a/samples/client/petstore/tiny/cpp/.openapi-generator/VERSION b/samples/client/petstore/tiny/cpp/.openapi-generator/VERSION new file mode 100644 index 000000000000..6555596f9311 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/tiny/cpp/README.md b/samples/client/petstore/tiny/cpp/README.md new file mode 100644 index 000000000000..e8bf721275b5 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/README.md @@ -0,0 +1,73 @@ +# Documentation for OpenAPI Petstore +This is a client generator for microcontrollers on the Espressif32 platform and the Arduino framework +After the client have been generated, you have to change these following variablies: +- root.cert | Provide your service root certificate. +- src/main.cpp | Change wifi name +- src/main.cpp | Change wifi password +- lib/service/AbstractService.h | Change to your url + +# Documentation for OpenAPI Petstore 1.0.0 Tiny client cpp (Arduino) + +The project is structured like this: +``` +samples/client/petstore/tiny/cpp/ +├── lib +│ ├── Models +│ ├── service +│ └── TestFiles +├── platformio.ini +├── pre_compiling_bourne.py +├── README.md +├── root.cert +├── src +│ └── main.cpp +└── test + └── RunTests.cpp +``` + +All URIs are relative to http://petstore.swagger.iohttp://petstore.swagger.io/v2 + +### PetApi +|Method | HTTP request | Description| +|------------- | ------------- | -------------| +|*addPet* | *POST* /pet | Add a new pet to the store.| +|*deletePet* | *DELETE* /pet/{petId} | Deletes a pet.| +|*findPetsByStatus* | *GET* /pet/findByStatus | Finds Pets by status.| +|*findPetsByTags* | *GET* /pet/findByTags | Finds Pets by tags.| +|*getPetById* | *GET* /pet/{petId} | Find pet by ID.| +|*updatePet* | *PUT* /pet | Update an existing pet.| +|*updatePetWithForm* | *POST* /pet/{petId} | Updates a pet in the store with form data.| +|*uploadFile* | *POST* /pet/{petId}/uploadImage | uploads an image.| + +### StoreApi +|Method | HTTP request | Description| +|------------- | ------------- | -------------| +|*deleteOrder* | *DELETE* /store/order/{orderId} | Delete purchase order by ID.| +|*getInventory* | *GET* /store/inventory | Returns pet inventories by status.| +|*getOrderById* | *GET* /store/order/{orderId} | Find purchase order by ID.| +|*placeOrder* | *POST* /store/order | Place an order for a pet.| + +### UserApi +|Method | HTTP request | Description| +|------------- | ------------- | -------------| +|*createUser* | *POST* /user | Create user.| +|*createUsersWithArrayInput* | *POST* /user/createWithArray | Creates list of users with given input array.| +|*createUsersWithListInput* | *POST* /user/createWithList | Creates list of users with given input array.| +|*deleteUser* | *DELETE* /user/{username} | Delete user.| +|*getUserByName* | *GET* /user/{username} | Get user by user name.| +|*loginUser* | *GET* /user/login | Logs user into the system.| +|*logoutUser* | *GET* /user/logout | Logs out current logged in user session.| +|*updateUser* | *PUT* /user/{username} | Updated user.| + + +## What are the Model files for the data structures/objects? +|Class | Description| +|------------- | -------------| +|*ApiResponse* | Describes the result of uploading an image resource| +|*Category* | A category for a pet| +|*Order* | An order for a pets from the pet store| +|*Pet* | A pet for sale in the pet store| +|*Tag* | A tag for a pet| +|*User* | A User who is purchasing from the pet store| + + diff --git a/samples/client/petstore/tiny/cpp/lib/Models/ApiResponse.cpp b/samples/client/petstore/tiny/cpp/lib/Models/ApiResponse.cpp new file mode 100644 index 000000000000..e9be9e2b6187 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/ApiResponse.cpp @@ -0,0 +1,139 @@ + + +#include "ApiResponse.h" + +using namespace Tiny; + +ApiResponse::ApiResponse() +{ + code = int(0); + type = std::string(); + message = std::string(); +} + +ApiResponse::ApiResponse(std::string jsonString) +{ + this->fromJson(jsonString); +} + +ApiResponse::~ApiResponse() +{ + +} + +void +ApiResponse::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *codeKey = "code"; + + if(object.has_key(codeKey)) + { + bourne::json value = object[codeKey]; + + + + jsonToValue(&code, value, "int"); + + + } + + const char *typeKey = "type"; + + if(object.has_key(typeKey)) + { + bourne::json value = object[typeKey]; + + + + jsonToValue(&type, value, "std::string"); + + + } + + const char *messageKey = "message"; + + if(object.has_key(messageKey)) + { + bourne::json value = object[messageKey]; + + + + jsonToValue(&message, value, "std::string"); + + + } + + +} + +bourne::json +ApiResponse::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["code"] = getCode(); + + + + + + + object["type"] = getType(); + + + + + + + object["message"] = getMessage(); + + + + return object; + +} + +int +ApiResponse::getCode() +{ + return code; +} + +void +ApiResponse::setCode(int code) +{ + this->code = code; +} + +std::string +ApiResponse::getType() +{ + return type; +} + +void +ApiResponse::setType(std::string type) +{ + this->type = type; +} + +std::string +ApiResponse::getMessage() +{ + return message; +} + +void +ApiResponse::setMessage(std::string message) +{ + this->message = message; +} + + + diff --git a/samples/client/petstore/tiny/cpp/lib/Models/ApiResponse.h b/samples/client/petstore/tiny/cpp/lib/Models/ApiResponse.h new file mode 100644 index 000000000000..dbaf8abcaf38 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/ApiResponse.h @@ -0,0 +1,78 @@ + +/* + * ApiResponse.h + * + * Describes the result of uploading an image resource + */ + +#ifndef TINY_CPP_CLIENT_ApiResponse_H_ +#define TINY_CPP_CLIENT_ApiResponse_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" + +namespace Tiny { + + +/*! \brief Describes the result of uploading an image resource + * + * \ingroup Models + * + */ + +class ApiResponse{ +public: + + /*! \brief Constructor. + */ + ApiResponse(); + ApiResponse(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~ApiResponse(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + int getCode(); + + /*! \brief Set + */ + void setCode(int code); + /*! \brief Get + */ + std::string getType(); + + /*! \brief Set + */ + void setType(std::string type); + /*! \brief Get + */ + std::string getMessage(); + + /*! \brief Set + */ + void setMessage(std::string message); + + + private: + int code{}; + std::string type{}; + std::string message{}; +}; +} + +#endif /* TINY_CPP_CLIENT_ApiResponse_H_ */ diff --git a/samples/client/petstore/tiny/cpp/lib/Models/Category.cpp b/samples/client/petstore/tiny/cpp/lib/Models/Category.cpp new file mode 100644 index 000000000000..950b06ffd44a --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/Category.cpp @@ -0,0 +1,106 @@ + + +#include "Category.h" + +using namespace Tiny; + +Category::Category() +{ + id = long(0); + name = std::string(); +} + +Category::Category(std::string jsonString) +{ + this->fromJson(jsonString); +} + +Category::~Category() +{ + +} + +void +Category::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *idKey = "id"; + + if(object.has_key(idKey)) + { + bourne::json value = object[idKey]; + + + + jsonToValue(&id, value, "long"); + + + } + + const char *nameKey = "name"; + + if(object.has_key(nameKey)) + { + bourne::json value = object[nameKey]; + + + + jsonToValue(&name, value, "std::string"); + + + } + + +} + +bourne::json +Category::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["id"] = getId(); + + + + + + + object["name"] = getName(); + + + + return object; + +} + +long +Category::getId() +{ + return id; +} + +void +Category::setId(long id) +{ + this->id = id; +} + +std::string +Category::getName() +{ + return name; +} + +void +Category::setName(std::string name) +{ + this->name = name; +} + + + diff --git a/samples/client/petstore/tiny/cpp/lib/Models/Category.h b/samples/client/petstore/tiny/cpp/lib/Models/Category.h new file mode 100644 index 000000000000..9c90e3dd4160 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/Category.h @@ -0,0 +1,70 @@ + +/* + * Category.h + * + * A category for a pet + */ + +#ifndef TINY_CPP_CLIENT_Category_H_ +#define TINY_CPP_CLIENT_Category_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" + +namespace Tiny { + + +/*! \brief A category for a pet + * + * \ingroup Models + * + */ + +class Category{ +public: + + /*! \brief Constructor. + */ + Category(); + Category(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~Category(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + long getId(); + + /*! \brief Set + */ + void setId(long id); + /*! \brief Get + */ + std::string getName(); + + /*! \brief Set + */ + void setName(std::string name); + + + private: + long id{}; + std::string name{}; +}; +} + +#endif /* TINY_CPP_CLIENT_Category_H_ */ diff --git a/samples/client/petstore/tiny/cpp/lib/Models/Helpers.cpp b/samples/client/petstore/tiny/cpp/lib/Models/Helpers.cpp new file mode 100644 index 000000000000..c3935b37cde9 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/Helpers.cpp @@ -0,0 +1,102 @@ +#include "Helpers.h" +#include +#include + +bool isprimitive(std::string type){ + if(type == "std::string" || + type == "int" || + type == "float" || + type == "long" || + type == "double" || + type == "bool" || + type == "std::map" || + type == "std::list") + { + return true; + } + return false; +} + + +void +jsonToValue(void* target, bourne::json value, std::string type) +{ + if (target == NULL || value.is_null()) { + return; + } + + else if (type.compare("bool") == 0) + { + bool* val = static_cast (target); + *val = value.to_bool(); + } + + else if (type.compare("int") == 0) + { + int* val = static_cast (target); + *val = value.to_int(); + } + + else if (type.compare("float") == 0) + { + float* val = static_cast (target); + *val = (float)(value.to_float()); + } + + else if (type.compare("long") == 0) + { + long* val = static_cast (target); + *val = (long)(value.to_int()); + } + + else if (type.compare("double") == 0) + { + double* val = static_cast (target); + *val = value.to_float(); + } + + else if (type.compare("std::string") == 0) + { + std::string* val = static_cast (target); + *val = value.to_string(); + } + else { + return; + } +} + +std::string +stringify(long input){ + std::stringstream stream; + stream << input; + return stream.str(); + +}; + +std::string +stringify(int input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; + +std::string +stringify(double input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; + +std::string +stringify(float input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; + +std::string +stringify(std::string input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; diff --git a/samples/client/petstore/tiny/cpp/lib/Models/Helpers.h b/samples/client/petstore/tiny/cpp/lib/Models/Helpers.h new file mode 100644 index 000000000000..5ef7d9afdf77 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/Helpers.h @@ -0,0 +1,22 @@ +#ifndef TINY_CPP_CLIENT_HELPERS_H_ +#define TINY_CPP_CLIENT_HELPERS_H_ + +#include +#include "bourne/json.hpp" + +bool isprimitive(std::string type); + +void jsonToValue(void* target, bourne::json value, std::string type); + +std::string stringify(long input); + +std::string stringify(int input); + +std::string stringify(double input); + +std::string stringify(float input); + +std::string stringify(std::string input); + +#endif /* TINY_CPP_CLIENT_HELPERS_H_ */ + diff --git a/samples/client/petstore/tiny/cpp/lib/Models/Order.cpp b/samples/client/petstore/tiny/cpp/lib/Models/Order.cpp new file mode 100644 index 000000000000..b8b7e00d3fc8 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/Order.cpp @@ -0,0 +1,238 @@ + + +#include "Order.h" + +using namespace Tiny; + +Order::Order() +{ + id = long(0); + petId = long(0); + quantity = int(0); + shipDate = std::string(); + status = std::string(); + complete = bool(false); +} + +Order::Order(std::string jsonString) +{ + this->fromJson(jsonString); +} + +Order::~Order() +{ + +} + +void +Order::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *idKey = "id"; + + if(object.has_key(idKey)) + { + bourne::json value = object[idKey]; + + + + jsonToValue(&id, value, "long"); + + + } + + const char *petIdKey = "petId"; + + if(object.has_key(petIdKey)) + { + bourne::json value = object[petIdKey]; + + + + jsonToValue(&petId, value, "long"); + + + } + + const char *quantityKey = "quantity"; + + if(object.has_key(quantityKey)) + { + bourne::json value = object[quantityKey]; + + + + jsonToValue(&quantity, value, "int"); + + + } + + const char *shipDateKey = "shipDate"; + + if(object.has_key(shipDateKey)) + { + bourne::json value = object[shipDateKey]; + + + + jsonToValue(&shipDate, value, "std::string"); + + + } + + const char *statusKey = "status"; + + if(object.has_key(statusKey)) + { + bourne::json value = object[statusKey]; + + + + jsonToValue(&status, value, "std::string"); + + + } + + const char *completeKey = "complete"; + + if(object.has_key(completeKey)) + { + bourne::json value = object[completeKey]; + + + + jsonToValue(&complete, value, "bool"); + + + } + + +} + +bourne::json +Order::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["id"] = getId(); + + + + + + + object["petId"] = getPetId(); + + + + + + + object["quantity"] = getQuantity(); + + + + + + + object["shipDate"] = getShipDate(); + + + + + + + object["status"] = getStatus(); + + + + + + + object["complete"] = isComplete(); + + + + return object; + +} + +long +Order::getId() +{ + return id; +} + +void +Order::setId(long id) +{ + this->id = id; +} + +long +Order::getPetId() +{ + return petId; +} + +void +Order::setPetId(long petId) +{ + this->petId = petId; +} + +int +Order::getQuantity() +{ + return quantity; +} + +void +Order::setQuantity(int quantity) +{ + this->quantity = quantity; +} + +std::string +Order::getShipDate() +{ + return shipDate; +} + +void +Order::setShipDate(std::string shipDate) +{ + this->shipDate = shipDate; +} + +std::string +Order::getStatus() +{ + return status; +} + +void +Order::setStatus(std::string status) +{ + this->status = status; +} + +bool +Order::isComplete() +{ + return complete; +} + +void +Order::setComplete(bool complete) +{ + this->complete = complete; +} + + + diff --git a/samples/client/petstore/tiny/cpp/lib/Models/Order.h b/samples/client/petstore/tiny/cpp/lib/Models/Order.h new file mode 100644 index 000000000000..6f36404f959a --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/Order.h @@ -0,0 +1,102 @@ + +/* + * Order.h + * + * An order for a pets from the pet store + */ + +#ifndef TINY_CPP_CLIENT_Order_H_ +#define TINY_CPP_CLIENT_Order_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" + +namespace Tiny { + + +/*! \brief An order for a pets from the pet store + * + * \ingroup Models + * + */ + +class Order{ +public: + + /*! \brief Constructor. + */ + Order(); + Order(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~Order(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + long getId(); + + /*! \brief Set + */ + void setId(long id); + /*! \brief Get + */ + long getPetId(); + + /*! \brief Set + */ + void setPetId(long petId); + /*! \brief Get + */ + int getQuantity(); + + /*! \brief Set + */ + void setQuantity(int quantity); + /*! \brief Get + */ + std::string getShipDate(); + + /*! \brief Set + */ + void setShipDate(std::string shipDate); + /*! \brief Get Order Status + */ + std::string getStatus(); + + /*! \brief Set Order Status + */ + void setStatus(std::string status); + /*! \brief Get + */ + bool isComplete(); + + /*! \brief Set + */ + void setComplete(bool complete); + + + private: + long id{}; + long petId{}; + int quantity{}; + std::string shipDate{}; + std::string status{}; + bool complete{}; +}; +} + +#endif /* TINY_CPP_CLIENT_Order_H_ */ diff --git a/samples/client/petstore/tiny/cpp/lib/Models/Pet.cpp b/samples/client/petstore/tiny/cpp/lib/Models/Pet.cpp new file mode 100644 index 000000000000..57f7781aef2a --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/Pet.cpp @@ -0,0 +1,274 @@ + + +#include "Pet.h" + +using namespace Tiny; + +Pet::Pet() +{ + id = long(0); + category = Category(); + name = std::string(); + photoUrls = std::list(); + tags = std::list(); + status = std::string(); +} + +Pet::Pet(std::string jsonString) +{ + this->fromJson(jsonString); +} + +Pet::~Pet() +{ + +} + +void +Pet::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *idKey = "id"; + + if(object.has_key(idKey)) + { + bourne::json value = object[idKey]; + + + + jsonToValue(&id, value, "long"); + + + } + + const char *categoryKey = "category"; + + if(object.has_key(categoryKey)) + { + bourne::json value = object[categoryKey]; + + + + + Category* obj = &category; + obj->fromJson(value.dump()); + + } + + const char *nameKey = "name"; + + if(object.has_key(nameKey)) + { + bourne::json value = object[nameKey]; + + + + jsonToValue(&name, value, "std::string"); + + + } + + const char *photoUrlsKey = "photoUrls"; + + if(object.has_key(photoUrlsKey)) + { + bourne::json value = object[photoUrlsKey]; + + + std::list photoUrls_list; + std::string element; + for(auto& var : value.array_range()) + { + + jsonToValue(&element, var, "std::string"); + + + photoUrls_list.push_back(element); + } + photoUrls = photoUrls_list; + + + } + + const char *tagsKey = "tags"; + + if(object.has_key(tagsKey)) + { + bourne::json value = object[tagsKey]; + + + std::list tags_list; + Tag element; + for(auto& var : value.array_range()) + { + + + element.fromJson(var.dump()); + + tags_list.push_back(element); + } + tags = tags_list; + + + } + + const char *statusKey = "status"; + + if(object.has_key(statusKey)) + { + bourne::json value = object[statusKey]; + + + + jsonToValue(&status, value, "std::string"); + + + } + + +} + +bourne::json +Pet::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["id"] = getId(); + + + + + + + + object["category"] = getCategory().toJson(); + + + + + + object["name"] = getName(); + + + + + + std::list photoUrls_list = getPhotoUrls(); + bourne::json photoUrls_arr = bourne::json::array(); + + for(auto& var : photoUrls_list) + { + photoUrls_arr.append(var); + } + object["photoUrls"] = photoUrls_arr; + + + + + + + + + std::list tags_list = getTags(); + bourne::json tags_arr = bourne::json::array(); + + for(auto& var : tags_list) + { + Tag obj = var; + tags_arr.append(obj.toJson()); + } + object["tags"] = tags_arr; + + + + + + + + object["status"] = getStatus(); + + + + return object; + +} + +long +Pet::getId() +{ + return id; +} + +void +Pet::setId(long id) +{ + this->id = id; +} + +Category +Pet::getCategory() +{ + return category; +} + +void +Pet::setCategory(Category category) +{ + this->category = category; +} + +std::string +Pet::getName() +{ + return name; +} + +void +Pet::setName(std::string name) +{ + this->name = name; +} + +std::list +Pet::getPhotoUrls() +{ + return photoUrls; +} + +void +Pet::setPhotoUrls(std::list photoUrls) +{ + this->photoUrls = photoUrls; +} + +std::list +Pet::getTags() +{ + return tags; +} + +void +Pet::setTags(std::list tags) +{ + this->tags = tags; +} + +std::string +Pet::getStatus() +{ + return status; +} + +void +Pet::setStatus(std::string status) +{ + this->status = status; +} + + + diff --git a/samples/client/petstore/tiny/cpp/lib/Models/Pet.h b/samples/client/petstore/tiny/cpp/lib/Models/Pet.h new file mode 100644 index 000000000000..3329735f8a16 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/Pet.h @@ -0,0 +1,105 @@ + +/* + * Pet.h + * + * A pet for sale in the pet store + */ + +#ifndef TINY_CPP_CLIENT_Pet_H_ +#define TINY_CPP_CLIENT_Pet_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" +#include "Category.h" +#include "Tag.h" +#include + +namespace Tiny { + + +/*! \brief A pet for sale in the pet store + * + * \ingroup Models + * + */ + +class Pet{ +public: + + /*! \brief Constructor. + */ + Pet(); + Pet(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~Pet(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + long getId(); + + /*! \brief Set + */ + void setId(long id); + /*! \brief Get + */ + Category getCategory(); + + /*! \brief Set + */ + void setCategory(Category category); + /*! \brief Get + */ + std::string getName(); + + /*! \brief Set + */ + void setName(std::string name); + /*! \brief Get + */ + std::list getPhotoUrls(); + + /*! \brief Set + */ + void setPhotoUrls(std::list photoUrls); + /*! \brief Get + */ + std::list getTags(); + + /*! \brief Set + */ + void setTags(std::list tags); + /*! \brief Get pet status in the store + */ + std::string getStatus(); + + /*! \brief Set pet status in the store + */ + void setStatus(std::string status); + + + private: + long id{}; + Category category; + std::string name{}; + std::list photoUrls; + std::list tags; + std::string status{}; +}; +} + +#endif /* TINY_CPP_CLIENT_Pet_H_ */ diff --git a/samples/client/petstore/tiny/cpp/lib/Models/Tag.cpp b/samples/client/petstore/tiny/cpp/lib/Models/Tag.cpp new file mode 100644 index 000000000000..e46d94258a1d --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/Tag.cpp @@ -0,0 +1,106 @@ + + +#include "Tag.h" + +using namespace Tiny; + +Tag::Tag() +{ + id = long(0); + name = std::string(); +} + +Tag::Tag(std::string jsonString) +{ + this->fromJson(jsonString); +} + +Tag::~Tag() +{ + +} + +void +Tag::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *idKey = "id"; + + if(object.has_key(idKey)) + { + bourne::json value = object[idKey]; + + + + jsonToValue(&id, value, "long"); + + + } + + const char *nameKey = "name"; + + if(object.has_key(nameKey)) + { + bourne::json value = object[nameKey]; + + + + jsonToValue(&name, value, "std::string"); + + + } + + +} + +bourne::json +Tag::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["id"] = getId(); + + + + + + + object["name"] = getName(); + + + + return object; + +} + +long +Tag::getId() +{ + return id; +} + +void +Tag::setId(long id) +{ + this->id = id; +} + +std::string +Tag::getName() +{ + return name; +} + +void +Tag::setName(std::string name) +{ + this->name = name; +} + + + diff --git a/samples/client/petstore/tiny/cpp/lib/Models/Tag.h b/samples/client/petstore/tiny/cpp/lib/Models/Tag.h new file mode 100644 index 000000000000..e05bcdc92900 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/Tag.h @@ -0,0 +1,70 @@ + +/* + * Tag.h + * + * A tag for a pet + */ + +#ifndef TINY_CPP_CLIENT_Tag_H_ +#define TINY_CPP_CLIENT_Tag_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" + +namespace Tiny { + + +/*! \brief A tag for a pet + * + * \ingroup Models + * + */ + +class Tag{ +public: + + /*! \brief Constructor. + */ + Tag(); + Tag(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~Tag(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + long getId(); + + /*! \brief Set + */ + void setId(long id); + /*! \brief Get + */ + std::string getName(); + + /*! \brief Set + */ + void setName(std::string name); + + + private: + long id{}; + std::string name{}; +}; +} + +#endif /* TINY_CPP_CLIENT_Tag_H_ */ diff --git a/samples/client/petstore/tiny/cpp/lib/Models/User.cpp b/samples/client/petstore/tiny/cpp/lib/Models/User.cpp new file mode 100644 index 000000000000..ac84c40205a9 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/User.cpp @@ -0,0 +1,304 @@ + + +#include "User.h" + +using namespace Tiny; + +User::User() +{ + id = long(0); + username = std::string(); + firstName = std::string(); + lastName = std::string(); + email = std::string(); + password = std::string(); + phone = std::string(); + userStatus = int(0); +} + +User::User(std::string jsonString) +{ + this->fromJson(jsonString); +} + +User::~User() +{ + +} + +void +User::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *idKey = "id"; + + if(object.has_key(idKey)) + { + bourne::json value = object[idKey]; + + + + jsonToValue(&id, value, "long"); + + + } + + const char *usernameKey = "username"; + + if(object.has_key(usernameKey)) + { + bourne::json value = object[usernameKey]; + + + + jsonToValue(&username, value, "std::string"); + + + } + + const char *firstNameKey = "firstName"; + + if(object.has_key(firstNameKey)) + { + bourne::json value = object[firstNameKey]; + + + + jsonToValue(&firstName, value, "std::string"); + + + } + + const char *lastNameKey = "lastName"; + + if(object.has_key(lastNameKey)) + { + bourne::json value = object[lastNameKey]; + + + + jsonToValue(&lastName, value, "std::string"); + + + } + + const char *emailKey = "email"; + + if(object.has_key(emailKey)) + { + bourne::json value = object[emailKey]; + + + + jsonToValue(&email, value, "std::string"); + + + } + + const char *passwordKey = "password"; + + if(object.has_key(passwordKey)) + { + bourne::json value = object[passwordKey]; + + + + jsonToValue(&password, value, "std::string"); + + + } + + const char *phoneKey = "phone"; + + if(object.has_key(phoneKey)) + { + bourne::json value = object[phoneKey]; + + + + jsonToValue(&phone, value, "std::string"); + + + } + + const char *userStatusKey = "userStatus"; + + if(object.has_key(userStatusKey)) + { + bourne::json value = object[userStatusKey]; + + + + jsonToValue(&userStatus, value, "int"); + + + } + + +} + +bourne::json +User::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["id"] = getId(); + + + + + + + object["username"] = getUsername(); + + + + + + + object["firstName"] = getFirstName(); + + + + + + + object["lastName"] = getLastName(); + + + + + + + object["email"] = getEmail(); + + + + + + + object["password"] = getPassword(); + + + + + + + object["phone"] = getPhone(); + + + + + + + object["userStatus"] = getUserStatus(); + + + + return object; + +} + +long +User::getId() +{ + return id; +} + +void +User::setId(long id) +{ + this->id = id; +} + +std::string +User::getUsername() +{ + return username; +} + +void +User::setUsername(std::string username) +{ + this->username = username; +} + +std::string +User::getFirstName() +{ + return firstName; +} + +void +User::setFirstName(std::string firstName) +{ + this->firstName = firstName; +} + +std::string +User::getLastName() +{ + return lastName; +} + +void +User::setLastName(std::string lastName) +{ + this->lastName = lastName; +} + +std::string +User::getEmail() +{ + return email; +} + +void +User::setEmail(std::string email) +{ + this->email = email; +} + +std::string +User::getPassword() +{ + return password; +} + +void +User::setPassword(std::string password) +{ + this->password = password; +} + +std::string +User::getPhone() +{ + return phone; +} + +void +User::setPhone(std::string phone) +{ + this->phone = phone; +} + +int +User::getUserStatus() +{ + return userStatus; +} + +void +User::setUserStatus(int userStatus) +{ + this->userStatus = userStatus; +} + + + diff --git a/samples/client/petstore/tiny/cpp/lib/Models/User.h b/samples/client/petstore/tiny/cpp/lib/Models/User.h new file mode 100644 index 000000000000..84de5204ced8 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/Models/User.h @@ -0,0 +1,118 @@ + +/* + * User.h + * + * A User who is purchasing from the pet store + */ + +#ifndef TINY_CPP_CLIENT_User_H_ +#define TINY_CPP_CLIENT_User_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" + +namespace Tiny { + + +/*! \brief A User who is purchasing from the pet store + * + * \ingroup Models + * + */ + +class User{ +public: + + /*! \brief Constructor. + */ + User(); + User(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~User(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + long getId(); + + /*! \brief Set + */ + void setId(long id); + /*! \brief Get + */ + std::string getUsername(); + + /*! \brief Set + */ + void setUsername(std::string username); + /*! \brief Get + */ + std::string getFirstName(); + + /*! \brief Set + */ + void setFirstName(std::string firstName); + /*! \brief Get + */ + std::string getLastName(); + + /*! \brief Set + */ + void setLastName(std::string lastName); + /*! \brief Get + */ + std::string getEmail(); + + /*! \brief Set + */ + void setEmail(std::string email); + /*! \brief Get + */ + std::string getPassword(); + + /*! \brief Set + */ + void setPassword(std::string password); + /*! \brief Get + */ + std::string getPhone(); + + /*! \brief Set + */ + void setPhone(std::string phone); + /*! \brief Get User Status + */ + int getUserStatus(); + + /*! \brief Set User Status + */ + void setUserStatus(int userStatus); + + + private: + long id{}; + std::string username{}; + std::string firstName{}; + std::string lastName{}; + std::string email{}; + std::string password{}; + std::string phone{}; + int userStatus{}; +}; +} + +#endif /* TINY_CPP_CLIENT_User_H_ */ diff --git a/samples/client/petstore/tiny/cpp/lib/TestFiles/ApiResponseTest.cpp b/samples/client/petstore/tiny/cpp/lib/TestFiles/ApiResponseTest.cpp new file mode 100644 index 000000000000..160f4217f5df --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/TestFiles/ApiResponseTest.cpp @@ -0,0 +1,139 @@ + +#include "ApiResponse.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_ApiResponse_code_is_assigned_from_json() +{ + bourne::json input = + { + "code", 1 + }; + + ApiResponse obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getCode()); + + + + + + + + +} + + +void test_ApiResponse_type_is_assigned_from_json() +{ + + + bourne::json input = + { + "type", "hello" + }; + + ApiResponse obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getType().c_str()); + + + + + + +} + + +void test_ApiResponse_message_is_assigned_from_json() +{ + + + bourne::json input = + { + "message", "hello" + }; + + ApiResponse obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getMessage().c_str()); + + + + + + +} + + + +void test_ApiResponse_code_is_converted_to_json() +{ + bourne::json input = + { + "code", 1 + }; + + ApiResponse obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["code"] == output["code"]); + + + + +} + + +void test_ApiResponse_type_is_converted_to_json() +{ + + bourne::json input = + { + "type", "hello" + }; + + ApiResponse obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["type"] == output["type"]); + + + +} + + +void test_ApiResponse_message_is_converted_to_json() +{ + + bourne::json input = + { + "message", "hello" + }; + + ApiResponse obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["message"] == output["message"]); + + + +} + + diff --git a/samples/client/petstore/tiny/cpp/lib/TestFiles/CategoryTest.cpp b/samples/client/petstore/tiny/cpp/lib/TestFiles/CategoryTest.cpp new file mode 100644 index 000000000000..2951856e6a58 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/TestFiles/CategoryTest.cpp @@ -0,0 +1,97 @@ + +#include "Category.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_Category_id_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "id", 1 + }; + + Category obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getId()); + + +} + + +void test_Category_name_is_assigned_from_json() +{ + + + bourne::json input = + { + "name", "hello" + }; + + Category obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getName().c_str()); + + + + + + +} + + + +void test_Category_id_is_converted_to_json() +{ + + + + bourne::json input = + { + "id", 1 + }; + + Category obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["id"] == output["id"]); + +} + + +void test_Category_name_is_converted_to_json() +{ + + bourne::json input = + { + "name", "hello" + }; + + Category obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["name"] == output["name"]); + + + +} + + diff --git a/samples/client/petstore/tiny/cpp/lib/TestFiles/OrderTest.cpp b/samples/client/petstore/tiny/cpp/lib/TestFiles/OrderTest.cpp new file mode 100644 index 000000000000..13125fc8fc5a --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/TestFiles/OrderTest.cpp @@ -0,0 +1,245 @@ + +#include "Order.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_Order_id_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "id", 1 + }; + + Order obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getId()); + + +} + + +void test_Order_petId_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "petId", 1 + }; + + Order obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getPetId()); + + +} + + +void test_Order_quantity_is_assigned_from_json() +{ + bourne::json input = + { + "quantity", 1 + }; + + Order obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getQuantity()); + + + + + + + + +} + + +void test_Order_shipDate_is_assigned_from_json() +{ + + + + + + + + +} + + +void test_Order_status_is_assigned_from_json() +{ + + + bourne::json input = + { + "status", "hello" + }; + + Order obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getStatus().c_str()); + + + + + + +} + + +void test_Order_complete_is_assigned_from_json() +{ + + + + + bourne::json input = + { + "complete", true + }; + + Order obj(input.dump()); + + TEST_ASSERT(true == obj.isComplete()); + + + + +} + + + +void test_Order_id_is_converted_to_json() +{ + + + + bourne::json input = + { + "id", 1 + }; + + Order obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["id"] == output["id"]); + +} + + +void test_Order_petId_is_converted_to_json() +{ + + + + bourne::json input = + { + "petId", 1 + }; + + Order obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["petId"] == output["petId"]); + +} + + +void test_Order_quantity_is_converted_to_json() +{ + bourne::json input = + { + "quantity", 1 + }; + + Order obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["quantity"] == output["quantity"]); + + + + +} + + +void test_Order_shipDate_is_converted_to_json() +{ + + + + +} + + +void test_Order_status_is_converted_to_json() +{ + + bourne::json input = + { + "status", "hello" + }; + + Order obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["status"] == output["status"]); + + + +} + + +void test_Order_complete_is_converted_to_json() +{ + + + bourne::json input = + { + "complete", true + }; + + Order obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["complete"] == output["complete"]); + + +} + + diff --git a/samples/client/petstore/tiny/cpp/lib/TestFiles/PetTest.cpp b/samples/client/petstore/tiny/cpp/lib/TestFiles/PetTest.cpp new file mode 100644 index 000000000000..04dad4640939 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/TestFiles/PetTest.cpp @@ -0,0 +1,145 @@ + +#include "Pet.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_Pet_id_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "id", 1 + }; + + Pet obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getId()); + + +} + + + +void test_Pet_name_is_assigned_from_json() +{ + + + bourne::json input = + { + "name", "hello" + }; + + Pet obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getName().c_str()); + + + + + + +} + + + + +void test_Pet_status_is_assigned_from_json() +{ + + + bourne::json input = + { + "status", "hello" + }; + + Pet obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getStatus().c_str()); + + + + + + +} + + + +void test_Pet_id_is_converted_to_json() +{ + + + + bourne::json input = + { + "id", 1 + }; + + Pet obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["id"] == output["id"]); + +} + + + +void test_Pet_name_is_converted_to_json() +{ + + bourne::json input = + { + "name", "hello" + }; + + Pet obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["name"] == output["name"]); + + + +} + + + + +void test_Pet_status_is_converted_to_json() +{ + + bourne::json input = + { + "status", "hello" + }; + + Pet obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["status"] == output["status"]); + + + +} + + diff --git a/samples/client/petstore/tiny/cpp/lib/TestFiles/TagTest.cpp b/samples/client/petstore/tiny/cpp/lib/TestFiles/TagTest.cpp new file mode 100644 index 000000000000..41ea1d0095dd --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/TestFiles/TagTest.cpp @@ -0,0 +1,97 @@ + +#include "Tag.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_Tag_id_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "id", 1 + }; + + Tag obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getId()); + + +} + + +void test_Tag_name_is_assigned_from_json() +{ + + + bourne::json input = + { + "name", "hello" + }; + + Tag obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getName().c_str()); + + + + + + +} + + + +void test_Tag_id_is_converted_to_json() +{ + + + + bourne::json input = + { + "id", 1 + }; + + Tag obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["id"] == output["id"]); + +} + + +void test_Tag_name_is_converted_to_json() +{ + + bourne::json input = + { + "name", "hello" + }; + + Tag obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["name"] == output["name"]); + + + +} + + diff --git a/samples/client/petstore/tiny/cpp/lib/TestFiles/UserTest.cpp b/samples/client/petstore/tiny/cpp/lib/TestFiles/UserTest.cpp new file mode 100644 index 000000000000..689ee582bee3 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/TestFiles/UserTest.cpp @@ -0,0 +1,349 @@ + +#include "User.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_User_id_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "id", 1 + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getId()); + + +} + + +void test_User_username_is_assigned_from_json() +{ + + + bourne::json input = + { + "username", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getUsername().c_str()); + + + + + + +} + + +void test_User_firstName_is_assigned_from_json() +{ + + + bourne::json input = + { + "firstName", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getFirstName().c_str()); + + + + + + +} + + +void test_User_lastName_is_assigned_from_json() +{ + + + bourne::json input = + { + "lastName", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getLastName().c_str()); + + + + + + +} + + +void test_User_email_is_assigned_from_json() +{ + + + bourne::json input = + { + "email", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getEmail().c_str()); + + + + + + +} + + +void test_User_password_is_assigned_from_json() +{ + + + bourne::json input = + { + "password", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getPassword().c_str()); + + + + + + +} + + +void test_User_phone_is_assigned_from_json() +{ + + + bourne::json input = + { + "phone", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getPhone().c_str()); + + + + + + +} + + +void test_User_userStatus_is_assigned_from_json() +{ + bourne::json input = + { + "userStatus", 1 + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getUserStatus()); + + + + + + + + +} + + + +void test_User_id_is_converted_to_json() +{ + + + + bourne::json input = + { + "id", 1 + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["id"] == output["id"]); + +} + + +void test_User_username_is_converted_to_json() +{ + + bourne::json input = + { + "username", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["username"] == output["username"]); + + + +} + + +void test_User_firstName_is_converted_to_json() +{ + + bourne::json input = + { + "firstName", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["firstName"] == output["firstName"]); + + + +} + + +void test_User_lastName_is_converted_to_json() +{ + + bourne::json input = + { + "lastName", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["lastName"] == output["lastName"]); + + + +} + + +void test_User_email_is_converted_to_json() +{ + + bourne::json input = + { + "email", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["email"] == output["email"]); + + + +} + + +void test_User_password_is_converted_to_json() +{ + + bourne::json input = + { + "password", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["password"] == output["password"]); + + + +} + + +void test_User_phone_is_converted_to_json() +{ + + bourne::json input = + { + "phone", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["phone"] == output["phone"]); + + + +} + + +void test_User_userStatus_is_converted_to_json() +{ + bourne::json input = + { + "userStatus", 1 + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["userStatus"] == output["userStatus"]); + + + + +} + + diff --git a/samples/client/petstore/tiny/cpp/lib/service/AbstractService.cpp b/samples/client/petstore/tiny/cpp/lib/service/AbstractService.cpp new file mode 100644 index 000000000000..ac7e992cecc2 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/service/AbstractService.cpp @@ -0,0 +1,8 @@ +#include "AbstractService.h" +#include "Arduino.h" + + + +void Tiny::AbstractService::begin(std::string url){ + http.begin(String(url.c_str()), test_root_ca); //HTTPS connection +} diff --git a/samples/client/petstore/tiny/cpp/lib/service/AbstractService.h b/samples/client/petstore/tiny/cpp/lib/service/AbstractService.h new file mode 100644 index 000000000000..07214896d7f2 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/service/AbstractService.h @@ -0,0 +1,28 @@ +#ifndef TINY_CPP_CLIENT_ABSTRACTSERVICE_H_ +#define TINY_CPP_CLIENT_ABSTRACTSERVICE_H_ + +#include "HTTPClient.h" +#include "Response.h" +namespace Tiny { + +/** +* Class +* Generated with openapi::tiny-cpp-client +*/ +class AbstractService { +public: +HTTPClient http; +std::string basepath = "https://petstore3.swagger.io/api/v3"; // TODO: change to your url + +void begin(std::string url); + +// Go and comment out a certificate in root.cert, if you get an error here +// Certificate from file +const char* test_root_ca = +#include "../../root.cert" +; + +}; // end class +}// namespace Tinyclient + +#endif /* TINY_CPP_CLIENT_ABSTRACTSERVICE_H_ */ diff --git a/samples/client/petstore/tiny/cpp/lib/service/PetApi.cpp b/samples/client/petstore/tiny/cpp/lib/service/PetApi.cpp new file mode 100644 index 000000000000..1fa081a04b4d --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/service/PetApi.cpp @@ -0,0 +1,418 @@ +#include "PetApi.h" + +using namespace Tiny; + + + + Response< + Pet + > + PetApi:: + addPet( + + Pet pet + + ) + { + std::string url = basepath + "/pet"; // + // Query | + // Headers | + // Form | + // Body | pet + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + http.addHeader("Content-Type", "application/json"); + + + + payload = pet.toJson().dump(); + + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + Pet obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + Response< + String + > + PetApi:: + deletePet( + + long petId + , + + std::string apiKey + + ) + { + std::string url = basepath + "/pet/{petId}"; //petId + // Query | + // Headers | apiKey + // Form | + // Body | + + std::string s_petId("{"); + s_petId.append("petId"); + s_petId.append("}"); + + int pos = url.find(s_petId); + + url.erase(pos, s_petId.length()); + url.insert(pos, stringify(petId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | DELETE + int httpCode = http.sendRequest("DELETE", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + std::list + > + PetApi:: + findPetsByStatus( + std::list status + + + ) + { + std::string url = basepath + "/pet/findByStatus"; // + // Query | status + // Headers | + // Form | + // Body | + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + std::list obj = std::list(); + bourne::json jsonPayload(output_string); + + + + + + + + + + for(auto& var : jsonPayload.array_range()) + { + Pet tmp(var.dump()); + obj.push_back(tmp); + } + + + + + + + + + Response> response(obj, httpCode); + return response; + } + + Response< + std::list + > + PetApi:: + findPetsByTags( + std::list tags + + + ) + { + std::string url = basepath + "/pet/findByTags"; // + // Query | tags + // Headers | + // Form | + // Body | + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + std::list obj = std::list(); + bourne::json jsonPayload(output_string); + + + + + + + + + + for(auto& var : jsonPayload.array_range()) + { + Pet tmp(var.dump()); + obj.push_back(tmp); + } + + + + + + + + + Response> response(obj, httpCode); + return response; + } + + Response< + Pet + > + PetApi:: + getPetById( + + long petId + + ) + { + std::string url = basepath + "/pet/{petId}"; //petId + // Query | + // Headers | + // Form | + // Body | + + std::string s_petId("{"); + s_petId.append("petId"); + s_petId.append("}"); + + int pos = url.find(s_petId); + + url.erase(pos, s_petId.length()); + url.insert(pos, stringify(petId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + Pet obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + Response< + Pet + > + PetApi:: + updatePet( + + Pet pet + + ) + { + std::string url = basepath + "/pet"; // + // Query | + // Headers | + // Form | + // Body | pet + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | PUT + http.addHeader("Content-Type", "application/json"); + + + + payload = pet.toJson().dump(); + + int httpCode = http.sendRequest("PUT", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + Pet obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + Response< + String + > + PetApi:: + updatePetWithForm( + + long petId + , + + std::string name + , + + std::string status + + ) + { + std::string url = basepath + "/pet/{petId}"; //petId + // Query | + // Headers | + // Form | name status + // Body | + + std::string s_petId("{"); + s_petId.append("petId"); + s_petId.append("}"); + + int pos = url.find(s_petId); + + url.erase(pos, s_petId.length()); + url.insert(pos, stringify(petId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + ApiResponse + > + PetApi:: + uploadFile( + + long petId + , + + std::string additionalMetadata + , + + std::string file + + ) + { + std::string url = basepath + "/pet/{petId}/uploadImage"; //petId + // Query | + // Headers | + // Form | additionalMetadata file + // Body | + + std::string s_petId("{"); + s_petId.append("petId"); + s_petId.append("}"); + + int pos = url.find(s_petId); + + url.erase(pos, s_petId.length()); + url.insert(pos, stringify(petId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + ApiResponse obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + + + diff --git a/samples/client/petstore/tiny/cpp/lib/service/PetApi.h b/samples/client/petstore/tiny/cpp/lib/service/PetApi.h new file mode 100644 index 000000000000..abcb0af0de90 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/service/PetApi.h @@ -0,0 +1,163 @@ +#ifndef TINY_CPP_CLIENT_PetApi_H_ +#define TINY_CPP_CLIENT_PetApi_H_ + + +#include "Response.h" +#include "Arduino.h" +#include "AbstractService.h" +#include "Helpers.h" +#include + +#include "ApiResponse.h" +#include "Pet.h" + +namespace Tiny { + +/** + * Class + * Generated with openapi::tiny-cpp-client + */ + +class PetApi : public AbstractService { +public: + PetApi() = default; + + virtual ~PetApi() = default; + + /** + * Add a new pet to the store. + * + * + * \param pet Pet object that needs to be added to the store *Required* + */ + Response< + Pet + > + addPet( + + Pet pet + + ); + /** + * Deletes a pet. + * + * + * \param petId Pet id to delete *Required* + * \param apiKey + */ + Response< + String + > + deletePet( + + long petId + , + + std::string apiKey + + ); + /** + * Finds Pets by status. + * + * Multiple status values can be provided with comma separated strings + * \param status Status values that need to be considered for filter *Required* + */ + Response< + std::list + > + findPetsByStatus( + std::list status + + + ); + /** + * Finds Pets by tags. + * + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * \param tags Tags to filter by *Required* + */ + Response< + std::list + > + findPetsByTags( + std::list tags + + + ); + /** + * Find pet by ID. + * + * Returns a single pet + * \param petId ID of pet to return *Required* + */ + Response< + Pet + > + getPetById( + + long petId + + ); + /** + * Update an existing pet. + * + * + * \param pet Pet object that needs to be added to the store *Required* + */ + Response< + Pet + > + updatePet( + + Pet pet + + ); + /** + * Updates a pet in the store with form data. + * + * + * \param petId ID of pet that needs to be updated *Required* + * \param name Updated name of the pet + * \param status Updated status of the pet + */ + Response< + String + > + updatePetWithForm( + + long petId + , + + std::string name + , + + std::string status + + ); + /** + * uploads an image. + * + * + * \param petId ID of pet to update *Required* + * \param additionalMetadata Additional data to pass to server + * \param file file to upload + */ + Response< + ApiResponse + > + uploadFile( + + long petId + , + + std::string additionalMetadata + , + + std::string file + + ); +}; + +} + +#endif /* TINY_CPP_CLIENT_PetApi_H_ */ \ No newline at end of file diff --git a/samples/client/petstore/tiny/cpp/lib/service/Response.h b/samples/client/petstore/tiny/cpp/lib/service/Response.h new file mode 100644 index 000000000000..9b7b616b8f1b --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/service/Response.h @@ -0,0 +1,25 @@ +#ifndef TINY_CPP_CLIENT_RESPONSE_H_ +#define TINY_CPP_CLIENT_RESPONSE_H_ +#include + +namespace Tiny { + +/** +* Class +* Generated with openapi::tiny-cpp-client +*/ +template + class Response { + public: + + Response(T _obj, int _code){ + obj = _obj; + code = _code; + } + + int code; + T obj; + }; + } // namespace Tinyclient + +#endif /* TINY_CPP_CLIENT_RESPONSE_H_ */ diff --git a/samples/client/petstore/tiny/cpp/lib/service/StoreApi.cpp b/samples/client/petstore/tiny/cpp/lib/service/StoreApi.cpp new file mode 100644 index 000000000000..210eb8277ac6 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/service/StoreApi.cpp @@ -0,0 +1,185 @@ +#include "StoreApi.h" + +using namespace Tiny; + + + + Response< + String + > + StoreApi:: + deleteOrder( + + std::string orderId + + ) + { + std::string url = basepath + "/store/order/{orderId}"; //orderId + // Query | + // Headers | + // Form | + // Body | + + std::string s_orderId("{"); + s_orderId.append("orderId"); + s_orderId.append("}"); + + int pos = url.find(s_orderId); + + url.erase(pos, s_orderId.length()); + url.insert(pos, stringify(orderId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | DELETE + int httpCode = http.sendRequest("DELETE", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + String + > + StoreApi:: + getInventory( + ) + { + std::string url = basepath + "/store/inventory"; // + // Query | + // Headers | + // Form | + // Body | + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + //TODO: Implement map logic here + + + + + //TODO: No support for maps. + Response response(output, httpCode); + return response; + } + + Response< + Order + > + StoreApi:: + getOrderById( + + long orderId + + ) + { + std::string url = basepath + "/store/order/{orderId}"; //orderId + // Query | + // Headers | + // Form | + // Body | + + std::string s_orderId("{"); + s_orderId.append("orderId"); + s_orderId.append("}"); + + int pos = url.find(s_orderId); + + url.erase(pos, s_orderId.length()); + url.insert(pos, stringify(orderId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + Order obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + Response< + Order + > + StoreApi:: + placeOrder( + + Order order + + ) + { + std::string url = basepath + "/store/order"; // + // Query | + // Headers | + // Form | + // Body | order + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + http.addHeader("Content-Type", "application/json"); + + + + payload = order.toJson().dump(); + + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + Order obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + + + diff --git a/samples/client/petstore/tiny/cpp/lib/service/StoreApi.h b/samples/client/petstore/tiny/cpp/lib/service/StoreApi.h new file mode 100644 index 000000000000..1bf0db023737 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/service/StoreApi.h @@ -0,0 +1,83 @@ +#ifndef TINY_CPP_CLIENT_StoreApi_H_ +#define TINY_CPP_CLIENT_StoreApi_H_ + + +#include "Response.h" +#include "Arduino.h" +#include "AbstractService.h" +#include "Helpers.h" +#include + +#include +#include "Order.h" + +namespace Tiny { + +/** + * Class + * Generated with openapi::tiny-cpp-client + */ + +class StoreApi : public AbstractService { +public: + StoreApi() = default; + + virtual ~StoreApi() = default; + + /** + * Delete purchase order by ID. + * + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * \param orderId ID of the order that needs to be deleted *Required* + */ + Response< + String + > + deleteOrder( + + std::string orderId + + ); + /** + * Returns pet inventories by status. + * + * Returns a map of status codes to quantities + */ + Response< + String + > + getInventory( + ); + /** + * Find purchase order by ID. + * + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * \param orderId ID of pet that needs to be fetched *Required* + */ + Response< + Order + > + getOrderById( + + long orderId + + ); + /** + * Place an order for a pet. + * + * + * \param order order placed for purchasing the pet *Required* + */ + Response< + Order + > + placeOrder( + + Order order + + ); +}; + +} + +#endif /* TINY_CPP_CLIENT_StoreApi_H_ */ \ No newline at end of file diff --git a/samples/client/petstore/tiny/cpp/lib/service/UserApi.cpp b/samples/client/petstore/tiny/cpp/lib/service/UserApi.cpp new file mode 100644 index 000000000000..d1cf12b80a9e --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/service/UserApi.cpp @@ -0,0 +1,366 @@ +#include "UserApi.h" + +using namespace Tiny; + + + + Response< + String + > + UserApi:: + createUser( + + User user + + ) + { + std::string url = basepath + "/user"; // + // Query | + // Headers | + // Form | + // Body | user + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + http.addHeader("Content-Type", "application/json"); + + + + payload = user.toJson().dump(); + + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + String + > + UserApi:: + createUsersWithArrayInput( + std::list user + + + ) + { + std::string url = basepath + "/user/createWithArray"; // + // Query | + // Headers | + // Form | + // Body | user + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + http.addHeader("Content-Type", "application/json"); + + + bourne::json tmp_arr = bourne::json::array(); + for(auto& var : user) + { + auto tmp = var.toJson(); + tmp_arr.append(tmp); + + } + payload = tmp_arr.dump(); + + + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + String + > + UserApi:: + createUsersWithListInput( + std::list user + + + ) + { + std::string url = basepath + "/user/createWithList"; // + // Query | + // Headers | + // Form | + // Body | user + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + http.addHeader("Content-Type", "application/json"); + + + bourne::json tmp_arr = bourne::json::array(); + for(auto& var : user) + { + auto tmp = var.toJson(); + tmp_arr.append(tmp); + + } + payload = tmp_arr.dump(); + + + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + String + > + UserApi:: + deleteUser( + + std::string username + + ) + { + std::string url = basepath + "/user/{username}"; //username + // Query | + // Headers | + // Form | + // Body | + + std::string s_username("{"); + s_username.append("username"); + s_username.append("}"); + + int pos = url.find(s_username); + + url.erase(pos, s_username.length()); + url.insert(pos, stringify(username)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | DELETE + int httpCode = http.sendRequest("DELETE", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + User + > + UserApi:: + getUserByName( + + std::string username + + ) + { + std::string url = basepath + "/user/{username}"; //username + // Query | + // Headers | + // Form | + // Body | + + std::string s_username("{"); + s_username.append("username"); + s_username.append("}"); + + int pos = url.find(s_username); + + url.erase(pos, s_username.length()); + url.insert(pos, stringify(username)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + User obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + Response< + std::string + > + UserApi:: + loginUser( + + std::string username + , + + std::string password + + ) + { + std::string url = basepath + "/user/login"; // + // Query | username password + // Headers | + // Form | + // Body | + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + bourne::json jsonPayload(output_string); + std::string obj; + jsonToValue(&obj, jsonPayload, "std::string"); + + + + Response response(obj, httpCode); + return response; + } + + Response< + String + > + UserApi:: + logoutUser( + ) + { + std::string url = basepath + "/user/logout"; // + // Query | + // Headers | + // Form | + // Body | + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + String + > + UserApi:: + updateUser( + + std::string username + , + + User user + + ) + { + std::string url = basepath + "/user/{username}"; //username + // Query | + // Headers | + // Form | + // Body | user + + std::string s_username("{"); + s_username.append("username"); + s_username.append("}"); + + int pos = url.find(s_username); + + url.erase(pos, s_username.length()); + url.insert(pos, stringify(username)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | PUT + http.addHeader("Content-Type", "application/json"); + + + + payload = user.toJson().dump(); + + int httpCode = http.sendRequest("PUT", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + + + diff --git a/samples/client/petstore/tiny/cpp/lib/service/UserApi.h b/samples/client/petstore/tiny/cpp/lib/service/UserApi.h new file mode 100644 index 000000000000..afdaefa0f8c9 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/lib/service/UserApi.h @@ -0,0 +1,147 @@ +#ifndef TINY_CPP_CLIENT_UserApi_H_ +#define TINY_CPP_CLIENT_UserApi_H_ + + +#include "Response.h" +#include "Arduino.h" +#include "AbstractService.h" +#include "Helpers.h" +#include + +#include "User.h" +#include + +namespace Tiny { + +/** + * Class + * Generated with openapi::tiny-cpp-client + */ + +class UserApi : public AbstractService { +public: + UserApi() = default; + + virtual ~UserApi() = default; + + /** + * Create user. + * + * This can only be done by the logged in user. + * \param user Created user object *Required* + */ + Response< + String + > + createUser( + + User user + + ); + /** + * Creates list of users with given input array. + * + * + * \param user List of user object *Required* + */ + Response< + String + > + createUsersWithArrayInput( + std::list user + + + ); + /** + * Creates list of users with given input array. + * + * + * \param user List of user object *Required* + */ + Response< + String + > + createUsersWithListInput( + std::list user + + + ); + /** + * Delete user. + * + * This can only be done by the logged in user. + * \param username The name that needs to be deleted *Required* + */ + Response< + String + > + deleteUser( + + std::string username + + ); + /** + * Get user by user name. + * + * + * \param username The name that needs to be fetched. Use user1 for testing. *Required* + */ + Response< + User + > + getUserByName( + + std::string username + + ); + /** + * Logs user into the system. + * + * + * \param username The user name for login *Required* + * \param password The password for login in clear text *Required* + */ + Response< + std::string + > + loginUser( + + std::string username + , + + std::string password + + ); + /** + * Logs out current logged in user session. + * + * + */ + Response< + String + > + logoutUser( + ); + /** + * Updated user. + * + * This can only be done by the logged in user. + * \param username name that need to be deleted *Required* + * \param user Updated user object *Required* + */ + Response< + String + > + updateUser( + + std::string username + , + + User user + + ); +}; + +} + +#endif /* TINY_CPP_CLIENT_UserApi_H_ */ \ No newline at end of file diff --git a/samples/client/petstore/tiny/cpp/platformio.ini b/samples/client/petstore/tiny/cpp/platformio.ini new file mode 100644 index 000000000000..00781178d10b --- /dev/null +++ b/samples/client/petstore/tiny/cpp/platformio.ini @@ -0,0 +1,7 @@ +[env:esp32] +platform = espressif32 +board = nodemcu-32s +framework = arduino +lib_deps = https://github.com/steinwurf/bourne.git +extra_scripts = pre_compiling_bourne.py + diff --git a/samples/client/petstore/tiny/cpp/pre_compiling_bourne.py b/samples/client/petstore/tiny/cpp/pre_compiling_bourne.py new file mode 100644 index 000000000000..96356dcdf158 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/pre_compiling_bourne.py @@ -0,0 +1,25 @@ +Import("env") + +## Compatibility for bourne to work on microcontrollers +# We insert '#define _GLIBCXX_USE_C99' in files that use std::stoll or std::to_string +def insert_c99_into(file): + import fileinput + + path = env['PROJECT_LIBDEPS_DIR'] + "/" + env['PIOENV'] + "/bourne/src/bourne/" + file + value = '#define _GLIBCXX_USE_C99 1\n' + + for line in fileinput.FileInput(path,inplace=1): + if line.startswith('#define _GLIBCXX_USE_C99'): + continue + elif line.startswith('// D'): + line=line.replace(line,line+value) + print(line, end='') + +def fix_parser(): + insert_c99_into('detail/parser.cpp') + +def fix_json(): + insert_c99_into('json.cpp') + +fix_parser() +fix_json() \ No newline at end of file diff --git a/samples/client/petstore/tiny/cpp/root.cert b/samples/client/petstore/tiny/cpp/root.cert new file mode 100644 index 000000000000..bad9c08efad1 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/root.cert @@ -0,0 +1,53 @@ +// TODO: Provide your service root certificate. +// Below is two examples of root certificates. + +// Let's encrypt root certificate +/** +"-----BEGIN CERTIFICATE-----\n" \ +"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n" \ +"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" \ +"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n" \ +"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n" \ +"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n" \ +"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n" \ +"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n" \ +"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n" \ +"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n" \ +"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n" \ +"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n" \ +"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n" \ +"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n" \ +"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n" \ +"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n" \ +"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n" \ +"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n" \ +"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n" \ +"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n" \ +"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n" \ +"-----END CERTIFICATE-----\n" +*/ + +// Amazon_Root_CA_1.pem +/** +"-----BEGIN CERTIFICATE-----\n" \ +"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n" \ +"ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\n" \ +"b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\n" \ +"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n" \ +"b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\n" \ +"ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n" \ +"9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\n" \ +"IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\n" \ +"VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n" \ +"93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\n" \ +"jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n" \ +"AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\n" \ +"A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\n" \ +"U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\n" \ +"N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\n" \ +"o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n" \ +"5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\n" \ +"rqXRfboQnoZsG4q5WTP468SQvvG5\n" \ +"-----END CERTIFICATE-----\n" \ +*/ + diff --git a/samples/client/petstore/tiny/cpp/src/main.cpp b/samples/client/petstore/tiny/cpp/src/main.cpp new file mode 100644 index 000000000000..34ba455fbdd3 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/src/main.cpp @@ -0,0 +1,37 @@ +#include "PetApi.h" + +const char* ssid = "your wifi name"; // TODO Change wifi name +const char* password = "Your wifi password"; //TODO Change wifi password + + +void setup(){ + //Initialize serial and wait for port to open: + Serial.begin(9600); + delay(100); + + Serial.print("Attempting to connect to SSID: "); + Serial.println(ssid); + WiFi.begin(ssid, password); + + // attempt to connect to Wifi network: + while (WiFi.status() != WL_CONNECTED) { + Serial.print("."); + // wait 1 second for re-trying + delay(1000); + } + + Serial.print("Connected to "); + Serial.println(ssid); + + //Print LAN IP. + Serial.print("IP address set: "); + Serial.println(WiFi.localIP()); + + Tiny::PetApi petapi; + auto resp = petapi.getPetById(10); + Serial.println(resp.code); + Tiny::Pet pet = resp.obj; + Serial.println(pet.toJson().dump().c_str()); +} + +void loop(){} diff --git a/samples/client/petstore/tiny/cpp/test/RunTests.cpp b/samples/client/petstore/tiny/cpp/test/RunTests.cpp new file mode 100644 index 000000000000..4caafb4ee441 --- /dev/null +++ b/samples/client/petstore/tiny/cpp/test/RunTests.cpp @@ -0,0 +1,204 @@ + +#include "ApiResponseTest.cpp" + +#include "CategoryTest.cpp" + +#include "OrderTest.cpp" + +#include "PetTest.cpp" + +#include "TagTest.cpp" + +#include "UserTest.cpp" + + + +void setUp(){} + +void tearDown(){} + +void runTests(){ + + + RUN_TEST(test_ApiResponse_code_is_assigned_from_json); + + + RUN_TEST(test_ApiResponse_type_is_assigned_from_json); + + + RUN_TEST(test_ApiResponse_message_is_assigned_from_json); + + + + RUN_TEST(test_Category_id_is_assigned_from_json); + + + RUN_TEST(test_Category_name_is_assigned_from_json); + + + + RUN_TEST(test_Order_id_is_assigned_from_json); + + + RUN_TEST(test_Order_petId_is_assigned_from_json); + + + RUN_TEST(test_Order_quantity_is_assigned_from_json); + + + RUN_TEST(test_Order_shipDate_is_assigned_from_json); + + + RUN_TEST(test_Order_status_is_assigned_from_json); + + + RUN_TEST(test_Order_complete_is_assigned_from_json); + + + + RUN_TEST(test_Pet_id_is_assigned_from_json); + + + + RUN_TEST(test_Pet_name_is_assigned_from_json); + + + + + RUN_TEST(test_Pet_status_is_assigned_from_json); + + + + RUN_TEST(test_Tag_id_is_assigned_from_json); + + + RUN_TEST(test_Tag_name_is_assigned_from_json); + + + + RUN_TEST(test_User_id_is_assigned_from_json); + + + RUN_TEST(test_User_username_is_assigned_from_json); + + + RUN_TEST(test_User_firstName_is_assigned_from_json); + + + RUN_TEST(test_User_lastName_is_assigned_from_json); + + + RUN_TEST(test_User_email_is_assigned_from_json); + + + RUN_TEST(test_User_password_is_assigned_from_json); + + + RUN_TEST(test_User_phone_is_assigned_from_json); + + + RUN_TEST(test_User_userStatus_is_assigned_from_json); + + + + + + RUN_TEST(test_ApiResponse_code_is_converted_to_json); + + + RUN_TEST(test_ApiResponse_type_is_converted_to_json); + + + RUN_TEST(test_ApiResponse_message_is_converted_to_json); + + + + RUN_TEST(test_Category_id_is_converted_to_json); + + + RUN_TEST(test_Category_name_is_converted_to_json); + + + + RUN_TEST(test_Order_id_is_converted_to_json); + + + RUN_TEST(test_Order_petId_is_converted_to_json); + + + RUN_TEST(test_Order_quantity_is_converted_to_json); + + + RUN_TEST(test_Order_shipDate_is_converted_to_json); + + + RUN_TEST(test_Order_status_is_converted_to_json); + + + RUN_TEST(test_Order_complete_is_converted_to_json); + + + + RUN_TEST(test_Pet_id_is_converted_to_json); + + + + RUN_TEST(test_Pet_name_is_converted_to_json); + + + + + RUN_TEST(test_Pet_status_is_converted_to_json); + + + + RUN_TEST(test_Tag_id_is_converted_to_json); + + + RUN_TEST(test_Tag_name_is_converted_to_json); + + + + RUN_TEST(test_User_id_is_converted_to_json); + + + RUN_TEST(test_User_username_is_converted_to_json); + + + RUN_TEST(test_User_firstName_is_converted_to_json); + + + RUN_TEST(test_User_lastName_is_converted_to_json); + + + RUN_TEST(test_User_email_is_converted_to_json); + + + RUN_TEST(test_User_password_is_converted_to_json); + + + RUN_TEST(test_User_phone_is_converted_to_json); + + + RUN_TEST(test_User_userStatus_is_converted_to_json); + + + + +} + +int main(void) { + UNITY_BEGIN(); + runTests(); + return UNITY_END(); +} + +void setup() { + UNITY_BEGIN(); + runTests(); + UNITY_END(); +} + +void loop() { + +} From 6c40192706cf95329f03e4c80ea628fb32a8ecab Mon Sep 17 00:00:00 2001 From: Alexandre Date: Mon, 24 May 2021 07:01:16 +0200 Subject: [PATCH 147/186] [swift5] Add support for oneOfs (#8714) * [swift5] Add support for oneOfs * Generate a sample Swift project with oneOfs * Update Swift Samples --- bin/configs/swift5-oneOf.yaml | 10 + .../languages/Swift5ClientCodegen.java | 1 + .../src/main/resources/swift5/model.mustache | 5 +- .../main/resources/swift5/modelOneOf.mustache | 31 + .../client/petstore/swift5/oneOf/.gitignore | 63 ++ .../swift5/oneOf/.openapi-generator-ignore | 23 + .../swift5/oneOf/.openapi-generator/FILES | 26 + .../swift5/oneOf/.openapi-generator/VERSION | 1 + samples/client/petstore/swift5/oneOf/Cartfile | 2 + .../petstore/swift5/oneOf/Package.swift | 33 + .../swift5/oneOf/PetstoreClient.podspec | 15 + .../Classes/OpenAPIs/APIHelper.swift | 71 ++ .../Classes/OpenAPIs/APIs.swift | 62 ++ .../Classes/OpenAPIs/APIs/DefaultAPI.swift | 49 ++ .../Classes/OpenAPIs/CodableHelper.swift | 49 ++ .../Classes/OpenAPIs/Configuration.swift | 14 + .../Classes/OpenAPIs/Extensions.swift | 231 +++++++ .../Classes/OpenAPIs/JSONDataEncoding.swift | 53 ++ .../Classes/OpenAPIs/JSONEncodingHelper.swift | 45 ++ .../Classes/OpenAPIs/Models.swift | 54 ++ .../Classes/OpenAPIs/Models/Apple.swift | 31 + .../Classes/OpenAPIs/Models/Banana.swift | 31 + .../Classes/OpenAPIs/Models/Fruit.swift | 38 ++ .../OpenAPIs/OpenISO8601DateFormatter.swift | 44 ++ .../OpenAPIs/SynchronizedDictionary.swift | 36 ++ .../OpenAPIs/URLSessionImplementations.swift | 606 ++++++++++++++++++ .../client/petstore/swift5/oneOf/README.md | 46 ++ .../petstore/swift5/oneOf/docs/Apple.md | 11 + .../petstore/swift5/oneOf/docs/Banana.md | 11 + .../petstore/swift5/oneOf/docs/DefaultAPI.md | 52 ++ .../petstore/swift5/oneOf/docs/Fruit.md | 12 + .../client/petstore/swift5/oneOf/git_push.sh | 58 ++ .../client/petstore/swift5/oneOf/project.yml | 15 + 33 files changed, 1827 insertions(+), 2 deletions(-) create mode 100644 bin/configs/swift5-oneOf.yaml create mode 100644 modules/openapi-generator/src/main/resources/swift5/modelOneOf.mustache create mode 100644 samples/client/petstore/swift5/oneOf/.gitignore create mode 100644 samples/client/petstore/swift5/oneOf/.openapi-generator-ignore create mode 100644 samples/client/petstore/swift5/oneOf/.openapi-generator/FILES create mode 100644 samples/client/petstore/swift5/oneOf/.openapi-generator/VERSION create mode 100644 samples/client/petstore/swift5/oneOf/Cartfile create mode 100644 samples/client/petstore/swift5/oneOf/Package.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient.podspec create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIHelper.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs/DefaultAPI.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Configuration.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Extensions.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Apple.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Banana.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift create mode 100644 samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift create mode 100644 samples/client/petstore/swift5/oneOf/README.md create mode 100644 samples/client/petstore/swift5/oneOf/docs/Apple.md create mode 100644 samples/client/petstore/swift5/oneOf/docs/Banana.md create mode 100644 samples/client/petstore/swift5/oneOf/docs/DefaultAPI.md create mode 100644 samples/client/petstore/swift5/oneOf/docs/Fruit.md create mode 100644 samples/client/petstore/swift5/oneOf/git_push.sh create mode 100644 samples/client/petstore/swift5/oneOf/project.yml diff --git a/bin/configs/swift5-oneOf.yaml b/bin/configs/swift5-oneOf.yaml new file mode 100644 index 000000000000..975892b340ce --- /dev/null +++ b/bin/configs/swift5-oneOf.yaml @@ -0,0 +1,10 @@ +generatorName: swift5 +outputDir: samples/client/petstore/swift5/oneOf +inputSpec: modules/openapi-generator/src/test/resources/3_0/oneOf.yaml +templateDir: modules/openapi-generator/src/main/resources/swift5 +generateAliasAsModel: true +additionalProperties: + podAuthors: "" + podSummary: PetstoreClient + projectName: PetstoreClient + podHomepage: https://github.com/openapitools/openapi-generator diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index e1932f313501..4766e2a9c911 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -95,6 +95,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig */ public Swift5ClientCodegen() { super(); + this.useOneOfInterfaces = true; generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata) .stability(Stability.BETA) diff --git a/modules/openapi-generator/src/main/resources/swift5/model.mustache b/modules/openapi-generator/src/main/resources/swift5/model.mustache index 07c2565c3133..53892df270e7 100644 --- a/modules/openapi-generator/src/main/resources/swift5/model.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/model.mustache @@ -12,7 +12,8 @@ import AnyCodable {{#description}} /** {{description}} */{{/description}}{{#isDeprecated}} -@available(*, deprecated, message: "This schema is deprecated."){{/isDeprecated}}{{#isArray}} +@available(*, deprecated, message: "This schema is deprecated."){{/isDeprecated}}{{#vendorExtensions.x-is-one-of-interface}} +{{> modelOneOf}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{#isArray}} {{> modelArray}}{{/isArray}}{{^isArray}}{{#isEnum}} {{> modelEnum}}{{/isEnum}}{{^isEnum}} -{{> modelObject}}{{/isEnum}}{{/isArray}}{{/model}}{{/models}} +{{> modelObject}}{{/isEnum}}{{/isArray}}{{/vendorExtensions.x-is-one-of-interface}}{{/model}}{{/models}} diff --git a/modules/openapi-generator/src/main/resources/swift5/modelOneOf.mustache b/modules/openapi-generator/src/main/resources/swift5/modelOneOf.mustache new file mode 100644 index 000000000000..8aeddcc3c123 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/swift5/modelOneOf.mustache @@ -0,0 +1,31 @@ +public enum {{classname}}: Codable { + {{#oneOf}} + case type{{.}}({{.}}) + {{/oneOf}} + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + {{#oneOf}} + case .type{{.}}(let value): + try container.encode(value) + {{/oneOf}} + } + } + + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + {{#oneOf}} + {{#-first}} + if let value = try? container.decode({{.}}.self) { + {{/-first}} + {{^-first}} + } else if let value = try? container.decode({{.}}.self) { + {{/-first}} + self = .type{{.}}(value) + {{/oneOf}} + } else { + throw DecodingError.typeMismatch(Self.Type.self, .init(codingPath: decoder.codingPath, debugDescription: "Unable to decode instance of {{classname}}")) + } + } +} diff --git a/samples/client/petstore/swift5/oneOf/.gitignore b/samples/client/petstore/swift5/oneOf/.gitignore new file mode 100644 index 000000000000..5e5d5cebcf47 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/.gitignore @@ -0,0 +1,63 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated +build/ +DerivedData + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata + +## Other +*.xccheckout +*.moved-aside +*.xcuserstate +*.xcscmblueprint + +## Obj-C/Swift specific +*.hmap +*.ipa + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +# +# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. +# Packages/ +.build/ + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md + +fastlane/report.xml +fastlane/screenshots diff --git a/samples/client/petstore/swift5/oneOf/.openapi-generator-ignore b/samples/client/petstore/swift5/oneOf/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/client/petstore/swift5/oneOf/.openapi-generator/FILES b/samples/client/petstore/swift5/oneOf/.openapi-generator/FILES new file mode 100644 index 000000000000..421958ec1d26 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/.openapi-generator/FILES @@ -0,0 +1,26 @@ +.gitignore +Cartfile +Package.swift +PetstoreClient.podspec +PetstoreClient/Classes/OpenAPIs/APIHelper.swift +PetstoreClient/Classes/OpenAPIs/APIs.swift +PetstoreClient/Classes/OpenAPIs/APIs/DefaultAPI.swift +PetstoreClient/Classes/OpenAPIs/CodableHelper.swift +PetstoreClient/Classes/OpenAPIs/Configuration.swift +PetstoreClient/Classes/OpenAPIs/Extensions.swift +PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift +PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift +PetstoreClient/Classes/OpenAPIs/Models.swift +PetstoreClient/Classes/OpenAPIs/Models/Apple.swift +PetstoreClient/Classes/OpenAPIs/Models/Banana.swift +PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift +PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift +PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift +PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +README.md +docs/Apple.md +docs/Banana.md +docs/DefaultAPI.md +docs/Fruit.md +git_push.sh +project.yml diff --git a/samples/client/petstore/swift5/oneOf/.openapi-generator/VERSION b/samples/client/petstore/swift5/oneOf/.openapi-generator/VERSION new file mode 100644 index 000000000000..6555596f9311 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/swift5/oneOf/Cartfile b/samples/client/petstore/swift5/oneOf/Cartfile new file mode 100644 index 000000000000..84aaa61ef2d3 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/Cartfile @@ -0,0 +1,2 @@ + +github "Flight-School/AnyCodable" ~> 0.4.0 diff --git a/samples/client/petstore/swift5/oneOf/Package.swift b/samples/client/petstore/swift5/oneOf/Package.swift new file mode 100644 index 000000000000..b724838fe8d3 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/Package.swift @@ -0,0 +1,33 @@ +// swift-tools-version:5.1 + +import PackageDescription + +let package = Package( + name: "PetstoreClient", + platforms: [ + .iOS(.v9), + .macOS(.v10_11), + .tvOS(.v9), + .watchOS(.v3), + ], + products: [ + // Products define the executables and libraries produced by a package, and make them visible to other packages. + .library( + name: "PetstoreClient", + targets: ["PetstoreClient"] + ), + ], + dependencies: [ + // Dependencies declare other packages that this package depends on. + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + ], + targets: [ + // Targets are the basic building blocks of a package. A target can define a module or a test suite. + // Targets can depend on other targets in this package, and on products in packages which this package depends on. + .target( + name: "PetstoreClient", + dependencies: ["AnyCodable", ], + path: "PetstoreClient/Classes" + ), + ] +) diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient.podspec b/samples/client/petstore/swift5/oneOf/PetstoreClient.podspec new file mode 100644 index 000000000000..5999bbadb384 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient.podspec @@ -0,0 +1,15 @@ +Pod::Spec.new do |s| + s.name = 'PetstoreClient' + s.ios.deployment_target = '9.0' + s.osx.deployment_target = '10.11' + s.tvos.deployment_target = '9.0' + s.watchos.deployment_target = '3.0' + s.version = '0.0.1' + s.source = { :git => 'git@github.com:OpenAPITools/openapi-generator.git', :tag => 'v0.0.1' } + s.authors = '' + s.license = 'Proprietary' + s.homepage = 'https://github.com/openapitools/openapi-generator' + s.summary = 'PetstoreClient' + s.source_files = 'PetstoreClient/Classes/**/*.swift' + s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' +end diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIHelper.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIHelper.swift new file mode 100644 index 000000000000..f7bb5274bd98 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIHelper.swift @@ -0,0 +1,71 @@ +// APIHelper.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct APIHelper { + public static func rejectNil(_ source: [String: Any?]) -> [String: Any]? { + let destination = source.reduce(into: [String: Any]()) { result, item in + if let value = item.value { + result[item.key] = value + } + } + + if destination.isEmpty { + return nil + } + return destination + } + + public static func rejectNilHeaders(_ source: [String: Any?]) -> [String: String] { + return source.reduce(into: [String: String]()) { result, item in + if let collection = item.value as? [Any?] { + result[item.key] = collection.filter { $0 != nil }.map { "\($0!)" }.joined(separator: ",") + } else if let value: Any = item.value { + result[item.key] = "\(value)" + } + } + } + + public static func convertBoolToString(_ source: [String: Any]?) -> [String: Any]? { + guard let source = source else { + return nil + } + + return source.reduce(into: [String: Any]()) { result, item in + switch item.value { + case let x as Bool: + result[item.key] = x.description + default: + result[item.key] = item.value + } + } + } + + public static func mapValueToPathItem(_ source: Any) -> Any { + if let collection = source as? [Any?] { + return collection.filter { $0 != nil }.map { "\($0!)" }.joined(separator: ",") + } + return source + } + + public static func mapValuesToQueryItems(_ source: [String: Any?]) -> [URLQueryItem]? { + let destination = source.filter { $0.value != nil }.reduce(into: [URLQueryItem]()) { result, item in + if let collection = item.value as? [Any?] { + collection.filter { $0 != nil }.map { "\($0!)" }.forEach { value in + result.append(URLQueryItem(name: item.key, value: value)) + } + } else if let value = item.value { + result.append(URLQueryItem(name: item.key, value: "\(value)")) + } + } + + if destination.isEmpty { + return nil + } + return destination + } +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs.swift new file mode 100644 index 000000000000..d2b0a9186b2e --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -0,0 +1,62 @@ +// APIs.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class PetstoreClientAPI { + public static var basePath = "http://localhost" + public static var credential: URLCredential? + public static var customHeaders: [String: String] = [:] + public static var requestBuilderFactory: RequestBuilderFactory = URLSessionRequestBuilderFactory() + public static var apiResponseQueue: DispatchQueue = .main +} + +open class RequestBuilder { + var credential: URLCredential? + var headers: [String: String] + public let parameters: [String: Any]? + public let method: String + public let URLString: String + + /// Optional block to obtain a reference to the request's progress instance when available. + /// With the URLSession http client the request's progress only works on iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0. + /// If you need to get the request's progress in older OS versions, please use Alamofire http client. + public var onProgressReady: ((Progress) -> Void)? + + required public init(method: String, URLString: String, parameters: [String: Any]?, headers: [String: String] = [:]) { + self.method = method + self.URLString = URLString + self.parameters = parameters + self.headers = headers + + addHeaders(PetstoreClientAPI.customHeaders) + } + + open func addHeaders(_ aHeaders: [String: String]) { + for (header, value) in aHeaders { + headers[header] = value + } + } + + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + + public func addHeader(name: String, value: String) -> Self { + if !value.isEmpty { + headers[name] = value + } + return self + } + + open func addCredential() -> Self { + credential = PetstoreClientAPI.credential + return self + } +} + +public protocol RequestBuilderFactory { + func getNonDecodableBuilder() -> RequestBuilder.Type + func getBuilder() -> RequestBuilder.Type +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs/DefaultAPI.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs/DefaultAPI.swift new file mode 100644 index 000000000000..7bf2ca84749a --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs/DefaultAPI.swift @@ -0,0 +1,49 @@ +// +// DefaultAPI.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class DefaultAPI { + /** + + - parameter apiResponseQueue: The queue on which api response is dispatched. + - parameter completion: completion handler to receive the data and the error objects + */ + open class func rootGet(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Fruit?, _ error: Error?) -> Void)) { + rootGetWithRequestBuilder().execute(apiResponseQueue) { result -> Void in + switch result { + case let .success(response): + completion(response.body, nil) + case let .failure(error): + completion(nil, error) + } + } + } + + /** + - GET / + - returns: RequestBuilder + */ + open class func rootGetWithRequestBuilder() -> RequestBuilder { + let path = "/" + let URLString = PetstoreClientAPI.basePath + path + let parameters: [String: Any]? = nil + + let urlComponents = URLComponents(string: URLString) + + let nillableHeaders: [String: Any?] = [ + : + ] + + let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) + + let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + + return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) + } + +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift new file mode 100644 index 000000000000..09c82e53e132 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/CodableHelper.swift @@ -0,0 +1,49 @@ +// +// CodableHelper.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class CodableHelper { + private static var customDateFormatter: DateFormatter? + private static var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter() + + private static var customJSONDecoder: JSONDecoder? + private static var defaultJSONDecoder: JSONDecoder = { + let decoder = JSONDecoder() + decoder.dateDecodingStrategy = .formatted(CodableHelper.dateFormatter) + return decoder + }() + + private static var customJSONEncoder: JSONEncoder? + private static var defaultJSONEncoder: JSONEncoder = { + let encoder = JSONEncoder() + encoder.dateEncodingStrategy = .formatted(CodableHelper.dateFormatter) + encoder.outputFormatting = .prettyPrinted + return encoder + }() + + public static var dateFormatter: DateFormatter { + get { return customDateFormatter ?? defaultDateFormatter } + set { customDateFormatter = newValue } + } + public static var jsonDecoder: JSONDecoder { + get { return customJSONDecoder ?? defaultJSONDecoder } + set { customJSONDecoder = newValue } + } + public static var jsonEncoder: JSONEncoder { + get { return customJSONEncoder ?? defaultJSONEncoder } + set { customJSONEncoder = newValue } + } + + open class func decode(_ type: T.Type, from data: Data) -> Swift.Result where T: Decodable { + return Swift.Result { try jsonDecoder.decode(type, from: data) } + } + + open class func encode(_ value: T) -> Swift.Result where T: Encodable { + return Swift.Result { try jsonEncoder.encode(value) } + } +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Configuration.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Configuration.swift new file mode 100644 index 000000000000..18edabbed782 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Configuration.swift @@ -0,0 +1,14 @@ +// Configuration.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class Configuration { + // This value is used to configure the date formatter that is used to serialize dates into JSON format. + // You must set it prior to encoding any dates, and it will only be read once. + @available(*, unavailable, message: "To set a different date format, use CodableHelper.dateFormatter instead.") + public static var dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Extensions.swift new file mode 100644 index 000000000000..11e807937bdc --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -0,0 +1,231 @@ +// Extensions.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +#if canImport(AnyCodable) +import AnyCodable +#endif + +extension Bool: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension Float: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension Int: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension Int32: JSONEncodable { + func encodeToJSON() -> Any { return NSNumber(value: self as Int32) } +} + +extension Int64: JSONEncodable { + func encodeToJSON() -> Any { return NSNumber(value: self as Int64) } +} + +extension Double: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension String: JSONEncodable { + func encodeToJSON() -> Any { return self as Any } +} + +extension RawRepresentable where RawValue: JSONEncodable { + func encodeToJSON() -> Any { return self.rawValue as Any } +} + +private func encodeIfPossible(_ object: T) -> Any { + if let encodableObject = object as? JSONEncodable { + return encodableObject.encodeToJSON() + } else { + return object as Any + } +} + +extension Array: JSONEncodable { + func encodeToJSON() -> Any { + return self.map(encodeIfPossible) + } +} + +extension Set: JSONEncodable { + func encodeToJSON() -> Any { + return Array(self).encodeToJSON() + } +} + +extension Dictionary: JSONEncodable { + func encodeToJSON() -> Any { + var dictionary = [AnyHashable: Any]() + for (key, value) in self { + dictionary[key] = encodeIfPossible(value) + } + return dictionary as Any + } +} + +extension Data: JSONEncodable { + func encodeToJSON() -> Any { + return self.base64EncodedString(options: Data.Base64EncodingOptions()) + } +} + +extension Date: JSONEncodable { + func encodeToJSON() -> Any { + return CodableHelper.dateFormatter.string(from: self) as Any + } +} + +extension URL: JSONEncodable { + func encodeToJSON() -> Any { + return self + } +} + +extension UUID: JSONEncodable { + func encodeToJSON() -> Any { + return self.uuidString + } +} + +extension String: CodingKey { + + public var stringValue: String { + return self + } + + public init?(stringValue: String) { + self.init(stringLiteral: stringValue) + } + + public var intValue: Int? { + return nil + } + + public init?(intValue: Int) { + return nil + } + +} + +extension KeyedEncodingContainerProtocol { + + public mutating func encodeArray(_ values: [T], forKey key: Self.Key) throws where T: Encodable { + var arrayContainer = nestedUnkeyedContainer(forKey: key) + try arrayContainer.encode(contentsOf: values) + } + + public mutating func encodeArrayIfPresent(_ values: [T]?, forKey key: Self.Key) throws where T: Encodable { + if let values = values { + try encodeArray(values, forKey: key) + } + } + + public mutating func encodeMap(_ pairs: [Self.Key: T]) throws where T: Encodable { + for (key, value) in pairs { + try encode(value, forKey: key) + } + } + + public mutating func encodeMapIfPresent(_ pairs: [Self.Key: T]?) throws where T: Encodable { + if let pairs = pairs { + try encodeMap(pairs) + } + } + +} + +extension KeyedDecodingContainerProtocol { + + public func decodeArray(_ type: T.Type, forKey key: Self.Key) throws -> [T] where T: Decodable { + var tmpArray = [T]() + + var nestedContainer = try nestedUnkeyedContainer(forKey: key) + while !nestedContainer.isAtEnd { + let arrayValue = try nestedContainer.decode(T.self) + tmpArray.append(arrayValue) + } + + return tmpArray + } + + public func decodeArrayIfPresent(_ type: T.Type, forKey key: Self.Key) throws -> [T]? where T: Decodable { + var tmpArray: [T]? + + if contains(key) { + tmpArray = try decodeArray(T.self, forKey: key) + } + + return tmpArray + } + + public func decodeMap(_ type: T.Type, excludedKeys: Set) throws -> [Self.Key: T] where T: Decodable { + var map: [Self.Key: T] = [:] + + for key in allKeys { + if !excludedKeys.contains(key) { + let value = try decode(T.self, forKey: key) + map[key] = value + } + } + + return map + } + +} + +extension HTTPURLResponse { + var isStatusCodeSuccessful: Bool { + return Array(200 ..< 300).contains(statusCode) + } +} + +#if canImport(AnyCodable) +extension AnyCodable: Hashable { + public func hash(into hasher: inout Hasher) { + switch value { + case let value as Bool: + hasher.combine(value) + case let value as Int: + hasher.combine(value) + case let value as Int8: + hasher.combine(value) + case let value as Int16: + hasher.combine(value) + case let value as Int32: + hasher.combine(value) + case let value as Int64: + hasher.combine(value) + case let value as UInt: + hasher.combine(value) + case let value as UInt8: + hasher.combine(value) + case let value as UInt16: + hasher.combine(value) + case let value as UInt32: + hasher.combine(value) + case let value as UInt64: + hasher.combine(value) + case let value as Float: + hasher.combine(value) + case let value as Double: + hasher.combine(value) + case let value as String: + hasher.combine(value) + case let value as [String: AnyCodable]: + hasher.combine(value) + case let value as [AnyCodable]: + hasher.combine(value) + default: + hasher.combine(0) + } + } +} +#endif diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift new file mode 100644 index 000000000000..b79e9f5e64d5 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/JSONDataEncoding.swift @@ -0,0 +1,53 @@ +// +// JSONDataEncoding.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +public struct JSONDataEncoding { + + // MARK: Properties + + private static let jsonDataKey = "jsonData" + + // MARK: Encoding + + /// Creates a URL request by encoding parameters and applying them onto an existing request. + /// + /// - parameter urlRequest: The request to have parameters applied. + /// - parameter parameters: The parameters to apply. This should have a single key/value + /// pair with "jsonData" as the key and a Data object as the value. + /// + /// - throws: An `Error` if the encoding process encounters an error. + /// + /// - returns: The encoded request. + public func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) -> URLRequest { + var urlRequest = urlRequest + + guard let jsonData = parameters?[JSONDataEncoding.jsonDataKey] as? Data, !jsonData.isEmpty else { + return urlRequest + } + + if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { + urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + } + + urlRequest.httpBody = jsonData + + return urlRequest + } + + public static func encodingParameters(jsonData: Data?) -> [String: Any]? { + var returnedParams: [String: Any]? + if let jsonData = jsonData, !jsonData.isEmpty { + var params: [String: Any] = [:] + params[jsonDataKey] = jsonData + returnedParams = params + } + return returnedParams + } + +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift new file mode 100644 index 000000000000..02f78ffb4705 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/JSONEncodingHelper.swift @@ -0,0 +1,45 @@ +// +// JSONEncodingHelper.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +open class JSONEncodingHelper { + + open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? { + var params: [String: Any]? + + // Encode the Encodable object + if let encodableObj = encodableObj { + let encodeResult = CodableHelper.encode(encodableObj) + do { + let data = try encodeResult.get() + params = JSONDataEncoding.encodingParameters(jsonData: data) + } catch { + print(error.localizedDescription) + } + } + + return params + } + + open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? { + var params: [String: Any]? + + if let encodableObj = encodableObj { + do { + let data = try JSONSerialization.data(withJSONObject: encodableObj, options: .prettyPrinted) + params = JSONDataEncoding.encodingParameters(jsonData: data) + } catch { + print(error.localizedDescription) + return nil + } + } + + return params + } + +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models.swift new file mode 100644 index 000000000000..96e26a20f7d6 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models.swift @@ -0,0 +1,54 @@ +// Models.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +protocol JSONEncodable { + func encodeToJSON() -> Any +} + +public enum ErrorResponse: Error { + case error(Int, Data?, URLResponse?, Error) +} + +public enum DownloadException: Error { + case responseDataMissing + case responseFailed + case requestMissing + case requestMissingPath + case requestMissingURL +} + +public enum DecodableRequestBuilderError: Error { + case emptyDataResponse + case nilHTTPResponse + case unsuccessfulHTTPStatusCode + case jsonDecoding(DecodingError) + case generalError(Error) +} + +open class Response { + public let statusCode: Int + public let header: [String: String] + public let body: T? + + public init(statusCode: Int, header: [String: String], body: T?) { + self.statusCode = statusCode + self.header = header + self.body = body + } + + public convenience init(response: HTTPURLResponse, body: T?) { + let rawHeader = response.allHeaderFields + var header = [String: String]() + for (key, value) in rawHeader { + if let key = key.base as? String, let value = value as? String { + header[key] = value + } + } + self.init(statusCode: response.statusCode, header: header, body: body) + } +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Apple.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Apple.swift new file mode 100644 index 000000000000..17495d47fd35 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Apple.swift @@ -0,0 +1,31 @@ +// +// Apple.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +#if canImport(AnyCodable) +import AnyCodable +#endif + +public struct Apple: Codable, Hashable { + + public var kind: String? + + public init(kind: String? = nil) { + self.kind = kind + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case kind + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(kind, forKey: .kind) + } +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Banana.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Banana.swift new file mode 100644 index 000000000000..c0a23db0b1c5 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Banana.swift @@ -0,0 +1,31 @@ +// +// Banana.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +#if canImport(AnyCodable) +import AnyCodable +#endif + +public struct Banana: Codable, Hashable { + + public var count: Double? + + public init(count: Double? = nil) { + self.count = count + } + + public enum CodingKeys: String, CodingKey, CaseIterable { + case count + } + + // Encodable protocol methods + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encodeIfPresent(count, forKey: .count) + } +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift new file mode 100644 index 000000000000..d58ad1f8b319 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Models/Fruit.swift @@ -0,0 +1,38 @@ +// +// Fruit.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +#if canImport(AnyCodable) +import AnyCodable +#endif + +public enum Fruit: Codable { + case typeApple(Apple) + case typeBanana(Banana) + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case .typeApple(let value): + try container.encode(value) + case .typeBanana(let value): + try container.encode(value) + } + } + + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + if let value = try? container.decode(Apple.self) { + self = .typeApple(value) + } else if let value = try? container.decode(Banana.self) { + self = .typeBanana(value) + } else { + throw DecodingError.typeMismatch(Self.Type.self, .init(codingPath: decoder.codingPath, debugDescription: "Unable to decode instance of Fruit")) + } + } +} + diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift new file mode 100644 index 000000000000..e06208074cd9 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/OpenISO8601DateFormatter.swift @@ -0,0 +1,44 @@ +// +// OpenISO8601DateFormatter.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +// https://stackoverflow.com/a/50281094/976628 +public class OpenISO8601DateFormatter: DateFormatter { + static let withoutSeconds: DateFormatter = { + let formatter = DateFormatter() + formatter.calendar = Calendar(identifier: .iso8601) + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.timeZone = TimeZone(secondsFromGMT: 0) + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" + return formatter + }() + + private func setup() { + calendar = Calendar(identifier: .iso8601) + locale = Locale(identifier: "en_US_POSIX") + timeZone = TimeZone(secondsFromGMT: 0) + dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" + } + + override init() { + super.init() + setup() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + setup() + } + + override public func date(from string: String) -> Date? { + if let result = super.date(from: string) { + return result + } + return OpenISO8601DateFormatter.withoutSeconds.date(from: string) + } +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift new file mode 100644 index 000000000000..acf7ff4031bd --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/SynchronizedDictionary.swift @@ -0,0 +1,36 @@ +// SynchronizedDictionary.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation + +internal struct SynchronizedDictionary { + + private var dictionary = [K: V]() + private let queue = DispatchQueue( + label: "SynchronizedDictionary", + qos: DispatchQoS.userInitiated, + attributes: [DispatchQueue.Attributes.concurrent], + autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, + target: nil + ) + + internal subscript(key: K) -> V? { + get { + var value: V? + + queue.sync { + value = self.dictionary[key] + } + + return value + } + set { + queue.sync(flags: DispatchWorkItemFlags.barrier) { + self.dictionary[key] = newValue + } + } + } +} diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift new file mode 100644 index 000000000000..52b2071ec1aa --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -0,0 +1,606 @@ +// URLSessionImplementations.swift +// +// Generated by openapi-generator +// https://openapi-generator.tech +// + +import Foundation +#if !os(macOS) +import MobileCoreServices +#endif + +class URLSessionRequestBuilderFactory: RequestBuilderFactory { + func getNonDecodableBuilder() -> RequestBuilder.Type { + return URLSessionRequestBuilder.self + } + + func getBuilder() -> RequestBuilder.Type { + return URLSessionDecodableRequestBuilder.self + } +} + +// Store the URLSession to retain its reference +private var urlSessionStore = SynchronizedDictionary() + +open class URLSessionRequestBuilder: RequestBuilder { + + /** + May be assigned if you want to control the authentication challenges. + */ + public var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? + + /** + May be assigned if you want to do any of those things: + - control the task completion + - intercept and handle errors like authorization + - retry the request. + */ + @available(*, deprecated, message: "Please override execute() method to intercept and handle errors like authorization or retry the request. Check the Wiki for more info. https://github.com/OpenAPITools/openapi-generator/wiki/FAQ#how-do-i-implement-bearer-token-authentication-with-urlsession-on-the-swift-api-client") + public var taskCompletionShouldRetry: ((Data?, URLResponse?, Error?, @escaping (Bool) -> Void) -> Void)? + + required public init(method: String, URLString: String, parameters: [String: Any]?, headers: [String: String] = [:]) { + super.init(method: method, URLString: URLString, parameters: parameters, headers: headers) + } + + /** + May be overridden by a subclass if you want to control the URLSession + configuration. + */ + open func createURLSession() -> URLSession { + let configuration = URLSessionConfiguration.default + configuration.httpAdditionalHeaders = buildHeaders() + let sessionDelegate = SessionDelegate() + sessionDelegate.credential = credential + sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge + return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil) + } + + /** + May be overridden by a subclass if you want to control the Content-Type + that is given to an uploaded form part. + + Return nil to use the default behavior (inferring the Content-Type from + the file extension). Return the desired Content-Type otherwise. + */ + open func contentTypeForFormPart(fileURL: URL) -> String? { + return nil + } + + /** + May be overridden by a subclass if you want to control the URLRequest + configuration (e.g. to override the cache policy). + */ + open func createURLRequest(urlSession: URLSession, method: HTTPMethod, encoding: ParameterEncoding, headers: [String: String]) throws -> URLRequest { + + guard let url = URL(string: URLString) else { + throw DownloadException.requestMissingURL + } + + var originalRequest = URLRequest(url: url) + + originalRequest.httpMethod = method.rawValue + + headers.forEach { key, value in + originalRequest.setValue(value, forHTTPHeaderField: key) + } + + buildHeaders().forEach { key, value in + originalRequest.setValue(value, forHTTPHeaderField: key) + } + + let modifiedRequest = try encoding.encode(originalRequest, with: parameters) + + return modifiedRequest + } + + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + let urlSessionId = UUID().uuidString + // Create a new manager for each request to customize its request header + let urlSession = createURLSession() + urlSessionStore[urlSessionId] = urlSession + + guard let xMethod = HTTPMethod(rawValue: method) else { + fatalError("Unsuported Http method - \(method)") + } + + let encoding: ParameterEncoding + + switch xMethod { + case .get, .head: + encoding = URLEncoding() + + case .options, .post, .put, .patch, .delete, .trace, .connect: + let contentType = headers["Content-Type"] ?? "application/json" + + if contentType == "application/json" { + encoding = JSONDataEncoding() + } else if contentType == "multipart/form-data" { + encoding = FormDataEncoding(contentTypeForFormPart: contentTypeForFormPart(fileURL:)) + } else if contentType == "application/x-www-form-urlencoded" { + encoding = FormURLEncoding() + } else { + fatalError("Unsuported Media Type - \(contentType)") + } + } + + let cleanupRequest = { + urlSessionStore[urlSessionId]?.finishTasksAndInvalidate() + urlSessionStore[urlSessionId] = nil + } + + do { + let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) + + let dataTask = urlSession.dataTask(with: request) { data, response, error in + + if let taskCompletionShouldRetry = self.taskCompletionShouldRetry { + + taskCompletionShouldRetry(data, response, error) { shouldRetry in + + if shouldRetry { + cleanupRequest() + self.execute(apiResponseQueue, completion) + } else { + apiResponseQueue.async { + self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion) + cleanupRequest() + } + } + } + } else { + apiResponseQueue.async { + self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion) + cleanupRequest() + } + } + } + + if #available(iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0, *) { + onProgressReady?(dataTask.progress) + } + + dataTask.resume() + + } catch { + apiResponseQueue.async { + cleanupRequest() + completion(.failure(ErrorResponse.error(415, nil, nil, error))) + } + } + } + + fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + + if let error = error { + completion(.failure(ErrorResponse.error(-1, data, response, error))) + return + } + + guard let httpResponse = response as? HTTPURLResponse else { + completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse))) + return + } + + guard httpResponse.isStatusCodeSuccessful else { + completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) + return + } + + switch T.self { + case is String.Type: + + let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? "" + + completion(.success(Response(response: httpResponse, body: body as? T))) + + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } + + let filePath = documentsDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + + case is Void.Type: + + completion(.success(Response(response: httpResponse, body: nil))) + + default: + + completion(.success(Response(response: httpResponse, body: data as? T))) + } + + } + + open func buildHeaders() -> [String: String] { + var httpHeaders: [String: String] = [:] + for (key, value) in headers { + httpHeaders[key] = value + } + for (key, value) in PetstoreClientAPI.customHeaders { + httpHeaders[key] = value + } + return httpHeaders + } + + fileprivate func getFileName(fromContentDisposition contentDisposition: String?) -> String? { + + guard let contentDisposition = contentDisposition else { + return nil + } + + let items = contentDisposition.components(separatedBy: ";") + + var filename: String? + + for contentItem in items { + + let filenameKey = "filename=" + guard let range = contentItem.range(of: filenameKey) else { + break + } + + filename = contentItem + return filename? + .replacingCharacters(in: range, with: "") + .replacingOccurrences(of: "\"", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) + } + + return filename + + } + + fileprivate func getPath(from url: URL) throws -> String { + + guard var path = URLComponents(url: url, resolvingAgainstBaseURL: true)?.path else { + throw DownloadException.requestMissingPath + } + + if path.hasPrefix("/") { + path.remove(at: path.startIndex) + } + + return path + + } + + fileprivate func getURL(from urlRequest: URLRequest) throws -> URL { + + guard let url = urlRequest.url else { + throw DownloadException.requestMissingURL + } + + return url + } + +} + +open class URLSessionDecodableRequestBuilder: URLSessionRequestBuilder { + override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + + if let error = error { + completion(.failure(ErrorResponse.error(-1, data, response, error))) + return + } + + guard let httpResponse = response as? HTTPURLResponse else { + completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse))) + return + } + + guard httpResponse.isStatusCodeSuccessful else { + completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) + return + } + + switch T.self { + case is String.Type: + + let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? "" + + completion(.success(Response(response: httpResponse, body: body as? T))) + + case is Void.Type: + + completion(.success(Response(response: httpResponse, body: nil))) + + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + + default: + + guard let data = data, !data.isEmpty else { + completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse))) + return + } + + let decodeResult = CodableHelper.decode(T.self, from: data) + + switch decodeResult { + case let .success(decodableObj): + completion(.success(Response(response: httpResponse, body: decodableObj))) + case let .failure(error): + completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error))) + } + } + } +} + +private class SessionDelegate: NSObject, URLSessionDelegate, URLSessionDataDelegate { + + var credential: URLCredential? + + var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? + + func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + + var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling + + var credential: URLCredential? + + if let taskDidReceiveChallenge = taskDidReceiveChallenge { + (disposition, credential) = taskDidReceiveChallenge(session, task, challenge) + } else { + if challenge.previousFailureCount > 0 { + disposition = .rejectProtectionSpace + } else { + credential = self.credential ?? session.configuration.urlCredentialStorage?.defaultCredential(for: challenge.protectionSpace) + + if credential != nil { + disposition = .useCredential + } + } + } + + completionHandler(disposition, credential) + } +} + +public enum HTTPMethod: String { + case options = "OPTIONS" + case get = "GET" + case head = "HEAD" + case post = "POST" + case put = "PUT" + case patch = "PATCH" + case delete = "DELETE" + case trace = "TRACE" + case connect = "CONNECT" +} + +public protocol ParameterEncoding { + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest +} + +private class URLEncoding: ParameterEncoding { + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { + + var urlRequest = urlRequest + + guard let parameters = parameters else { return urlRequest } + + guard let url = urlRequest.url else { + throw DownloadException.requestMissingURL + } + + if var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false), !parameters.isEmpty { + urlComponents.queryItems = APIHelper.mapValuesToQueryItems(parameters) + urlRequest.url = urlComponents.url + } + + return urlRequest + } +} + +private class FormDataEncoding: ParameterEncoding { + + let contentTypeForFormPart: (_ fileURL: URL) -> String? + + init(contentTypeForFormPart: @escaping (_ fileURL: URL) -> String?) { + self.contentTypeForFormPart = contentTypeForFormPart + } + + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { + + var urlRequest = urlRequest + + guard let parameters = parameters, !parameters.isEmpty else { + return urlRequest + } + + let boundary = "Boundary-\(UUID().uuidString)" + + urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") + + for (key, value) in parameters { + switch value { + case let fileURL as URL: + + urlRequest = try configureFileUploadRequest( + urlRequest: urlRequest, + boundary: boundary, + name: key, + fileURL: fileURL + ) + + case let string as String: + + if let data = string.data(using: .utf8) { + urlRequest = configureDataUploadRequest( + urlRequest: urlRequest, + boundary: boundary, + name: key, + data: data + ) + } + + case let number as NSNumber: + + if let data = number.stringValue.data(using: .utf8) { + urlRequest = configureDataUploadRequest( + urlRequest: urlRequest, + boundary: boundary, + name: key, + data: data + ) + } + + default: + fatalError("Unprocessable value \(value) with key \(key)") + } + } + + var body = urlRequest.httpBody.orEmpty + + body.append("\r\n--\(boundary)--\r\n") + + urlRequest.httpBody = body + + return urlRequest + } + + private func configureFileUploadRequest(urlRequest: URLRequest, boundary: String, name: String, fileURL: URL) throws -> URLRequest { + + var urlRequest = urlRequest + + var body = urlRequest.httpBody.orEmpty + + let fileData = try Data(contentsOf: fileURL) + + let mimetype = contentTypeForFormPart(fileURL) ?? mimeType(for: fileURL) + + let fileName = fileURL.lastPathComponent + + // If we already added something then we need an additional newline. + if body.count > 0 { + body.append("\r\n") + } + + // Value boundary. + body.append("--\(boundary)\r\n") + + // Value headers. + body.append("Content-Disposition: form-data; name=\"\(name)\"; filename=\"\(fileName)\"\r\n") + body.append("Content-Type: \(mimetype)\r\n") + + // Separate headers and body. + body.append("\r\n") + + // The value data. + body.append(fileData) + + urlRequest.httpBody = body + + return urlRequest + } + + private func configureDataUploadRequest(urlRequest: URLRequest, boundary: String, name: String, data: Data) -> URLRequest { + + var urlRequest = urlRequest + + var body = urlRequest.httpBody.orEmpty + + // If we already added something then we need an additional newline. + if body.count > 0 { + body.append("\r\n") + } + + // Value boundary. + body.append("--\(boundary)\r\n") + + // Value headers. + body.append("Content-Disposition: form-data; name=\"\(name)\"\r\n") + + // Separate headers and body. + body.append("\r\n") + + // The value data. + body.append(data) + + urlRequest.httpBody = body + + return urlRequest + + } + + func mimeType(for url: URL) -> String { + let pathExtension = url.pathExtension + + if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() { + if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() { + return mimetype as String + } + } + return "application/octet-stream" + } + +} + +private class FormURLEncoding: ParameterEncoding { + func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { + + var urlRequest = urlRequest + + var requestBodyComponents = URLComponents() + requestBodyComponents.queryItems = APIHelper.mapValuesToQueryItems(parameters ?? [:]) + + if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { + urlRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") + } + + urlRequest.httpBody = requestBodyComponents.query?.data(using: .utf8) + + return urlRequest + } +} + +private extension Data { + /// Append string to Data + /// + /// Rather than littering my code with calls to `dataUsingEncoding` to convert strings to Data, and then add that data to the Data, this wraps it in a nice convenient little extension to Data. This converts using UTF-8. + /// + /// - parameter string: The string to be added to the `Data`. + + mutating func append(_ string: String) { + if let data = string.data(using: .utf8) { + append(data) + } + } +} + +private extension Optional where Wrapped == Data { + var orEmpty: Data { + self ?? Data() + } +} + +extension JSONDataEncoding: ParameterEncoding {} diff --git a/samples/client/petstore/swift5/oneOf/README.md b/samples/client/petstore/swift5/oneOf/README.md new file mode 100644 index 000000000000..58f7c7f65ce2 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/README.md @@ -0,0 +1,46 @@ +# Swift5 API client for PetstoreClient + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +## Overview +This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [openapi-spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate an API client. + +- API version: 0.0.1 +- Package version: +- Build package: org.openapitools.codegen.languages.Swift5ClientCodegen + +## Installation + +### Carthage + +Run `carthage update` + +### CocoaPods + +Run `pod install` + +## Documentation for API Endpoints + +All URIs are relative to *http://localhost* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*DefaultAPI* | [**rootGet**](docs/DefaultAPI.md#rootget) | **GET** / | + + +## Documentation For Models + + - [Apple](docs/Apple.md) + - [Banana](docs/Banana.md) + - [Fruit](docs/Fruit.md) + + +## Documentation For Authorization + + All endpoints do not require authorization. + + +## Author + + + diff --git a/samples/client/petstore/swift5/oneOf/docs/Apple.md b/samples/client/petstore/swift5/oneOf/docs/Apple.md new file mode 100644 index 000000000000..12ead3f7cb0d --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/docs/Apple.md @@ -0,0 +1,11 @@ +# Apple + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**kind** | **String** | | [optional] +**color** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/oneOf/docs/Banana.md b/samples/client/petstore/swift5/oneOf/docs/Banana.md new file mode 100644 index 000000000000..e194ddc30d41 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/docs/Banana.md @@ -0,0 +1,11 @@ +# Banana + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**count** | **Double** | | [optional] +**color** | **String** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/oneOf/docs/DefaultAPI.md b/samples/client/petstore/swift5/oneOf/docs/DefaultAPI.md new file mode 100644 index 000000000000..bcefe1e3ffa1 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/docs/DefaultAPI.md @@ -0,0 +1,52 @@ +# DefaultAPI + +All URIs are relative to *http://localhost* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**rootGet**](DefaultAPI.md#rootget) | **GET** / | + + +# **rootGet** +```swift + open class func rootGet(completion: @escaping (_ data: Fruit?, _ error: Error?) -> Void) +``` + + + +### Example +```swift +// The following code samples are still beta. For any issue, please report via http://github.com/OpenAPITools/openapi-generator/issues/new +import PetstoreClient + + +DefaultAPI.rootGet() { (response, error) in + guard error == nil else { + print(error) + return + } + + if (response) { + dump(response) + } +} +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**Fruit**](Fruit.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/samples/client/petstore/swift5/oneOf/docs/Fruit.md b/samples/client/petstore/swift5/oneOf/docs/Fruit.md new file mode 100644 index 000000000000..3efd863258b7 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/docs/Fruit.md @@ -0,0 +1,12 @@ +# Fruit + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**color** | **String** | | [optional] +**kind** | **String** | | [optional] +**count** | **Double** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/swift5/oneOf/git_push.sh b/samples/client/petstore/swift5/oneOf/git_push.sh new file mode 100644 index 000000000000..ced3be2b0c7b --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/git_push.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-pestore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=`git remote` +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' + diff --git a/samples/client/petstore/swift5/oneOf/project.yml b/samples/client/petstore/swift5/oneOf/project.yml new file mode 100644 index 000000000000..1949ec8ed3b6 --- /dev/null +++ b/samples/client/petstore/swift5/oneOf/project.yml @@ -0,0 +1,15 @@ +name: PetstoreClient +targets: + PetstoreClient: + type: framework + platform: iOS + deploymentTarget: "9.0" + sources: [PetstoreClient] + info: + path: ./Info.plist + version: 0.0.1 + settings: + APPLICATION_EXTENSION_API_ONLY: true + scheme: {} + dependencies: + - carthage: AnyCodable From ae430a8c14c727141e534c419ffea71ceebb84aa Mon Sep 17 00:00:00 2001 From: William Cheng Date: Tue, 25 May 2021 23:55:16 +0800 Subject: [PATCH 148/186] [cpp][tiny] rename generator, update samples (#9560) * rename generator, update samples * add doc * update readme --- README.md | 3 +- ...client-petstore-new.yaml => cpp-tiny.yaml} | 6 +- docs/generators.md | 1 + docs/generators/cpp-tiny.md | 243 ++++++++++ ...Codegen.java => CppTinyClientCodegen.java} | 71 +-- .../org.openapitools.codegen.CodegenConfig | 2 +- .../README.mustache | 0 .../helpers-body.mustache | 0 .../helpers-header.mustache | 0 .../main.mustache | 0 .../model-body.mustache | 0 .../model-header.mustache | 0 .../platformio.ini.mustache | 0 .../pre_compiling_bourne.py.mustache | 0 .../root.cert.mustache | 0 .../run-tests.mustache | 0 .../service/AbstractService.cpp.mustache | 0 .../service/AbstractService.h.mustache | 0 .../service/Response.h.mustache | 0 .../service/api-body.mustache | 0 .../service/api-header.mustache | 0 .../unit-test-model.mustache | 0 .../unittest.mustache | 0 .../cpp-tiny/.openapi-generator-ignore | 23 + .../cpp-tiny/.openapi-generator/FILES | 30 ++ .../cpp-tiny/.openapi-generator/VERSION | 1 + samples/client/petstore/cpp-tiny/README.md | 73 +++ .../cpp-tiny/lib/Models/ApiResponse.cpp | 139 ++++++ .../cpp-tiny/lib/Models/ApiResponse.h | 78 ++++ .../petstore/cpp-tiny/lib/Models/Category.cpp | 106 +++++ .../petstore/cpp-tiny/lib/Models/Category.h | 70 +++ .../petstore/cpp-tiny/lib/Models/Helpers.cpp | 102 +++++ .../petstore/cpp-tiny/lib/Models/Helpers.h | 22 + .../petstore/cpp-tiny/lib/Models/Order.cpp | 238 ++++++++++ .../petstore/cpp-tiny/lib/Models/Order.h | 102 +++++ .../petstore/cpp-tiny/lib/Models/Pet.cpp | 274 ++++++++++++ .../client/petstore/cpp-tiny/lib/Models/Pet.h | 105 +++++ .../petstore/cpp-tiny/lib/Models/Tag.cpp | 106 +++++ .../client/petstore/cpp-tiny/lib/Models/Tag.h | 70 +++ .../petstore/cpp-tiny/lib/Models/User.cpp | 304 +++++++++++++ .../petstore/cpp-tiny/lib/Models/User.h | 118 +++++ .../lib/TestFiles/ApiResponseTest.cpp | 139 ++++++ .../cpp-tiny/lib/TestFiles/CategoryTest.cpp | 97 ++++ .../cpp-tiny/lib/TestFiles/OrderTest.cpp | 245 ++++++++++ .../cpp-tiny/lib/TestFiles/PetTest.cpp | 145 ++++++ .../cpp-tiny/lib/TestFiles/TagTest.cpp | 97 ++++ .../cpp-tiny/lib/TestFiles/UserTest.cpp | 349 +++++++++++++++ .../cpp-tiny/lib/service/AbstractService.cpp | 8 + .../cpp-tiny/lib/service/AbstractService.h | 28 ++ .../petstore/cpp-tiny/lib/service/PetApi.cpp | 418 ++++++++++++++++++ .../petstore/cpp-tiny/lib/service/PetApi.h | 163 +++++++ .../petstore/cpp-tiny/lib/service/Response.h | 25 ++ .../cpp-tiny/lib/service/StoreApi.cpp | 185 ++++++++ .../petstore/cpp-tiny/lib/service/StoreApi.h | 83 ++++ .../petstore/cpp-tiny/lib/service/UserApi.cpp | 366 +++++++++++++++ .../petstore/cpp-tiny/lib/service/UserApi.h | 147 ++++++ .../client/petstore/cpp-tiny/platformio.ini | 7 + .../petstore/cpp-tiny/pre_compiling_bourne.py | 25 ++ samples/client/petstore/cpp-tiny/root.cert | 53 +++ samples/client/petstore/cpp-tiny/src/main.cpp | 37 ++ .../petstore/cpp-tiny/test/RunTests.cpp | 204 +++++++++ 61 files changed, 5070 insertions(+), 38 deletions(-) rename bin/configs/{tiny-cpp-client-petstore-new.yaml => cpp-tiny.yaml} (51%) create mode 100644 docs/generators/cpp-tiny.md rename modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/{TinyCppClientCodegen.java => CppTinyClientCodegen.java} (87%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/README.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/helpers-body.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/helpers-header.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/main.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/model-body.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/model-header.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/platformio.ini.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/pre_compiling_bourne.py.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/root.cert.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/run-tests.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/service/AbstractService.cpp.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/service/AbstractService.h.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/service/Response.h.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/service/api-body.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/service/api-header.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/unit-test-model.mustache (100%) rename modules/openapi-generator/src/main/resources/{tiny-cpp-client => cpp-tiny}/unittest.mustache (100%) create mode 100644 samples/client/petstore/cpp-tiny/.openapi-generator-ignore create mode 100644 samples/client/petstore/cpp-tiny/.openapi-generator/FILES create mode 100644 samples/client/petstore/cpp-tiny/.openapi-generator/VERSION create mode 100644 samples/client/petstore/cpp-tiny/README.md create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/ApiResponse.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/ApiResponse.h create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/Category.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/Category.h create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/Helpers.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/Helpers.h create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/Order.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/Order.h create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/Pet.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/Pet.h create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/Tag.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/Tag.h create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/User.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/Models/User.h create mode 100644 samples/client/petstore/cpp-tiny/lib/TestFiles/ApiResponseTest.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/TestFiles/CategoryTest.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/TestFiles/OrderTest.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/TestFiles/PetTest.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/TestFiles/TagTest.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/TestFiles/UserTest.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/service/AbstractService.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/service/AbstractService.h create mode 100644 samples/client/petstore/cpp-tiny/lib/service/PetApi.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/service/PetApi.h create mode 100644 samples/client/petstore/cpp-tiny/lib/service/Response.h create mode 100644 samples/client/petstore/cpp-tiny/lib/service/StoreApi.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/service/StoreApi.h create mode 100644 samples/client/petstore/cpp-tiny/lib/service/UserApi.cpp create mode 100644 samples/client/petstore/cpp-tiny/lib/service/UserApi.h create mode 100644 samples/client/petstore/cpp-tiny/platformio.ini create mode 100644 samples/client/petstore/cpp-tiny/pre_compiling_bourne.py create mode 100644 samples/client/petstore/cpp-tiny/root.cert create mode 100644 samples/client/petstore/cpp-tiny/src/main.cpp create mode 100644 samples/client/petstore/cpp-tiny/test/RunTests.cpp diff --git a/README.md b/README.md index 625c094352d8..5c6686628deb 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ OpenAPI Generator allows generation of API client libraries (SDK generation), se | | Languages/Frameworks | | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **API clients** | **ActionScript**, **Ada**, **Apex**, **Bash**, **C**, **C#** (.net 2.0, 3.5 or later, .NET Standard 1.3 - 2.0, .NET Core 2.0, .NET 5.0. Libraries: RestSharp, HttpClient), **C++** (cpp-restsdk, Qt5, Tizen, Unreal Engine 4), **Clojure**, **Crystal**, **Dart**, **Elixir**, **Elm**, **Eiffel**, **Erlang**, **Go**, **Groovy**, **Haskell** (http-client, Servant), **Java** (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx, Google API Client Library for Java, Rest-assured, Spring 5 Web Client, MicroProfile Rest Client), **k6**, **Kotlin**, **Lua**, **Nim**, **Node.js/JavaScript** (ES5, ES6, AngularJS with Google Closure Compiler annotations, Flow types, Apollo GraphQL DataStore), **Objective-C**, **OCaml**, **Perl**, **PHP**, **PowerShell**, **Python**, **R**, **Ruby**, **Rust** (hyper, reqwest, rust-server), **Scala** (akka, http4s, scalaz, sttp, swagger-async-httpclient), **Swift** (2.x, 3.x, 4.x, 5.x), **Typescript** (AngularJS, Angular (2.x - 11.x), Aurelia, Axios, Fetch, Inversify, jQuery, Nestjs, Node, redux-query, Rxjs) | +| **API clients** | **ActionScript**, **Ada**, **Apex**, **Bash**, **C**, **C#** (.net 2.0, 3.5 or later, .NET Standard 1.3 - 2.0, .NET Core 2.0, .NET 5.0. Libraries: RestSharp, HttpClient), **C++** (Arduino, cpp-restsdk, Qt5, Tizen, Unreal Engine 4), **Clojure**, **Crystal**, **Dart**, **Elixir**, **Elm**, **Eiffel**, **Erlang**, **Go**, **Groovy**, **Haskell** (http-client, Servant), **Java** (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx, Google API Client Library for Java, Rest-assured, Spring 5 Web Client, MicroProfile Rest Client), **k6**, **Kotlin**, **Lua**, **Nim**, **Node.js/JavaScript** (ES5, ES6, AngularJS with Google Closure Compiler annotations, Flow types, Apollo GraphQL DataStore), **Objective-C**, **OCaml**, **Perl**, **PHP**, **PowerShell**, **Python**, **R**, **Ruby**, **Rust** (hyper, reqwest, rust-server), **Scala** (akka, http4s, scalaz, sttp, swagger-async-httpclient), **Swift** (2.x, 3.x, 4.x, 5.x), **Typescript** (AngularJS, Angular (2.x - 11.x), Aurelia, Axios, Fetch, Inversify, jQuery, Nestjs, Node, redux-query, Rxjs) | | **Server stubs** | **Ada**, **C#** (ASP.NET Core, NancyFx), **C++** (Pistache, Restbed, Qt5 QHTTPEngine), **Erlang**, **F#** (Giraffe), **Go** (net/http, Gin, Echo), **Haskell** (Servant), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, Jersey, RestEasy, Play Framework, [PKMST](https://github.com/ProKarma-Inc/pkmst-getting-started-examples), [Vert.x](https://vertx.io/)), **Kotlin** (Spring Boot, Ktor, Vertx), **PHP** (Laravel, Lumen, Slim, Silex, [Symfony](https://symfony.com/), [Zend Expressive](https://github.com/zendframework/zend-expressive)), **Python** (Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Rust** (rust-server), **Scala** (Akka, [Finch](https://github.com/finagle/finch), [Lagom](https://github.com/lagom/lagom), [Play](https://www.playframework.com/), Scalatra) | | **API documentation generators** | **HTML**, **Confluence Wiki**, **Asciidoc**, **Markdown**, **PlantUML** | | **Configuration files** | [**Apache2**](https://httpd.apache.org/) | @@ -843,6 +843,7 @@ Here is a list of template creators: * Bash: @bkryza * C: @PowerOfCreation @zhemant [:heart:](https://www.patreon.com/zhemant) * C++ REST: @Danielku15 + * C++ Tiny: @AndersSpringborg * C++ UE4: @Kahncode * C# (.NET 2.0): @who * C# (.NET Standard 1.3 ): @Gronsak diff --git a/bin/configs/tiny-cpp-client-petstore-new.yaml b/bin/configs/cpp-tiny.yaml similarity index 51% rename from bin/configs/tiny-cpp-client-petstore-new.yaml rename to bin/configs/cpp-tiny.yaml index e80824e989a6..237ae1403f46 100644 --- a/bin/configs/tiny-cpp-client-petstore-new.yaml +++ b/bin/configs/cpp-tiny.yaml @@ -1,7 +1,7 @@ -generatorName: tiny-cpp -outputDir: samples/client/petstore/tiny/cpp +generatorName: cpp-tiny +outputDir: samples/client/petstore/cpp-tiny inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml -templateDir: modules/openapi-generator/src/main/resources/tiny-cpp-client +templateDir: modules/openapi-generator/src/main/resources/cpp-tiny additionalProperties: hideGenerationTimestamp: "true" controller: "esp32" diff --git a/docs/generators.md b/docs/generators.md index d4e3e5065bc8..e667c369f366 100644 --- a/docs/generators.md +++ b/docs/generators.md @@ -14,6 +14,7 @@ The following generators are available: * [clojure](generators/clojure.md) * [cpp-qt-client](generators/cpp-qt-client.md) * [cpp-restsdk](generators/cpp-restsdk.md) +* [cpp-tiny (beta)](generators/cpp-tiny.md) * [cpp-tizen](generators/cpp-tizen.md) * [cpp-ue4 (beta)](generators/cpp-ue4.md) * [crystal (beta)](generators/crystal.md) diff --git a/docs/generators/cpp-tiny.md b/docs/generators/cpp-tiny.md new file mode 100644 index 000000000000..1c90b5cbe8e0 --- /dev/null +++ b/docs/generators/cpp-tiny.md @@ -0,0 +1,243 @@ +--- +title: Config Options for cpp-tiny +sidebar_label: cpp-tiny +--- + +These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. + +| Option | Description | Values | Default | +| ------ | ----------- | ------ | ------- | +|allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| +|controller|name of microcontroller (e.g esp32 or esp8266)| |esp32| +|disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| +|ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |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| +|prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| +|reservedWordPrefix|Prefix to prepend to reserved words in order to avoid conflicts| |r_| +|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| +|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| +|variableNameFirstCharacterUppercase|Make first character of variable name uppercase (eg. value -> Value)| |true| + +## IMPORT MAPPING + +| Type/Alias | Imports | +| ---------- | ------- | + + +## INSTANTIATION TYPES + +| Type/Alias | Instantiated By | +| ---------- | --------------- | + + +## LANGUAGE PRIMITIVES + +
      +
    • bool
    • +
    • double
    • +
    • float
    • +
    • int
    • +
    • long
    • +
    • std::string
    • +
    + +## RESERVED WORDS + +
      +
    • alignas
    • +
    • alignof
    • +
    • and
    • +
    • and_eq
    • +
    • asm
    • +
    • auto
    • +
    • bitand
    • +
    • bitor
    • +
    • bool
    • +
    • break
    • +
    • case
    • +
    • catch
    • +
    • char
    • +
    • char16_t
    • +
    • char32_t
    • +
    • class
    • +
    • compl
    • +
    • concept
    • +
    • const
    • +
    • const_cast
    • +
    • constexpr
    • +
    • continue
    • +
    • decltype
    • +
    • default
    • +
    • delete
    • +
    • do
    • +
    • double
    • +
    • dynamic_cast
    • +
    • else
    • +
    • enum
    • +
    • explicit
    • +
    • export
    • +
    • extern
    • +
    • false
    • +
    • float
    • +
    • for
    • +
    • friend
    • +
    • goto
    • +
    • if
    • +
    • inline
    • +
    • int
    • +
    • linux
    • +
    • long
    • +
    • mutable
    • +
    • namespace
    • +
    • new
    • +
    • noexcept
    • +
    • not
    • +
    • not_eq
    • +
    • nullptr
    • +
    • operator
    • +
    • or
    • +
    • or_eq
    • +
    • private
    • +
    • protected
    • +
    • public
    • +
    • register
    • +
    • reinterpret_cast
    • +
    • requires
    • +
    • return
    • +
    • short
    • +
    • signed
    • +
    • sizeof
    • +
    • static
    • +
    • static_assert
    • +
    • static_cast
    • +
    • struct
    • +
    • switch
    • +
    • template
    • +
    • this
    • +
    • thread_local
    • +
    • throw
    • +
    • true
    • +
    • try
    • +
    • typedef
    • +
    • typeid
    • +
    • typename
    • +
    • union
    • +
    • unsigned
    • +
    • using
    • +
    • virtual
    • +
    • void
    • +
    • volatile
    • +
    • wchar_t
    • +
    • while
    • +
    • xor
    • +
    • xor_eq
    • +
    + +## FEATURE SET + + +### Client Modification Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasePath|✗|ToolingExtension +|Authorizations|✗|ToolingExtension +|UserAgent|✗|ToolingExtension +|MockServer|✗|ToolingExtension + +### Data Type Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Custom|✗|OAS2,OAS3 +|Int32|✓|OAS2,OAS3 +|Int64|✓|OAS2,OAS3 +|Float|✓|OAS2,OAS3 +|Double|✓|OAS2,OAS3 +|Decimal|✓|ToolingExtension +|String|✓|OAS2,OAS3 +|Byte|✓|OAS2,OAS3 +|Binary|✓|OAS2,OAS3 +|Boolean|✓|OAS2,OAS3 +|Date|✓|OAS2,OAS3 +|DateTime|✓|OAS2,OAS3 +|Password|✓|OAS2,OAS3 +|File|✓|OAS2 +|Array|✓|OAS2,OAS3 +|Maps|✗|ToolingExtension +|CollectionFormat|✓|OAS2 +|CollectionFormatMulti|✓|OAS2 +|Enum|✗|OAS2,OAS3 +|ArrayOfEnum|✓|ToolingExtension +|ArrayOfModel|✓|ToolingExtension +|ArrayOfCollectionOfPrimitives|✓|ToolingExtension +|ArrayOfCollectionOfModel|✓|ToolingExtension +|ArrayOfCollectionOfEnum|✓|ToolingExtension +|MapOfEnum|✗|ToolingExtension +|MapOfModel|✗|ToolingExtension +|MapOfCollectionOfPrimitives|✗|ToolingExtension +|MapOfCollectionOfModel|✗|ToolingExtension +|MapOfCollectionOfEnum|✗|ToolingExtension + +### Documentation Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Readme|✓|ToolingExtension +|Model|✓|ToolingExtension +|Api|✓|ToolingExtension + +### Global Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Host|✓|OAS2,OAS3 +|BasePath|✓|OAS2,OAS3 +|Info|✓|OAS2,OAS3 +|Schemes|✗|OAS2,OAS3 +|PartialSchemes|✓|OAS2,OAS3 +|Consumes|✓|OAS2 +|Produces|✓|OAS2 +|ExternalDocumentation|✓|OAS2,OAS3 +|Examples|✓|OAS2,OAS3 +|XMLStructureDefinitions|✗|OAS2,OAS3 +|MultiServer|✗|OAS3 +|ParameterizedServer|✗|OAS3 +|ParameterStyling|✗|OAS3 +|Callbacks|✗|OAS3 +|LinkObjects|✗|OAS3 + +### Parameter Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Path|✓|OAS2,OAS3 +|Query|✗|OAS2,OAS3 +|Header|✗|OAS2,OAS3 +|Body|✓|OAS2 +|FormUnencoded|✗|OAS2 +|FormMultipart|✗|OAS2 +|Cookie|✗|OAS3 + +### Schema Support Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Simple|✓|OAS2,OAS3 +|Composite|✓|OAS2,OAS3 +|Polymorphism|✗|OAS2,OAS3 +|Union|✗|OAS3 + +### Security Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasicAuth|✓|OAS2,OAS3 +|ApiKey|✓|OAS2,OAS3 +|OpenIDConnect|✗|OAS3 +|BearerToken|✓|OAS3 +|OAuth2_Implicit|✓|OAS2,OAS3 +|OAuth2_Password|✓|OAS2,OAS3 +|OAuth2_ClientCredentials|✓|OAS2,OAS3 +|OAuth2_AuthorizationCode|✓|OAS2,OAS3 + +### Wire Format Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|JSON|✓|OAS2,OAS3 +|XML|✗|OAS2,OAS3 +|PROTOBUF|✗|ToolingExtension +|Custom|✗|OAS2,OAS3 diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TinyCppClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppTinyClientCodegen.java similarity index 87% rename from modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TinyCppClientCodegen.java rename to modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppTinyClientCodegen.java index 91a9a95b5e41..d339555a86ef 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TinyCppClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppTinyClientCodegen.java @@ -1,9 +1,28 @@ +/* + * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.openapitools.codegen.languages; import org.openapitools.codegen.*; import io.swagger.v3.oas.models.media.Schema; + import io.swagger.v3.parser.util.SchemaTypeUtil; import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.meta.GeneratorMetadata; +import org.openapitools.codegen.meta.Stability; import org.openapitools.codegen.utils.ModelUtils; import java.io.File; @@ -14,10 +33,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class TinyCppClientCodegen extends AbstractCppCodegen implements CodegenConfig { +public class CppTinyClientCodegen extends AbstractCppCodegen implements CodegenConfig { public static final String PROJECT_NAME = "TinyClient"; - static final Logger LOGGER = LoggerFactory.getLogger(TinyCppClientCodegen.class); + static final Logger LOGGER = LoggerFactory.getLogger(CppTinyClientCodegen.class); public static final String MICROCONTROLLER = "controller"; public static final String rootFolder = ""; @@ -35,7 +54,7 @@ public CodegenType getTag() { * @return the friendly name for the generator */ public String getName() { - return "tiny-cpp"; + return "cpp-tiny"; } /** @@ -45,18 +64,17 @@ public String getName() { * @return A string value for the help message */ public String getHelp() { - return "Generates a Arduino rest client."; + return "Generates a C++ Arduino REST API client."; } - public void addControllerToAdditionalProperties(){ - Map supportedControllers = new HashMap(){{ + public void addControllerToAdditionalProperties() { + Map supportedControllers = new HashMap() {{ put("esp32", "isESP32"); put("esp8266", "isESP8266"); }}; if (supportedControllers.containsKey(controller)) { additionalProperties.put(supportedControllers.get(controller), true); - } - else { + } else { //String msg = String.format("The specified controller: %s is not supported.\nSupported controllers are: %s", // controller, // supportedControllers.keySet()); @@ -64,7 +82,7 @@ public void addControllerToAdditionalProperties(){ } } - public TinyCppClientCodegen() { + public CppTinyClientCodegen() { super(); modifyFeatureSet(feature -> feature @@ -103,8 +121,12 @@ public TinyCppClientCodegen() { DocumentationFeature.Readme )); - outputFolder = "generated-code" + File.separator + "tiny-cpp"; - embeddedTemplateDir = templateDir = "tiny-cpp-client"; + generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata) + .stability(Stability.BETA) + .build(); + + outputFolder = "generated-code" + File.separator + "cpp-tiny"; + embeddedTemplateDir = templateDir = "cpp-tiny"; String libFolder = "lib"; // MODELS @@ -122,7 +144,7 @@ public TinyCppClientCodegen() { supportingFiles.add(new SupportingFile("run-tests.mustache", "test", "RunTests.cpp")); // SERVICES - apiPackage = TinyCppClientCodegen.libFolder + File.separator + "service"; + apiPackage = CppTinyClientCodegen.libFolder + File.separator + "service"; apiTemplateFiles.put("service/api-header.mustache".replace('/', File.separatorChar), ".h"); apiTemplateFiles.put("service/api-body.mustache".replace('/', File.separatorChar), ".cpp"); @@ -131,9 +153,8 @@ public TinyCppClientCodegen() { supportingFiles.add(new SupportingFile("service/AbstractService.h.mustache", serviceFolder, "AbstractService.h")); supportingFiles.add(new SupportingFile("service/AbstractService.cpp.mustache", serviceFolder, "AbstractService.cpp")); - // Main - supportingFiles.add(new SupportingFile("main.mustache", TinyCppClientCodegen.sourceFolder, "main.cpp")); + supportingFiles.add(new SupportingFile("main.mustache", CppTinyClientCodegen.sourceFolder, "main.cpp")); // Config files supportingFiles.add(new SupportingFile("README.mustache", rootFolder, "README.md")); @@ -142,8 +163,6 @@ public TinyCppClientCodegen() { supportingFiles.add(new SupportingFile("README.mustache", rootFolder, "README.md")); supportingFiles.add(new SupportingFile("pre_compiling_bourne.py.mustache", rootFolder, "pre_compiling_bourne.py")); - - defaultIncludes = new HashSet( Arrays.asList( "bool", @@ -162,10 +181,6 @@ public TinyCppClientCodegen() { "std::string") ); - - - - super.typeMapping = new HashMap(); typeMapping.put("string", "std::string"); typeMapping.put("integer", "int"); @@ -180,7 +195,6 @@ public TinyCppClientCodegen() { } - // FilePaths private static final String sourceFolder = "src"; private static final String libFolder = "lib"; @@ -213,8 +227,6 @@ private void makeTypeMappings() { typeMapping.put("URI", "std::string"); } - - @Override public void processOpts() { super.processOpts(); @@ -222,7 +234,7 @@ public void processOpts() { // -- --additional-properties=controller= if (additionalProperties.containsKey(MICROCONTROLLER)) { - controller = additionalProperties.get(MICROCONTROLLER).toString(); + controller = additionalProperties.get(MICROCONTROLLER).toString(); } addControllerToAdditionalProperties(); @@ -230,17 +242,15 @@ public void processOpts() { LOGGER.info("Generator targeting the following microcontroller: {}", controller); } - @Override public String toInstantiationType(Schema p) { - if (ModelUtils.isArraySchema(p)) { + if (ModelUtils.isArraySchema(p)) { return instantiationTypes.get("array"); } else { return null; } } - @Override public String getTypeDeclaration(Schema p) { String openAPIType = getSchemaType(p); @@ -251,7 +261,6 @@ public String getTypeDeclaration(Schema p) { } } - @Override public String getSchemaType(Schema p) { String openAPIType = super.getSchemaType(p); @@ -291,8 +300,6 @@ public String toModelImport(String name) { return "#include \"" + name + ".h\""; } - - @Override public String toApiImport(String name) { return super.toApiImport(name); @@ -301,7 +308,7 @@ public String toApiImport(String name) { @Override public String toVarName(String name) { String paramName = name.replaceAll("[^a-zA-Z0-9_]", ""); - if (name.length() > 0 ) { + if (name.length() > 0) { paramName = Character.toLowerCase(paramName.charAt(0)) + paramName.substring(1); } if (isReservedWord(paramName)) { @@ -333,6 +340,4 @@ public String toDefaultValue(Schema p) { } - - } diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig index 1d4ef4f2568a..dcc8eacbc8ab 100644 --- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig +++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig @@ -16,6 +16,7 @@ org.openapitools.codegen.languages.CppQtQHttpEngineServerCodegen org.openapitools.codegen.languages.CppPistacheServerCodegen org.openapitools.codegen.languages.CppRestbedServerCodegen org.openapitools.codegen.languages.CppRestSdkClientCodegen +org.openapitools.codegen.languages.CppTinyClientCodegen org.openapitools.codegen.languages.CppTizenClientCodegen org.openapitools.codegen.languages.CppUE4ClientCodegen org.openapitools.codegen.languages.CSharpClientCodegen @@ -132,5 +133,4 @@ org.openapitools.codegen.languages.TypeScriptNestjsClientCodegen org.openapitools.codegen.languages.TypeScriptNodeClientCodegen org.openapitools.codegen.languages.TypeScriptReduxQueryClientCodegen org.openapitools.codegen.languages.TypeScriptRxjsClientCodegen -org.openapitools.codegen.languages.TinyCppClientCodegen org.openapitools.codegen.languages.GoEchoServerCodegen diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/README.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/README.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/README.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/README.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-body.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/helpers-body.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-body.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/helpers-body.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-header.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/helpers-header.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/helpers-header.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/helpers-header.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/main.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/main.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/main.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/main.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/model-body.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/model-body.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/model-body.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/model-body.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/model-header.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/model-header.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/model-header.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/model-header.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/platformio.ini.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/platformio.ini.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/platformio.ini.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/platformio.ini.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/pre_compiling_bourne.py.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/pre_compiling_bourne.py.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/pre_compiling_bourne.py.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/pre_compiling_bourne.py.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/root.cert.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/root.cert.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/root.cert.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/root.cert.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/run-tests.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/run-tests.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/run-tests.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/run-tests.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/service/AbstractService.cpp.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.cpp.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/service/AbstractService.cpp.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.h.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/service/AbstractService.h.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/service/AbstractService.h.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/service/AbstractService.h.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/Response.h.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/service/Response.h.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/service/Response.h.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/service/Response.h.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-body.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/service/api-body.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-body.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/service/api-body.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-header.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/service/api-header.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/service/api-header.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/service/api-header.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/unit-test-model.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/unit-test-model.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/unit-test-model.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/unit-test-model.mustache diff --git a/modules/openapi-generator/src/main/resources/tiny-cpp-client/unittest.mustache b/modules/openapi-generator/src/main/resources/cpp-tiny/unittest.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/tiny-cpp-client/unittest.mustache rename to modules/openapi-generator/src/main/resources/cpp-tiny/unittest.mustache diff --git a/samples/client/petstore/cpp-tiny/.openapi-generator-ignore b/samples/client/petstore/cpp-tiny/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/client/petstore/cpp-tiny/.openapi-generator/FILES b/samples/client/petstore/cpp-tiny/.openapi-generator/FILES new file mode 100644 index 000000000000..1024d9450644 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/.openapi-generator/FILES @@ -0,0 +1,30 @@ +README.md +README.md +lib/Models/ApiResponse.cpp +lib/Models/ApiResponse.h +lib/Models/Category.cpp +lib/Models/Category.h +lib/Models/Helpers.cpp +lib/Models/Helpers.h +lib/Models/Order.cpp +lib/Models/Order.h +lib/Models/Pet.cpp +lib/Models/Pet.h +lib/Models/Tag.cpp +lib/Models/Tag.h +lib/Models/User.cpp +lib/Models/User.h +lib/service/AbstractService.cpp +lib/service/AbstractService.h +lib/service/PetApi.cpp +lib/service/PetApi.h +lib/service/Response.h +lib/service/StoreApi.cpp +lib/service/StoreApi.h +lib/service/UserApi.cpp +lib/service/UserApi.h +platformio.ini +pre_compiling_bourne.py +root.cert +src/main.cpp +test/RunTests.cpp diff --git a/samples/client/petstore/cpp-tiny/.openapi-generator/VERSION b/samples/client/petstore/cpp-tiny/.openapi-generator/VERSION new file mode 100644 index 000000000000..6555596f9311 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/cpp-tiny/README.md b/samples/client/petstore/cpp-tiny/README.md new file mode 100644 index 000000000000..e8bf721275b5 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/README.md @@ -0,0 +1,73 @@ +# Documentation for OpenAPI Petstore +This is a client generator for microcontrollers on the Espressif32 platform and the Arduino framework +After the client have been generated, you have to change these following variablies: +- root.cert | Provide your service root certificate. +- src/main.cpp | Change wifi name +- src/main.cpp | Change wifi password +- lib/service/AbstractService.h | Change to your url + +# Documentation for OpenAPI Petstore 1.0.0 Tiny client cpp (Arduino) + +The project is structured like this: +``` +samples/client/petstore/tiny/cpp/ +├── lib +│ ├── Models +│ ├── service +│ └── TestFiles +├── platformio.ini +├── pre_compiling_bourne.py +├── README.md +├── root.cert +├── src +│ └── main.cpp +└── test + └── RunTests.cpp +``` + +All URIs are relative to http://petstore.swagger.iohttp://petstore.swagger.io/v2 + +### PetApi +|Method | HTTP request | Description| +|------------- | ------------- | -------------| +|*addPet* | *POST* /pet | Add a new pet to the store.| +|*deletePet* | *DELETE* /pet/{petId} | Deletes a pet.| +|*findPetsByStatus* | *GET* /pet/findByStatus | Finds Pets by status.| +|*findPetsByTags* | *GET* /pet/findByTags | Finds Pets by tags.| +|*getPetById* | *GET* /pet/{petId} | Find pet by ID.| +|*updatePet* | *PUT* /pet | Update an existing pet.| +|*updatePetWithForm* | *POST* /pet/{petId} | Updates a pet in the store with form data.| +|*uploadFile* | *POST* /pet/{petId}/uploadImage | uploads an image.| + +### StoreApi +|Method | HTTP request | Description| +|------------- | ------------- | -------------| +|*deleteOrder* | *DELETE* /store/order/{orderId} | Delete purchase order by ID.| +|*getInventory* | *GET* /store/inventory | Returns pet inventories by status.| +|*getOrderById* | *GET* /store/order/{orderId} | Find purchase order by ID.| +|*placeOrder* | *POST* /store/order | Place an order for a pet.| + +### UserApi +|Method | HTTP request | Description| +|------------- | ------------- | -------------| +|*createUser* | *POST* /user | Create user.| +|*createUsersWithArrayInput* | *POST* /user/createWithArray | Creates list of users with given input array.| +|*createUsersWithListInput* | *POST* /user/createWithList | Creates list of users with given input array.| +|*deleteUser* | *DELETE* /user/{username} | Delete user.| +|*getUserByName* | *GET* /user/{username} | Get user by user name.| +|*loginUser* | *GET* /user/login | Logs user into the system.| +|*logoutUser* | *GET* /user/logout | Logs out current logged in user session.| +|*updateUser* | *PUT* /user/{username} | Updated user.| + + +## What are the Model files for the data structures/objects? +|Class | Description| +|------------- | -------------| +|*ApiResponse* | Describes the result of uploading an image resource| +|*Category* | A category for a pet| +|*Order* | An order for a pets from the pet store| +|*Pet* | A pet for sale in the pet store| +|*Tag* | A tag for a pet| +|*User* | A User who is purchasing from the pet store| + + diff --git a/samples/client/petstore/cpp-tiny/lib/Models/ApiResponse.cpp b/samples/client/petstore/cpp-tiny/lib/Models/ApiResponse.cpp new file mode 100644 index 000000000000..e9be9e2b6187 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/ApiResponse.cpp @@ -0,0 +1,139 @@ + + +#include "ApiResponse.h" + +using namespace Tiny; + +ApiResponse::ApiResponse() +{ + code = int(0); + type = std::string(); + message = std::string(); +} + +ApiResponse::ApiResponse(std::string jsonString) +{ + this->fromJson(jsonString); +} + +ApiResponse::~ApiResponse() +{ + +} + +void +ApiResponse::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *codeKey = "code"; + + if(object.has_key(codeKey)) + { + bourne::json value = object[codeKey]; + + + + jsonToValue(&code, value, "int"); + + + } + + const char *typeKey = "type"; + + if(object.has_key(typeKey)) + { + bourne::json value = object[typeKey]; + + + + jsonToValue(&type, value, "std::string"); + + + } + + const char *messageKey = "message"; + + if(object.has_key(messageKey)) + { + bourne::json value = object[messageKey]; + + + + jsonToValue(&message, value, "std::string"); + + + } + + +} + +bourne::json +ApiResponse::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["code"] = getCode(); + + + + + + + object["type"] = getType(); + + + + + + + object["message"] = getMessage(); + + + + return object; + +} + +int +ApiResponse::getCode() +{ + return code; +} + +void +ApiResponse::setCode(int code) +{ + this->code = code; +} + +std::string +ApiResponse::getType() +{ + return type; +} + +void +ApiResponse::setType(std::string type) +{ + this->type = type; +} + +std::string +ApiResponse::getMessage() +{ + return message; +} + +void +ApiResponse::setMessage(std::string message) +{ + this->message = message; +} + + + diff --git a/samples/client/petstore/cpp-tiny/lib/Models/ApiResponse.h b/samples/client/petstore/cpp-tiny/lib/Models/ApiResponse.h new file mode 100644 index 000000000000..dbaf8abcaf38 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/ApiResponse.h @@ -0,0 +1,78 @@ + +/* + * ApiResponse.h + * + * Describes the result of uploading an image resource + */ + +#ifndef TINY_CPP_CLIENT_ApiResponse_H_ +#define TINY_CPP_CLIENT_ApiResponse_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" + +namespace Tiny { + + +/*! \brief Describes the result of uploading an image resource + * + * \ingroup Models + * + */ + +class ApiResponse{ +public: + + /*! \brief Constructor. + */ + ApiResponse(); + ApiResponse(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~ApiResponse(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + int getCode(); + + /*! \brief Set + */ + void setCode(int code); + /*! \brief Get + */ + std::string getType(); + + /*! \brief Set + */ + void setType(std::string type); + /*! \brief Get + */ + std::string getMessage(); + + /*! \brief Set + */ + void setMessage(std::string message); + + + private: + int code{}; + std::string type{}; + std::string message{}; +}; +} + +#endif /* TINY_CPP_CLIENT_ApiResponse_H_ */ diff --git a/samples/client/petstore/cpp-tiny/lib/Models/Category.cpp b/samples/client/petstore/cpp-tiny/lib/Models/Category.cpp new file mode 100644 index 000000000000..950b06ffd44a --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/Category.cpp @@ -0,0 +1,106 @@ + + +#include "Category.h" + +using namespace Tiny; + +Category::Category() +{ + id = long(0); + name = std::string(); +} + +Category::Category(std::string jsonString) +{ + this->fromJson(jsonString); +} + +Category::~Category() +{ + +} + +void +Category::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *idKey = "id"; + + if(object.has_key(idKey)) + { + bourne::json value = object[idKey]; + + + + jsonToValue(&id, value, "long"); + + + } + + const char *nameKey = "name"; + + if(object.has_key(nameKey)) + { + bourne::json value = object[nameKey]; + + + + jsonToValue(&name, value, "std::string"); + + + } + + +} + +bourne::json +Category::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["id"] = getId(); + + + + + + + object["name"] = getName(); + + + + return object; + +} + +long +Category::getId() +{ + return id; +} + +void +Category::setId(long id) +{ + this->id = id; +} + +std::string +Category::getName() +{ + return name; +} + +void +Category::setName(std::string name) +{ + this->name = name; +} + + + diff --git a/samples/client/petstore/cpp-tiny/lib/Models/Category.h b/samples/client/petstore/cpp-tiny/lib/Models/Category.h new file mode 100644 index 000000000000..9c90e3dd4160 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/Category.h @@ -0,0 +1,70 @@ + +/* + * Category.h + * + * A category for a pet + */ + +#ifndef TINY_CPP_CLIENT_Category_H_ +#define TINY_CPP_CLIENT_Category_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" + +namespace Tiny { + + +/*! \brief A category for a pet + * + * \ingroup Models + * + */ + +class Category{ +public: + + /*! \brief Constructor. + */ + Category(); + Category(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~Category(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + long getId(); + + /*! \brief Set + */ + void setId(long id); + /*! \brief Get + */ + std::string getName(); + + /*! \brief Set + */ + void setName(std::string name); + + + private: + long id{}; + std::string name{}; +}; +} + +#endif /* TINY_CPP_CLIENT_Category_H_ */ diff --git a/samples/client/petstore/cpp-tiny/lib/Models/Helpers.cpp b/samples/client/petstore/cpp-tiny/lib/Models/Helpers.cpp new file mode 100644 index 000000000000..c3935b37cde9 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/Helpers.cpp @@ -0,0 +1,102 @@ +#include "Helpers.h" +#include +#include + +bool isprimitive(std::string type){ + if(type == "std::string" || + type == "int" || + type == "float" || + type == "long" || + type == "double" || + type == "bool" || + type == "std::map" || + type == "std::list") + { + return true; + } + return false; +} + + +void +jsonToValue(void* target, bourne::json value, std::string type) +{ + if (target == NULL || value.is_null()) { + return; + } + + else if (type.compare("bool") == 0) + { + bool* val = static_cast (target); + *val = value.to_bool(); + } + + else if (type.compare("int") == 0) + { + int* val = static_cast (target); + *val = value.to_int(); + } + + else if (type.compare("float") == 0) + { + float* val = static_cast (target); + *val = (float)(value.to_float()); + } + + else if (type.compare("long") == 0) + { + long* val = static_cast (target); + *val = (long)(value.to_int()); + } + + else if (type.compare("double") == 0) + { + double* val = static_cast (target); + *val = value.to_float(); + } + + else if (type.compare("std::string") == 0) + { + std::string* val = static_cast (target); + *val = value.to_string(); + } + else { + return; + } +} + +std::string +stringify(long input){ + std::stringstream stream; + stream << input; + return stream.str(); + +}; + +std::string +stringify(int input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; + +std::string +stringify(double input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; + +std::string +stringify(float input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; + +std::string +stringify(std::string input){ + std::stringstream stream; + stream << input; + return stream.str(); +}; diff --git a/samples/client/petstore/cpp-tiny/lib/Models/Helpers.h b/samples/client/petstore/cpp-tiny/lib/Models/Helpers.h new file mode 100644 index 000000000000..5ef7d9afdf77 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/Helpers.h @@ -0,0 +1,22 @@ +#ifndef TINY_CPP_CLIENT_HELPERS_H_ +#define TINY_CPP_CLIENT_HELPERS_H_ + +#include +#include "bourne/json.hpp" + +bool isprimitive(std::string type); + +void jsonToValue(void* target, bourne::json value, std::string type); + +std::string stringify(long input); + +std::string stringify(int input); + +std::string stringify(double input); + +std::string stringify(float input); + +std::string stringify(std::string input); + +#endif /* TINY_CPP_CLIENT_HELPERS_H_ */ + diff --git a/samples/client/petstore/cpp-tiny/lib/Models/Order.cpp b/samples/client/petstore/cpp-tiny/lib/Models/Order.cpp new file mode 100644 index 000000000000..b8b7e00d3fc8 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/Order.cpp @@ -0,0 +1,238 @@ + + +#include "Order.h" + +using namespace Tiny; + +Order::Order() +{ + id = long(0); + petId = long(0); + quantity = int(0); + shipDate = std::string(); + status = std::string(); + complete = bool(false); +} + +Order::Order(std::string jsonString) +{ + this->fromJson(jsonString); +} + +Order::~Order() +{ + +} + +void +Order::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *idKey = "id"; + + if(object.has_key(idKey)) + { + bourne::json value = object[idKey]; + + + + jsonToValue(&id, value, "long"); + + + } + + const char *petIdKey = "petId"; + + if(object.has_key(petIdKey)) + { + bourne::json value = object[petIdKey]; + + + + jsonToValue(&petId, value, "long"); + + + } + + const char *quantityKey = "quantity"; + + if(object.has_key(quantityKey)) + { + bourne::json value = object[quantityKey]; + + + + jsonToValue(&quantity, value, "int"); + + + } + + const char *shipDateKey = "shipDate"; + + if(object.has_key(shipDateKey)) + { + bourne::json value = object[shipDateKey]; + + + + jsonToValue(&shipDate, value, "std::string"); + + + } + + const char *statusKey = "status"; + + if(object.has_key(statusKey)) + { + bourne::json value = object[statusKey]; + + + + jsonToValue(&status, value, "std::string"); + + + } + + const char *completeKey = "complete"; + + if(object.has_key(completeKey)) + { + bourne::json value = object[completeKey]; + + + + jsonToValue(&complete, value, "bool"); + + + } + + +} + +bourne::json +Order::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["id"] = getId(); + + + + + + + object["petId"] = getPetId(); + + + + + + + object["quantity"] = getQuantity(); + + + + + + + object["shipDate"] = getShipDate(); + + + + + + + object["status"] = getStatus(); + + + + + + + object["complete"] = isComplete(); + + + + return object; + +} + +long +Order::getId() +{ + return id; +} + +void +Order::setId(long id) +{ + this->id = id; +} + +long +Order::getPetId() +{ + return petId; +} + +void +Order::setPetId(long petId) +{ + this->petId = petId; +} + +int +Order::getQuantity() +{ + return quantity; +} + +void +Order::setQuantity(int quantity) +{ + this->quantity = quantity; +} + +std::string +Order::getShipDate() +{ + return shipDate; +} + +void +Order::setShipDate(std::string shipDate) +{ + this->shipDate = shipDate; +} + +std::string +Order::getStatus() +{ + return status; +} + +void +Order::setStatus(std::string status) +{ + this->status = status; +} + +bool +Order::isComplete() +{ + return complete; +} + +void +Order::setComplete(bool complete) +{ + this->complete = complete; +} + + + diff --git a/samples/client/petstore/cpp-tiny/lib/Models/Order.h b/samples/client/petstore/cpp-tiny/lib/Models/Order.h new file mode 100644 index 000000000000..6f36404f959a --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/Order.h @@ -0,0 +1,102 @@ + +/* + * Order.h + * + * An order for a pets from the pet store + */ + +#ifndef TINY_CPP_CLIENT_Order_H_ +#define TINY_CPP_CLIENT_Order_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" + +namespace Tiny { + + +/*! \brief An order for a pets from the pet store + * + * \ingroup Models + * + */ + +class Order{ +public: + + /*! \brief Constructor. + */ + Order(); + Order(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~Order(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + long getId(); + + /*! \brief Set + */ + void setId(long id); + /*! \brief Get + */ + long getPetId(); + + /*! \brief Set + */ + void setPetId(long petId); + /*! \brief Get + */ + int getQuantity(); + + /*! \brief Set + */ + void setQuantity(int quantity); + /*! \brief Get + */ + std::string getShipDate(); + + /*! \brief Set + */ + void setShipDate(std::string shipDate); + /*! \brief Get Order Status + */ + std::string getStatus(); + + /*! \brief Set Order Status + */ + void setStatus(std::string status); + /*! \brief Get + */ + bool isComplete(); + + /*! \brief Set + */ + void setComplete(bool complete); + + + private: + long id{}; + long petId{}; + int quantity{}; + std::string shipDate{}; + std::string status{}; + bool complete{}; +}; +} + +#endif /* TINY_CPP_CLIENT_Order_H_ */ diff --git a/samples/client/petstore/cpp-tiny/lib/Models/Pet.cpp b/samples/client/petstore/cpp-tiny/lib/Models/Pet.cpp new file mode 100644 index 000000000000..57f7781aef2a --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/Pet.cpp @@ -0,0 +1,274 @@ + + +#include "Pet.h" + +using namespace Tiny; + +Pet::Pet() +{ + id = long(0); + category = Category(); + name = std::string(); + photoUrls = std::list(); + tags = std::list(); + status = std::string(); +} + +Pet::Pet(std::string jsonString) +{ + this->fromJson(jsonString); +} + +Pet::~Pet() +{ + +} + +void +Pet::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *idKey = "id"; + + if(object.has_key(idKey)) + { + bourne::json value = object[idKey]; + + + + jsonToValue(&id, value, "long"); + + + } + + const char *categoryKey = "category"; + + if(object.has_key(categoryKey)) + { + bourne::json value = object[categoryKey]; + + + + + Category* obj = &category; + obj->fromJson(value.dump()); + + } + + const char *nameKey = "name"; + + if(object.has_key(nameKey)) + { + bourne::json value = object[nameKey]; + + + + jsonToValue(&name, value, "std::string"); + + + } + + const char *photoUrlsKey = "photoUrls"; + + if(object.has_key(photoUrlsKey)) + { + bourne::json value = object[photoUrlsKey]; + + + std::list photoUrls_list; + std::string element; + for(auto& var : value.array_range()) + { + + jsonToValue(&element, var, "std::string"); + + + photoUrls_list.push_back(element); + } + photoUrls = photoUrls_list; + + + } + + const char *tagsKey = "tags"; + + if(object.has_key(tagsKey)) + { + bourne::json value = object[tagsKey]; + + + std::list tags_list; + Tag element; + for(auto& var : value.array_range()) + { + + + element.fromJson(var.dump()); + + tags_list.push_back(element); + } + tags = tags_list; + + + } + + const char *statusKey = "status"; + + if(object.has_key(statusKey)) + { + bourne::json value = object[statusKey]; + + + + jsonToValue(&status, value, "std::string"); + + + } + + +} + +bourne::json +Pet::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["id"] = getId(); + + + + + + + + object["category"] = getCategory().toJson(); + + + + + + object["name"] = getName(); + + + + + + std::list photoUrls_list = getPhotoUrls(); + bourne::json photoUrls_arr = bourne::json::array(); + + for(auto& var : photoUrls_list) + { + photoUrls_arr.append(var); + } + object["photoUrls"] = photoUrls_arr; + + + + + + + + + std::list tags_list = getTags(); + bourne::json tags_arr = bourne::json::array(); + + for(auto& var : tags_list) + { + Tag obj = var; + tags_arr.append(obj.toJson()); + } + object["tags"] = tags_arr; + + + + + + + + object["status"] = getStatus(); + + + + return object; + +} + +long +Pet::getId() +{ + return id; +} + +void +Pet::setId(long id) +{ + this->id = id; +} + +Category +Pet::getCategory() +{ + return category; +} + +void +Pet::setCategory(Category category) +{ + this->category = category; +} + +std::string +Pet::getName() +{ + return name; +} + +void +Pet::setName(std::string name) +{ + this->name = name; +} + +std::list +Pet::getPhotoUrls() +{ + return photoUrls; +} + +void +Pet::setPhotoUrls(std::list photoUrls) +{ + this->photoUrls = photoUrls; +} + +std::list +Pet::getTags() +{ + return tags; +} + +void +Pet::setTags(std::list tags) +{ + this->tags = tags; +} + +std::string +Pet::getStatus() +{ + return status; +} + +void +Pet::setStatus(std::string status) +{ + this->status = status; +} + + + diff --git a/samples/client/petstore/cpp-tiny/lib/Models/Pet.h b/samples/client/petstore/cpp-tiny/lib/Models/Pet.h new file mode 100644 index 000000000000..3329735f8a16 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/Pet.h @@ -0,0 +1,105 @@ + +/* + * Pet.h + * + * A pet for sale in the pet store + */ + +#ifndef TINY_CPP_CLIENT_Pet_H_ +#define TINY_CPP_CLIENT_Pet_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" +#include "Category.h" +#include "Tag.h" +#include + +namespace Tiny { + + +/*! \brief A pet for sale in the pet store + * + * \ingroup Models + * + */ + +class Pet{ +public: + + /*! \brief Constructor. + */ + Pet(); + Pet(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~Pet(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + long getId(); + + /*! \brief Set + */ + void setId(long id); + /*! \brief Get + */ + Category getCategory(); + + /*! \brief Set + */ + void setCategory(Category category); + /*! \brief Get + */ + std::string getName(); + + /*! \brief Set + */ + void setName(std::string name); + /*! \brief Get + */ + std::list getPhotoUrls(); + + /*! \brief Set + */ + void setPhotoUrls(std::list photoUrls); + /*! \brief Get + */ + std::list getTags(); + + /*! \brief Set + */ + void setTags(std::list tags); + /*! \brief Get pet status in the store + */ + std::string getStatus(); + + /*! \brief Set pet status in the store + */ + void setStatus(std::string status); + + + private: + long id{}; + Category category; + std::string name{}; + std::list photoUrls; + std::list tags; + std::string status{}; +}; +} + +#endif /* TINY_CPP_CLIENT_Pet_H_ */ diff --git a/samples/client/petstore/cpp-tiny/lib/Models/Tag.cpp b/samples/client/petstore/cpp-tiny/lib/Models/Tag.cpp new file mode 100644 index 000000000000..e46d94258a1d --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/Tag.cpp @@ -0,0 +1,106 @@ + + +#include "Tag.h" + +using namespace Tiny; + +Tag::Tag() +{ + id = long(0); + name = std::string(); +} + +Tag::Tag(std::string jsonString) +{ + this->fromJson(jsonString); +} + +Tag::~Tag() +{ + +} + +void +Tag::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *idKey = "id"; + + if(object.has_key(idKey)) + { + bourne::json value = object[idKey]; + + + + jsonToValue(&id, value, "long"); + + + } + + const char *nameKey = "name"; + + if(object.has_key(nameKey)) + { + bourne::json value = object[nameKey]; + + + + jsonToValue(&name, value, "std::string"); + + + } + + +} + +bourne::json +Tag::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["id"] = getId(); + + + + + + + object["name"] = getName(); + + + + return object; + +} + +long +Tag::getId() +{ + return id; +} + +void +Tag::setId(long id) +{ + this->id = id; +} + +std::string +Tag::getName() +{ + return name; +} + +void +Tag::setName(std::string name) +{ + this->name = name; +} + + + diff --git a/samples/client/petstore/cpp-tiny/lib/Models/Tag.h b/samples/client/petstore/cpp-tiny/lib/Models/Tag.h new file mode 100644 index 000000000000..e05bcdc92900 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/Tag.h @@ -0,0 +1,70 @@ + +/* + * Tag.h + * + * A tag for a pet + */ + +#ifndef TINY_CPP_CLIENT_Tag_H_ +#define TINY_CPP_CLIENT_Tag_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" + +namespace Tiny { + + +/*! \brief A tag for a pet + * + * \ingroup Models + * + */ + +class Tag{ +public: + + /*! \brief Constructor. + */ + Tag(); + Tag(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~Tag(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + long getId(); + + /*! \brief Set + */ + void setId(long id); + /*! \brief Get + */ + std::string getName(); + + /*! \brief Set + */ + void setName(std::string name); + + + private: + long id{}; + std::string name{}; +}; +} + +#endif /* TINY_CPP_CLIENT_Tag_H_ */ diff --git a/samples/client/petstore/cpp-tiny/lib/Models/User.cpp b/samples/client/petstore/cpp-tiny/lib/Models/User.cpp new file mode 100644 index 000000000000..ac84c40205a9 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/User.cpp @@ -0,0 +1,304 @@ + + +#include "User.h" + +using namespace Tiny; + +User::User() +{ + id = long(0); + username = std::string(); + firstName = std::string(); + lastName = std::string(); + email = std::string(); + password = std::string(); + phone = std::string(); + userStatus = int(0); +} + +User::User(std::string jsonString) +{ + this->fromJson(jsonString); +} + +User::~User() +{ + +} + +void +User::fromJson(std::string jsonObj) +{ + bourne::json object = bourne::json::parse(jsonObj); + + const char *idKey = "id"; + + if(object.has_key(idKey)) + { + bourne::json value = object[idKey]; + + + + jsonToValue(&id, value, "long"); + + + } + + const char *usernameKey = "username"; + + if(object.has_key(usernameKey)) + { + bourne::json value = object[usernameKey]; + + + + jsonToValue(&username, value, "std::string"); + + + } + + const char *firstNameKey = "firstName"; + + if(object.has_key(firstNameKey)) + { + bourne::json value = object[firstNameKey]; + + + + jsonToValue(&firstName, value, "std::string"); + + + } + + const char *lastNameKey = "lastName"; + + if(object.has_key(lastNameKey)) + { + bourne::json value = object[lastNameKey]; + + + + jsonToValue(&lastName, value, "std::string"); + + + } + + const char *emailKey = "email"; + + if(object.has_key(emailKey)) + { + bourne::json value = object[emailKey]; + + + + jsonToValue(&email, value, "std::string"); + + + } + + const char *passwordKey = "password"; + + if(object.has_key(passwordKey)) + { + bourne::json value = object[passwordKey]; + + + + jsonToValue(&password, value, "std::string"); + + + } + + const char *phoneKey = "phone"; + + if(object.has_key(phoneKey)) + { + bourne::json value = object[phoneKey]; + + + + jsonToValue(&phone, value, "std::string"); + + + } + + const char *userStatusKey = "userStatus"; + + if(object.has_key(userStatusKey)) + { + bourne::json value = object[userStatusKey]; + + + + jsonToValue(&userStatus, value, "int"); + + + } + + +} + +bourne::json +User::toJson() +{ + bourne::json object = bourne::json::object(); + + + + + + object["id"] = getId(); + + + + + + + object["username"] = getUsername(); + + + + + + + object["firstName"] = getFirstName(); + + + + + + + object["lastName"] = getLastName(); + + + + + + + object["email"] = getEmail(); + + + + + + + object["password"] = getPassword(); + + + + + + + object["phone"] = getPhone(); + + + + + + + object["userStatus"] = getUserStatus(); + + + + return object; + +} + +long +User::getId() +{ + return id; +} + +void +User::setId(long id) +{ + this->id = id; +} + +std::string +User::getUsername() +{ + return username; +} + +void +User::setUsername(std::string username) +{ + this->username = username; +} + +std::string +User::getFirstName() +{ + return firstName; +} + +void +User::setFirstName(std::string firstName) +{ + this->firstName = firstName; +} + +std::string +User::getLastName() +{ + return lastName; +} + +void +User::setLastName(std::string lastName) +{ + this->lastName = lastName; +} + +std::string +User::getEmail() +{ + return email; +} + +void +User::setEmail(std::string email) +{ + this->email = email; +} + +std::string +User::getPassword() +{ + return password; +} + +void +User::setPassword(std::string password) +{ + this->password = password; +} + +std::string +User::getPhone() +{ + return phone; +} + +void +User::setPhone(std::string phone) +{ + this->phone = phone; +} + +int +User::getUserStatus() +{ + return userStatus; +} + +void +User::setUserStatus(int userStatus) +{ + this->userStatus = userStatus; +} + + + diff --git a/samples/client/petstore/cpp-tiny/lib/Models/User.h b/samples/client/petstore/cpp-tiny/lib/Models/User.h new file mode 100644 index 000000000000..84de5204ced8 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/Models/User.h @@ -0,0 +1,118 @@ + +/* + * User.h + * + * A User who is purchasing from the pet store + */ + +#ifndef TINY_CPP_CLIENT_User_H_ +#define TINY_CPP_CLIENT_User_H_ + + +#include +#include "bourne/json.hpp" +#include "Helpers.h" + +namespace Tiny { + + +/*! \brief A User who is purchasing from the pet store + * + * \ingroup Models + * + */ + +class User{ +public: + + /*! \brief Constructor. + */ + User(); + User(std::string jsonString); + + + /*! \brief Destructor. + */ + virtual ~User(); + + + /*! \brief Retrieve a bourne JSON representation of this class. + */ + bourne::json toJson(); + + + /*! \brief Fills in members of this class from bourne JSON object representing it. + */ + void fromJson(std::string jsonObj); + + /*! \brief Get + */ + long getId(); + + /*! \brief Set + */ + void setId(long id); + /*! \brief Get + */ + std::string getUsername(); + + /*! \brief Set + */ + void setUsername(std::string username); + /*! \brief Get + */ + std::string getFirstName(); + + /*! \brief Set + */ + void setFirstName(std::string firstName); + /*! \brief Get + */ + std::string getLastName(); + + /*! \brief Set + */ + void setLastName(std::string lastName); + /*! \brief Get + */ + std::string getEmail(); + + /*! \brief Set + */ + void setEmail(std::string email); + /*! \brief Get + */ + std::string getPassword(); + + /*! \brief Set + */ + void setPassword(std::string password); + /*! \brief Get + */ + std::string getPhone(); + + /*! \brief Set + */ + void setPhone(std::string phone); + /*! \brief Get User Status + */ + int getUserStatus(); + + /*! \brief Set User Status + */ + void setUserStatus(int userStatus); + + + private: + long id{}; + std::string username{}; + std::string firstName{}; + std::string lastName{}; + std::string email{}; + std::string password{}; + std::string phone{}; + int userStatus{}; +}; +} + +#endif /* TINY_CPP_CLIENT_User_H_ */ diff --git a/samples/client/petstore/cpp-tiny/lib/TestFiles/ApiResponseTest.cpp b/samples/client/petstore/cpp-tiny/lib/TestFiles/ApiResponseTest.cpp new file mode 100644 index 000000000000..160f4217f5df --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/TestFiles/ApiResponseTest.cpp @@ -0,0 +1,139 @@ + +#include "ApiResponse.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_ApiResponse_code_is_assigned_from_json() +{ + bourne::json input = + { + "code", 1 + }; + + ApiResponse obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getCode()); + + + + + + + + +} + + +void test_ApiResponse_type_is_assigned_from_json() +{ + + + bourne::json input = + { + "type", "hello" + }; + + ApiResponse obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getType().c_str()); + + + + + + +} + + +void test_ApiResponse_message_is_assigned_from_json() +{ + + + bourne::json input = + { + "message", "hello" + }; + + ApiResponse obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getMessage().c_str()); + + + + + + +} + + + +void test_ApiResponse_code_is_converted_to_json() +{ + bourne::json input = + { + "code", 1 + }; + + ApiResponse obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["code"] == output["code"]); + + + + +} + + +void test_ApiResponse_type_is_converted_to_json() +{ + + bourne::json input = + { + "type", "hello" + }; + + ApiResponse obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["type"] == output["type"]); + + + +} + + +void test_ApiResponse_message_is_converted_to_json() +{ + + bourne::json input = + { + "message", "hello" + }; + + ApiResponse obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["message"] == output["message"]); + + + +} + + diff --git a/samples/client/petstore/cpp-tiny/lib/TestFiles/CategoryTest.cpp b/samples/client/petstore/cpp-tiny/lib/TestFiles/CategoryTest.cpp new file mode 100644 index 000000000000..2951856e6a58 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/TestFiles/CategoryTest.cpp @@ -0,0 +1,97 @@ + +#include "Category.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_Category_id_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "id", 1 + }; + + Category obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getId()); + + +} + + +void test_Category_name_is_assigned_from_json() +{ + + + bourne::json input = + { + "name", "hello" + }; + + Category obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getName().c_str()); + + + + + + +} + + + +void test_Category_id_is_converted_to_json() +{ + + + + bourne::json input = + { + "id", 1 + }; + + Category obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["id"] == output["id"]); + +} + + +void test_Category_name_is_converted_to_json() +{ + + bourne::json input = + { + "name", "hello" + }; + + Category obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["name"] == output["name"]); + + + +} + + diff --git a/samples/client/petstore/cpp-tiny/lib/TestFiles/OrderTest.cpp b/samples/client/petstore/cpp-tiny/lib/TestFiles/OrderTest.cpp new file mode 100644 index 000000000000..13125fc8fc5a --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/TestFiles/OrderTest.cpp @@ -0,0 +1,245 @@ + +#include "Order.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_Order_id_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "id", 1 + }; + + Order obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getId()); + + +} + + +void test_Order_petId_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "petId", 1 + }; + + Order obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getPetId()); + + +} + + +void test_Order_quantity_is_assigned_from_json() +{ + bourne::json input = + { + "quantity", 1 + }; + + Order obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getQuantity()); + + + + + + + + +} + + +void test_Order_shipDate_is_assigned_from_json() +{ + + + + + + + + +} + + +void test_Order_status_is_assigned_from_json() +{ + + + bourne::json input = + { + "status", "hello" + }; + + Order obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getStatus().c_str()); + + + + + + +} + + +void test_Order_complete_is_assigned_from_json() +{ + + + + + bourne::json input = + { + "complete", true + }; + + Order obj(input.dump()); + + TEST_ASSERT(true == obj.isComplete()); + + + + +} + + + +void test_Order_id_is_converted_to_json() +{ + + + + bourne::json input = + { + "id", 1 + }; + + Order obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["id"] == output["id"]); + +} + + +void test_Order_petId_is_converted_to_json() +{ + + + + bourne::json input = + { + "petId", 1 + }; + + Order obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["petId"] == output["petId"]); + +} + + +void test_Order_quantity_is_converted_to_json() +{ + bourne::json input = + { + "quantity", 1 + }; + + Order obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["quantity"] == output["quantity"]); + + + + +} + + +void test_Order_shipDate_is_converted_to_json() +{ + + + + +} + + +void test_Order_status_is_converted_to_json() +{ + + bourne::json input = + { + "status", "hello" + }; + + Order obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["status"] == output["status"]); + + + +} + + +void test_Order_complete_is_converted_to_json() +{ + + + bourne::json input = + { + "complete", true + }; + + Order obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["complete"] == output["complete"]); + + +} + + diff --git a/samples/client/petstore/cpp-tiny/lib/TestFiles/PetTest.cpp b/samples/client/petstore/cpp-tiny/lib/TestFiles/PetTest.cpp new file mode 100644 index 000000000000..04dad4640939 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/TestFiles/PetTest.cpp @@ -0,0 +1,145 @@ + +#include "Pet.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_Pet_id_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "id", 1 + }; + + Pet obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getId()); + + +} + + + +void test_Pet_name_is_assigned_from_json() +{ + + + bourne::json input = + { + "name", "hello" + }; + + Pet obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getName().c_str()); + + + + + + +} + + + + +void test_Pet_status_is_assigned_from_json() +{ + + + bourne::json input = + { + "status", "hello" + }; + + Pet obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getStatus().c_str()); + + + + + + +} + + + +void test_Pet_id_is_converted_to_json() +{ + + + + bourne::json input = + { + "id", 1 + }; + + Pet obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["id"] == output["id"]); + +} + + + +void test_Pet_name_is_converted_to_json() +{ + + bourne::json input = + { + "name", "hello" + }; + + Pet obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["name"] == output["name"]); + + + +} + + + + +void test_Pet_status_is_converted_to_json() +{ + + bourne::json input = + { + "status", "hello" + }; + + Pet obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["status"] == output["status"]); + + + +} + + diff --git a/samples/client/petstore/cpp-tiny/lib/TestFiles/TagTest.cpp b/samples/client/petstore/cpp-tiny/lib/TestFiles/TagTest.cpp new file mode 100644 index 000000000000..41ea1d0095dd --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/TestFiles/TagTest.cpp @@ -0,0 +1,97 @@ + +#include "Tag.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_Tag_id_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "id", 1 + }; + + Tag obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getId()); + + +} + + +void test_Tag_name_is_assigned_from_json() +{ + + + bourne::json input = + { + "name", "hello" + }; + + Tag obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getName().c_str()); + + + + + + +} + + + +void test_Tag_id_is_converted_to_json() +{ + + + + bourne::json input = + { + "id", 1 + }; + + Tag obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["id"] == output["id"]); + +} + + +void test_Tag_name_is_converted_to_json() +{ + + bourne::json input = + { + "name", "hello" + }; + + Tag obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["name"] == output["name"]); + + + +} + + diff --git a/samples/client/petstore/cpp-tiny/lib/TestFiles/UserTest.cpp b/samples/client/petstore/cpp-tiny/lib/TestFiles/UserTest.cpp new file mode 100644 index 000000000000..689ee582bee3 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/TestFiles/UserTest.cpp @@ -0,0 +1,349 @@ + +#include "User.h" + +using namespace Tiny; + +#include +#include +#include +#include "bourne/json.hpp" + + + +void test_User_id_is_assigned_from_json() +{ + + + + + + + bourne::json input = + { + "id", 1 + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getId()); + + +} + + +void test_User_username_is_assigned_from_json() +{ + + + bourne::json input = + { + "username", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getUsername().c_str()); + + + + + + +} + + +void test_User_firstName_is_assigned_from_json() +{ + + + bourne::json input = + { + "firstName", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getFirstName().c_str()); + + + + + + +} + + +void test_User_lastName_is_assigned_from_json() +{ + + + bourne::json input = + { + "lastName", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getLastName().c_str()); + + + + + + +} + + +void test_User_email_is_assigned_from_json() +{ + + + bourne::json input = + { + "email", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getEmail().c_str()); + + + + + + +} + + +void test_User_password_is_assigned_from_json() +{ + + + bourne::json input = + { + "password", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getPassword().c_str()); + + + + + + +} + + +void test_User_phone_is_assigned_from_json() +{ + + + bourne::json input = + { + "phone", "hello" + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_STRING("hello", obj.getPhone().c_str()); + + + + + + +} + + +void test_User_userStatus_is_assigned_from_json() +{ + bourne::json input = + { + "userStatus", 1 + }; + + User obj(input.dump()); + + TEST_ASSERT_EQUAL_INT(1, obj.getUserStatus()); + + + + + + + + +} + + + +void test_User_id_is_converted_to_json() +{ + + + + bourne::json input = + { + "id", 1 + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["id"] == output["id"]); + +} + + +void test_User_username_is_converted_to_json() +{ + + bourne::json input = + { + "username", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["username"] == output["username"]); + + + +} + + +void test_User_firstName_is_converted_to_json() +{ + + bourne::json input = + { + "firstName", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["firstName"] == output["firstName"]); + + + +} + + +void test_User_lastName_is_converted_to_json() +{ + + bourne::json input = + { + "lastName", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["lastName"] == output["lastName"]); + + + +} + + +void test_User_email_is_converted_to_json() +{ + + bourne::json input = + { + "email", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["email"] == output["email"]); + + + +} + + +void test_User_password_is_converted_to_json() +{ + + bourne::json input = + { + "password", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["password"] == output["password"]); + + + +} + + +void test_User_phone_is_converted_to_json() +{ + + bourne::json input = + { + "phone", "hello" + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["phone"] == output["phone"]); + + + +} + + +void test_User_userStatus_is_converted_to_json() +{ + bourne::json input = + { + "userStatus", 1 + }; + + User obj(input.dump()); + + bourne::json output = bourne::json::object(); + + output = obj.toJson(); + + TEST_ASSERT(input["userStatus"] == output["userStatus"]); + + + + +} + + diff --git a/samples/client/petstore/cpp-tiny/lib/service/AbstractService.cpp b/samples/client/petstore/cpp-tiny/lib/service/AbstractService.cpp new file mode 100644 index 000000000000..ac7e992cecc2 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/service/AbstractService.cpp @@ -0,0 +1,8 @@ +#include "AbstractService.h" +#include "Arduino.h" + + + +void Tiny::AbstractService::begin(std::string url){ + http.begin(String(url.c_str()), test_root_ca); //HTTPS connection +} diff --git a/samples/client/petstore/cpp-tiny/lib/service/AbstractService.h b/samples/client/petstore/cpp-tiny/lib/service/AbstractService.h new file mode 100644 index 000000000000..07214896d7f2 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/service/AbstractService.h @@ -0,0 +1,28 @@ +#ifndef TINY_CPP_CLIENT_ABSTRACTSERVICE_H_ +#define TINY_CPP_CLIENT_ABSTRACTSERVICE_H_ + +#include "HTTPClient.h" +#include "Response.h" +namespace Tiny { + +/** +* Class +* Generated with openapi::tiny-cpp-client +*/ +class AbstractService { +public: +HTTPClient http; +std::string basepath = "https://petstore3.swagger.io/api/v3"; // TODO: change to your url + +void begin(std::string url); + +// Go and comment out a certificate in root.cert, if you get an error here +// Certificate from file +const char* test_root_ca = +#include "../../root.cert" +; + +}; // end class +}// namespace Tinyclient + +#endif /* TINY_CPP_CLIENT_ABSTRACTSERVICE_H_ */ diff --git a/samples/client/petstore/cpp-tiny/lib/service/PetApi.cpp b/samples/client/petstore/cpp-tiny/lib/service/PetApi.cpp new file mode 100644 index 000000000000..1fa081a04b4d --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/service/PetApi.cpp @@ -0,0 +1,418 @@ +#include "PetApi.h" + +using namespace Tiny; + + + + Response< + Pet + > + PetApi:: + addPet( + + Pet pet + + ) + { + std::string url = basepath + "/pet"; // + // Query | + // Headers | + // Form | + // Body | pet + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + http.addHeader("Content-Type", "application/json"); + + + + payload = pet.toJson().dump(); + + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + Pet obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + Response< + String + > + PetApi:: + deletePet( + + long petId + , + + std::string apiKey + + ) + { + std::string url = basepath + "/pet/{petId}"; //petId + // Query | + // Headers | apiKey + // Form | + // Body | + + std::string s_petId("{"); + s_petId.append("petId"); + s_petId.append("}"); + + int pos = url.find(s_petId); + + url.erase(pos, s_petId.length()); + url.insert(pos, stringify(petId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | DELETE + int httpCode = http.sendRequest("DELETE", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + std::list + > + PetApi:: + findPetsByStatus( + std::list status + + + ) + { + std::string url = basepath + "/pet/findByStatus"; // + // Query | status + // Headers | + // Form | + // Body | + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + std::list obj = std::list(); + bourne::json jsonPayload(output_string); + + + + + + + + + + for(auto& var : jsonPayload.array_range()) + { + Pet tmp(var.dump()); + obj.push_back(tmp); + } + + + + + + + + + Response> response(obj, httpCode); + return response; + } + + Response< + std::list + > + PetApi:: + findPetsByTags( + std::list tags + + + ) + { + std::string url = basepath + "/pet/findByTags"; // + // Query | tags + // Headers | + // Form | + // Body | + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + std::list obj = std::list(); + bourne::json jsonPayload(output_string); + + + + + + + + + + for(auto& var : jsonPayload.array_range()) + { + Pet tmp(var.dump()); + obj.push_back(tmp); + } + + + + + + + + + Response> response(obj, httpCode); + return response; + } + + Response< + Pet + > + PetApi:: + getPetById( + + long petId + + ) + { + std::string url = basepath + "/pet/{petId}"; //petId + // Query | + // Headers | + // Form | + // Body | + + std::string s_petId("{"); + s_petId.append("petId"); + s_petId.append("}"); + + int pos = url.find(s_petId); + + url.erase(pos, s_petId.length()); + url.insert(pos, stringify(petId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + Pet obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + Response< + Pet + > + PetApi:: + updatePet( + + Pet pet + + ) + { + std::string url = basepath + "/pet"; // + // Query | + // Headers | + // Form | + // Body | pet + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | PUT + http.addHeader("Content-Type", "application/json"); + + + + payload = pet.toJson().dump(); + + int httpCode = http.sendRequest("PUT", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + Pet obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + Response< + String + > + PetApi:: + updatePetWithForm( + + long petId + , + + std::string name + , + + std::string status + + ) + { + std::string url = basepath + "/pet/{petId}"; //petId + // Query | + // Headers | + // Form | name status + // Body | + + std::string s_petId("{"); + s_petId.append("petId"); + s_petId.append("}"); + + int pos = url.find(s_petId); + + url.erase(pos, s_petId.length()); + url.insert(pos, stringify(petId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + ApiResponse + > + PetApi:: + uploadFile( + + long petId + , + + std::string additionalMetadata + , + + std::string file + + ) + { + std::string url = basepath + "/pet/{petId}/uploadImage"; //petId + // Query | + // Headers | + // Form | additionalMetadata file + // Body | + + std::string s_petId("{"); + s_petId.append("petId"); + s_petId.append("}"); + + int pos = url.find(s_petId); + + url.erase(pos, s_petId.length()); + url.insert(pos, stringify(petId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + ApiResponse obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + + + diff --git a/samples/client/petstore/cpp-tiny/lib/service/PetApi.h b/samples/client/petstore/cpp-tiny/lib/service/PetApi.h new file mode 100644 index 000000000000..abcb0af0de90 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/service/PetApi.h @@ -0,0 +1,163 @@ +#ifndef TINY_CPP_CLIENT_PetApi_H_ +#define TINY_CPP_CLIENT_PetApi_H_ + + +#include "Response.h" +#include "Arduino.h" +#include "AbstractService.h" +#include "Helpers.h" +#include + +#include "ApiResponse.h" +#include "Pet.h" + +namespace Tiny { + +/** + * Class + * Generated with openapi::tiny-cpp-client + */ + +class PetApi : public AbstractService { +public: + PetApi() = default; + + virtual ~PetApi() = default; + + /** + * Add a new pet to the store. + * + * + * \param pet Pet object that needs to be added to the store *Required* + */ + Response< + Pet + > + addPet( + + Pet pet + + ); + /** + * Deletes a pet. + * + * + * \param petId Pet id to delete *Required* + * \param apiKey + */ + Response< + String + > + deletePet( + + long petId + , + + std::string apiKey + + ); + /** + * Finds Pets by status. + * + * Multiple status values can be provided with comma separated strings + * \param status Status values that need to be considered for filter *Required* + */ + Response< + std::list + > + findPetsByStatus( + std::list status + + + ); + /** + * Finds Pets by tags. + * + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * \param tags Tags to filter by *Required* + */ + Response< + std::list + > + findPetsByTags( + std::list tags + + + ); + /** + * Find pet by ID. + * + * Returns a single pet + * \param petId ID of pet to return *Required* + */ + Response< + Pet + > + getPetById( + + long petId + + ); + /** + * Update an existing pet. + * + * + * \param pet Pet object that needs to be added to the store *Required* + */ + Response< + Pet + > + updatePet( + + Pet pet + + ); + /** + * Updates a pet in the store with form data. + * + * + * \param petId ID of pet that needs to be updated *Required* + * \param name Updated name of the pet + * \param status Updated status of the pet + */ + Response< + String + > + updatePetWithForm( + + long petId + , + + std::string name + , + + std::string status + + ); + /** + * uploads an image. + * + * + * \param petId ID of pet to update *Required* + * \param additionalMetadata Additional data to pass to server + * \param file file to upload + */ + Response< + ApiResponse + > + uploadFile( + + long petId + , + + std::string additionalMetadata + , + + std::string file + + ); +}; + +} + +#endif /* TINY_CPP_CLIENT_PetApi_H_ */ \ No newline at end of file diff --git a/samples/client/petstore/cpp-tiny/lib/service/Response.h b/samples/client/petstore/cpp-tiny/lib/service/Response.h new file mode 100644 index 000000000000..9b7b616b8f1b --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/service/Response.h @@ -0,0 +1,25 @@ +#ifndef TINY_CPP_CLIENT_RESPONSE_H_ +#define TINY_CPP_CLIENT_RESPONSE_H_ +#include + +namespace Tiny { + +/** +* Class +* Generated with openapi::tiny-cpp-client +*/ +template + class Response { + public: + + Response(T _obj, int _code){ + obj = _obj; + code = _code; + } + + int code; + T obj; + }; + } // namespace Tinyclient + +#endif /* TINY_CPP_CLIENT_RESPONSE_H_ */ diff --git a/samples/client/petstore/cpp-tiny/lib/service/StoreApi.cpp b/samples/client/petstore/cpp-tiny/lib/service/StoreApi.cpp new file mode 100644 index 000000000000..210eb8277ac6 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/service/StoreApi.cpp @@ -0,0 +1,185 @@ +#include "StoreApi.h" + +using namespace Tiny; + + + + Response< + String + > + StoreApi:: + deleteOrder( + + std::string orderId + + ) + { + std::string url = basepath + "/store/order/{orderId}"; //orderId + // Query | + // Headers | + // Form | + // Body | + + std::string s_orderId("{"); + s_orderId.append("orderId"); + s_orderId.append("}"); + + int pos = url.find(s_orderId); + + url.erase(pos, s_orderId.length()); + url.insert(pos, stringify(orderId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | DELETE + int httpCode = http.sendRequest("DELETE", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + String + > + StoreApi:: + getInventory( + ) + { + std::string url = basepath + "/store/inventory"; // + // Query | + // Headers | + // Form | + // Body | + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + //TODO: Implement map logic here + + + + + //TODO: No support for maps. + Response response(output, httpCode); + return response; + } + + Response< + Order + > + StoreApi:: + getOrderById( + + long orderId + + ) + { + std::string url = basepath + "/store/order/{orderId}"; //orderId + // Query | + // Headers | + // Form | + // Body | + + std::string s_orderId("{"); + s_orderId.append("orderId"); + s_orderId.append("}"); + + int pos = url.find(s_orderId); + + url.erase(pos, s_orderId.length()); + url.insert(pos, stringify(orderId)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + Order obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + Response< + Order + > + StoreApi:: + placeOrder( + + Order order + + ) + { + std::string url = basepath + "/store/order"; // + // Query | + // Headers | + // Form | + // Body | order + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + http.addHeader("Content-Type", "application/json"); + + + + payload = order.toJson().dump(); + + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + Order obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + + + diff --git a/samples/client/petstore/cpp-tiny/lib/service/StoreApi.h b/samples/client/petstore/cpp-tiny/lib/service/StoreApi.h new file mode 100644 index 000000000000..1bf0db023737 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/service/StoreApi.h @@ -0,0 +1,83 @@ +#ifndef TINY_CPP_CLIENT_StoreApi_H_ +#define TINY_CPP_CLIENT_StoreApi_H_ + + +#include "Response.h" +#include "Arduino.h" +#include "AbstractService.h" +#include "Helpers.h" +#include + +#include +#include "Order.h" + +namespace Tiny { + +/** + * Class + * Generated with openapi::tiny-cpp-client + */ + +class StoreApi : public AbstractService { +public: + StoreApi() = default; + + virtual ~StoreApi() = default; + + /** + * Delete purchase order by ID. + * + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * \param orderId ID of the order that needs to be deleted *Required* + */ + Response< + String + > + deleteOrder( + + std::string orderId + + ); + /** + * Returns pet inventories by status. + * + * Returns a map of status codes to quantities + */ + Response< + String + > + getInventory( + ); + /** + * Find purchase order by ID. + * + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * \param orderId ID of pet that needs to be fetched *Required* + */ + Response< + Order + > + getOrderById( + + long orderId + + ); + /** + * Place an order for a pet. + * + * + * \param order order placed for purchasing the pet *Required* + */ + Response< + Order + > + placeOrder( + + Order order + + ); +}; + +} + +#endif /* TINY_CPP_CLIENT_StoreApi_H_ */ \ No newline at end of file diff --git a/samples/client/petstore/cpp-tiny/lib/service/UserApi.cpp b/samples/client/petstore/cpp-tiny/lib/service/UserApi.cpp new file mode 100644 index 000000000000..d1cf12b80a9e --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/service/UserApi.cpp @@ -0,0 +1,366 @@ +#include "UserApi.h" + +using namespace Tiny; + + + + Response< + String + > + UserApi:: + createUser( + + User user + + ) + { + std::string url = basepath + "/user"; // + // Query | + // Headers | + // Form | + // Body | user + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + http.addHeader("Content-Type", "application/json"); + + + + payload = user.toJson().dump(); + + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + String + > + UserApi:: + createUsersWithArrayInput( + std::list user + + + ) + { + std::string url = basepath + "/user/createWithArray"; // + // Query | + // Headers | + // Form | + // Body | user + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + http.addHeader("Content-Type", "application/json"); + + + bourne::json tmp_arr = bourne::json::array(); + for(auto& var : user) + { + auto tmp = var.toJson(); + tmp_arr.append(tmp); + + } + payload = tmp_arr.dump(); + + + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + String + > + UserApi:: + createUsersWithListInput( + std::list user + + + ) + { + std::string url = basepath + "/user/createWithList"; // + // Query | + // Headers | + // Form | + // Body | user + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | POST + http.addHeader("Content-Type", "application/json"); + + + bourne::json tmp_arr = bourne::json::array(); + for(auto& var : user) + { + auto tmp = var.toJson(); + tmp_arr.append(tmp); + + } + payload = tmp_arr.dump(); + + + int httpCode = http.sendRequest("POST", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + String + > + UserApi:: + deleteUser( + + std::string username + + ) + { + std::string url = basepath + "/user/{username}"; //username + // Query | + // Headers | + // Form | + // Body | + + std::string s_username("{"); + s_username.append("username"); + s_username.append("}"); + + int pos = url.find(s_username); + + url.erase(pos, s_username.length()); + url.insert(pos, stringify(username)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | DELETE + int httpCode = http.sendRequest("DELETE", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + User + > + UserApi:: + getUserByName( + + std::string username + + ) + { + std::string url = basepath + "/user/{username}"; //username + // Query | + // Headers | + // Form | + // Body | + + std::string s_username("{"); + s_username.append("username"); + s_username.append("}"); + + int pos = url.find(s_username); + + url.erase(pos, s_username.length()); + url.insert(pos, stringify(username)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + + User obj(output_string); + + + Response response(obj, httpCode); + return response; + } + + Response< + std::string + > + UserApi:: + loginUser( + + std::string username + , + + std::string password + + ) + { + std::string url = basepath + "/user/login"; // + // Query | username password + // Headers | + // Form | + // Body | + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + + bourne::json jsonPayload(output_string); + std::string obj; + jsonToValue(&obj, jsonPayload, "std::string"); + + + + Response response(obj, httpCode); + return response; + } + + Response< + String + > + UserApi:: + logoutUser( + ) + { + std::string url = basepath + "/user/logout"; // + // Query | + // Headers | + // Form | + // Body | + + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | GET + int httpCode = http.sendRequest("GET", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + Response< + String + > + UserApi:: + updateUser( + + std::string username + , + + User user + + ) + { + std::string url = basepath + "/user/{username}"; //username + // Query | + // Headers | + // Form | + // Body | user + + std::string s_username("{"); + s_username.append("username"); + s_username.append("}"); + + int pos = url.find(s_username); + + url.erase(pos, s_username.length()); + url.insert(pos, stringify(username)); + + begin(url); + + std::string payload = ""; + // Send Request + // METHOD | PUT + http.addHeader("Content-Type", "application/json"); + + + + payload = user.toJson().dump(); + + int httpCode = http.sendRequest("PUT", reinterpret_cast(&payload[0]), payload.length()); + + // Handle Request + String output = http.getString(); + std::string output_string = output.c_str(); + + http.end(); + + + Response response(output, httpCode); + return response; + } + + + + diff --git a/samples/client/petstore/cpp-tiny/lib/service/UserApi.h b/samples/client/petstore/cpp-tiny/lib/service/UserApi.h new file mode 100644 index 000000000000..afdaefa0f8c9 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/lib/service/UserApi.h @@ -0,0 +1,147 @@ +#ifndef TINY_CPP_CLIENT_UserApi_H_ +#define TINY_CPP_CLIENT_UserApi_H_ + + +#include "Response.h" +#include "Arduino.h" +#include "AbstractService.h" +#include "Helpers.h" +#include + +#include "User.h" +#include + +namespace Tiny { + +/** + * Class + * Generated with openapi::tiny-cpp-client + */ + +class UserApi : public AbstractService { +public: + UserApi() = default; + + virtual ~UserApi() = default; + + /** + * Create user. + * + * This can only be done by the logged in user. + * \param user Created user object *Required* + */ + Response< + String + > + createUser( + + User user + + ); + /** + * Creates list of users with given input array. + * + * + * \param user List of user object *Required* + */ + Response< + String + > + createUsersWithArrayInput( + std::list user + + + ); + /** + * Creates list of users with given input array. + * + * + * \param user List of user object *Required* + */ + Response< + String + > + createUsersWithListInput( + std::list user + + + ); + /** + * Delete user. + * + * This can only be done by the logged in user. + * \param username The name that needs to be deleted *Required* + */ + Response< + String + > + deleteUser( + + std::string username + + ); + /** + * Get user by user name. + * + * + * \param username The name that needs to be fetched. Use user1 for testing. *Required* + */ + Response< + User + > + getUserByName( + + std::string username + + ); + /** + * Logs user into the system. + * + * + * \param username The user name for login *Required* + * \param password The password for login in clear text *Required* + */ + Response< + std::string + > + loginUser( + + std::string username + , + + std::string password + + ); + /** + * Logs out current logged in user session. + * + * + */ + Response< + String + > + logoutUser( + ); + /** + * Updated user. + * + * This can only be done by the logged in user. + * \param username name that need to be deleted *Required* + * \param user Updated user object *Required* + */ + Response< + String + > + updateUser( + + std::string username + , + + User user + + ); +}; + +} + +#endif /* TINY_CPP_CLIENT_UserApi_H_ */ \ No newline at end of file diff --git a/samples/client/petstore/cpp-tiny/platformio.ini b/samples/client/petstore/cpp-tiny/platformio.ini new file mode 100644 index 000000000000..00781178d10b --- /dev/null +++ b/samples/client/petstore/cpp-tiny/platformio.ini @@ -0,0 +1,7 @@ +[env:esp32] +platform = espressif32 +board = nodemcu-32s +framework = arduino +lib_deps = https://github.com/steinwurf/bourne.git +extra_scripts = pre_compiling_bourne.py + diff --git a/samples/client/petstore/cpp-tiny/pre_compiling_bourne.py b/samples/client/petstore/cpp-tiny/pre_compiling_bourne.py new file mode 100644 index 000000000000..96356dcdf158 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/pre_compiling_bourne.py @@ -0,0 +1,25 @@ +Import("env") + +## Compatibility for bourne to work on microcontrollers +# We insert '#define _GLIBCXX_USE_C99' in files that use std::stoll or std::to_string +def insert_c99_into(file): + import fileinput + + path = env['PROJECT_LIBDEPS_DIR'] + "/" + env['PIOENV'] + "/bourne/src/bourne/" + file + value = '#define _GLIBCXX_USE_C99 1\n' + + for line in fileinput.FileInput(path,inplace=1): + if line.startswith('#define _GLIBCXX_USE_C99'): + continue + elif line.startswith('// D'): + line=line.replace(line,line+value) + print(line, end='') + +def fix_parser(): + insert_c99_into('detail/parser.cpp') + +def fix_json(): + insert_c99_into('json.cpp') + +fix_parser() +fix_json() \ No newline at end of file diff --git a/samples/client/petstore/cpp-tiny/root.cert b/samples/client/petstore/cpp-tiny/root.cert new file mode 100644 index 000000000000..bad9c08efad1 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/root.cert @@ -0,0 +1,53 @@ +// TODO: Provide your service root certificate. +// Below is two examples of root certificates. + +// Let's encrypt root certificate +/** +"-----BEGIN CERTIFICATE-----\n" \ +"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n" \ +"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" \ +"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n" \ +"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n" \ +"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n" \ +"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n" \ +"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n" \ +"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n" \ +"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n" \ +"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n" \ +"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n" \ +"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n" \ +"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n" \ +"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n" \ +"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n" \ +"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n" \ +"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n" \ +"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n" \ +"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n" \ +"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n" \ +"-----END CERTIFICATE-----\n" +*/ + +// Amazon_Root_CA_1.pem +/** +"-----BEGIN CERTIFICATE-----\n" \ +"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n" \ +"ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\n" \ +"b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\n" \ +"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n" \ +"b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\n" \ +"ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n" \ +"9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\n" \ +"IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\n" \ +"VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n" \ +"93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\n" \ +"jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n" \ +"AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\n" \ +"A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\n" \ +"U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\n" \ +"N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\n" \ +"o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n" \ +"5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\n" \ +"rqXRfboQnoZsG4q5WTP468SQvvG5\n" \ +"-----END CERTIFICATE-----\n" \ +*/ + diff --git a/samples/client/petstore/cpp-tiny/src/main.cpp b/samples/client/petstore/cpp-tiny/src/main.cpp new file mode 100644 index 000000000000..34ba455fbdd3 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/src/main.cpp @@ -0,0 +1,37 @@ +#include "PetApi.h" + +const char* ssid = "your wifi name"; // TODO Change wifi name +const char* password = "Your wifi password"; //TODO Change wifi password + + +void setup(){ + //Initialize serial and wait for port to open: + Serial.begin(9600); + delay(100); + + Serial.print("Attempting to connect to SSID: "); + Serial.println(ssid); + WiFi.begin(ssid, password); + + // attempt to connect to Wifi network: + while (WiFi.status() != WL_CONNECTED) { + Serial.print("."); + // wait 1 second for re-trying + delay(1000); + } + + Serial.print("Connected to "); + Serial.println(ssid); + + //Print LAN IP. + Serial.print("IP address set: "); + Serial.println(WiFi.localIP()); + + Tiny::PetApi petapi; + auto resp = petapi.getPetById(10); + Serial.println(resp.code); + Tiny::Pet pet = resp.obj; + Serial.println(pet.toJson().dump().c_str()); +} + +void loop(){} diff --git a/samples/client/petstore/cpp-tiny/test/RunTests.cpp b/samples/client/petstore/cpp-tiny/test/RunTests.cpp new file mode 100644 index 000000000000..4caafb4ee441 --- /dev/null +++ b/samples/client/petstore/cpp-tiny/test/RunTests.cpp @@ -0,0 +1,204 @@ + +#include "ApiResponseTest.cpp" + +#include "CategoryTest.cpp" + +#include "OrderTest.cpp" + +#include "PetTest.cpp" + +#include "TagTest.cpp" + +#include "UserTest.cpp" + + + +void setUp(){} + +void tearDown(){} + +void runTests(){ + + + RUN_TEST(test_ApiResponse_code_is_assigned_from_json); + + + RUN_TEST(test_ApiResponse_type_is_assigned_from_json); + + + RUN_TEST(test_ApiResponse_message_is_assigned_from_json); + + + + RUN_TEST(test_Category_id_is_assigned_from_json); + + + RUN_TEST(test_Category_name_is_assigned_from_json); + + + + RUN_TEST(test_Order_id_is_assigned_from_json); + + + RUN_TEST(test_Order_petId_is_assigned_from_json); + + + RUN_TEST(test_Order_quantity_is_assigned_from_json); + + + RUN_TEST(test_Order_shipDate_is_assigned_from_json); + + + RUN_TEST(test_Order_status_is_assigned_from_json); + + + RUN_TEST(test_Order_complete_is_assigned_from_json); + + + + RUN_TEST(test_Pet_id_is_assigned_from_json); + + + + RUN_TEST(test_Pet_name_is_assigned_from_json); + + + + + RUN_TEST(test_Pet_status_is_assigned_from_json); + + + + RUN_TEST(test_Tag_id_is_assigned_from_json); + + + RUN_TEST(test_Tag_name_is_assigned_from_json); + + + + RUN_TEST(test_User_id_is_assigned_from_json); + + + RUN_TEST(test_User_username_is_assigned_from_json); + + + RUN_TEST(test_User_firstName_is_assigned_from_json); + + + RUN_TEST(test_User_lastName_is_assigned_from_json); + + + RUN_TEST(test_User_email_is_assigned_from_json); + + + RUN_TEST(test_User_password_is_assigned_from_json); + + + RUN_TEST(test_User_phone_is_assigned_from_json); + + + RUN_TEST(test_User_userStatus_is_assigned_from_json); + + + + + + RUN_TEST(test_ApiResponse_code_is_converted_to_json); + + + RUN_TEST(test_ApiResponse_type_is_converted_to_json); + + + RUN_TEST(test_ApiResponse_message_is_converted_to_json); + + + + RUN_TEST(test_Category_id_is_converted_to_json); + + + RUN_TEST(test_Category_name_is_converted_to_json); + + + + RUN_TEST(test_Order_id_is_converted_to_json); + + + RUN_TEST(test_Order_petId_is_converted_to_json); + + + RUN_TEST(test_Order_quantity_is_converted_to_json); + + + RUN_TEST(test_Order_shipDate_is_converted_to_json); + + + RUN_TEST(test_Order_status_is_converted_to_json); + + + RUN_TEST(test_Order_complete_is_converted_to_json); + + + + RUN_TEST(test_Pet_id_is_converted_to_json); + + + + RUN_TEST(test_Pet_name_is_converted_to_json); + + + + + RUN_TEST(test_Pet_status_is_converted_to_json); + + + + RUN_TEST(test_Tag_id_is_converted_to_json); + + + RUN_TEST(test_Tag_name_is_converted_to_json); + + + + RUN_TEST(test_User_id_is_converted_to_json); + + + RUN_TEST(test_User_username_is_converted_to_json); + + + RUN_TEST(test_User_firstName_is_converted_to_json); + + + RUN_TEST(test_User_lastName_is_converted_to_json); + + + RUN_TEST(test_User_email_is_converted_to_json); + + + RUN_TEST(test_User_password_is_converted_to_json); + + + RUN_TEST(test_User_phone_is_converted_to_json); + + + RUN_TEST(test_User_userStatus_is_converted_to_json); + + + + +} + +int main(void) { + UNITY_BEGIN(); + runTests(); + return UNITY_END(); +} + +void setup() { + UNITY_BEGIN(); + runTests(); + UNITY_END(); +} + +void loop() { + +} From ab11acd634c3a121b2c5e86891092ad196e503bf Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Tue, 25 May 2021 17:58:39 +0200 Subject: [PATCH 149/186] [dart][dart-dio-next] Improve support for file uploads (#9542) * [dart][dart-dio] Improve support for file uploads * add support for filenames in multipart requests by using `MultipartFile` from dio directly * add support for binary/file body data * fixes #6671 * fixes #9079 * Add and fix tests * Only use MultipartFile for body/multipart parameters * Fix test * Actually fix tests --- .circleci/config.yml | 1 - .../languages/DartDioNextClientCodegen.java | 29 +++++-- .../built_value/serialize.mustache | 4 +- .../petstore_client_lib_fake/doc/PetApi.md | 8 +- .../lib/src/api/fake_api.dart | 2 +- .../lib/src/api/pet_api.dart | 9 +-- .../pubspec.yaml | 10 +-- .../test/api/fake_api_test.dart | 2 +- .../test/api/pet_api_test.dart | 81 +++++++++++++++++++ .../test/matcher/form_data_matcher.dart | 26 ++++++ 10 files changed, 146 insertions(+), 26 deletions(-) create mode 100644 samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/matcher/form_data_matcher.dart diff --git a/.circleci/config.yml b/.circleci/config.yml index c5b0d3dc6f10..c3611c57351a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -82,7 +82,6 @@ jobs: - ~/.bundle - ~/.go_workspace - ~/.gradle - - ~/.pub-cache - ~/.cache/bower - ".git" - ~/.stack diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java index 3beb4ca9a4ad..6b7beaeaea2e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java @@ -46,6 +46,7 @@ public class DartDioNextClientCodegen extends AbstractDartCodegen { public static final String SERIALIZATION_LIBRARY_BUILT_VALUE = "built_value"; public static final String SERIALIZATION_LIBRARY_DEFAULT = SERIALIZATION_LIBRARY_BUILT_VALUE; + private static final String DIO_IMPORT = "package:dio/dio.dart"; private static final String CLIENT_NAME = "clientName"; private String dateLibrary; @@ -192,6 +193,7 @@ private void configureSerializationLibraryBuiltValue(String srcFolder) { imports.put("BuiltMap", "package:built_collection/built_collection.dart"); imports.put("JsonObject", "package:built_value/json_object.dart"); imports.put("Uint8List", "dart:typed_data"); + imports.put("MultipartFile", DIO_IMPORT); } private void configureDateLibrary(String srcFolder) { @@ -257,7 +259,7 @@ public Map postProcessModels(Map objs) { for (Object _mo : models) { Map mo = (Map) _mo; CodegenModel cm = (CodegenModel) mo.get("model"); - cm.imports = rewriteImports(cm.imports); + cm.imports = rewriteImports(cm.imports, true); cm.vendorExtensions.put("x-has-vars", !cm.vars.isEmpty()); } return objs; @@ -302,7 +304,6 @@ private void appendBuiltValueCollection(StringBuilder sb, CodegenProperty proper sb.append(")]"); } - @Override public Map postProcessOperationsWithModels(Map objs, List allModels) { super.postProcessOperationsWithModels(objs, allModels); @@ -313,11 +314,15 @@ public Map postProcessOperationsWithModels(Map o Set resultImports = new HashSet<>(); for (CodegenOperation op : operationList) { - for (CodegenParameter param : op.bodyParams) { - if (param.baseType != null && param.baseType.equalsIgnoreCase("Uint8List") && op.isMultipart) { + for (CodegenParameter param : op.allParams) { + if (((op.isMultipart && param.isFormParam) || param.isBodyParam) && (param.isBinary || param.isFile)) { param.baseType = "MultipartFile"; param.dataType = "MultipartFile"; + op.imports.add("MultipartFile"); } + } + + for (CodegenParameter param : op.bodyParams) { if (param.isContainer) { final Map serializer = new HashMap<>(); serializer.put("isArray", param.isArray); @@ -328,7 +333,12 @@ public Map postProcessOperationsWithModels(Map o } } - resultImports.addAll(rewriteImports(op.imports)); + if (op.allParams.stream().noneMatch(param -> param.dataType.equals("Uint8List"))) { + // Remove unused imports after processing + op.imports.remove("Uint8List"); + } + + resultImports.addAll(rewriteImports(op.imports, false)); if (op.getHasFormParams()) { resultImports.add("package:" + pubName + "/src/api_util.dart"); } @@ -349,11 +359,16 @@ public Map postProcessOperationsWithModels(Map o return objs; } - private Set rewriteImports(Set originalImports) { + private Set rewriteImports(Set originalImports, boolean isModel) { Set resultImports = Sets.newHashSet(); for (String modelImport : originalImports) { if (imports.containsKey(modelImport)) { - resultImports.add(imports.get(modelImport)); + String i = imports.get(modelImport); + if (Objects.equals(i, DIO_IMPORT) && !isModel) { + // Don't add imports to operations that are already imported + continue; + } + resultImports.add(i); } else { resultImports.add("package:" + pubName + "/src/model/" + underscore(modelImport) + ".dart"); } diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serialize.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serialize.mustache index 5794f34ad1ad..03d38c93878d 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serialize.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serialize.mustache @@ -1,13 +1,13 @@ {{#hasFormParams}} _bodyData = {{#isMultipart}}FormData.fromMap({{/isMultipart}}{ {{#formParams}} - {{^required}}{{^isNullable}}if ({{{paramName}}} != null) {{/isNullable}}{{/required}}r'{{{baseName}}}': {{#isFile}}MultipartFile.fromBytes({{{paramName}}}, filename: r'{{{baseName}}}'){{/isFile}}{{^isFile}}encodeFormParameter(_serializers, {{{paramName}}}, const FullType({{^isContainer}}{{{baseType}}}{{/isContainer}}{{#isContainer}}Built{{#isMap}}Map{{/isMap}}{{#isArray}}{{#uniqueItems}}Set{{/uniqueItems}}{{^uniqueItems}}List{{/uniqueItems}}{{/isArray}}, [{{#isMap}}FullType(String), {{/isMap}}FullType({{{baseType}}})]{{/isContainer}})){{/isFile}}, + {{^required}}{{^isNullable}}if ({{{paramName}}} != null) {{/isNullable}}{{/required}}r'{{{baseName}}}': {{#isFile}}{{{paramName}}}{{/isFile}}{{^isFile}}encodeFormParameter(_serializers, {{{paramName}}}, const FullType({{^isContainer}}{{{baseType}}}{{/isContainer}}{{#isContainer}}Built{{#isMap}}Map{{/isMap}}{{#isArray}}{{#uniqueItems}}Set{{/uniqueItems}}{{^uniqueItems}}List{{/uniqueItems}}{{/isArray}}, [{{#isMap}}FullType(String), {{/isMap}}FullType({{{baseType}}})]{{/isContainer}})){{/isFile}}, {{/formParams}} }{{#isMultipart}}){{/isMultipart}}; {{/hasFormParams}} {{#bodyParam}} {{#isPrimitiveType}} - _bodyData = {{paramName}}; + _bodyData = {{paramName}}{{#isFile}}.finalize(){{/isFile}}; {{/isPrimitiveType}} {{^isPrimitiveType}} {{#isContainer}} diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md index 841eed632916..bca230088d8b 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md @@ -345,7 +345,7 @@ import 'package:openapi/api.dart'; var api_instance = new PetApi(); var petId = 789; // int | ID of pet to update var additionalMetadata = additionalMetadata_example; // String | Additional data to pass to server -var file = BINARY_DATA_HERE; // Uint8List | file to upload +var file = BINARY_DATA_HERE; // MultipartFile | file to upload try { var result = api_instance.uploadFile(petId, additionalMetadata, file); @@ -361,7 +361,7 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **int**| ID of pet to update | **additionalMetadata** | **String**| Additional data to pass to server | [optional] - **file** | **Uint8List**| file to upload | [optional] + **file** | **MultipartFile**| file to upload | [optional] ### Return type @@ -391,7 +391,7 @@ import 'package:openapi/api.dart'; var api_instance = new PetApi(); var petId = 789; // int | ID of pet to update -var requiredFile = BINARY_DATA_HERE; // Uint8List | file to upload +var requiredFile = BINARY_DATA_HERE; // MultipartFile | file to upload var additionalMetadata = additionalMetadata_example; // String | Additional data to pass to server try { @@ -407,7 +407,7 @@ try { Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **petId** | **int**| ID of pet to update | - **requiredFile** | **Uint8List**| file to upload | + **requiredFile** | **MultipartFile**| file to upload | **additionalMetadata** | **String**| Additional data to pass to server | [optional] ### Return type diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart index b5d03c9bda1f..c9f67f4b736b 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart @@ -851,7 +851,7 @@ class FakeApi { if (string != null) r'string': encodeFormParameter(_serializers, string, const FullType(String)), r'pattern_without_delimiter': encodeFormParameter(_serializers, patternWithoutDelimiter, const FullType(String)), r'byte': encodeFormParameter(_serializers, byte, const FullType(String)), - if (binary != null) r'binary': MultipartFile.fromBytes(binary, filename: r'binary'), + if (binary != null) r'binary': binary, if (date != null) r'date': encodeFormParameter(_serializers, date, const FullType(Date)), if (dateTime != null) r'dateTime': encodeFormParameter(_serializers, dateTime, const FullType(DateTime)), if (password != null) r'password': encodeFormParameter(_serializers, password, const FullType(String)), diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart index e3f1473c5be5..ede9b4e65bad 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart @@ -7,7 +7,6 @@ import 'dart:async'; import 'package:built_value/serializer.dart'; import 'package:dio/dio.dart'; -import 'dart:typed_data'; import 'package:built_collection/built_collection.dart'; import 'package:openapi/src/api_util.dart'; import 'package:openapi/src/model/api_response.dart'; @@ -493,7 +492,7 @@ class PetApi { Future> uploadFile({ required int petId, String? additionalMetadata, - Uint8List? file, + MultipartFile? file, CancelToken? cancelToken, Map? headers, Map? extra, @@ -528,7 +527,7 @@ class PetApi { try { _bodyData = FormData.fromMap({ if (additionalMetadata != null) r'additionalMetadata': encodeFormParameter(_serializers, additionalMetadata, const FullType(String)), - if (file != null) r'file': MultipartFile.fromBytes(file, filename: r'file'), + if (file != null) r'file': file, }); } catch(error, stackTrace) { @@ -588,7 +587,7 @@ class PetApi { /// Future> uploadFileWithRequiredFile({ required int petId, - required Uint8List requiredFile, + required MultipartFile requiredFile, String? additionalMetadata, CancelToken? cancelToken, Map? headers, @@ -624,7 +623,7 @@ class PetApi { try { _bodyData = FormData.fromMap({ if (additionalMetadata != null) r'additionalMetadata': encodeFormParameter(_serializers, additionalMetadata, const FullType(String)), - r'requiredFile': MultipartFile.fromBytes(requiredFile, filename: r'requiredFile'), + r'requiredFile': requiredFile, }); } catch(error, stackTrace) { diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/pubspec.yaml b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/pubspec.yaml index 6c33286cb5ae..398c6a074709 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/pubspec.yaml @@ -8,11 +8,11 @@ environment: sdk: '>=2.10.0 <3.0.0' dev_dependencies: - built_collection: '5.0.0' - built_value: '8.0.4' - dio: '4.0.0' + built_collection: 5.0.0 + built_value: 8.0.6 + dio: 4.0.0 http_mock_adapter: 0.2.1 - mockito: '5.0.3' + mockito: 5.0.8 openapi: path: ../petstore_client_lib_fake - test: '1.16.8' + test: 1.17.4 diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/fake_api_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/fake_api_test.dart index e1a40f57fe50..9330474d4992 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/fake_api_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/fake_api_test.dart @@ -36,7 +36,7 @@ void main() { 'int64': '9223372036854775807', 'date': '2020-08-11', 'dateTime': '2020-08-11T12:30:55.123Z', - 'binary': "Instance of 'MultipartFile'", + 'binary': '[0, 1, 2, 3, 4, 5]', }, headers: { 'content-type': 'application/x-www-form-urlencoded', diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/pet_api_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/pet_api_test.dart index 5aae7639fda1..6b52fdce13ed 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/pet_api_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/api/pet_api_test.dart @@ -1,9 +1,12 @@ import 'package:built_collection/built_collection.dart'; import 'package:dio/dio.dart'; import 'package:http_mock_adapter/http_mock_adapter.dart'; +import 'package:http_parser/http_parser.dart'; import 'package:openapi/openapi.dart'; import 'package:test/test.dart'; +import '../matcher/form_data_matcher.dart'; + void main() { const photo1 = 'https://localhost/photo1.jpg'; const photo2 = 'https://localhost/photo2.jpg'; @@ -221,5 +224,83 @@ void main() { expect(response.data[1].status, PetStatusEnum.available); }); }); + + group('uploadFile', () { + test('uploadFileWithRequiredFile', () async { + final file = MultipartFile.fromBytes( + [1, 2, 3, 4], + filename: 'test.png', + contentType: MediaType.parse('image/png'), + ); + + server.onRoute( + '/fake/5/uploadImageWithRequiredFile', + (request) => request.reply(200, { + 'code': 200, + 'type': 'success', + 'message': 'File uploaded', + }), + request: Request( + method: RequestMethods.post, + headers: { + Headers.contentTypeHeader: + Matchers.pattern('multipart/form-data'), + Headers.contentLengthHeader: Matchers.integer, + }, + data: FormDataMatcher( + expected: FormData.fromMap({ + r'requiredFile': file, + }), + ), + ), + ); + final response = await client.getPetApi().uploadFileWithRequiredFile( + petId: 5, + requiredFile: file, + ); + + expect(response.statusCode, 200); + expect(response.data.message, 'File uploaded'); + }); + + test('uploadFileWithRequiredFile & additionalMetadata', () async { + final file = MultipartFile.fromBytes( + [1, 2, 3, 4], + filename: 'test.png', + contentType: MediaType.parse('image/png'), + ); + + server.onRoute( + '/fake/3/uploadImageWithRequiredFile', + (request) => request.reply(200, { + 'code': 200, + 'type': 'success', + 'message': 'File uploaded', + }), + request: Request( + method: RequestMethods.post, + headers: { + Headers.contentTypeHeader: + Matchers.pattern('multipart/form-data'), + Headers.contentLengthHeader: Matchers.integer, + }, + data: FormDataMatcher( + expected: FormData.fromMap({ + 'additionalMetadata': 'foo', + r'requiredFile': file, + }), + ), + ), + ); + final response = await client.getPetApi().uploadFileWithRequiredFile( + petId: 3, + requiredFile: file, + additionalMetadata: 'foo', + ); + + expect(response.statusCode, 200); + expect(response.data.message, 'File uploaded'); + }); + }); }); } diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/matcher/form_data_matcher.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/matcher/form_data_matcher.dart new file mode 100644 index 000000000000..8e0a7a6c032a --- /dev/null +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake_tests/test/matcher/form_data_matcher.dart @@ -0,0 +1,26 @@ +import 'package:dio/dio.dart'; +import 'package:meta/meta.dart'; +import 'package:collection/collection.dart'; +import 'package:http_mock_adapter/src/matchers/matcher.dart'; + +class FormDataMatcher extends Matcher { + final FormData expected; + + const FormDataMatcher({@required this.expected}); + + @override + bool matches(dynamic actual) { + if (actual is! FormData) { + return false; + } + final data = actual as FormData; + return MapEquality().equals( + Map.fromEntries(expected.fields), + Map.fromEntries(data.fields), + ) && + MapEquality().equals( + Map.fromEntries(expected.files), + Map.fromEntries(data.files), + ); + } +} From e09409fbce83c81b96efb0975830f23d56fbb7df Mon Sep 17 00:00:00 2001 From: Blackclaws Date: Tue, 25 May 2021 18:12:12 +0200 Subject: [PATCH 150/186] Handle Deserialization Asynchronously (#9424) --- .../libraries/httpclient/ApiClient.mustache | 18 +++++++++--------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache index fe83457311c0..e48722f8fa75 100644 --- a/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-netcore/libraries/httpclient/ApiClient.mustache @@ -80,9 +80,9 @@ namespace {{packageName}}.Client } } - public T Deserialize(HttpResponseMessage response) + public async Task Deserialize(HttpResponseMessage response) { - var result = (T)Deserialize(response, typeof(T)); + var result = (T) await Deserialize(response, typeof(T)); return result; } @@ -92,19 +92,19 @@ namespace {{packageName}}.Client /// The HTTP response. /// Object type. /// Object representation of the JSON string. - internal object Deserialize(HttpResponseMessage response, Type type) + internal async Task Deserialize(HttpResponseMessage response, Type type) { IList headers = response.Headers.Select(x => x.Key + "=" + x.Value).ToList(); if (type == typeof(byte[])) // return byte array { - return response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult(); + return await response.Content.ReadAsByteArrayAsync(); } // TODO: ? if (type.IsAssignableFrom(typeof(Stream))) if (type == typeof(Stream)) { - var bytes = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult(); + var bytes = await response.Content.ReadAsByteArrayAsync(); if (headers != null) { var filePath = String.IsNullOrEmpty(_configuration.TempFolderPath) @@ -128,18 +128,18 @@ namespace {{packageName}}.Client if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object { - return DateTime.Parse(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), null, System.Globalization.DateTimeStyles.RoundtripKind); + return DateTime.Parse(await response.Content.ReadAsStringAsync(), null, System.Globalization.DateTimeStyles.RoundtripKind); } if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type { - return Convert.ChangeType(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type); + return Convert.ChangeType(await response.Content.ReadAsStringAsync(), type); } // at this point, it must be a model (json) try { - return JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type, _serializerSettings); + return JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync(), type, _serializerSettings); } catch (Exception e) { @@ -510,7 +510,7 @@ namespace {{packageName}}.Client return await ToApiResponse(response, default(T), req.RequestUri); } - object responseData = deserializer.Deserialize(response); + object responseData = await deserializer.Deserialize(response); // if the response type is oneOf/anyOf, call FromJSON to deserialize the data if (typeof({{{packageName}}}.{{modelPackage}}.AbstractOpenAPISchema).IsAssignableFrom(typeof(T))) diff --git a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs index 69d9bb714e32..bc7d7d847851 100644 --- a/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp-netcore/OpenAPIClient-httpclient/src/Org.OpenAPITools/Client/ApiClient.cs @@ -80,9 +80,9 @@ public string Serialize(object obj) } } - public T Deserialize(HttpResponseMessage response) + public async Task Deserialize(HttpResponseMessage response) { - var result = (T)Deserialize(response, typeof(T)); + var result = (T) await Deserialize(response, typeof(T)); return result; } @@ -92,19 +92,19 @@ public T Deserialize(HttpResponseMessage response) /// The HTTP response. /// Object type. /// Object representation of the JSON string. - internal object Deserialize(HttpResponseMessage response, Type type) + internal async Task Deserialize(HttpResponseMessage response, Type type) { IList headers = response.Headers.Select(x => x.Key + "=" + x.Value).ToList(); if (type == typeof(byte[])) // return byte array { - return response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult(); + return await response.Content.ReadAsByteArrayAsync(); } // TODO: ? if (type.IsAssignableFrom(typeof(Stream))) if (type == typeof(Stream)) { - var bytes = response.Content.ReadAsByteArrayAsync().GetAwaiter().GetResult(); + var bytes = await response.Content.ReadAsByteArrayAsync(); if (headers != null) { var filePath = String.IsNullOrEmpty(_configuration.TempFolderPath) @@ -128,18 +128,18 @@ internal object Deserialize(HttpResponseMessage response, Type type) if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object { - return DateTime.Parse(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), null, System.Globalization.DateTimeStyles.RoundtripKind); + return DateTime.Parse(await response.Content.ReadAsStringAsync(), null, System.Globalization.DateTimeStyles.RoundtripKind); } if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type { - return Convert.ChangeType(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type); + return Convert.ChangeType(await response.Content.ReadAsStringAsync(), type); } // at this point, it must be a model (json) try { - return JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().GetAwaiter().GetResult(), type, _serializerSettings); + return JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync(), type, _serializerSettings); } catch (Exception e) { @@ -504,7 +504,7 @@ private ApiResponse Exec(HttpRequestMessage req, IReadableConfiguration co return await ToApiResponse(response, default(T), req.RequestUri); } - object responseData = deserializer.Deserialize(response); + object responseData = await deserializer.Deserialize(response); // if the response type is oneOf/anyOf, call FromJSON to deserialize the data if (typeof(Org.OpenAPITools.Model.AbstractOpenAPISchema).IsAssignableFrom(typeof(T))) From ae0350280f27dabc1a7aa6c485515ab02561de4b Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 26 May 2021 05:02:28 -0400 Subject: [PATCH 151/186] [swift5] Map file and binary to Data (#9419) * [swift5] Map file and binary to Data Fixes: https://github.com/OpenAPITools/openapi-generator/issues/9308 * Update docs --- docs/generators/swift5.md | 1 + docs/generators/tiny-cpp.md | 2 +- .../languages/Swift5ClientCodegen.java | 24 ++++++++++++++++++- .../options/Swift5OptionsProvider.java | 1 + 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index 47f0318e8397..480eda2ebfd0 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -17,6 +17,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |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| |lenientTypeCast|Accept and cast values for simple types (string->bool, string->int, int->string)| |false| |library|Library template (sub-template) to use|
    **urlsession**
    [DEFAULT] HTTP client: URLSession
    **alamofire**
    HTTP client: Alamofire
    |urlsession| +|mapFileBinaryToData|Map File and Binary to Data (default: false)| |false| |nonPublicApi|Generates code with reduced access modifiers; allows embedding elsewhere without exposing non-public API calls to consumers.(default: false)| |null| |objcCompatible|Add additional properties and methods for Objective-C compatibility (default: false)| |null| |podAuthors|Authors used for Podspec| |null| diff --git a/docs/generators/tiny-cpp.md b/docs/generators/tiny-cpp.md index cd3877236ec7..f7f6a0385cac 100644 --- a/docs/generators/tiny-cpp.md +++ b/docs/generators/tiny-cpp.md @@ -165,7 +165,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |Maps|✗|ToolingExtension |CollectionFormat|✓|OAS2 |CollectionFormatMulti|✓|OAS2 -|Enum|✓|OAS2,OAS3 +|Enum|✗|OAS2,OAS3 |ArrayOfEnum|✓|ToolingExtension |ArrayOfModel|✓|ToolingExtension |ArrayOfCollectionOfPrimitives|✓|ToolingExtension diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index 4766e2a9c911..e84cd3313698 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -66,6 +66,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig public static final String USE_BACKTICK_ESCAPES = "useBacktickEscapes"; public static final String GENERATE_MODEL_ADDITIONAL_PROPERTIES = "generateModelAdditionalProperties"; public static final String HASHABLE_MODELS = "hashableModels"; + public static final String MAP_FILE_BINARY_TO_DATA = "mapFileBinaryToData"; protected static final String LIBRARY_ALAMOFIRE = "alamofire"; protected static final String LIBRARY_URLSESSION = "urlsession"; protected static final String RESPONSE_LIBRARY_PROMISE_KIT = "PromiseKit"; @@ -84,6 +85,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig protected boolean useBacktickEscapes = false; protected boolean generateModelAdditionalProperties = true; protected boolean hashableModels = true; + protected boolean mapFileBinaryToData = false; protected String[] responseAs = new String[0]; protected String sourceFolder = swiftPackagePath; protected HashSet objcReservedWords; @@ -120,7 +122,6 @@ public Swift5ClientCodegen() { "Bool", "Void", "String", - "URL", "Data", "Date", "Character", @@ -286,6 +287,10 @@ public Swift5ClientCodegen() { "Make hashable models (default: true)") .defaultValue(Boolean.TRUE.toString())); + cliOptions.add(new CliOption(MAP_FILE_BINARY_TO_DATA, + "Map File and Binary to Data (default: false)") + .defaultValue(Boolean.FALSE.toString())); + supportedLibraries.put(LIBRARY_URLSESSION, "[DEFAULT] HTTP client: URLSession"); supportedLibraries.put(LIBRARY_ALAMOFIRE, "HTTP client: Alamofire"); @@ -470,6 +475,15 @@ public void processOpts() { } additionalProperties.put(HASHABLE_MODELS, hashableModels); + if (additionalProperties.containsKey(MAP_FILE_BINARY_TO_DATA)) { + setMapFileBinaryToData(convertPropertyToBooleanAndWriteBack(MAP_FILE_BINARY_TO_DATA)); + } + additionalProperties.put(MAP_FILE_BINARY_TO_DATA, mapFileBinaryToData); + if (mapFileBinaryToData) { + typeMapping.put("file", "Data"); + typeMapping.put("binary", "Data"); + } + setLenientTypeCast(convertPropertyToBooleanAndWriteBack(LENIENT_TYPE_CAST)); // make api and model doc path available in mustache template @@ -547,6 +561,14 @@ public void processOpts() { } + public boolean isMapFileBinaryToData() { + return mapFileBinaryToData; + } + + public void setMapFileBinaryToData(boolean mapFileBinaryToData) { + this.mapFileBinaryToData = mapFileBinaryToData; + } + @Override protected boolean isReservedWord(String word) { return word != null && reservedWords.contains(word); //don't lowercase as super does diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java index 979da734eacb..6e5f48ca3775 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java @@ -95,6 +95,7 @@ public Map createOptions() { .put(Swift5ClientCodegen.SWIFT_PACKAGE_PATH, SWIFT_PACKAGE_PATH_VALUE) .put(Swift5ClientCodegen.GENERATE_MODEL_ADDITIONAL_PROPERTIES, GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE) .put(Swift5ClientCodegen.HASHABLE_MODELS, HASHABLE_MODELS_VALUE) + .put(Swift5ClientCodegen.MAP_FILE_BINARY_TO_DATA, "false") .build(); } From 8742228049ac42d6b78bdce17e30c06338737a84 Mon Sep 17 00:00:00 2001 From: Anders Aaen Springborg Date: Wed, 26 May 2021 12:04:14 +0200 Subject: [PATCH 152/186] add Aalborg university (#9588) --- website/src/dynamic/users.yml | 5 +++++ .../img/companies/aalborg_university.png | Bin 0 -> 554010 bytes 2 files changed, 5 insertions(+) create mode 100644 website/static/img/companies/aalborg_university.png diff --git a/website/src/dynamic/users.yml b/website/src/dynamic/users.yml index 7b955bfe3372..c8ff21541f90 100644 --- a/website/src/dynamic/users.yml +++ b/website/src/dynamic/users.yml @@ -1,3 +1,8 @@ +- + caption: "Aalborg University" + image: "img/companies/aalborg_university.png" + infoLink: "https://www.aau.dk/" + pinned: false - caption: "Adaptant Solutions AG" image: "img/companies/adaptant.png" diff --git a/website/static/img/companies/aalborg_university.png b/website/static/img/companies/aalborg_university.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa4fbe5777aa4a441c07bacd8787896ae140c5b GIT binary patch literal 554010 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¬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

    +p>F2&trrks*c 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

    Zh`8avOag)|hW8|F-IGC)=z_(+3yW ztTwDE|N0a{4Y{D?(iMhN#rWI-uJ4u2ZgF8KNGQggOIm-C5vReZ9l6Yjv46JYU{h_+ zg0V2UzN-&Yu%qv5zwsb(Qv{p(c|IpX(|Gx-jXmV2c(z9@?bFn?+fYg95$CB(uu3>{ z^hbaF=cs%i*TO_sZ~du2?T$EZGAnF}XV&f4oR(%EJL`<#0g>h?vj644gzMFDR6A>b z|0fOnHPHR_0H@gTcVtB#8c;mHza8hVxN|SdAu#a1^~9j{lMnNKePv_*r@*irMC2w- zYhSUI3~=FNs(>4iy`f|70G}2BnwvDMw5#i z*2k{5!Eya=6{V{r*G0e9S1)HC&Q`q^3{{l|+J|X-?`isWr*sF$^*BQD6|6;U6YM!Q z?v7MP5`CTWT2}6?v}$L*K}SiXbRLEuN?{XgOdlnw8cM0Tn;~GgoMztvVT`Zw6_li5 zjNZ!SXRWP>5@Y+VD5A07F$+UsyG*&&kr%P-zefa_pQ~ZZomYByqUYj%U5eR$q@}e) zqxsZ)6;8qPl#K$<%>J}3h{7%1!E4#?YgoB)F@^xu_0>EryRb zCNZd{o{Dic)?Qi84sDBH61406D37J&Z8eWYhOSIm6r?`2P?fz=S9D0`oaQE6E%-(G zoKtw!NFo2#3Ei!gRf}8c1JwoPqdD3UEgLCJA2gz=S^zZ*l{M4OInSj5RLE^9Wk1S0 zpgceCAE0aTpb6F@E*}?!@*CM1^44(bZOF_`K$3=~$-gB5;bkFWi23XBflFc(U}A!O zRBmmkR**}kLBspGcm8dOQjr>Y%Q{Ay;w|(M28_a^E6zJZH}!ikpu_Ja;A)6`n(Lp2SAAWTc4|B}!x^LQf!-d$)j92#C_h3t@aU$sB$m%;8 z`3$j>vfx{I)wteD8AmR6dp;SJYhE-G_s1to(9SG9tl&t2}G1~%A&f4cXP8+5a zPa0?J{%vVsd57y7gEl{Dfr)Qzivya9yWgq@#Kd!YN$2~pgC89noOJWlxLKJE|BbbY z1RZGZwCT7CT02A31Sqlor*gRdS4SQ3-#Szxqah@Dn*xZq=lw}FxWZ@Qc0a%R6p8-u znQ8c5^MM`Iy+Ng=pJbh})CV-I=MWd{8O`_x_f8keCeZzZb8?787*H_s zTsUw!^KVIzp9n$T#0riFef(~6SnlkB<=0{FUueqD(%60Z!13WT7l6$Q3;@NkzQ(Uf zH6kKmfvFy+N3X{SiL7UUnxY@29Jg5S!tkFrl?i!K4l@DfK5&|*MvQ6j`Pf?+P!9~h z1^t!A;;lb+21ejRHp-=R16RmZ{Um<5Hv;ilWAu&JL; zAAA{C0u$jC_F2||aFIC~_P*2kL4h4XE#(#X7~koJX(rlKbYTBM3LDtMavEp-wQmazwYHC|tS!;}EKCN+CEa9N=P@{c7dA3vX z6%rUWp!{Z@aVPWzhoQAxZl~ZpO)&M~cv#+wY?X2gvq6A@_G^J9;QPekqMJ%vX zg9cakp-sGAoeTy1_BqDbhlE%ncoyE;L%v^xTXjStvv8~(VQM>O_}Qys7V?xDK+#RbU*+I1kz2?=>`4;+HRJ`kz-XJuS{JCPUw=C~Pa3$6EqwH|v^WUg%g zCfG~j?czFbBL-HEKoe>78- z25`?(>aIsPf#rj8(6j~7frajt0@JF9Ay%d>rp#xjzX6@eg;OZ9e7+#_DmYiExwU1y*}Dlb~wrfjQDj=;7@BSrAtKZg(dT$Qh= zV;Wcn0@KMai|K8F1GzdtrhOtKfdOS45!6~<@x9x*_sfIXsQ>hnF^~H$CVc-rr;g^m zV0b9`S~)l1M@*AWVm2$gG8pSmqR2)?MFTs=IHlm4`sGu|=SnW(*st03%2cuh;+UMV zuYSywm%Xu0^hgD5D*~vFdQipRGyt`d_sxS0gs^8rxh?U|IGoH2-BF>WoWvX;GfLQRrS!q1FOIk42w+Tezpb`4^TJzEbGteg;HZ529+l=;tdbZ#LSS$Vw~+Dp zqS9pJS(I?$SMv|5>``#3;1jEZSANwBIi_9JCj&y!P#SQ3_ErXo?WolRQLXM%DQb|; z>afp)%=>l8?(*XHmO&#%gQXi*UQC1zOJx${#WoalC%x{95~|Syn|AU<~>X1 zEm;^pn5R3J^k2#IFGy%33TrHMBQ>~0A}1qb2)9ebie>^TEz_btadQzvUL}zWW40b5 zXdQifNvouRufN$DK(#%NM`(~z=_g(RSZt0G{o>5I>oZg@q@!8m${8xwFFUc$n%ApB zCx00Sy4WBRBd%=quEsUa7x=ii#Hed+ym*2p`@qFklPV|*w72V7zHg>P2?9XSbSb#y zzp53T{~oCWLi&!K*~gtCEn@_%cJXUoAt3HpkAxq1?@a!KlM%i=uAaKEX5qsT(&GJ~ zV+V*(hObd-tdBId0!QQT31UpEjVTJjkZtr?RF=w)crPAIr0vY^?y_hHGZvJq8-ZN( z@aEwq1Me{YwJ1;Y(oT^297f&64$R#?0;ws+<8Z}4KgR@Sk5%Lj$XNmD|`W~0?Y+bb}z(391yZZDgC%s~0vrz~gAsK~}pT?Ckv|q6fgJwE1f#r z8SZ8`#TFhkzY~=n2Bke~sCvRY?PEe(0T=@M<1 z+Z?ylnb(<@afM>(iSflRD#ReJ4=E`v2$eb&%iY8%^#U;Vt~$8Q65-!pjagR#JaJ^B z#h*u(&vS=v&%<=e0`lA;Jm?Z=#&STHoN}10;D!D#dKF-zd#;Ga75J7iLbZ+nYD8oK zyMgQ17&S|iE0@x;`giWsIhnzrPM)7r_3eLvX^owMUlw&3I>mo!z&?O2Q2DxC`E?~P zVPbnH;LagPvXOv(x0pvye5D%F-xPgTID@3tVv9CViV1)VhOKM4X+^9fiG!SGiJuUz znQKu*y5vK;?>krCfwpB}$YwUmOQ03- zJHo@~zU8cUa+qK0t5y(T_MYKCg2mX`wbi<+e+v_P%ctNz^oEBNt`<9Q7mPcA5L4bM z=(ZIi?XeI_7em)VK@6R*b}L4z%K1`YrYVET+32($P$0|)tGm^zQ__LsCB+lvEq-VrCn zdT!(b>C10oY1INSjFbPJ*3L`Q=Kx4%^3#RCt`Ivdg)yoI<(f4LnAJhtrg4g?;+uA+ zRs|uDVd8<43RMeV9uh3c0#l^aR@0KQ2XNp=j))K@`g^uAWF{`xGl`X*deBrk6g@XZ zaG1Pt&1~boIYklFd8l8)X~9B$HHCQE1X&V0>j0F$4lAW3c_0b}T6YczB+;6}rjqNG zhaBu3R43Hf$eE4m$T+T^Uu+gXoy@bQ?7U)AnM<|CqCBW^Wcb3|z3e?lyFJlG zycDe-jES9jO9dA6w}z0|`mt0_-=pKA1Qu2tQGJGj@*eG?JRZPFeoNG`l%MKJ;b+p7 zxOQ|jxPwY5oN<oJh`BsSI(pT z=iLQC3E7ut^Cy<1u4+?KCos)^NLT&rP73IU6I6JYXKk&&XqPah0{EQ_-fSL+vkRYd z=(V%tLqi};!5Si`U6v^(OTl^t|6#r0W}^~HnG`J1{yH@IOw9TgRZsp0)c&$-;3rTyhLEXt{sA8NQ{HJBb8xP2Xt&;~DS3G#6zTbs8_A=u5|)>CnM5 z8AARiV$)r%3cUpV-`fc{v5LY+Guv8}!Zl6;;%imsX^6O4SBWhjjW-SeD{KVvOMPxY zC0N=fwwKMzN&tTQDI?=tCC&i+X4Am-=-b&2{&|*;0JR)i`<)44rpyHqBjEo1|KFNCV$6qxwVFx!sbJ9zAbnPpOr=5 zS0VInjvmYstaNnK%*$&1R!S-XG6Ub~$KF=+qA*?{8;VcIjBnx2D7<=x*|I<=riy_q z{E$NJGtFf*@omd9X=7GaaJ|OK<`Q1$`!ngV$o<|V1;an+9+mZt0tz*vW8Nk=^6Pzh zk|J*xx^sXch|S2RD80rTb+~}~*K{DdqIv@-C^Z*E7t^f;#u!Ez>gM7YHXE}M`sIK_i2i&oAHMdaag;**8WCS|_ z*C;f5?J?yH`fvq028jPEcgBkonD_OPH7^d>63zm%+U z+EY$PDn(fTa77MAo2p;f);cI5D*n+bE5t&Qr0txej8p|G!J1Cpq;Yto1y?JWwm1_J zGspTm!)?gQ5ZA@VN&{&Sa&cCcQa|Uf4+ry^zu&g~BB?9|^5O~7nJUTAE4zw4YIuiP0 zljwVNxtgli`9BH02qUP{8#B)A7;yXS06_Z<&605bo2fC|;Bx}#DXc-<2dTxsEr74j zc#)eivyMCC`mzK#CGA}UblOrv9Q&@I*Sh=~uw_oWX*^Koi^hqk_v^^3A+}Ry}_=mA|4wRNucEx1P4u=$L^186A)$O zojHO>{D8C9!mqU{sR~ROA;IwFm7}lcY+ouDpDlh+lf&@Y)Z!J&UQhp9|1afSJz1j= zJ%2k*8=IBP-1C{GgR{?MkN5Vb9hWsceTH7o;Y@f!@QsTv54E(s87NvJ$IC;qqZA}7 zq?6WLKP85$Y@3Kl5A|@Gid8tdQ3XmZ8U6Os?mKq}3^hGXuGq^!(QO72@#o3pZ&sCYK; zIxXqYyeEo!;>c=H6g@db%(vw>=vTWr8MC6o3u)jf8V?}8nH&?AUunGXtePl3Zav+L zJE=QP`t&zd7M476kOMl6$b&;6Cvv__5Q-KWsM1<*tXlwri`)#4-r;q)AtM2Ic3{U* z)6G;3anw7;8N5TMT+08N+#nF?IBMHqxvLB7Hw)x}=J%Z!k1;dh`%5@%bm46Xr0`3I ztpN5CdG4^)72u~iJgzP=c*5``VhB&TJi=rfcw5oQc%rWW9CT_@mF^I4)_n&kf?{I{ z;7=m|50x*~(@jjfF`l<942SRwH&$5_F*Hr%Qw;ImjNzpp^%rs>!z zF5o%B>;}6^Y_bWsX$2?5+Rpm)94VR3nDDDZ%Q={X42&IOke z1VZU_c-p*DntLk11gDf6j`QPRiFUxx^6M5pG4#vGQ04-3BYt!4811PafP4RGjOk<~ zKw8pCg9|yRe3qg4h(JvFvpCS|| zb@SvwyMyEezBHRl1JD^UAC}Jtw7(5$cu6w5@Eit}$8vgX#xXIE%~CZ2-yIJeA{Og& z#lFy!q#E80+ptIAY+>5uK;qHl65HDu*3(nmvV7RIBLgV4V(*^3Fq-%Dexa_!^^;9$ zNAzxhU8jj=zJ=+WTO=M&?ky+VV0qca3QfOZLx3DXp)_rh1}wM5Fux&bWm7Cg+E;zo zLc3$uXTW>zEw&i#OH#cGRvdT#xh~=sgRAI{5^|~TuMV@ISt<|5bTB62^pjh9d?@9t z2`3#{k@IT{I3+RhLKkv_3&j+W!UG$J0A34uIE?4_sj?fd$FW{7y)$pf0yg!v=fVqA zG~yv}Hb6(`nl(A}sPGBFiV_KJiI3#UzovZv*G5S?tf5mK0`nk+HUHOO;|7rYpyxR> z-*|xhQU$0QG zeo%;|sbS@-_Ap>gAtyGhob{*42Z2WB{C=e=`Py%qThBBre6F-P1k*u{?E8vc^r!m) zY{({(3|$gi^1yh!GedbokAANb|B?}vhNl6H5N)?Us4pD$)skLh>XTH#a#Z5YUyNX$ zm2aIn<-Nb-YSqjQPU?E0G6}D^2EDu_(8Hbp;V2qtr7TQR$fr{LtL4%yF)>3n)-WX@ ze%Po+EHwz8qzVf`8@|A)6W@a6TF?39sSo+nxpTo{HD$A*9iFr zOwFwooBh6xXn56f)+in>(A~|L0BM1CFsGjLWq`x4dIg7Fhtyol)$1aGsRm+>@-99r zjm?3f0KPLBr7)+QD{O1gQIUc)d_=Ems`jxP;B47?2riZy2u04OH9CW<>qS84-8jd8 zz-zPoF+e1lr!3gWm{nMo02bOKqtfvzHm#mbKC_S)>1^N&LnnF_!=%MN+vwY*-!^Nt=nf<3f z#ms%b0eT$@o6mU(VBhyfFMnz?`vwT)qfZ(~RyA)!C7@h^1{*oz1^|lfJ;RR<{8Ui% zfTa5tI5;QN<_|Z5If5#Av;6%k_5p1Wy?s>L{jOD^poOmb&|m$aUW)K&NbE&-M~C!J z^%yYW*YXTne-Y_XWyCdbD=Et;)gwIcK`IohNICUj*(RgjiIa#cZPoV#QFW7~jYIK;aLWRCV+ryOxXI`5 z44>Q(;mu}ZkV*v0DyU{hA^@Z+x};$(d_HuH=FC<9xzWmg)u9m393dW+_$BrZM(8c6 zrWVR)(HKVo#FI#S5aOZDV3;F~udSMvAvcAPU%9bi{c z>SA8^nI>({?%C}3pRP}+lYqoyWY48a=`^Q*R&>uGu?NI;{c~w;yt2s63$jfc2lX62 zhfF-niog8)j@$gVPk(XswxV42q;lNMC02T=F5Bl zCA#+vyB^?E4Qoxza;r5){EAxpwcd~BkFT_)JKVVwv^k{PK;wAA@b%~pqIZKB!f?$D zUFmAhX`sc)Sr2}G>x zLJ7bVNhzy9f|~}w$r5ef)SX#y2yBDAv$Joc2cxBkYtT0L&!7_SWY-wr%)0(%*kXL+ zqbuu=pqO4`QlA8z1G_IR82d~^{pauFSz~ck`h1}|WqOOuVr&6L3xaJPa_)_X&yD?`(+MyQm6E*l6_*BeE1n-qS> zPjjv7Vu?wic@U<1X5%zMsnnhENOtQSy8Er4NAT` zia+HIzIebxP6G;Vt261=nC0pe&WthNl7!zi79C4%#KR^TG8)1G_7J_-YGq|56K!z< z4vBB=fqCS$RXNCO;K8V$>qdj=tEoQc4G)Q5K`pNk-{us>uTg@pjLQ-~m=9ux{7gz6`h%K5f=(QxKRk?0w#4W z4?*rEI4WFL4IPTxPYXW{Cmo2(qeDvfsWXM3rmw_P+=hLX zw)4j##<#yt2;&Qe9*y^V@JMc{u`c;W6(FX+fAO0BY{MlhiA`5xdA@dGp0L;j>^oYc zO@T!;m*VEMyV}5z)@Nica)=wYHT{{cmSmYnYYwuQJ&T1f^qlyaHiH%!pJ6Q9cCpC&dj9aCr;GhR9Ryz&xeStHI`zrsNU%|rl90c7b3;&6tbgPjV%tQT;X6jHCP zU6TrIYY=xbOy1s>3=Y-+ymv$1Oo&Yu;q~a0p}R9eO$;W8QP-MeZk{>yS)M-t%YoUpL(4RyWiWZrG{e_E&QCTOz_UN8iyw5Qs` z9BI3(sBJJ1KBL{t0pw_ep}`90F)zSDa-zW!Ydzn)mZhmEm6<+LnacY%H5XY0?r!4f zm%-IXh@O^eK8k&KBJl>sd7Kw_i8qDvN@QU}+D<;{t_eK`>vM_zxVVEJ@Ms~n>(tG- zjiemz+wOn{!pdJ$Gqx&p6C%htWJ$WWhv3^&$iC(g3xeBdwQ6ud>{a!Rp~zqONE~al z7mwigruS}rqMksNe*IFE0mm9K;9-G&Mzz|f)kfKgR%xGKxcMTFhCxAN0;kp73u9!O z_Cq>BIrrbg7#`VLLR{}8iP{8+%N<|62jwEGWDm+$=RWVx3mDd!OZf5VVO^rkDbss8?|(}p2U!WYo24<< z`Til%f2;Kw@X=`1A$0U1M!V! z$mfvjJMu};*tsuVN2gRKgCv=~n&QVX+n}rO z4zORJYS}uuHuvKz^C%Sqh#urD5MSu*)f0(N7d8DQlCh4{@3{4Mtjr$mJ2mlC^n8hmZX)3JTBx%O?ptv+YnFqk(YgfzpSn-I&cM zu!PUAdo5PcGrwQzz-mi~=OGGj;&Igqcn1{=6XhrtS;TM&QVvWn7C-C6?lktHJw~MG z2nb#sKYrXt(E8eDx9I;&-yC_xjzoYvq0i~!38lZ4=%<}x7l(2vbFq?Uyp~e{yqcl?aL|v!6>Dx@wl|PL0WXqN&_Ni`tV+lo;}-ia z-Y);WpfAPsOdq*UtCDRvC0V*M-jUzkkWx&|;k92l(m0`+W&*=O1r0hXdIl~^aFcck zo6P3at1OVHIB^1gr12M2kaih@5bG(D{uZ$rx>jDrKhe}%| zAbF(!k@yDsdDucdBH!lRLcAcEk1M`#!7f4ncsOt9>h+1&kNoWyTreD%D`ZQZ>%;>p zAwX)ez6k9ZsFpxZ=mhoBxifSxaJg|EWycu#L)hjp1Mbd(?z}qj@Z3ywj=9s3Jxtfj z9pow5ZrvZpK6Wz(D&%5aeB#Hb$qYX^i*9v&);?Oc(YtE0(F=swkeM5EHL}0{!l?Vx zSu)Q)P^1}AB_GNBVoxJQdL0m+C=tu#MIS(t#* zo2!$ZPlmS-2wS>_lWz(i-U;_l5mdG5)&skmuN_8|nY?>rF3~NGlJAoXY=51}R_)+! z_U4GvshgTef%qq5m{_%?J{m^5>B3N`>U6iR(tR97Vx+j>uxV0^Ez`msT-oi6rB>L3 z4~_~nD6WrvMG!y6ne=oz`eScu2iao#M^@^10vMAkxw>WDed4 zC;M0^`xojT)%;>b@{i6zZ@QP#<@F>b!v0c$pM(USPlgM)Z4O~bpcfB`rK(v#jk=*k zvp27SM3!Kewwq$H;4fz3g2oObHcPU8j1RioNn05$!+nQC!! z`}zl5slB#j!Cj<9!GN~&r|GEV#!i-~dk2x^AIHa^dR}po2xxP9iu-EpoDy1r1hL&x z^3MeSt8ZqHsCb0O$0&$3e)v28aWZ{e3?j~9VuZvE>`U*cbk#EWA}o)0Kb#idkNU=B z+VC>y8fX#O4Eu~gGQz=Zd`Ohtpo)fngnz#WS);9g5`R%w$hFyDr~7G3%B-L5qSls* zK<0K=asEAWv*N6gywKmq^3*xJYgFaS18DE+-Pl=x2OkVSr$Z(3yb-lwGpnN+ZxJdK zkcd4sa#ZpvxBsep_Av2?eUVCyKSnE2+s+2B*RTiQ2%MUEAJ zNP&n?_T1Egi=C2f&SBDKPLA37ty_~lOZB%TVNusZAO{^69h`$wz*V)3souq3?ml@F~PFU~_ON^}juLDTt{)1ri9B~1|{=fy0N`@pq z5E#qoKuc_J;bNXZ5qz)qjq9ho^a^WxK^oPHoiCz5s+!;%T-G_~z0HXo*}f5%i*x69 z=6AvzO^n85_qFz`d@F+wjPGzknL|`!e`Z|}4q&DFzA^u2HWqvOXA`K8dB3l$q>aY# z`mbvC@Q?O)3M;OaY`KVHOa#_rpl6E15ri-O@{9CVR$x+$9Gf8HgDPRO zl(>B;5yn6wA_vaz>Z?Up^$ zzaK&EO<)hk)Nm{mXP2C+H~(xb=u2fZzLR}ba_Z4NzJ-79$U{*4FYfzj;(PPV4PxuU9%W-nX9WnbT2}Jfmp|iKe_j$axYA(M=eZt#%g(W|MgzL%|D$=32 zlcf(-xqGKHd3H7V>cw4wYrySje3GacwyN-Z@v|T_V>tV-$Q2*Sxo8)pKaEqP)9t${ ztADM9=-8^*0h!gzy!ZVgFx*@m`8vCMUo+%1#>QQ5Hn`cP zyxVU=VlCC^TL`w~A7D%!j(oCI)?<&!nE8;NhlKP;3}%K?t&0H%6g9Tk7yc8{=*QK< zOCGp?6JcvL%do8J4bkkD#<*H}5C+k&t&Q2p``-}zc2%jk{0pibiQnAK%ND^8?8u8} ziet;DZD02Tq3n&CgjP>*T9zRD3YJnzX4)Htu)`qy!Jx-o$R!d08_xpLv7~Q>5!a@n|f*g76#WDxv zZTsf@za%7ES1|6$!7=XX>MFYZYx!*iyV&4mbMt#xqz>@cwZqIW963us**pAdWkLYJ z#q1R_yh#i#Jrq8V&oP;4g$vQ;bSSxfcC1g-BYTb-fv+7F*R^4BP>u(-CuoIDTfgZ4kSA(i;nxB8+<l9)&)0;NFIR5Cs}Lpb9oZvQjB*)Y#x;MWI<$lWNfUeSY5UgG_$GM2mQ;uNvM z&9qR<4^>Vv7edEt4LFN>#>;a860tmWrTZsEF zC8X!Ag^u%i#9J+tKB8RWmq^w8{v(L2WTJeg5#~PBc0dDM*8Pe}>igE#+JM2t^HTl7 zjguc4lM5Gqors3~K%nJCUY00n=WDHgS6e-hP5eBWPQ9Nhys)5~oh%JfG~1 zsxAIOy|R%A?Q$Vv{Qbt{1mOr~Q1_oyMo!>*Drs}4uGcaJNhMixr=L;xoGh&wy)u{& zn~}TavA+Ge&0~qH8MuGR#Vp!_Vn!qf!ElK3b-DJ-+Ifat#I0PLnm}OC2+p`&5pwEt z8S+qzw_yI1J#=@lj$VDK&#C#geq8ukO|QbBkfpo?Q!@>!bV6B!^@)v~{M}plu9KdO z-zxPfzU04k1~d?KzyAtz*R%mf460N!H_f!Q2L#+^r6omIpmXQH)$>x?!c(wG%#i=S9Zo7RFe6u+B?qHI7F*V*u|K{pV|Ej7zfk;wqc~%oJ;LlRplOL#0LZJ3s z4*NO7zhq0GV;wM0Fe9Z(oUL3FM#+W6p<8{Bb@OFA=V^=EbudBbEJ+cezdYA#7j|w< zhT^H}+rowSRWdA5JF0hxWu`DPzkf5%ZL}1(A)pV)|5g(f3RRW?=gj8Tt!tB=)Wcap zg;m}riw!?^O^rd=!nV-alMvNfATE(Q;cN~R80In1?Rc$|ciSERTKs4SIhnJHE#@M< zG?r3}&Z7pI2&6p^C8nYo;m6)Y!X*n{&J``~F46!{xG%JuKt04H3X4!EBd*j2@^CbQ zqtU_nV?wWfMH?2ZhcW+6w1Ag9w#^8Zy@+v}?!vB)z|fv7MZz;7_cQ0)JdV-RErC;6mtjt0n}*W%rIK=ZkDig@t)O4BOJ%Uk4{2 z^?)>jCQSIlsy(B#z?s1b2)_w>8JVeVhphGWuQ@2=E~bFwpKn1*pJrXih(?9SN$%j= z9}To~`UsiHKjV!2Y@p^@Hrhg9K;vIcgiSvuc77O8z@z?F5oPFj;m9BL=0E4l_1pO# zOC~K@L4ZnHk!{J7+`1U4?>9>TC@-aYouhf;0lvzWfU1jo*erhRy$fVN=F*9_7rpy( zS%QFR6JK%LGDcaT(7Y@$1~E%O3lKQGrbS_bDZ1~!0&0*6q*YXiz~ONO;=35aK@pw{ z!gf7}27{o~g50|WP)znl)%S}=Ksnp9_#MuCE0EO*1dL+i5h1K2xaGwsp_`yOy#YDw zgDo$VbIy@s|9U6Y8q$7ua`HnalBI#F))P88`QbW77$%5D?f9S55>l`b417gg-n1~7 z2FIK6FmZC@cW^!4Ec2qgXmG^Byf-0>PvT+x2H-Rhqh5G!9DRy53YF8ktzxL`97su!UBFYbaW>DBtZz&M+MWZKv z8$id&s%`fBMLcX$;HS|~&;Y}YQhNcC={v%RpI2xAqe=bL?p?6=fi~naexA@p<8@2f zhfG_JYPQ7-u;!hV*!5N{&=(5aQP_cXUKSmyCW-VjB01jE4<-nHz+b_}=^RCC;K;uYUm7+}sCETI?n?73X5_6tYva|n$%=`9 zl=vUIxJ^Q9%~nMp^^HPWY?9U@S7T{RoK55KqQ31ZYayi`U zx908;7e3G3H$I0-XM&E1ABVEyP@U})ev6$cal23=Vo3gpVtJn)^J~apg9{MS6n!=7 zbP=*Cx3<>5W{X#g`j#P~m8y3m+T(Je+zE@ln=vgMI#n_)Ut&#-VT!(u6ky1Uy?qbN z6=`;$yz)ayAnSBeuR1%&p{2VX*1|=o1;G;YaXaSJcZ6Ys7xsB`j6#4hY!8$9>WCrO z(Dqz+dRvc;@T>I1Hh+^9Pb{Ow4cr?1edt^2FTX@u0}^XyW~dLFdPfO{x>$E?@ud@k zh$}~eKJdcaw0+euMRBi*I$_=wZlw!kj|%}unIn=ErM(Xjfp7lp^9E_*+p}dfzmcpC zzjUT9zprBR=8@QY_vWVFx`i~Pm7-mbIc5~!pu!B!pWk(-JTk}micw%Mps~CGS5^30 zA_dw>=ei_+H6a)q6=~`dbe(ixstd%~LwI3n(43Jy03~zBUQUGNHLO2`pc?IjtJ;`k z$R##60%$e@`?>#PwZQ*xbA@$i)@&4sAz&Ha$iCGO{!wr(=X45)3 z>LDF?!G6SKRt()nken*|GCW!I1*`5psmO(B0eFR{iyVWv$w`ObSsSnAa)VpnV=$i)6XJkcMOyMp1FUI;& z|LA_0H*vrAE1?|sS|vup?RqEC?e%<%o9)DIY$zSyb2|8#`hk9+5t)PyFD&$Zc>{u@ zGdB@lR;t6G+q)A`{Dm=>`3QONTcrMCdWDfLpTNk=$fHHN#>Q8+#*}7(s`AGE$W@ik zy>k!2vOa?=5?UxsLW!T!YC9U`Wjqu#O(W#)+;#uK9Au6q-#f(SduoFj=M=nQ9nekL zH-D*AM8l+06=CdX2b3C$Mu63I@pqij;6N?S2k0oG&BVD^!ok{iOzz6UfqX+z9mDx} zW#{QkiXGpENlKB|>k+9eOblX^sOXa)TV3e2 zTk3#Vy$RCB*D3hx!R$VMus&wG{t;a|34 zSwvm_D3}@S9&ux{I(mFdx(*UB2n=z$x0pDfop^`ffJEFbFZ#a8Iwi5|y7mMu45_`^ zriSsE>?r@?wAwiaqjlCD8M3l&51Wcs>f=4xRVJSZP+Ks02t5x5utY2Kv}BOvjStw}q{A*|9a>S!mU8ic63^`y#Q&LP9C&`~^cosgEsv11HhsVv(r9Oir^GY*nvDZh9P$)}^yI^1dq!4@y z^i*Yh)E_QzrHO_>rr|-wS0wvNnEDNUdi84ob4e2+_r2gQP@UDzS15wIfoY?4!Z>1^ zem`Eu+mb1fY_}iX-Y^jeQm~@C5Cz)BdVtG+gJ}jVPb&-K6kXA2YnI!;??E3N>0Id| ztC%;!i;N0oJ5b-w(2d9712FBgGVx1gF_f&?8yJ>0!m+1%lYRi)ut2rigWVDj3iEtJ z=W*Tb5WVu1Qv4OUPVQ3aIt!P5icyBB!Qwnnmm56xTy1mp{I^Ccp}u8JKDwu^>>>{k zoXa}%LP^6NXk`u`TsewPWt%t@TTev8JtGl6mP#VF`fr0hD7h=bfOl9Z@G~c?besGqY0t3_ztxBj@3&3b|*QV4!sBqC+RdnR3Y_5c%i%Wvk zqK@@3nM2U4``_cox)rj%;&ucVFP8yL>!6jn9vo`57`EO}^jELjxd+{^Bu5#-_Q$k~R-P2uc%Nh2N@Erh20VM}rW;oM z2M|}dSIGEPTy`q1z6~Vxryf1P_wC!oIzGn4JM?^YH=^ibq60=b1)+s$k^O69M=jXg}8y&rQ+ai%+ z=7fYD66G+wH=Tb{CG&UGy+1`Q&9u2HqYR=>OXD-7BvPSXPCc{ndV-SM!W~r;c_B@# ztiT`!ILWcd9S}5zQhvqsJ?j34dZ&|4*S~2Hb+j!Ow7XKAHlGL#yM*<%dvHL3QRJUc zI?Xp@OHFB>g?yOR%NZ3<5^pQ>kLsSiYX)tZW$nFU3Xm1?I6Fah-t;1#q^to-q>fYL zW2>zTK6J7=#4WL=A-vymnP z6*E7s=1Y?HJ;?2KrCGJObEAeEc{!2T^+H#L7I5bO3A7<2M{RWi0kPD_VxC!4a@wkE z0G(`Sm@DKo!o49xKk&uJHyz=5$Im98qURkT9Z9ZuN>0JAW0qUH+rGtOM2S3d>*}uJ z@Py#b%PtD)XsO@NI+d$jlTsB0W#^=x96gsjT`}9 z@2#<)bb|7#mWFOwh>Alq4?@>|PNlofA5H-OIFdP)g_L!6do^_{Lkw3M`JDr~5Pa`| zbEa;?R3x+MjZh8ST)@dGQYdY-z#I<(Z$3o$s5w`^GOj*|2hFxu0nP>S7Xlwo-D-;x zI4s)%mGpnlKG}t`xMK!2_;00O{brb4xkN+ya`OH7jtz{;I8IxWkCf`SUMZe+!XTUi zo6B>rKdD1c$G78Jn5!EUk=`TVD-s0#el8hp3u9EOkTwUY z2>~q7UUt4Zg;SzIWt!)iB^6yDz(mk}g;)xfFMAm7f*(})mn2=AkHn^c0(-&72xzc5 z8by9ZCm@scOYZ=FhnRbo;n|u}le8i3R2`suSDzAFpoQU>11pFPd0fz{J<}JwYl8g@EQaAAw8{km=++pNCIoV?jQAYkvWyFcr)&8WVMKxfNQYU8Z z1n}4Gf8PPFsst`AC|a~Y5$x>PX7=lGZ`*5O7Cu^g@>vSPE&YjcONR1ynCe{TYGVPr zD_jd90fBlZzU&FN@#{$leu~T+tp2OMmHKdxsFM_uP|E>+<&-<{w{KbDk{^ z>ATicj=4Az*8Sa>>-wLJ-q=I*`|Nh+um{R1r zTPYt0?_J40m>O{9A}V~(M-H0>p3EkF;gnwwj$vPJ(&3KFZ~S;8ES8$CvgFxzmFAhm zM2@~v>d7#Y98D51K+gLiu?0WsljSKQg7L6*7_1Vpz}M&|FAwv3YA*KfGWXZoLoD*d zFLYA>*;uMeUE9omeujzWoTB~OH5}R@bC?n^*=U*IHW8m}UOA(LF~tOuO}*G#;GJ@Y3D%Z^dsi8>R}Pc*L9(xOSif=`~Yk6~r3S+h)f`Wu^Mi z+9{r=k|bQu`+kYv-B=OQ1+luB`bW9;{g6PR`mg;1qa=3_;%TZ!9xKdFX9?wbqzZjc zdwt3ydb7JNaa&gWg6WHcs4R!@Qeix3T_l<=sdJL&SncXy81%p2u@~v zb-rM)6~?HtLzFHhbCK{k&f&Sw0?a8vF%fj3X-k95D>T2=*N|f(=dnd{M%iDtvL7j* zUn2}JQwf~?LY`CKiT4T;C%b9J=6hDX%X*gI%G&dem5-S1BviKo6|5!5FUvZ31O~!b zSopM$c1-PUxrk00SUErkl=Vwpgr;6of-bysLx3W^byvh#AjlV`RZbVR{CVptXOZ<~ z%lbjU^my$8p)0anQs6FRtX};Dli9PFMylWAfmyadcfre!jTWZen#Kh*wokW$XWwmR z>C&78R!yA(z7ui#e0^UUVcHVoeXH$Hsq)_o-e^># z>u<cKmRlM{|GM0SRmotN3U;-+sHDsG*PoJQ~io?N~>f=e$WY)yDJkaM&Ka z@&^Jk?jV!x#z~t*A?qh8LEn3#zM3@%XMVKg~T$^~wvh`^rW!oYrKZE6`Zoaqm90 z|LE%<(spHxbK3hbY4Kz#gUBPNP$S{6Z(PhM zN&n61i2$p9rY+d8D6eezxM%cFFL1?5M(7VcHAs+L^lw`HxHL=q+#l37Efba>!%q93 z@Ns?BWd6G4DA?h>G)~rSeNRi2g*v^ST>KwF?Ce9NKF7rw1FT zex$zQpC&ORyzSbJ(7V=VE(~1g{vx2szRg|<7I5oIfTpD0_K&rxed~#P)iu*@Gl$V< zW95<#qlCdB=XcgsO5QY`5)wl5FV51X)S!0JOJ_%3rtGlFfth$LU zG8W^VtDg=)Av%zzZhqlfq;Jh^i-i=Y5z;FeoZj&uH_Y7jMUZ0dt0XBsindRR%Ub^3 z&ORPQkE8t1xS!2iV>AP^&U{U{{woeL`Y1;R3!h1EwYt-2+s`Jj{0wseQ(r?zB z@aaL!%PHe=mWcVZbaB<_A5V?WG|vz`ga-J^6RI0nkfvF3z=yiZks81A4WjpS?&bg#}v0;!}j>lAd- z(ns*ZEREOH=Y@8IWt>abdmcGZl=Jbo=eqfNvb8tP#zC(wBX|i<#}_v5S^*t87Pk_| z<|S7O4aU7iDpR&kQwf?C;& za_^e-%yOiV1fBtCEfP~3Tx5=QalxUPnUX6sg$#@WhehafyUq~v3XewZXwbNMZZV8f zy>+%Rgh`w+GY6%xyY7p1wck6qT##Ug1pT$);Wd1 zNplmkHC^7BRS8u(*E>9J((1R6QR%mZv${W_9Nsr$$zYaS03ajt0ug zrw4cv^hEnb>U|H-mJ$ONBfau;0QI4SV`;U`dtOP|cR>Od(Umcj+NiRv+!KZ97XA0g z6{SBHEBj)f-zkC|XzGif$B##xXp_EMMJ?}6OAO92B^a^~#@T~{_wgaG6lsYaPlQDE zS6_sCsA@1kbuZ}RV$H;()tE0Dc+n-|F#C!iY5$G8Q_>NwRJ#S^ zvD%9#{)u8+2$j^Hal4qH`i^`SjFaQnh0v&f&Sp5A=xQ&>U9)?~AEG;}gPCg_a#8JR zFxHv10$9r$!VuwRm?Qn_JO>3G$8=wlBUpL@i$+(fGpFqLup5c~K;Ft>ytua2Xy5V- z{+dmz7-8mDRmc@#uE$e$TbIyBofX#0Bunqgg=i!NEH?Mkk$)>zua4o-p*Pg{{OC}z zzP|fAPv&YXABQpM^=I-1bA8UZ8BbJ3H?F@m&ZN*W4hA|(4r%+MBhQF22ei?iD>9=O zY_^Rl&as7gK9_i&S|YYupYd!W?a7Z8R(d57cE6evSYM7j2x+Oz(ime#w)cVO#)x$A zx7(sUM=oZTJdafqC%^WtQHt1?mm>ZD{%5b1yc=GOr|owWez(6+lKGfaS>{MSCyeV> z#vL^?aK)i69iRl0I(L2a7lQwkL+? z$t{SBM1$v~-vR^#nHe^_m{4~AV3l8nXiK-;HY*|+awc(*l757h2r;uP>*K!a>u3xa zysTJa9}gU{Bul?7%F2G1{bA36dx1^G_EQo6681wEeeSFL@D|!QnFS|J8wmhpP#`}K z_wo`&hkVL$i2Cu)aC@%p^};5`vC}il4=`!(W*nK?-S?GQ_uXEeL;ZsbagiCOXp))p z%~qpvcYh%&-@lEJYmY1Ykyt&miXFmB&pAiq;_%i>hFgV|QkAV)%qSFBMu~lWXL`T~ zCNP<~5#KfPJ5ML^wxm;Y9(R+7;a`8STY8#y`(;i0(#A6%<3a>{9<@dtoL3c>EC$)bS9PfX^dxn5pTcqUCiA2dG*StO#6tM7Mg-O|dfBBaG1+czMiwXUG2;bXdS zhtLd$q(WJyCN593T`?Wj%pbgn!$?!bbLUP}x%sp&u@_uimg37Tyv|eRMB9D@0NZ23 zAPntS(JA2Z`ozuAszU}7rDK!1$e5c2P2QPe^d#uKy)|0(wlw`!l<7EAt1&KSu)5qr z@?f(cEE}b_=9z=M;zY;J>V~A0f*4)LB~LQ*dAzu0c3`vV4h8Dz8AG#40VRBc9H(Ug zmq*9>IrP%)d2GA!mlt|8W6R4cgBKUBSSGX&qgPbcw_wl$r>7PlO+C~3 zaNfbVV9%JccU5yj@Q0aXvw?D4cCQhm?U~A`-nU3ba9CH*Fw+)NA(^iBLuBF_D?Fs>(mcy5CB%CojvwAB@t!I18SxcV zQK=nQTyZ-u)ghsEV6@{eMZ&6_#yJv=YE|{J`m+=lVqlK_fqkg!mAVAuj-J)BpYLtQ z+QbB9QqUvq&MN)RCyqSLDXibSW`z6W5>qi7>Es%SUGMPX6xErJxBrC=(T{jBZOP%H zrORz3C@OUK!5B-#ld(-;K5Sq6$xS%?cx$oyuAgzilXAM;B{#?lZER&dEKh8Fe&)W> zD&i#llQs)+z9jq*km8urqSrgq%)}AQA<5A3IHqbn*C2_Bh=glZ>Ty^H;k4~&Bf+3G)*3KcDK_5+ zA=n!3qNT4_Ddw?~e#YPXnq7v|GbxZP4316W*X3w`AD#ZKDWxdX!)xU1SDB{d1pXOJ zjv~}6;?EOYdWOF`9T5Rr2% z`1R}GqO!gcK980Y_w$y_zbY{l8xEx@!66#@-deoyh0WWOGf7$^!7#rK`&DUAu@IyA z5$(CvsP-;#M)Pxr@I|J#xR4`u_7Dx~?mx^ax%#)F-ML9|e#{2qHc?2LQ}^Y@7fOgZwxy)ziw$mt1SlIub2H%ivj2OG%mwwMNxfe-_Lrd>! zgXtMb&M_+57zs9sG&B9?gd<;n^nd&={UDAY!!dZ}%aKq<&9L^HX43p!yn||BG`?1)h@B0a(q1!S${-semw=&y|1|5<7rFN8 z`N!0q)#*nJ_C4eCF+7=sJwW$S+Guj^_(RFs(DS1hGf%$3VP>bJJfey_T?C00nKY#Vfos z`>`Ol)4-Q2tBl^$DIAJ+f_@{FS$_v-GvoIGxP^ODA|fKk40cAQUTL0=)~;Dz+Vn!! zOwE&h?$$JVWkx46Xx&AhIh!x_bcH|*_q7b?<#I7PAk#pZ4OP{#*(pp(UiAHD~C zzZmd?EOk;q*z{Af@&X@R)?M#=hC0P6fsh!YSoW%AUb4QjI|c~;s39781+M;ZQNK}c zPiGtTQJ%xvzS<@^H*M;yQA9BWO@sQE@MYeacAjFR$YWKa@t@jC7^3bS*U7apM7#7a z2w98d`r7Eq242W36Euhd3@N2$28Cfxh@N{X(k8!hBy=r1SIwj6o@8;JXGq=V-L&{~ zE3-nWv^B*WH{zqMk!X%9>97G#%Eqbh`>#@2koy);0EjqeDAW{FF1kGD^^ zr2m+-0#=FAoyFE-#WGGhBewbi_H4zuSC)C$wBsp3Yupf!USgHdnkjCpUSt2COFHu* zDxuTLV71J_-DcO@_^Jakn)332;L)SW{jyV*;2Mr*wO8d}@C_$-{r`Yx!7Q1}&Cs{cI} z7TdnG`Wr!Gyj7)>Yw#SQNnvhzXY&k%9?axpVUH<^O=?H@19kihj7~vELA;cG{cQRV zdl*6W%|b$ZHad!9wT!b!SL0B}gG9TFPx;mGp(RYfTz;a>JL9IQp^Za#*soYgXcV*e zQ2jCsB&~~AE>XDu9vBD@FS5bi?e+w(!Ik3RSeHf`PK%YaAL9W)hCuyOr6%&gN9m^3 zEc*|Gl&0Hsbqe&SLtKhaT4H_q=ja37DSCTZvEzjkW5*5XH@@lB;I_)$DRm3({I)+N$fcPyZ5V3AJtkc` zvh*Ro&b9MHK;0TUY}mm!4t-zg)LT8yEEG~hNPV;D!SYhqSif;NfZdcdg{T;9es|AQ z`w#WU7B3h^krL+$Z}oS9qOEW!=U2`HPD5j_pHdm5w3zpQl-7zhKO66-JN!Ewto{Z2-)OJ}<+V zY1%<@{*s;$696;Qf+FW_bh%}DBz9Whuv(5rLE%N}unYT+N4cMS$D4N*{9q^wbrY95 zlwYY5<2&}&JlgW-_vp#cxLQvOku}-RMM?GjL~VcHpf#x4*kwFRh<4@RgJ|&F#x2`n z*^<%u$eWRR-tpX@a~6py^*<&Z$;T|jAyaARwyY6}!GAVsQ&}~Ke$h5Fw*8yCqq8M0 z3q{6T(?shoEZDF>$RS*MQcOs?lWBEdT5M*ko_{(Q26$e0%L@6}c?wv5kq0Ym54tY$ z^f6Yfd?6IWSySp4I1|F@AxqkcI#{OCL8f&aqjJ+TNR+3S2-$g?$Oq6moA!?fAMJvEbpL!M?nD7Ol(N6 zef}KADZp%bifO|`HLxFaOt?0*@Fczq2JAd#vrH&F3Fk=*2_g!#J==KmH71?O(iW%Z zEHe7S2Rp{gBMa3UPygB%Ih+tVej;coh4y~)Obp%^&23#1 zEAKTZ;ix+9+*n-#N=)Ybs?SwfMjATg>B)S)W*etVhhT8qhRM|B_2k)|c()K~NyH7s z34gmQQP*N$%((18NOOUSYz+w|=^-KhZ}6RW@mDuT@W^FuD}%pM@eChfahe|ku-Hb;>v zg+OHy*&|$V156ftAo8`Bhn!0=An0(pPHF;+BtwTfPGP=ic8n8R)?j=hM=lS7NyG_z z1+F_POC21#SVvp;*!RB;0`Rnwf6g6Ut<4geA0QvGxHQ~UGkny*?iTN)Bw{X~!kR&qz#MYrmoHhAk>Qb|Nzllx*LdjKd4~ z!00g6@6x|AAq+<_WXqW946%wCCW01v?&O?4#iw4``7~HJL9u5Eo#U9*=SX6e<@kfl zG3P#xh4y9kB!GisbvZpxTVBRt=~i5Ixzp+&7>%RyDe0sE;eL<{LDyQV^7P3$zwpLKpir6HYEE7f_{#HowP9TZgCCS&d+QeslW)C8 zLZ-EpG>#jkH!R6=c!KjVyxWtq9{Ixwg}H7glEDDIMun0#Nk#1Mf{GTF)^PWH<+nN3C4cvB|54 zggqnL4~egUETKv!EcB50g+##!@;g*VP zh}h`HbKOZ~&R=2E(|Da21T-lf)2xK=ePlZO(fjdRR73VV%s^!nW74bUf+a*Ig8yHe z6Suk92Uc%4=eV!GY<)V({G0yEILV=KE{{PZG>?^Jc?Ts|0sbNp5}SXu^%S+dR25n6 zBUtG(s5?6sjq5@DD(b$VVQ~Ti!6-BDRH_PYqH5XC}Z0qdRx_g@ISQD zE&d?FxyIu@+&9kkRn(S>R%zw|xjqvU@D7lO*_Wvr3I9%i3fRvz%C*PQ{P24|e8~0g z!P@&jL4V-F_LeZY2gfEvku6rK>nvLF2Fzsz5F4xTcOnbpFRiq3 zj6lcehw_-cg z@vB(e=IWumxP|Is>Fv$#fYMQ*7|Fbw1v4Hxz4|3ZOjdTHcZNWGk;R*{-;wk3>%}Dk z5h3YU@0_y> zgOnYHgI!}x7%>^$QlBphEsS4uF@|2vS5D6o`05B5ec%|!sP}i5*`y52WXFuQI=#wE z9vC-qLF2G2;R~Lj)4_l_NVHF%`yJ~Sf*#xfFB!_Q0VAi%&z}qT1@g8~E1Ou4381^{aaJoQ5*vQ?1Z>o5;L zqZ5y=Z=U5Fx>jG5p4qU3jC*Nf`#CkIXC_v#e7u6c>C;cUFt(fvLp%!GF814^ZTJ8R zbtN#|yq|nz;RfU)svJdAUkf-^^5bQVuD0S_e2%#Ew(<@NVSMC&3Nq>@hkGben!wJ> zS?8s+#j*`Wz67KxvFBcZbuiqE0zgGW+>|@npm%wQmDph5Jrz>dIrjH=C;I|5ZTAa2tuwyavY17NH=~!C#--l79)x2k{ zB|2dG3cjJ_BjDOe_E@4=-O(qK$B3ag;-JS5>evTQkn%|ES?$<`XTVA?vGe)ZRHQdO z*heR8^z7J9>4}pkc6rTw?KSuxOBA;)zCo4m!$PI{ykj^d*gNE;scC*=JXuUA;P=$tWoPkX$GHh>p~qOnip=F9%7TvMP{C<@#C|2Isf$luK$?-f(f}DwA5!KAx1hNY#d!=hR~9W+S-R0a$@i{p`LTa)7mwzs-(Bc8pVb6cl`01oarr4if)v z;m|O;@H@ZRc%!%5buPRj-&YIgQlFi;lMP_=TU*z;S=JC-mAof$RKIa$nm4_s9}e8j zJ4T9hEmhBW_yrPy-hgCFY7~;=l!#fVkeY*=&GBb8VZ4ibz4CaXy%(wgBlDa+I+4*t4@Kd znkg=Uk}H1hw|{j2DbIo@X(au!Ajk8WIX%G2`q_L6%D&avdjy&QyaJoglBN&AFbByY zqZ?@42iz#2$u|9-pnI*|-&%Orbld?LbV=gxt=jl8OORO;XS(lys*?@pigp?cne{u@ z!6XUnk<%e0TWKegnU9iaRE(CgtcJ{mzHWh&TM>6Yu z6P@r)r#=tt4qW~F$Ve12zsNa=eYK0d2vG-L6O;+b4`&WG~U6K=noH>klA*yg?{4;z%s)4vYgEWQP6FOHb){`-%QUaUH-8 zV*-a^LPOysuj|S(^?J} zNNA50Uff;O*iA+mKPf$Dvfay;sV*k~Ci1Js!;Onz6D{pb!9p1VB5i!V~7lqhOn zs0=FPB?0Zu{n4!^=8hK!9)S+NaDY~&JfRqls2;J($I2!8Sk#Wl@_PntPMB844l>H6 zW+ldC(KWpD)L?jzG@#j9)Msj&8;ZIlxoo%DrivK74C=!|jLIm|*7|9+QuV-d-ym7| z6~nxlj1kMM9I8tAb9^vm^bb@i24cR4Bj4}mJhfHOt`4eNg~)IG1v zlwa!lBt(~#UtLiTT}!XJnSXVl^uC8M5Mfo_oP^1oN?c4 za|EQ_c;3=(aXL_5k>x6l)W^#cAk-npcet*=P4V)hH0+`(X7;V;3Qm2w>W%bF0(KWg zaJOt*wzUxegRPndJoN){t`U#8T|Hp@+4Ui$UjKq#GIrN3Q^QjWPfQ@4nyl1M8$zr! zm9G0P-AHQ=7R2W0UL{?7%_FhpvE{6{0f2B$K?3XFPLo7fp6iJc+IYN`z5Sbb$1>+@ zmXqHLU$y~2E~;%1R-9g`$~I`XaAa)u5GI%!{dmCR0uHFj$vK<^!{Y`4y8@^7I_cpQ z-Yp}!PvY~5_Q23Qj%EckimPXgR`~W`z4tH%ThnPEu>GH1;^Mt>j&#bK0mRmXuR}6w z)o%SVp5w~h<<@`ub9oJyC`nQb_mDDFhDGeCTcG=;LqB6OzedB58dO*WM?zbSz#ydN zC+27CoUA1eGGD%8m?tA~s%!b&=zz_6G15+PB0IzaVc7oAw<#$c+st8U^|rz$tcL0H zKUD*fT*WIe-JV8R;XiJQ=gR z#G?tdRZvP6PfvEn14?46j408 z$@*;(P*?3gEbk^fj?+7S3HydC1^J;|W;W7f+Vkmb64$j%7BAxdC59JyOjNQI_h0Cc z*zkB>W;b__Z+ByY4%-7d=K$n*&}GBE)L-UxG>Xy@VjoOBW_ZishW%v9o5;+*=f_QM zgmlPC&968Iws7#f%fdXOyRqjG_#Gj9 zPJ>|CudIW~q5II=DjQ( zl9fx{%T%-6{KB-RX3@bym6qIRkT#|?H7kv-OatG6$Urc}8~~QlUIz$UVKh@r0g$ll zZ=RO8E~>h??5_+gmH;Cef$(Y~@(LHV-g%rO?XVCU^_k;Cq>nbwhgbOj1hjvpBqNKm z9?*(M*J{)aCx>_OTaKnO-z>fw?Us<|GR2YUwC7fTDbc#1*F_J9juLmK& zD#Zuzp3*+aSSGW21jbjO$U+1et~Z(3;~a|kLzcRG(rtJwOkdb#!P);m(a!(X_1$4j zU*G?+w$fG#ergpg0&M{)MTSsB2oPJV7!YVf1x#2L1lck|*uh$*3W6pGG6GtG7$Jle zAYo}$G>ou9m|^cg0$~P1_+FG@f6w!K|0D9~9cQ1{Irm;|-T$HwZ*dm{6L;)Sc=!kH zoh=7u7RnO1Yi>{t3=7+gg?|9^zv%Kn=cOE46ZD1A?WRKUSzokh(A=xRVK~U_E2&19 z=(~40f2O>bkI!0I(CZ6_Z0#M7H&8NC)S$-mBkBe*WPvzOdLV!Eb-33_eswgUd-*n5Z$L z7XT?{&u=F1$LE{gE@nOY7~caPCJxJNIhpU&4SJu9p6*oz{SW2E0H3~<6$`@e2K!jh zqzbWWxRCY_ki4t;QpnAuZzxfTaH$=d3om6oE4^^ru+fK9pA4T$EcxBH-c_s&zj;AZ z1*RB=S6w%;e!_A3do_{3j2$}9aM9%mKvV)}IEh*U%l% zx%Km&N0x^=7L2S@GJuLmX!f7Lk85pZMy;+omvUY~b(gcY}FV6uyos&Xz!z zTenMOx~CYI^T%+oO3{+`ys6?1!@-=gbb8MCnPt9azZ~Zyqt;E?me~Z|4AtqMTs@p5 zjQybL0CMj?iEZd_8m?v`2gN_0ko@aftXZ0+U&{*Ye6UAQy;jkFokPLFd6VzDl~Dh9 z&7S(4e)dw(FU%CJ&A80SBo~>Wt8?-Yet!Q=KheMai6^NUHV-kLHj9=`tQ3_lEvagn z7QWKDC>v)id?eLW+%O^?3G-NLo-H>v64f3ERXXAElioZ?3&|6Q2U_gAFSmMuq-E@~ zoN^>+MA#A)zxX4A+r0n~$aBVE{`T8P;J2!vo4o0SkO`u5_(g|Dbrz=JDvfkd&2zfP z*!Zm#{{$8PBBO}C{XS}k9U2niLj|FJYth9VN(;NC9uz2Ca zG8ZJLHm~kl8~myj5;)%G^gFrq{v-zGY4w{yWzsigu<7qPj=oN9;m9CKh1Wrtpr12n zBb)x^P1uB2{5WVHzkzuxIut<0w9(>TUcPgfX;p+dYYIt7qDi0Chgi6^3`sCU{$oe+ z{|#G{x?F+3R;dG_`XgHUW}l`zX}nmc!V&bwWsr0{tiPS-2j}$#cm(ZNc!72Twg5u4 zdAjNbzX`&t`?Sdp88Uqc4nSNb`Of0VvaE2hakoEw{}b<6O8v(U{VsEX7wh|02@l%P z9))fuCcQ4EQvG9~F;PR+BPDd{HM6}+(Wx{Kb2&&-+xi%ISqCyu*iZ=tj^QKXSJRzP za0!ZOpa*y)tl1uyKd@~vz@MrgT)GK(uTVZ5yQXsDOMQ#Yw)g0UUmVnZ>)PPL6 zE^v_F;wc><-~R`?JMV=Lj(vjsy!U|oJt&^7K#1Pg(ca#AX=**XV#5y}`%j=}ExKCu zCIJ-krJrsdS0G-Zfd`AuWYB`NK`t~KduK9*t8!>lcKpp^W%@uXwGm>>d|3YAya zcRJwE76D?{jH3?s-H$=R=#Y@F%<16lOU@r*YeQ5m2jKmUrZ-zORlqY@dw#?}^NIvK z*#4p?w+^AtZj@p8zXfMVMDnps8TVDXirie^C@aUin4?NxDF1bA&zGM*JSj7M#6arN zHTcBLj~?dNe~#W~`Sp;sjmIO6$6qn8XAxzH&3}Fl&%1B&r^g8D>u)qwezEYr`<1GV z+wp{r(b_jQV5-^>n343SbiRyfTi~FB+GHEcejqP-U{2N&h&E7J+3(+7CwN- z*_)^=-e-RTi6}&HUAg;Yb>yILIz%DdPgj1{qmj{jCGo8c74lZ;FxuLE`#Q7LhBIwt zN9`W=Ew&=2Ts?(1luc3kWH*)e@-N*xzaY%^SebrDTH}%kuNb{(%mHUAvC)os1 zHT%R%XM?Kb65k0d$c=39g*-i!C*u$q>b#PeDO$aVYoJ$wQhlziM(t|@vhnUa zh2Bo39>Lm$RTaS+(>=l}xp;C-fpUjRs4XrA6+<=z`!~G)!e2bvlTk`q8%)FZ-W!Z; zT<=opI?+c6*$~>=yAO;WpUPSmu)o+l@GBPrF`>9F(Ai&Tr%&0j(?x|~@=NWfkLG2q zD=87=P^MdqC;HlH*}N|hM_>0Jcpm>`zRemclS34b{oAT!wIQ;zzvRs+HIw~&IIc59 zIHI4hFvZaey~0gue_R>iN?X2ffl?KZcB&jqLv~1}TBJFhw6QLw@+L6ZW7pYVKq9Uq zRFSIBo1cx|9Zq(H^%?HPjSQ|^hvOsYXbH)3q_wzUp$;QYAJ2J7c6q<154f?95m}KC z>3dw$+=@b26|h7|oCJ!fS5kF}R9mYp^egV#iAd8eCJ~7xQd<8e8s!c0&B=mu-1 z-w+42T!qA%H;)67yK}{Bb`_DU*ZtEu^BJ!oI8t-R`L*e60MAEHdgC0)C@y!JdY_z+zR#zwex;SWX zv?t#vRP>ggoJjHGw3=q%S#odaiej4Ou??YUVRa*Q+Rj(L-LIC{KZ`-cy(D~=z2t_{ zhs-`iaDTZI-u<(SOvd!0_%hDPSNb! zDW|!sM951vGC90l1DPdGldi-S zC%&1YnbzG(Ng5Fv@Iqmp{~&mM z%U zi@=1$##=!iKHl{sTyq8#i8*~{-{6+kX?c~Pw?w?a(D=uyKr5Uv+;?T#&fdb&8b|Ts z1m8JXD&@Q=*AvF652r5osL-CG>!T|kDZ?sy)nR&l1W{G1dW`|l8v^->&5b#YgIIM& z4WN!)T{W=8M)@oT`?KdVp{w`jr?_}g8v9$xGGuW@Imh7T=zUhi)1)vjVh7DDYMl<# z`*fQ@29AiWA1xW1ywV`*U&8sog{5p`tAB6boFq}nN_J%5i8#OYVtry#*|8%Y4!Uuk zf;j}Y2K7UgoMKA#m3*|-{$W(v`V4E8KNL9|_X7huP9*j<)Au@e8qeI}X3$D{p$9tD z|D8hAPv08mmL5G-FnpE!)vcZojNmlRoyv5MQu>x5p`OK2sztmjq zpy!!48?7UR1w_DP* z@69JD$Hi$!cVW1KVr;lS&aytEn}j;d=TK{|?9F}i-nvC;FuK_qMrxVx0BZ|h-a`C( zi%5);K}i^^aJ<;@+4BcgM#;dIGmkh|>3MY|G|qI*o#!5iejGg6&aE}oKWY}>$o*>I z_5&RDR1IbdP)xh>q;E!V_vA<)TYgqq-m)=M_OGpg$L7y%NOd5uySZxYpBBRa3$s#H zAy4^SfHL7*>2 z_eL&}p#z^q_#V*IE7RnKw`8j7FYNf7mzPItX1DSo*&h-v^y?&#)GF&|U`KPcjv9mp z3>6lZ3+l4+FWtU{qx-8cUwW2BW{pf}mF5qSo_gWz9X#{%2~4d7j4BL2l8>yHSIX{N zZ0?+n30&r=qHLocTclAUeb3ePPqz!`sYXxGO$AR0g2%v3Dpy$&zUR5@&*iANyonc+ zU%$F{Qe(za(9QneJ&NI{?#o-xk=hyLS8gpZwKJq$U2EbfN>|uvXYY7_B)u4&-&+4l zBqpUbvF9eGhix6P9!W_iE%Y13Q|ECT7p=wLsbGIA7S*sRPOB3y5-K-Z4yjK#76%(C zY2{~E=dpC|j|kO+eN8AMe9dXXsx(;_a*MN)blWN`(R@=M+Er!P`87uGOz6MYzV6Wx zt|A2SY*_#|>&wb~A+o_~ zC!N-MJ&#JQz7DLlIvP3i^B>O1$2=Q(Lz%zk#nF_p2y1@C&`;$KjsI?`koX6!>@CsF zt<%k<&GbGQXV?6OpMg6PTwhunyOBd*4poydCX0rv9ALCK@O)q;o)y{SX}F_ib@rYP zn%NDia18?-5~^~=!NMUqb&)z!i8F$#Sy@e`vgeE*TWMXea_BYu$hp&J%2I4^5mgAB zm+OPb{W6NxIu#f#s^;ZWcY#Ay4z=M*?PJ;=+14eys@r#7$o)njeZSqhNzL zEy>0vhcS`3d8_eTQBn@~EE%Ll;?A;2CEm7SG0I9aABZ64vX+t3yT5 z(f#~awzj1>>t9Wp>5%BG9Lw?;jRidYib(tgtmIyAC;hL-R4DMIrp?O=7X-vi#lLzM zVe@A`F=n{8CEgVEZ}h1l1T z6+DHWqM3`?EEF!ijV^HtU&ko=Q6Od?g1qz{S(%{f9RVIYy@;1%mAR2B9Kj%Cv?G9o zAdt4r5>iQtJzgYCyJJ<`w!zhYTN$?%axIkQmSzUNC^X#&qa^ap>lWdfB6UCie>&>* zjViI8ez8V26blZcgFWIf*KHsfhpY4h?xy0MwJIdzH?mox(_q7__7RuZHZ9Sukz0=3 z!?&7%R9V9_IP@DAU++v>Vn4DqsbqXEML|BzfIn4aUz(jbP8_>NUYvU+1>1 zuo>9YR43pg(vPSJTZEIOe(X9B~+M+ zuPjANSnNnzNcy(bhTQ57!3^2r1b8wun&>?_5->hw3iEG!!TuKV(z_BGipEKo@E{p? zR%>K(oECaF_wePd`pzUqM=}mm!gC&Fja;{^liv=0Al0m^AZ2?0UG=ye2F_uZS{_xS zR?^V>XA?z_{ZBuN7DM{dmz)C%Sife{62tjD%vN zDxtsO1@mN7wDrZqO|Vkm@jtkd(ckI^3tx@3>PkuM9g?f9!1$paGQ&|Z+TL|D@JI*l z=ay|w@_+TXZ=1}4pdICjexq@LAI1&A6eW+`Vrx8C`<^!U{JOj;${lz&M13jyi{~l7 z_ot5JC{xj&y?k=4?7^$k_BGnu0o*nAPMslIt3ca$aRWrCX++meXoO6P;OtW0JBe#_( z=kNHRk~PvQcdn;WBChr~Vml50x{UC(n&KjDB~^B0Ab0n^$`ze4AgZRdluB_Ax3yJ6 zg;s=?p0#b4)|&2FybdgYGU>`c=#Q=iA5UhY@Unlqyk?D*;$;6uedeV7sVzG%bmQMQ z{ee!~G5}GqMsBBl&pq{n8Lx8E+k^z%DhE)cNxkYq13!~a1L>uHP%TLCg5Vh~^p8(L zJtr&w@aJ1#S@au&1^)GDj^*Tx59h?AB~@B3JB+v;R7STq?ld7A8C=PO&RLn&X&sv^ ziQh97Ba?%P48(QQKL$>tGD46BtrEe3>Bw6h_;-O-MvZq40nC0cy?Y1dZ(OTdt-fj1 zD`K#J+G3!Q!4vY9k%m07V!fVps44N_mKsyp7?mS_@*ls<%b6dOjoE8=$gs+AFp8=@ z>j)B>p^C#xGpnb$2X39E8Ivep4lOa;xgA9E(;Zmy+UH}-ymb1kz(>n*svVO&QpYyd zPBasT`16^|WlYFGah)soBj-;N1@mypSB2ks2B5&7k?2ghzql->B9q@QB<-v;{fKYZ z_6Y#u;3kR?enhwouP#IHmrTjFteaO%?V}OVpF$XI)w~Bz6+r=w#Nn`CWTmo~3H!tS zs;kiZZuku+ap{ECo*uf(p>8KL8g*&Pfe;rl@HmoRRfFEX>A^i_f6=yltI7832=%Q6 z8^;VNV4@g7?*29?wg~+RB;m+Tyz~5X5)FO1pH+`?*FFkD^vnwZaBh6hp$0$O_x)taG@MoH~J7;-Op0MA?wOU08mc(hRJ~)3ly#T`>s@fbEG0- z=t{P&*c#_v>U;eKqQ64Bin|I_C8F;WRQ@{8ak3W}RJ+jZ;OfYzehUo9a|(QV102e% z!@^OR^vi4JYGq5Fe6}NT{`$*ho)K&NBye=Q$4=G@k;J_Y$8ZdR2I&W}gZpf}BF}IY zWDmqxY9@%*+5ZDrqT}R+5?@I7QxYuMwFoV7V`eZ?-(oYsegG`AhSl|Lt$|pYd+aoN z-SDi0`a2-RHOfuioR8M?aw0Z{7MT5BoITHFHls@rnxc&jik@9ROXW zxnZQ*K|76jWdl3BgqcnnlAaqmORQzY8q{sn&?9Xn^>%6ou5jmCHL@z61H%#b5%z1 zUFLiMQr&5X8M06r^#RgjuV-L`OUYs$yHcH~W9>z-U__A7Ic?mAB+D_V(iL&Dv3{cw z?TN4A5xzo&Dhb8(U7vkg)fansxnDF0)|9`Aq?(<}L1B#YlUWJLt+bu62jZT#6B5{c zYgI8spHEH-tGS26Cc2iOrSk&jsn$;AA^iMx@)^hqVi*PPS!96Zq1iT`m=uEun2*7zlY1++c#DV5 zHyimiLM?p6cn)u*G*xsC=U(RfXL}Y)l(i{0ULz~1UeCDF5?v7pMa6J#0}JVHt>ffH zm`v13b4=miU2;3zkskidyR0kxnG`3mZ4iLs8<``(0q^@otx7PaO!1Kaci@>?*#lPb zi37`LZ(K9DkCK5=y~M}Ux5;C9X;(j9PER(4zYYb-)x0h|N|Rwg4u4c7paAD04&r_e zsje*4I9OwCCVat`H!}E;K18?bBtvV@6b+U6Dx^C*F1|s5?mqLv^-TbGtk_3Xlf!Wu5Uw6^Jn-40=p!D@>)2(F)KE?OaA7u0a`nQf)pPaE$A1Hs(dv zB{;g52I=&pz7{V08_BH@Bn~=Esx6)f|W1iYw+MPHDlewZ+^$i^cKue#SJyXM$Kg{OpM%K@< zH6Rh8!vKDaXEA~9?X$3me}Ejb-Vt<4HZu|FX3mJ9uv7G&C>6(4FAYi*hc6?zV^L-P z^QAIq!$m6;M)IB`X;E%`d1m!0_rSikErf=fTiJ!M5FcmwC{ZyzZ|U>A^q%73`wu3z zTzItZZmf`JxEXF>m#VVIlCA5q$zB7~x!96|g$XpxZ@G}I0*SbiM(^pfvF>NlpVTDc zRjM!@tp*RlOTk(a=95RKS$(~Ta|-qqzB7CG#dXVaEu#vQwR|}zPDh1b4x2)gm1OPH zO1;AaH5MD;Y}k_Ss4HS4?^szotB0L$ysU}M+`=WazuzgSJ^ukc_qwM8M(0gfu@d!F z(0OR-^h0`OzNf0i^vw*>hw#yJTm3#lCw>zXZ*ey%2l1*8S!o5~!nr-8GP;Zegc%*Z z&%7AJr%h&n=ro_`;Lj1(n}<5i95)W*JyBX_HcT6}(zhc8=I&jd1$6|hu#|XrK`@rO zDs5Jj4<`SKf5|RvL?W=C=dx*^rfTy$gD+jmUqfLQ(o!pZ{KKZkk(k+EN)zHR34Lj< zfn416-?&)&&N42)gt;XckO>T78{U9Cw+&wDBg7mAsxuPcFrSVSn8V{segD)QsJ$7h z*yVdv>Jc_EyU&$-D~dHa8qfYB!T_3t7oFqYxsIrl_UkpGQPJBypQmd;VRUPf$f5g@ z{HSYDVdG8l`35u;Zts!tKl96SQ*%1JxAoUj>JI>sVDnNhi)HiW{ zoB#*qqZ6mk84^}=fD7IF*7JADDGcU=0P`^}&x_OQE{*`=K%vGDsLSzv!^08Sf6#9RzE|a* z&$p{|A6G>tZ%?_9Yq^u*4J;VxMAr9;7MPjFwB9az&nN@6SaRBc`brRGp}OtV(bHH% z@q__ITMF~Fr>`I3IbPdP;D!b3o{^y_JR?L%%?KmxBr;t^K~1S8KAY zlfy?8p%01$+*>aY9jt6TtZk>s;*ryXUD4?(_LwjAvr>gQTGyyD z&T|!R)vd#YgEuD$WmKs>1EeE85i|SEiSzDc=&FT2BB-U~H=Zc>chg;> zkMdn6HGOd8TlZK)J+QtTtg#l!X_#$M!jC2q{%m)l9#mQqJ0m zmhMI9Gq9<|fN<_U%ikI)rIxbVUg78wcckggph`Q&Q2S#k;LiGh7-k~h3W`0aybyt2 zV9eGFp4IODe3rCH<#?ntHGa>)1=2zC{#69HVc+n&b@9ryX%vh>1R9M)3U2M!%8UT8 z*4FsZQM(ti-(oCiya7r2j9sVxqTs%zkiMx?lA&|IFPf?GW#uRBX$5{$98kMF6{tyH z=yq2g{R9x`H;4RvL#vHEjyW|6+hgc*FVU3~KoS4`!5q6;8^p&UsD0@R)p+^!7l^5T zvpVyku#YU^!qbQ-&&#VhFh7Tno~P)uIZN0FENln;i8QB1+ZYY!ern12gyVH`Nhbii znf~rOYY|Vr6c{l7UJSNyFv#heiCtyuPTjQFuOqGb_MpT)LogJir>+*mc|M%i&&tYj zs@*P!jXUW}Nobb?w1X_S%Hpy2q-VtB_=TR*+bBf8`9_UFA3f+51%lr#Vx5NhzuCUR zXy7x4X3i41iq)Yaysj)$%DddY5=08^5v@%7jq)n2N&y>=PrZY91K~_RLaU!=quk+T z3vjiP1kru^j!*J~QMx{my`(*Y34}wjaMS7(fFSApcN+G=PHc!VIhd%cK>JMr42*R{ zI9)Usd*NP^E3S@NtBfjYxQ5nmR!cTFvvM*g5DjXWNiFvSOo3GO4;e#Y_i<@}`w!>O z)iE-?L7VIQuUX4%$4op**u?KhL5?yEvEC+onG1q>=A{aoL3O=@QWo zbgR)llx()57pEm=>~Ib-BO|L+YH-1a9x;?nwe|JmoN!ifs1sb-#PBrcH#@iJ_&nuTna%iJS_F2K*eTaHk;y=7;)7w*jnYu-O-p(UQG}_rA)}`PFP)c(bY^>hX>re(rf? zyEz4Nl_yeniX5B}w8n<(X=#%BlSU{i1~q8g%v`t$E)iwksF)epH`gN_HL{*i8vl{= z;yaeHkys+y6!wD}OdnP?58}d8#hbP0lZ=E?o~-u%Y|M14aJ@{kbeE=gdpX-TY+U8d zzUg02QMOKi;j%#F>3`{xX8%LnxJsxmA|sPkj|)n@neS^37k|fyF;l}3rtga9l-Byz zok5v&)ryS%2YsgI2Py_wb7rL>A}afM2lkI9p?)0$wHQ59JGk%C_zYa{0LIODre!|B0@v@i zb40tKdj~0nto8%XA+6dLIz5+7@5qxk*VH^xb&8=vs-mc=Ia!-)nh8o$?SDsTnoV^m z8(?of8}|~NhAZSznTd%K=4#Tck+$rlb*1s6{n!Z?ewxGM!;tg11v9^*lK2T!6%;9R zZRz+0ex(mU$}u<@&`+UEK(3+Rg4>tgeFJ$r9TE`9YG9bOj;#qghjYK)>|$b0%zcrq zOTX+v!#JKRA|1z^WVNF3$|?jjb%_ld#GAVtOd5-XiV4T#SYf9ojnY$JR*eRP3|226 zPru%O2$Jrva^*V`Sr@qC2R$hLYrzj#PGmJc=o2^{uel6LAUjcF?tQt)tuP)e>qyOX z_qb~o06yczzgq&6v66E`F?8bz+5A+j3-7Zvh*NVf%4ms3_Z&mD zCmY)l3g4?qCoPPHT^Vt951qW;;y5;bes@wo}}W*E7kF=l=~p{)kTa+ z18iX0#cJD5J5xU-(3$*1dsO2&LViueW<}N$jGa=!ACsspv#dU$w;?`$RQwB$rW~l3 zqQS67j3L5{;VJ5Bfz(8abB0wCuwu7$d*FTj4}ZPIUC7nlI2;0zEJJt^uFAK(;a!z~ zUWWo5J&GsMs#dHKTUdk zJk~>6UZ|!1MWl?yv$u0r$nydJ-(&v2WU5Lu(_?PekHFPooV z>}fgzi(2>>Ya#k-f0vS;6s? zPahybcT01VryAcE^s;V!lE*&WWa5-7_fM1HjiF+xnlkjxu@dcvJ1GM7Y?QyN;%?y?#VO_tpmH2E=y{}^zeFf{g`GENg0%e=$76>Pp z*V)4r&Xbmx!$x0nna~sHStUNU1ikZWpmyhOgaZESsCT!hsIdDIEE$x*P&UnTEWxj4 zekRn0EZ38I^J*y|)Cw|7v7j_8p9|NG9fw`RzH2&i-d>4w$lcQIR0aIb#*&h^#?yfe zU;7Xn`~PEy+rvO?U>_3m7c&5i>PH+=#Wkp;q4U?lcRqx0Kv$Bkk5n=o7?OcJA=4?cqrvVrpGmXG1oP;4EtN_pKW$39Y zyi<83X{(J27@PM0C~xvcitCz(2}X_DkZnC~*0@)1^hK7wE&fJ!kQ5j$DH$pqpTyiN zt)aynt>(O8x^6W<0d8x5coy)CYn1nxlOJ-Wd%q{c3umOtcmfZ7lw)Ft16>h$RHJ)f wX*#y%?xkQ^x6>bnyRIhD*y}r6yTRLl^a{e^XMZ&+-~1)~tmQBHKRf^Vf5^5s*8l(j literal 0 HcmV?d00001 From a1f539ce6ee56880af35d96a4c7908046de6b943 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Wed, 26 May 2021 18:20:50 +0800 Subject: [PATCH 153/186] add Aalborg University to readme.md, reduce image size --- README.md | 1 + .../img/companies/aalborg_university.png | Bin 554010 -> 198345 bytes 2 files changed, 1 insertion(+) diff --git a/README.md b/README.md index 5c6686628deb..c034ec83e612 100644 --- a/README.md +++ b/README.md @@ -564,6 +564,7 @@ Here is a list of community-contributed IDE plug-ins that integrate with OpenAPI ## [4 - Companies/Projects using OpenAPI Generator](#table-of-contents) Here are some companies/projects (alphabetical order) using OpenAPI Generator in production. To add your company/project to the list, please visit [README.md](README.md) and click on the icon to edit the page. +- [Aalborg University](https://www.aau.dk) - [Adaptant Solutions AG](https://www.adaptant.io/) - [adesso SE](https://www.adesso.de/) - [Agoda](https://www.agoda.com/) diff --git a/website/static/img/companies/aalborg_university.png b/website/static/img/companies/aalborg_university.png index 1fa4fbe5777aa4a441c07bacd8787896ae140c5b..89282d904676005c74069e5d0e8350fe22e91b93 100644 GIT binary patch literal 198345 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¦q^9G&?{M9J7<{{Cw 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�(uRegao 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 z z5g4Tkyyk6zK4~^IJ)#9+Cze;hOLh?$-m2@xP5bhm#_aYZ&JWhn~R;#IxDI%ap zIg7(LWxt}LC0R{7BFC)TnamN(`xip@A#5x`yHbIskgeyO*?|mi+Lz8=wTU` zSH^q6f(LUyj5xWRwr&c{iYmUEVPf#( z(b)Yt4#t_B;Xdnq`1V7@*C>CqwR$VT-X=B)b*BBC$0f$WrS(1On=4&xys!=f(maWYF%lSGoE4X}|hKk+D8T+)bxNP*IQfZ$*<<8G4 zW9e2Hp#`|V#3WykcEqWHZJlLfs|aJpNQn_4o*Nm`tPxw63 z2-X+Tc%Gu&I<;KF0#}|leMoZ~+MABefJWe-d?2N+;IU|L+!PHI7g6%n$p?auOrpHQ z0pV8Dx9W&J(l5L~P!Hg}n@gjwnl9`L+=3R`@!k`oBqCTF@CWHjp^B$~d;M!s|0A7; z-!Ifw1%n3A7as8mR9d2mt=rf&Cgezdr z4+?q1Fp58ng&MbCexyk6;z{GM2_-n{orgo)N@-fB*q7mN(tgn(!5Aenl9*FRR!)BX zXMwi}WG~q4L<{XZf*Qw;&(VL~9nw;H#))--mCeQ+GWa())JzAW#+cpk0tOiaA(&-g zdEqgB*Q9As>qa8bboN!Sn zLoD?=yxe^*?_NIFP_YXj@<33+xqiQ5YiHfj1^60JUd@-LK%6AR|B;uASY0i9c;RAa zCUdbp7A%6&8s^8e5qs-dihyChjW$Lsw^mDo&fRND^iR?ukEz|5lm#<)^{H5C&Um{+ zj)haUle)&1>5;0PH6z$*Er_rDI=ta(+2^vhTXVC}{7-WjNJ^MCGKyJuoiaclXqQQ^ z!grJSrO@o{z(dm+XL_Ba+tRO^mSpA-g=X#UV`P9oz?A3XF=Ix_M~A!NmLgEaMk1>L zp3g?x(SZF1mYBV(UPwH=_UL!LV5ti_pVPLx4Ov-oCc%KWCJ}r_aqL!FNLpu}G>r({JOe2lo-}%q+hJy2-UN@Z&%!2QCnKR3WR>A^I6`ZiN1LH#@ zq#dDmKZxvp=#X~L=B^V^zI4=hp(0p$<@px~NKfqS#@q8AIxqU(A==Pt@oUQu{@u1*!o(xCYLa|q^O_w_oKqt5U2B0-?p&Cd4t)r@ExE-mxH0D zsF}M`2$I&Mf<#MBTDgabb1SLohP6JHeN--tg?~0=FzJ3`#MpU-dgsi*-VQDq?EnUh zJ-{n_BG8HuJo2_j@Lq&KEB$M%ZHpWA^}CNBPXNrjB93ttAiCy*VXIX6Ob#Cskt&6< z<~$B~zV<%_GfGb9W;$kH$kgw`PG$aR)alUsLo0S{5VFJRrfH-z!R%!~C*__0(*z33 z8OoDF=OIK4t{o4zxpu?0Jixj6q^3uk2GKFXi6-bBhph_CSJep-;r0>}&MEi9?ABmz zFgf|reHRfC|~x8kHM-%dnwI7Er{5AIQdAy*WbGMo05`Ed-8s;`+;*O zI~WS3ep+#G0+6KyfTs1x7O`I~yXili_V`#)dMyvn6u7CIt?kmvd3=T}^a*xgwfG3& zP3aGQ@Q4vz8Q1)x(;c}-k(_qC? z$m~Thk_(N+ix>z2x&YWww~tI-Dlk~kNCqSY_sJxW z1{GnL3bQ*W_3=K*HMR7@{aM`tsv3gdYRbm_(xIk9lbP$9peNkguh z095la`z8oA{qa_gP(y1k7a^R_i`Y&LQ?j758+~ftD8qc?T?~5Ej5vxqYw_d}Xw>cT z=_RgowXX?{BGj^{<-Lc(0eHRdkCc3|JSX=01}_1XZxQh}?px_{?B*pq$?B|6xS?Jh zP9Yv_b*F7*dlT%J=|sja#S4qfEMs-t33vi&UIahCwb7k=8!GY+FUveX9dukmVtXOU zL!NTtrAACjHY9`lW^EjR3m}=Fs6}w&hcjoR-?a#1Y~bTZ_F5(VLG!~`X}k>v2SiIT zkv3$SNeqbtce3OJ<^hg=Req3IU(bGLliF|OXv*F~e|X>D42ZPXv9c8cI#XXLd|y9D z-R#0TOz$Vr)yy+zOzA^oNaLnxi(AMM*WiYmC3On!unvRKXS2bIMU&b3u8#{!?j!%2 z6;o8cfN3jY(6jWg`c;dZHIw40rcNwd1u$>X_oT-%lJc2qn!nW z#Fq{8I$I8e6k!+Gthd_Y0>nzoLK(>noo~{ei;`RT+vNnTOpG~F`S8^@8NW^Q z$Bh8rr(Uyr86Grg=Mgxw8M>!D^9BcmBT)v)qxYN<(Fl6C8v*?O_FtZu_DDK!wJlgEuY7IA@wxbih-13XFG!Av zQDJ{`^`>Hi;T!D}Nb;lVYv?FBA6$~f4rrYFkN`)`HwKUl%~c5d;_-J;O0bE?x=2q?nDPuc4n##M2+DGbuW??>}uE3%?W#PiP-r0bbTmugb64 z0&0VWxT~{oD0!89SPYZqrJs-0y?HIoqU{F1&maROT z*=H7hBfvDmy3gi?Kb=S>QR%-dfQ`>}$om!s=yf8(q<8FuttxZd&XYydnaC=B9_@cD z4PUS@qc#W6$q!yxG5iExW&KVvKdM>?fKF^Oh(=&XR&s*2dB;9!?obmZB!6qZ?Ww?X z=Z8HvL+sTZ1812K=!^J%X{jm*vsX29B{8d5X14mM8{IfAe(Ybl_}x!TAmjnuWn9p>hJ7|+t><;uT!bw2l}|^ zlQ_WBaQ$Uh*=6qSWpw~lAJv!?P(NFjlhGmRiEvw0U*vWb0=ikP5i8s^wxWWwn1gJy0vodBCKd#`@D%5}q=9tty_d=K5V=a0*Q7tC5V?_CxcEICwt?Y?87O5h zN%6Z15ReKS3FWU)fc%DK6$g2BdNBnF7`;{-)0o-O8w!YdMu?=0W7)owt9b=cF8xSVM&arhXneZQC-XC!9nNB|+4Y*O*=aSo!b77^cp$%j)J6jNl4sgH z3MMv%^>mmt)`J8fNvB3hKe@D{lUy~OqfEyw5*&?=gM8Mp0K^i8=2&!@m&qQM!pg0$ zAc+kS0%@7YsvB3n1^sU%n=4R^zpV5wDp6dqVmlLSr4hy0`CYBCt0HZ&650t>?as4D zgjtoPo#+eN)@HGoBMp+zrw@gL7INy*0@LQ&jCcUT}!!bJGzcoe2li*oyEG{8GWY=8IF6 zA44*~@jWMVn2RiGwxepH$bt7-l(Ve-inSGm(V^Nyf@dLMT-zjOERT@fuVPaC{s!C; zQ7IJfVq$WJ92>GBf^hZEf&J>8Il}NI+`a|_BI##O4S!-p54tNfH%ZP{a%l8e#;(?~ zhMu6F9Aa5P8kc;|{46lEO7V9G5Eqi|PdZj0oW^SA4V~g5oR6(cZrs;d>-2#^tCU<& zvbPKEE!bETnc`f+r;1!igU|FUt82htHBSiAh;d?gk#zMfrN_fQAwabfHL9$}ZghBU zkDSZzF?rrZe-U4P_tt%sg}8%!W#}{OYVrrs3)K@1!zePj-WH*8$FMkXRZK4N=mw|V z1prZS*Jz-v6-ZGvan$QGg`m7%?Lg@s`@G@R^ zn1R3T$nO>fBlK-Cw@S^ghC?xTB6luuwxc6lzN*>L>frh3^=`=|3MgH3Gq5_-1nDpY zo^l;{nb9FvE@AF2P?)v)9uLO0Lmx-#Mo>vSfJV}0yKQo?8?O6{>%UK)pLQ4c!RWX5 zeKwGGjtv+oWeo=(4P~6&2djMj`I3H~mGlWklt&jk$L68=BCVS23C9gJ{nPOxITZgCP}_RWUWrb{J`%JSiQ2uT|Oo&H2Z z_rP5mxIia&E3(wl3oU@^SzUKHrXAfGs5LXmR$Fqyc5@+X6k$Xh;Bn@2ujm;|PBzPI z09TsAwa<20a}Zz@xCE3-uKW)9A zS!qxRw!yLm;yR2-M$(g!!H>I(VEjjX-S`e;? zw|f5IB58<}`|?bo#5O?Za@0(IB?<%_7(6zvccc5z)mI;~0a#x4`SLxTs(8`C21?q& z#x7CFp&_+A7mI|8#F7DA+9HH~;)Kbpz!uoX0kA4CuE6%egnht|?;zR}in%Y&lne_0 z(s=1NHF@Y&$R+bHZJ7f(NE=nm8KbwdO*U4e^?SDEMYnUD6%h}n`$J@AA`rJJR8_YRcpaVjfve_gl zvi0r9&)Obbj1jV_U8->3%e4<7d^Pv&OgJSEVzr3iD=N{?Js6#IC{>Z#9*FvTWSvd| z#1I{A8?1IMnPg_-d)bTkLKJ9^98nvHRSPxx>BFWK-lz;DU~WUUrrvSkH`lVWN4k;z zinJz~(6U6Oe_&BDD(J^(ck#SSntDL^!QuG8V+U#$RLd>m`q8h0dXc-+_lT3yWZ6tl6FFQq_rnBoUEc}+_y}Y*ul7il%#GcCqy{Uky$oU+fEz8w{ zxUm`DhJY@x+PEkGJZgbX7)!i{Pl&D0#mn~_)<9n^m?3@FOSH3;xFAD*P7%L4bBPp~QGX>s8!%xA)$aBw+f_lqbm zjY3oD^I7dJcUQqLerruh^wyb*iC)WsV6t>e@*Cho&RSC(_yLIA3wlA6|JFuc`N9d9 zjTZ#m)zl9BWY81L4Z9Ss_DI`~KLd)jLyNwM5{{$5o*|7Ux*47f#XrMCi;H1K5W|4K z=PkXTiXoZ>dCaAvWC~nHN~QZBve|JAqqVi12|m@G{t7ctIBzJy&5@-D4y05~L+UhD zu1T9UMRJ)sep7MRG1#-wx&R(spoFP(HyNjCB)yT*WtMm}#H)-S57s#3VI7SjJL=&Z3k-(-i6DKL)ARY|0vT9B z=_d~a-G;A@h1V>MF}vb060-TiAMz(N^9=M!%zD3p8yw3BbpV|!ss^4}-N|5L!ofj{ z=M^EbJQn*+r*l(v)8#PjL#!uo-@>5quOjxhU!e;}uxlB*T=B~tL*)0D_KxE4KdcT3 z(=rO?^?z20-)MXrWmLk9cm*RxKGb~}s7EjMabN!#=zLWo1L^NF5K>*lGQf}D&HqiJ z_}cEG$W=2W+bFK)hbd{fQ)&EQC`~%c8`pORokL(oRO7sGgX3W~$@STeaxY2dSaLP9HiiJ1{+B$R%JSKp<7P+6 z=V5RPj%e&~;T;d z>9&6)Bq@nE+j(~jmR-M0c%gVU_Lq{#Tv-l)hE3tyqQs67^9-M@;Hw@x^0CVsgv#R- zDo_z&o|i(%e1Uthp2|FNb)&K#GpnNVhT?3AzSRmK)_!?aC)xxCW3;VHlr22>NhBViH zvM+Qu=Wdy-(?jY517h*)^le0g{7iVS_eWun+_Qx+e>gv5B!Q>z5mNRy9%Q8_zB`}% zbbdssOVTC{T}p<5#mH%11S7KWSLIFRQ+E!D|Jfc$6fhDKJ-iIm36ObK$A=~{tBjv_ z$;%>mh^fe7m+bm+LsU4|W2)@XaaqvElk)m?*ziXS8Ah2hPq@KFxmk7f=g;6f+sC6( zjyD1Rt>(nops_9C_oo8zIcTKUv?-Y+5| zH2orIv312PGiH6F-XKH8NBAU)u(K^60Synn?Eo>ERecUq1|G2^{n@=7I52drLE~7qS*+Oh2ayq%27*7CGDlhXL6zJ_p zbM?swNN$ss*+s`p`}5_X>dWkT!uPrc!7>C@UDii?A)@7}R4pN@-R*m^vD~P`Wc_Pv zrSGa~Cr#Axedh^v!co}fPibdkA$XcDPL-&oxCT#bfcxYrZ{?rpjmIFS{gs!Cc^HK! zeeuNOKj$7M+-Dgv(}}17`FdQ)V0FahX$*PYN3;EJ0e5^`; zw^Ly-?(Qo&v>qGMmk!wolds!~hqnBKbS>!*9}cz$JTC1quzNH(9M+n%dEa^p&v=gT z6vfMY5R&X|#?@9GYD{-*?f6#i)xQV()U%g%VK24q8&ov)XIDf}!kCK3trtZOLXHg% zBe?2LBVIxjY_hLAUn@aob$3*_(gGyTsg%3?aMhcl_1#3y7P;&rwMKQAd9DQJ8oW+i zlG}=BN+-H-?*c5`d|qOLREcS);D@eM^Py<{^K@&+jvKS#Dzd&YZD)NTSu^&138##6 z8^z`?nMji7?Ixal6f6J!DigKHtNY}2d{^TIj?u=tIHPTo$y;Yc-94^nH=)# zG@$7;DNF*Q2er;76OR3I%Rg$~e~@MO`?IAn-^29=lTSwC)Ij!39wA)y$NIVvS94bV zOx=#x#miB`Mo&p0<~qrW))E)IRG>bw*Gr-B(3qUmJCtU!>47g~>O_2{7iOYjpRW~e z98Sql;n02}Q1|=BE0l#vKW}a$C3aO9`aKsU%md3(vi4pjc1_-vNskR(2}1LeNAR-v zGh>7roNB-uEMd$E4~)Dp=V?n7`(|T&=?-0<|C%aL5HP|j)L&1APRb^WMf=|bM8V9nGy1w;eUI>G?0Su_!mC zX3c5+B_pBF-ZZ`y-OhSUsk~rY68zzAH9?cCW?xAx7VV|V<1{Ao?EpQT^?7*KL0@q5 zcmd`#P}5w#sSR!8n+L7wXN`&hY(>f8tuHkn925Ymbx zdrXd{)2-;sCb(_9(HOng>`vcLHO8;$ zgI9liPJ?GAf=ndu`>EHx`j$bjd5jYn$7RFWtEJZ3R9Ro55UamrB790dbh%Pqp2a_^ zV4>Gc_Br!S@c1Yqj8|#79&$dfTCFQ3PY9KImK>_`R5@*Co84l}XzlpZ=c z1o+VYnjMx(rA_~kk(VuzQg@1czB{B2qHFYTL8GISp?njoXYV3{PrLSjHt6LO2wPG3 z5%_xEZui>U7WCa1^lat?xF~0wX^ZLKqLTDST_wsTBsys0QL`0+Ua@hWKR`>_;qcffPA1 zK)AW}Kla2GBiLN#8lE@abaZ!|eS0o4A-4gO`>RmR&ilZCKI;z##QWojpZ8O7E{wIy ztYw>TIG@l4Pv*)sx!-oJ{q%as$xE4l>k!x@xsDLJM;izn?|dy4)q2bHGmEAxoAuj) zk!HrI*`;ox@x?Fom?tm_L+bObQ(J)raM|%q(r*j|Tv@n8x)@okd$H56%R=e#v=461N2zj- z>p3A-S8obTl}ym}WiHuEja0;@{PPLO$xDTKdCeBTOtqAK6|d@mzgnWp(-JWBDVkH>-7mcplQ%dpE7QAF;V; ze^DGP9d~tmwf6OU|HaDhk!JH}@Xiaiu|{9b-*6FK`p9Zgb20xykVltm=zZgoxVh6! z^YKfA%!56nN?uy>jg9S@w@bZ&T@)E+@dp0JV1=~Z`w&kSDvgwQyr1UEGnQ*KCx~6C zz5dbh>iDBK{sw~)ZVhFT#_lTtn;v%LE21k$+bz^8U##74`V&XUKMFqyu1d`&%+DfR zUnPeXpUmV2F23cbikDt;Y@OO?u8^{rR20~rB+WU@YntZ2#@pw7WC>E>v-qx z@Q;`dX$@Q1_>z)wZ(GzYIhi)h{;uTYNh;sJEcu(M-Iu^>jRvYBWNX!AhbnfP9EQJbMvjv^asr1_%`IC8}7c3k-ODP0gT)uf8*%L;+=d>T?xsE!PI^Ft~?`A1}O!_2nYm;ScG(Hpe{$H-A>PpRo zM@DwT^K}fC`6XiqEkw=`G}CjS+7S7*u0Q7n_bJF8wtR{N`&vvv^0iuJBNRUb(d7I0 zYCE4!{nB~muXN_m2p@nzDB-L5Ul|8L5Dqz~uyH4L@6i~oVDH79W{(=+`q1#7ablg%Z;s_3feOhn(uU9k8U8`!c;kJS+&krSFh6xyPl*w#qgz&@uae(m zQS#P*P)cZS{1i{eqAd7&umbeUpr}%8mewAnbos+kO{e6;lR5Vm>KaNyMpAo8#+j8^ z0W};uY#qD%hdn1)WkE8JaAtGUE5jO56hL{q56fB4pREb!r@k`F0;;5tfSvswx*uA_ zHdDGY0~hgo6ieMI<;Xz8vHYmEVis4EauZqKKBl3VNc!z*g~g(XWg(%-Ca3!yCA}ZD zPJFo8^K_Eelq(&ERiv#3M?)(!^WcgO|b?D)*v1$HcPap`yc4YqomOjLEZ~=Pre5U>O zQ~b_5MUl?SGFRYYD8|u2C|?o-AP^fKJUfk`=v2Ns5b1FB+L->y?`k-qQ?RtfQqNHF z9d51om+|op{h3*ET?wrIqe#(K%l?h9DI5bHANo^!IO)XI@~%|W@>GgVMX^@D-%2YB zH-i^H_n1}Y=YjLw(Tb6j?x^u`eb$*Tnz@otgbOPD)CjTTuK5}WoC zN%hRxmeVeZTsu>!vE;h-%XMy$qfna{?wPMzNY8iYS2Xr$o*hK_o~ga}?G7NHndNNh>)A-iW=?!>bn7!%1|oeD7X#d~ z!u5~-&B)A1Ow+hn*5!Wz=b5JiAy>614#s$N<1a0AVu(s8ZZe5JmC=k*Tnh^0L7i;y ztqobyT{+>L1|sO}a*Q8QxbJ4~O1gh`{Fs^V(Vb2=V7&t)ThYTnLWyenA@IyWpJHzL zj+@-&Lw=quo%#ZDVO=Yv=`Z^)o+tL_-%!-K-i_4BkfDF-VNU# zZzPLd-~#=r9w70!0EFMNzVGKf`j)hLY8~}fZyx!gHCV7aBrCR!Ig>mH{b*le0)PfI zN&2~r-AT~aW2WP;E#FF9P$h`gOD%<4JqOZ&KO`mPIb7S*z7p7qqU?T_R+nvTl}96< zwuB7YLA|f)Xcz7t6N0m>79njV9is2BFsm#ZHUy|A$T&~E-pO(A%8a0YDsng?J$mnbntS5)0 ztsmNF*7+4Kc@Xz<@R-}}NjKxFbUt&gaRD9MKcz8YeXy$5+f64#1Eqm~?L8koM}VRS zR4|+?2~4D~s#YB|l#`MY*i6Cl!HBzZtEXPy zX-qr4)%@@h1t&zf!u80MAqVRwp&f21Lw5N6%u*Y$KM8ckwB~w z*YtwJ{fJpJx)wz>Jz<^lO?Y&}M3b;@GEW%RLfR+6V;TLKmpTPc?&0~_ z0}uqW&pr0^8tLX~E~fGN20vmNM2M~*?wy!e>Xvf`*p95a^*IK{{hl*~zu0d;C~}Kg zp|K?FdznZPjMEitdOCzlVl4$$kdp?=>X`QBd%0Q8I8a|>G0&%zC^r4F$!35ivwan` z2`%zGqK(4xOVb^MxE*Vj)zmd$4g@ND0 z#lMaD#@e)z^j~BK{9q~mGVA_6|3~$-!^c#LB_|x#yWx}BEQj(m6hbogs3nr~wBOl} z@FO3h0@L4gh+(rlN9=oAwGndf_lPV3F!jps2Y^69>C#v`Z^S$J_v7d)N)vB+bhazwUtRpOg90~xq`ax++ee4Bf?uvj}O4Bx6e$}2;iM=R7VKj=XZR` z2Zz!74jt;BX6n*Kj@|4hh{ZaSFVNn6iza~_ zOWPz;Xk_OKj_2Xj6PKd?3Kx$$w1Q>tE$9QO$DWZ?U30m4{%+WjiX)-VucK3`W7EU_ z5T_70Q*&yVslnJhWT9YMv}>K8N@t!)v1u`E?!}dfk5BG1#ux?&Q%PW>LkiOwG(xKdO5lw2TZzS z=-^vso<66AkF|Nux`lKwiK2{d-kw!FiwZZnJj+JG$&*Oy90%p?d_~sG>+kOU`(C@M>X%UjlMZ9mv2 zrm;@gvaKRd{AuV>ndiY1#Vp=e)Zfw;Y=icC(kJBk$1u4>e963TqB<|V&4Y@euT0gV z!Q9_@b=?q%dEQKPi*iAu0sr!C0}xpBrXf1P8%FTq8ghB*nFe`GoV`6O8p+sFDRmrU zr9+8)Vc*)%I!%P&xJ-j3Nb-d|7wHp++V;^a8U4nCu^j5d#W{!QkU{9nhCkB{HJ+YF zYvN-W&P;Z1KQ2Ac05(bM6VX%$-ci$=_z=mj;k72UV9pJ!loHT4>}PXo))5v%e~b{f zuiRhrbIMc27A;=OzbHeQ!S#viPnrIWdK+S=^p3m|?hniV=zYgucEqu2&o7>(0vrQD z?ZD8%6u#=l$O%-wSsuUq2%_^X=ec71WRqlRFkC(muZ<8eUziILU=SW}a-lZy^_?jy@Wni4Jg$Q2QyHZ3?30cgXkr>LYi#ZoQ zZGL)@p`#_@Nb8tAP*U?^IJNEvc-%**4w6FR6<#*$5bf+Tp{)h6gvNY8-h*{dr`7KVOK^@dKs*kYmCO{y+cF@gA|=>~+Eb z2$1!YmU$$6ZfmIEW}ycBqxD3QaNTMs6=}8;_js)0utkA!L|wMTME0$=zWE_wASg%q zXg9+duh8g7Ae8ed!Su{D!q{D(EZPCRt$bR4e}HY%6I^cm=96CIgYnOOVGz{EcPp(A z;?@r2j3R@4|9zvzF_!7V4f%dEYL$Pg*;ca9l@X4bm>eY`6YWr&p^d)LJni{MmleXu z-?-&o`1qCv?=OByr-cD=CvSwl6J)6#j4Q8io7zJ{S z4}5`R&CA0YCoqaU$MPokKAP#_%p_e}_SyL3$Bg0j$x=&it{3;)3Cc42!E!UC?p2L< zLebK3K=WtN1K9`1&$2b^9VDUbQ-V+MeK#}wJ!ETq_$VJ*>Ks=BS^q)1^AFCi)L~JQ z&(AfmZa&aiR$2$D-k6WM$CwhN+5D@Vf&e;5#%rvm{;;1|G2y|&0m4T8Q&2i5*0whd zr%)qKC5(@aZJ|jc9b*YCrn0`HJoS|h;gHaqVHpU_4s!8e@2Nc!9YMDJ?Z{R~xfdCu zKh>8>{eV+Kqfrc}Y*L_gyhp;}v%|g}5YG+@3RXskn%JO1M18RD-WY0Z?q(^#3!`t| zbMyPe6u#8$R|7Fsr|}<6skQU-o%k+XWl!qT2eb7)ceG&C6%GEa&}d-fJp-%`aMON# z84H4%mS|Pn!%cg@R0$0ChPI*bjQd6oBr(`B%TTQ1?a0%!rxMLlOS%ak6t1d(G!535 zZ;=c@QV49G1^mY58n{f+4yy@z6PHd~UA0*UM12qwbG~@K9QC7V4SL-js8Ekzp6$)+ z!+q^6?%X~vQB3+NGvjy?Y^d=>N~ubqVH#rdk8v^N3X~Vd#oBw3zbU^jtJqjkI(sud zJ?l8n>Z3fKw)Dx?n7>#aE`aDN;zy}Q4KH6ir86>7r*U@pPZq1Z@41nIjM~o87^uc! zXKh=L#F?TIB( z4Mqg~(E`6{ynut_T_U+eJV9izlqI`l|DRaFq$T*A`*2WrmU;&Ireu^5)@d@=96Ok= zvrWRlH~b;5FZSrCKaa@fj0#{W!)D(;7qN z2sJ!7mI-x>t{xnp*@Uw-B+4x?dA)SXhQYbL-XntDUu{$GNw(M0IqYF#35~)~CXyQhG|&9hD#ZK!{{F@aFsnCi+(h{XYclyz z9A2Hg{`mMyp9X5;*L);MnJX~d*O3kv;?{M2{**X$?9;;!VeF7U>cBG+x%(oaWz3d2 zy}?s5ck*sj+eH#8zDd!Q1~80>c3_MQKQyX)Yp+sXOzU!V@@gPnb(k|VBn;Bm0IoYz zDC_n_cL@Qt8QN17%zAdnq&!z8r%1S_w^I-lE>BqEPo{)t1@W0D9QAk7UrBVO`YfH< zmqK1%$IP9^z5FWcyJ1uT!97P=8Km;xztk4q@^bU}w14z^k5Nv=49)bEa%MNtZ$?q| zs$OG6=+nVzS6zGelV2JhuuWeQLL1Ey9oMmS)uVT9m0@{Ryu*M%5h(-x?7mNO=A4Gs zJz?o9n!Z0(?-RR#j{rZ(vj!)V_rFUX>N~Zmaxb$ClWJi~BAVY(d*j3*U+M0>Z|+7W z22tXsyIw^17TxZq-WB*UG28y_r~Zx` zoVPLouJ^`2t0*PBsTHEWi?6|B@)U2U5hkenlQ=_bD_TM|xQjtZD~7afoMKgnLg*O#?ak^>Fw z4+4Hb!j3!NOo@!j;XUg`grz0J2A@Eebuhy>l-D%Nz}%q^==2lT7w<3EdXEkzgPmXP z50tL{5^uoH8~zGcx-eNHH3HcsKa=((TYV(Amw{Vg<(RB@W>LX3O>l=N2Nn4&zV<#! z@01$(9P~w^qY2qjx8wbSGk+oHk$C@&NFb5W;7GvFSCH@UTXyO6w)gwr(i}eczhdsm z`%lCOM1qMJA;w@SOmUDWKnVoHUe-FxY`=0MLm@Q^y-M@B18p_IaBmMQK~Y#BEKrn@ z3r+5yZd%Ef=}Tt`^{RK|u5&#`Xv7WF$p!d)8HRce5UwCm)EPDd<&~Kf!^pD}K ze>JSD6Z)XsZyE6e<5Fq!4!c1Sv={%OIuH_|4=jij z2Lb~S)+9e7Kx}qzU16OwJ5}W)aw60lmq!5bEuFtVf$bNR=mc4Dl4apox1*|;klq{F z(@t^qsvGKp(yQvN2@-Byk>UDBYO$WsG-4r~pW=W)2wHqadhsuF#gSb#8bx$IyNh^| z5oI8(v={d1seS7piG3+zReAe~7 zS}nZ9^FOi`a18b;RD2R6rf@3WFHqp^P5B~g)?ZU@S11bi-u!9x@VI80BBt}*AL*dv z7wT{MN~*q!hc+KjGEFRFin8 zy3tazIom|L#TlgQaf>%CC-ECS)zB4=GqDwpyxhA6pkoT-KgbpcfPZThV#Xy!APzgj z)eK*&!$QUgbqi{E2zz}E1_bBVrj#C%`k8TzxgfUv5qRWYI}3G`YHs<7U1{WtUQE;H zPb}To80JjQl@M&R3k$*jWA+cbfC*VhC>9*Opz<(?D#K9P} zVeer;hCBilA4nZL{4@W6mpS!Du!@-(WVrnLHO^bA)%nQjWj3UAzi6LlG6W!oks+KJ z&(K%?Vm!E60#NJ(^<1k%IlwjAq+DY1xy6XwAw?=)9DUXaJm=_gh_MMZ73tm`Cr(sJ z#`_GiEPEZq8t(PVs6285xRz3~S%KPvJniD}t@9+B>jefF$*yd#WY|kl4FSK_+i}xF z_I?chJyhd^X#y)Wp6LkU+8-*nYQt=gL=mqwm1y2e9=?Sv-7?J}#_yoGr!yye%Db7^!3uQvGu~kZ zD56|8v9Z-WSn{ZQT0g=S;BPQ7r5o`)I)_Wzy;>scKeuO0D>pxVltyifjGea0XCcf$ zBOnv280IN*?QO?qt~0>xxy5(=s5fM!{9PW6pp_S{4CorjKmX)!j~^DFo@o(8K1S+) zNp))Xd1*o8&geyM$D6Ngo>feE&q+s(5Qz?@NO0V!cr(WrX?#1nn0nK_RGZPz^=%YYQ_G@|DvE1?QJ1$B zY10!((ne@ED}q@SkDJ-2KOE~2{#gma35L3ar)SmMW+pe7O+O+{_nD6u16f1Jk>5SPChWiKfcA_?H^^g%O*>n@7pN9ake4XP!_f z7NDTI0W7vPv7TmyIX53CnBSwmOtdYCqjnr4P^f2a1r74)G=EB!bgJY5&1BI9Okv?YkdH ztqc&oML}8>_ank5m$Hh`JgIL);DeizCb{eyFa`CoP*2nMTAA@5t8(TAdSmH&JLT2qn zKAa29&EK%jjy?H8a(IZ`5;Yx4g7kpcBZTK_L%%JrtrjY6{PkS_Cn12W0HOJ;R@~q- z0K%4x?-IF3rSfnpneyXU1W233U)rYzk0imPYuv{TD5g|y-F_p9HsB3qf@WS}Ut*tS z?@&~A33;CW+WM8_*iv~Gj=yuG%m}l5)jtxJr_{yp3C8mIm+uQSsxTXQC;H6J zCgBjAvi!>Y-p0}Z5b`B_iRuw+h2oAWnz1qJh@u_dX-@ynY18~T{aG{~ovdQ}6orJZ zS4rf~o6gVUbQ!bHZ2_5=YCgkAVg%~`RZRs@Uo~MJVJRRAXYY+#`a1fY6P({(^~o|- zHAIsa1ofi*wtRh#virtSCFs04C*{Hn##ZW9=gmU6kQ;;?Ya&2_gbnYRdXqDwJqHZ? zY__QX6A)~{YRYv*wqUS28UjxkT%{?hd}Hj7k<5>$cQ16d`rd2xxebrF{Xp%h*tXMD zr7gNC6Bd1}^%C^YM@o?oWAL{-6W9c%E{V$L5O=LfFbO+wfLns zA+ya?$8EGgk94i}zQa9I2xIVFQ>2rZ1CHK+wuD9Tgx>Mq2;7#lJVD`2qVf`gEWI&%AQP-l{ z^qoMHOg0h%+{uC4kc$#(oP$7bN7`VP@USIw^!e!8GP?bdD7 zGxg%>lks?KY6z>=`OT;h?z!Kv=J?pFTIW}m`aZ-YZIcY9*9KlD*E{YWGI0_eTe@+_ zEsn;8PX%g>LAi4{MCp$5aVRDCVj z(~sg?JT;D9BM;zV34ZA!sRvEZ6ccmKD>ZFlZP`R(bZk}xQ+DTZjoD|p%-iu z^FqD;ncRtXt+NOz?m!a!2HW;#Fn2X=y{KlF^`lYxN(R$hh`>^-%Z%Jc+5@XYm2#aV{WL?IK|U2ZykKUT&0zEix*XjcaYMGVO3C z!4>f`z09vNsLyRy2$ZGo5YOv(nbyKr+`&5!4U_xF1-w9Ny%+(v$sb8gD8aCv0AI5u0jplhp`|bb76}^fX))gT>NgP z^%Y;OW9szC=~zv4h}4cka>KmP#_z)iAFcSIk;F3$zG`s#GrjkRgV~%MA-FIvr-ZK@ z;rdAGI{_758Lt)CldX{&eQqy@9n5)CKV+ITb!!^(bXj1xk&fw)mjHUjS`hqtl47HJ~ha+p>>5h-?cm;vDZZCF1MH)F|uCLq)I-QkF{4n%)%g z32`4m}~g8iew-6g}jkifdMcj8yIl+7O$ zY8{(#GH^%zw2@-Y%Sj<;ejazjx!){U;RywYkybCs&VSpYW#Y?~?Dwe^$%I7w|pD z;7t6Ur`O^ot|gTZVZ0HQ9)2H~6}_@wM-sBBj@FibqthJclcR?k6B<=e9_6REF<*+0 zD{>(p?uQ^{_CQduNCjGtZ%hxmMcx>ELjumaPxj2{V|>ngdsKeq=05x05=e03F!nTt zz`7JC?0nc`;x_tJp@pqwL=}VBPzyyeR<=>f#?c%`PaIry!cwe+ig-fVahUcKmDvsr z4N?a$&UxwvqI-W;PL~=PwLU3tb?IY8A)VNFrC3U{jT(Th9Z26d)DCZ8=DmZyJ%mu+ zaf$j&X85GizM&WMu>I_^5tbF0?S`#8>yH|~5q)T<51C1@1n2Ajho#PFL1BN+j96u# zEhYi=4wd0x_&OhYz^n%I6_C2K)|PeVPyWhV+%bYZAk=E^=72aj7mL9tirwnnnj-o5H` zizcy_{<%NZ^W`%Vd_e>DnlRCuQAkL#(Tvu7)I#-RwMad`fm648gbA7$9E(mxwCcuD7K7h^ zS$KD#r4rHNE?&bOs=h`{?StSdt2-;|^v6snE|ZEJsmgh*wwdxz%nX|B=`*mSRdcw@!kHS)ILu$1zlt`5zns5mx&Mz40hwXpCu`9tr33Ri_{vXj>uH?N zjdl$jr~^4}{fHtB^n_3(1~XxaCJ%7hT7e|@JM?O5msavYd+v5IG(W-hyg?Z;NmX(a zFz}s+$EC&fDJQ_kKlNM}`00pLcSg@}I4Y8ftCrEwTjcIAM(J1^lD*visZvZf+q}kx zdPQ|DTZ(5ilcF^Ry1}uYGQ$?6Q?IhR+*YYz&!|D_ z<4ZiuXj?iD5@C8Frp?f-Cu_QiC&NA+orV5Ol`4j34bCr=1{4++s+=6k0sx)!LL+@s z54Ee~fc9+PrF`M6wiKXW(rAfirelJ;zpH?tQcNZlAMP90ZG%0c&k0|eiXv|cVd*t} z$@5DiHjLi7anlr1#tw|(sx>7`3~%x0Gg1um*x}jyS)cb&=urB8Szq=v9T)Z-@v4BL4N}Y()usLNhbVnIF+a z5NFe&Y^!j5))P+8HU%++`=5hxvx6hj*k= z|(B&R5n(P90W*rC}dOV~-U^H`S3zDjIdo3){h3nkn9>DnrB&*jlAB*qsQf@3H-I zv$@Syv0Wu;^S<4{PR8?bP?o!;4YPwqt^qfKXwme?He}%E18I+Aii-eRhs9Xm#(b3c zmy?hfrIjDQ;oj!KhB^LDRl&Mt6-YzR-LgP5zgHIQxm)MUGfu^R3O~`z0TcI{vP6?c z(|yy$3CA8bL0k9s#?~k?B!OYpI88fRvc-jzgvm9B_G{B=&m3OQ_$lZl2D(N@t4P-p zm^LbsUoT3t?-!G%ZG4pI;17y zp7pWtE1kXCe_1XT1k{SKl}BMr2O#hSz%?yhxx!kc4y(fMB1G-RKhO93B%We^-pO1 zXd8C*@AUnoO!{WA^Ltkt3yrPnXq8HOg==~(t#&=JipSG!)%@*cLfjr9U1-w|^>s}% zXCMS*NjnV&-T&$2xbQSP25E#b^1$RkIHE?|&-%{eELtyQy~3){s$Qn|cjmp^l3W7$ za#=93mE0pnaEJ;fOv z3wRvAz75!X1C7Q(gc=>;j&_Z1FXbduc#X@wUV7Xh8PSL?$&?7~uo4b&EnI}Vb}qS8 z-g~^Dxq6rUitOgE$rGkt0HyzCWV>mp?M5lMxja>LbSMFAlwa3*&;ILxh?&wKnrMfg zFCVhLc4r8}2CWzwQp8J+DlydXQGI0wKkg z>09rYO`1VbHY<8@E?c}#YtfHpARKZnZ=@(o-lH8T_wSh&kc{8l3qX+rMu5i}eEm3fpEYZtiA9Cy7?&X)N7V27D|(o86-ML&abJZBY7Y#y z1qegHy3_2+5aHG2yfy@65`LQ<{LYwqW8v=yhfzHa4J#AG|0@X=h<^U`rMxn2YdB6?6wn1w$Arw;4dJh&d$sIwMsssl{%~es^Vr_98RizO6bhCGXw8vT%9| z^$ZZV?aKEm)tNtxAz%}~tSciKx$stGW)elA)q(iNqpQ85)1b5ou3U3uYLAWsO}WmQM$Q8_n2hR|`T+F7h+a)ynW#H`|CRV~7-(l2&FK4Z2hd59u7UXu2vP2gCy5F; z!z?`xNAJ6E!P`QSBr6B+=czr`{tjmuLNWoWxW|xX3hNm;q(mjBM~a)vN35XQom(%@`#a${M(P-ct$k7xFT?@;_72%Me?FamNC;OcYsYM zEK;5Z)3Z}7+ies^pF>nWMvK|}?exMV*kzQWV@ThVw3b6-B;Al@q^;q(P{OsOM9b@5 z{<6&_Mpwq6mZqPF*;B1vS0BjE*~DYp8DE%DfRv@CrRTf7-~;u(7X@cg==|5_Wd%rW zifblTD1P@B`-4leKpky2f$1XCT*q*6g29HD2nSE@U~TWxLr&D@di`xtSwz#A=l-+bPY^I6#Wab3w(s+5uv4BXqR?MLK%P<1 zq4?pL7_XMfozaZA6n1tZHfD?bw0Uy%=pDVtZy?lm^s_Mu1;Qw!B0nY?FzcZ1J>KA# zbtL!7byHAnW-pbdA>y$CTdf^+#*X-&qFUIzh{-dH%L7!)FFN9!HtX(Mi~lw%c0HH?{Q^|JHHD2e z$W4O|P48p+o0Y_3{*H#>G0iCf3xyDt`UX-zvEW2Lyz=m*)R|;qkD#ak1ANmo($5$5 z<QL=>k(}w_%UtiMO@_SlhyN%xy^(P>7ikczgYlyc{A0wY`tZGK%yEWy4CRYHjtq zhbKLQL#@YhBmHG_kFe47v0T`j( zY@%WG&r_6!qgx-c^|?Lb9`3g-{mpG%_97v1{s1E&Mg*6IsQ<#*-A7V-4ECTPIj(w$ z7{o-wusodlr(Co3N=u7})#A-3g+ij1p1F|(3Ern`Q0mh}#PI|_*wK5Zd7Aa;P~45D zc!SQv<3dF$<~fS}a%n+G4?DAc?EYd-xMnNENDs5ZJ`f^*3R55}S}YYIi>gya*y3*| zY#Gjh@Rm`B3(`(OcWO29tJ6NLd@=-X2&#e9TrsS4T!KE7Z5Z38aN7?$SQ|J za5;s|uqsm=Qw-NTNJCM(huAF-b3FE>)q>Zez9=lZafHbce5La;<2xljJcQ}degCB& z3uHfld4wghJ!uF?jSfK^Ez48#9<3anSN=;4*e-1OlP&eM9o_Po=i$>st4CQ&NI#@9 zO4f$yO?0wln$1Y5T#5eCarlD*%)aECMjZR=i-e_t1{aEIAc~|NRPrHnwG@SyxWk%g z+F|ROioIz2_EEZ!ASBPvtull5*E{2s%THP55fW}S7cXvA{t2P5(*d>%Aj+E~=FZdM z{&`&NoUV~yAwJEHN1{Xkf71H((j_OFTSRDD`TXN9Td44`O;Bdf6H(RhpPn-rU?>=2 zexjG9*G_zO$CJ1Nw_9GQaY)Mfk4SjRcslL3R$at8XBwz%@4*TC^x#LUsXZ*!AxlQA znUxxNNRqK_$m^72L6}2XEV(_`Zq$d?MS}D3HR}(V4h_S4M*-CR8~Fjg<8pH}rODz^ zDxuGYGB-HiihaJP&r-cbeGA(BM=M{1z_}eoi0l*&nX6qmd%Wr zP=}hfDVYiL_2V=EjDRPW$nnjdI4pKZe`PkJVP3 z@EkrMSp+GErgaWxRn+7{p!=!fBbgNOukr0aw3|Kp>@IKQ%tJK&Z||3`_3yN=_DDjD zwNddpYc|{!S$g@Xg9g39IbSJMA=XN6%W#a*)#ofoUXQSsZ=Nmr?Tf%HHD-%l397`B z3wd_^>obPykA}?Eg=maNo5K0mhfPqZ$B&%w0Va3mrXF3?&Y=T0$!&$P(`xLYKY7R> zm2ctDh^m#3emYs$9f`382gSr_pWw$~0E2IUwW}20#0t~Ugj16C=LHcOR0ph}D=B64=8<9~VJY8JTlci`^$ zK&eyL-ceyc96Zr(%Pb0?O+Y{697}wSX?Ys5zFBvH+&ek?3*33v_g~M54Po_%abJ2m z+$bV~YiJcCQHa}1o4I8B1fRsR3yd0G%PA6jX^6#--23E#yH?8!Z#r5pK<^E{gr?77 zgUVCuuMA<(0XoXj+m_!Pp*bl5Ba2_AcZ_DN^%Ae|c}s@OWgv_!pS5V6`V}1O353;U zNPnVkZE(k+-;I;?h>bXQXI2Oko?+HzAD?;{=>DT3Y<92ev6LxYl5_2fNNFk8O0FVN}H~tzM>_zs55DnTy7IrgAL~CnKT8a6# zq9I(UFo~>@{wn?Hh!f9?kKnf@)bOdZDrSWRHb8{ie+eTdfpd%Al01GSctqPzz7FS; zAGH_5uxDsfbzKZ*Q_9$J(2&YBRPMJpKtRdwP73j4OXL(q#Z#u?Rx9=noMFvOSZc=4 za@NO3fMXnZx-^>=o&oITn0us$Ev0oXMmj&+yap*3(?`N?T(&a|Ykz-ekUU8xqPOZ7 zymD~tTHv3y?=zY@Yg(@m1$O)K4xja4;?=z6Hm^yvE#tjlJe)hN6hFRoovLQzs$G~( z0f6s)FYAe;=$K1f-nWZ2GY_N{)g_`zF*YFCio>Lx9#OC#Q<#hi(cGq~_{R@`G5KL_ zccY({EX`!260C*M(Qe|Tjp@;@EPk`gR_uT=8J49$RK=YxtQaxmx~s%UUMAbM=_59A z>tLqX5}==eJOL}gPPX;Q&gAHP>Mmt?a{_PQNn5i?=i5^96?797P01j&4_K$ro;x1~ z%Zz@uBYdKWxKFP|p7FezKHwzfTWt4s*2hoFz1O|Yz$;|?w$5qmbR{P*QiXAsjSraT zoaa97pHPAmc7L+Ql%%xv(oVsDE{N_qFxuI84|`9$&E|XGi|FqvGebv}X_R##UcX|0 zV3~Fb-Zu^C39}|84jV5)Y%rTC$Z$9#?#heQ#gwbA*%9O8nxuc>%OMDi5DOH{10ij$O^>A?5X1VkEL?3kvv19g%SCG}%~sDB@8yNJ~U*SWT7FV-Mt#2swFk zrtRJ_V8hvacvch2{O$pZ9Qa&mGVc%$%nvFh_6TPmS$Y{#&`k})Ktk|dkzI~dU=C4piL z�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
    &cov(2rvIjM1&CW#TYP0j%-%FM~ zY3s%uQ?HGJ9B4Flh}jQtKFdz{*L@%59c*9`4cdey5519hPh?T>c!h<`0Zv(zaopK1 z{PExZ2rYnyeadW}BOOgjAfr)xe|1Ha5I!t_^2lVogp5`sQ2!&cmydehjV5IBNHfSx=aUcsz^% zI`mfnns~Z8KuXlVP>Z!W)PB--u}UaPK8!YA70=G+8(}`lr(PQ$jPzu5nwKBp630Kw z4g__lYPY&cI0D0hy4qovKBQJq{oK#+aop(|h>)-y*r3Xs3I2IcZQig4hK&E(Jt z(U~2qlVgU=|8mX7uJxd8V&r(kxgP8u+Fy=*RgR8ih5Ba}z&OadU~N_5zkfGo_^CN!wB~uz9LX$Spj`{&c)9j{*ZO;A(YI`Ekk_C%^+( zrX2(4qXqM-wh>@>FRhvJo-O(iY~oW@Efc4V@FA1#gWVT${H24h1$?B=;}3?8=n3#_ zr#U|^;t=gtl2_z*t(9McA)5yGM=V}E9^m@Y@qy#G#f^V*!_U(?@6^X|Lm#@5ck^kZnzN0|qvr`c7C(=o>acjLOHlbY~)5 z=QM3$Vvz0f+z%Y&agp6W+7jIPidYw0bkj2#b*}edISFEPm2<%Tv+#`z*PGHn^?A9+ zjz^@j|F6Qm9+8yKvlU&M`^$ASAB%9?J*pT*3e@Z)@lZI?T-*hXj~l4R2BNEftWAaG zaQy=gumfPR1LVZBiI7pntu5{0#ho^I7TuP`qKS8i{m>sXlk@3&Wz~`ORsxwlMXQmkOBXxe{ z9l-AW?AWLi)F!Jwy$wI^q>Vvnbz-E_xuW$biJ3Y8qze*?W?6^+;KCk7o*0v{b3jpi zU|&6XFxs$fW4IF#x9p6!eBBzaf95`|bYR(UY(dbD?V-k~`Fphsv4c+3sEkWAgVzX4 zv75?n6aN13?Nh<&>L~;${)1{GM6dx)^PbAbDExS0zLUH}+?*HwxSQf?kX6+&rle!t zs09}(W!;MbwwD>w0_XiG8 zhR7_Oa`duIPt4#4PPKbv2g2+MIdad35Y#nhAgInf%6rWZ+sB4s!gOBi&4qv5z zP)s+7is=fRHA}Gks7!k@9wie8;`6Y?Sb}i@B8d3UwulR!_G%b^y#E6$|6@Q@$v|jZ9Hz@1FW|FS7%$9W63sb~rxpN$tEZWS=XsC3Ba}&Maiul|k!anMJOf$`5=;Gy)Sxfbm z9Vvc@!vR@r#qa)zi%F4P*t@A)(o%Zj^S@pSO%0%HG+w?bP;^9!o`@EG{ROk>Np$-i z9mQi#FkQD4$>1Pi^Hh9hzkE9e^v-$+GPYdW`zB3MeVcMvfj68Sy_Q^Pgfj|Dqn&mB z(U*=j`Eeehk7&NSgx{n5JshPgZ?FT}K{+Uo`u$m?EGTQ4gZ+-t&#p-S0K ztOHU4vUA`DgJ12dwP!y4YeroGK~NSLNcEUe@S~olt~+^huD!y;rG)sL$-yqEUd%MNZV!D+~l~V2AglvMf55>ZMY;ZJ1VH=b4h3p}t^jxi|6k&oKB5 zI?P@ky9n$+(3!SXVfNaU{|+4P-Io?3Tui>R<1R4~f=Y2#{%GPc>1E>V3)bkX*xzG%RX1G*<@X<%xp-Cb{}pm zj>Tp>`lL5n36okc?kwcsH}Ao+e!DnaBrI~nGwT{1c9>M4^CP2aoo5pc@E5cK-tRI3wgq~Dgo$~#&u%t07u^8j+8@p^+*}sV zW9Z&SFqzLt`s+o|C zKkwlBskn|Fd#jBD2vvJ`o;Z=jnyOh~`);)cm$x(4-=PC7it#CeFgjC?Wp()@vM240 zE$`N#*-mBCMQlIHAfcOn5_dz;xOVd4MaL@(H4ZYGD;9N;kxfDAt>l8?sKPs!??I}< zu!Q^Xjv^QK$N6dfV}4oFcqLFMIRLg(2XMVHmUAeSKmZuF%)CAVIN!N91mP<_#_h_U z6Ln&wL+9uaL1-e6^{3|O@C@+1(@^S+)Ox?C0N&AHO(_h^)2GzQPR}8C*}Pvnqj^b^ z6l%Z(X8Dy7kWEel|1td7)by5Y-~h<#srBsAs8HilY`^W-1hLQSv)ow1fs7YkErT6Y z%ZQP|WmdiDzt1ek5E%EcGXfvL@jWdR{XV8~xanviQ0Ve%+jsQq?&?C7hIr8UA2XW! z;!{7)BebIgO=Bw^#$~t(SK%194;k6-gah9X@1QU>2jmL3oZWY_u~55H>8;Qx46 zRZ}N#Z+-#}IyGdFpLbkepKe1lJeSEs$$tD0#QR2Zh%!m2WEi|)_D$#yBzs}PRHE?I z*5@Yqvj{Yts<2jI)$ll9UE;bKybl1Ax&_x(w~>YII9ov5k2<_!>(B?4q;8gUv0cVG z`Od6Nd6(M;5p~lGaF}pLYFa3Swe9ZB-QYFbJ<={3ve8;iQsS{c#GMw+_JM{_A-~ya9*Sr04Mn z3yi#DT<3QfJNwucqra%PV>uGO0-um_$`y*L3^w2;yJb&Br!nMvY@|t*c+gHu?42`a zCnmY-`%n4lNfe=Bv{uUwo+AH3VY8-7^50EJ%H*`qUBn#iMCXC;wu2`r0>seY<2z(K zCjQ8wZZJNLR!XhYk{ytmG-hKP8AH@9!bb0f`g4$e)iFOoLw2O)?lYk@(u`_yC=xHkI!zyp62_>@ z_u&K%-PnK$53#31zU!8q=N(GPw+r)&;Eji)TPoJ!5L_N5Rj7g1yq4GKN!Dj1qH^?H zf7xi5;YtkMw-rGWhKt14aE8cFopA6k|L}OMrWl}TVm0+_Fe`WU2x!z#7&a|HhRVGI zZ@}B)6#FZ0_no<9dJAqNgV zuKUN0?xYkpu|u1;yaFN|2Ev%Z?=rRNcJ#oPUYO$9-Urc>Yl` z`LSN0e?6(Kv1`Rt{;IS=+3va`%XC{m`Cndv))sieE@6D0qqdwWSGQZPsO*z3QRE-1+ocd4=h|p*#~zP9YQ| z;U6XeGgT9cD9$nQAw)L)6>NzZTOJSF=AZgx52d6|M0lPODc|U~;Z}n-G&j?fq!$3= zT%?$kV~1q_x)l&E%xYyYvwy>*ou>N2!%{~%4>xjU@e_+rM?7@lTajR9`2~I>ujfZR zQ2B}m1}~}5(F-q=^K7_T?hkm_({lIcj-8f;^=1C^YDtoAiv#p2jGG%^?F>a-AY>Di z%2>O;0=ger`ANaQk& z_mti__@jNpewa9z==Q!C_18mBR|87&SjAb71G7Ib;R^W<>E|OUEO-1GYK7ho@bx&@ z?qMN#3PG6$i7ycBw~>5u0j+P_K>rOl-B(037*}%BU*s>g+-5(aD#C%`G+L<>klpz3 zA^w>{uG{ilPz5>j;v0UwAhi6gMuS`Z^C#|&aKxc~f8GNgd9A&kY;he2p0ArT zAM5--rvRN0*^e=(b=9=BoWE%8AKv(^EeI+UZafyV^faeQ>s?L@|KrWEB1P7?G5IDk zTxT;ojG195!5G{Or_zr2TOeebwqhSsI1S){0*0MxD@_Q3T(y6@G*ZnPjM)P)LnF>uO`lVx?5y(3ZhW^#*(s z&3?Adp;Q96k&D!}w5p@ATQMdyRQ91?dScD+jSQXhal|TqSsu?gDD^t9^~3&E^sjCx|{!Yoh-OPhcM$EE^yI@{~MY`r&4k``u;Y9VQ) z+_xv%2$^y1U0{yI0s78#_AWP?9#HvJy*h7yIa6(G9>J%}5x?k@?odcfL9DNAoPe`l}dT$!2> z38xd~h*N_U0@ss)SEFnziGnpmo(nmOl0sy5P*5AegzI zGmo{USt|%1D1QZ+th^!U=OG8vWZN8IDT8Ft6rcBPyrTV`rA3Y)da-1ZB!c5%&wlIu zz?m}-iqDLF2@hDxJGVE7EAo=#}djI?jiAFjx9J zWj`57z-NkMBtp#w;kMTtOPk%G=J4aIn!yA=H1NNaLLj*@2;)SQG++Kj3*r&BK}zn9 z2@hQa-{6mat)mh86S=D;)>oOQ&2*ct-Mu034qmX1vhgXuS35)x>lr#@wH3x$cD^4O zL^Q)g)58baNM=4(#OCQ80%_gp|Hau4h@@@$?o6LW*s zzK!tDRhc$=Mfo1-~kXz%?Ro_O}H zRImUd>~Qd%rA2k8`A!8s758C^qjkpxS{N)W4hhs4{jK+u5-?9uMI=?Qs9eVZ$Q(XY zig!MM?4Zk@2V+UsUirQH8y1dHTIAKs^N7wgIv5+%|J>n!-eD9(J82v6m)EoAFYE1K z>amw0AZ#`Tn23`!RqvefuU^Ef%$^&>r+yhAV3j>e)qeIMgO7$A+O z=i!cUX2@{U9Q38HNU{wd#66Tm$)Q4VLk5a4GXIFfR5+%Cc$(&HyvYZOeGhlq9P3&r zFp!~z;{Mvc;WUOn;?mDO*q)F43ruv}bPdqx;Ilm|Bd- zMpMA;nPb97XN>%4fr0KKn^j1J_7?4lRX|{|BYtHU)X6+6nd`>&)a!O|ddqv&wfmxo zoIMDyTv@6i0XFfo&_x09qaUrex!XMgg`_$afo7$VRM{V!}%{zb!%m{ypLskpJpxda#kC$v1R%ZlvX$dL0+3MIM<`EtGvP zDM{BCunD8f?DeuQPkDvvPql972{M;fn7cVq*#dA4cH%^4Q^c^ zt#7GQU_0tsVO~k6Vlg5my<~2DX#@Ac7atwwrna&#J_rTZTp-e{vo3CuJg;}$>P@T_ z@e%LIRyVftNdbrj=3unvO9KNHEoTKS(;KsbI!_mOGFPrOBD_`YzupZemI*APbgS!AIA=br4 zw9*~_p_w{~$cR2gKrVFz0`bx3ZQirqzi}^_h#O4g`_Q0RU|CAQ2@?Q+D?myQ__MCTd;nBuh9z-;y*)2yV}9o;4V$N zJhtVAmQ!aPC`O0Irshyp_fJM2u!ga@e$`V@q8rD#H_;6qt5{HGaU2_f)4Zk)@I-;l zr`R9f_{8vYyjRH0qsdSDM@jcH{Aje$jB}v5k$u}ZBYeIhxk!dsH&5!H%u>HMH7&`r zEsW*tsP?!7KP2ei@4IG1aZ>@?0|37s4^q}h^l0HMZ?9SBzYkRn0>o+Zx$_YInmGl` zJ4^5U?2@z_PulOkOmcg1{Hv^jTC-v@U?`YwIE}~o^?HW$q&fy7Kb%1pW~&X)EOZ#F z9jSN3^P|Ll(nG~>z^F$;;mg<%_7^3&-mFCP(kGs1iBP?jxHQzUciEH}vj|aMHw+Lu z>lE7P<|_{A=``PIzTnG0I6Vg+IEizVqncngL-7Zm>@fPPio!r*&-xY%DXsH(yUY2i zMAIO)ac~2=c9-Z-4Ac*6!~0v@Q-f9K?NcKe)~T=g2|T$4dAH-QV7sFs%N}ESv#DG( zg6D+c<>;aB@JxKSdQZcRye$y{q7&=TBek9B57%ppFhSnn+3UZTfeyIew1TJ#0=`gy z3eQr||C0M(aP~{;^uBjc za2N$DJYrdtvLLnjo^rhFa#+AFX&UqP&%-biP062! zOC%>W$Ok{3TTWt=!OCB`I;Jq#F{VFb%+z8BybuR?kLlk!g~f$f^5-`QXO6XyeLJRdDip8AoPW`(j}8-Izal;Hv!`)5g@%3TlJ;|e zf>h3NeyPe+xPC5dflP~llLajrV)ih{#Pz8!bpC_qJt?5zXW`HLaG^puO<+b!i4^H8 zEt|0AE^Y`Cb@x*Hf;O4#2lXGor|z8r8`E5di}trL2OV;6F<~5B(VcV#lb0$k5pGqX zcr5sIA;&5L3*N*}mo)fx{V4e6?^tgMUDjr&z8|*=Gek2Fr{|(cvpu7_z_Ut<+@cYU z>XpreX0z^_5AygJXBE&wNmX~t*^ zaU|RO@LKqq-QEd-hV6|+jC#R=xL$frSqT}BSDiS5bKuAO62aI=@kI-L`^ia;KWyEA zdI}m^6^>6d(g0_sw#Uj9i)(GOC62?&>f%nu7c6vD|C7Yeom8e${Ln0aI9iTxI=(aaSdNN7?H#S)2Y(78{@k+)b4~4RFGUvK^3_Lm21;p6)bb zXa=$U=_!X&H{Hd2m|z|R=YMVvO(ZXTdZ!ZHT|A1uzOXj;+lM$mhpTa5XD1kUi34QV zgu0_iTxbxvQ(>w%-xfdw=GRF!>}&RvUR@}M&lE$BI$$gXVldQHi&VXIrF7l2b2PZr zzuG<*-Wt1>{8fK+SpbU*E&c~xdjN9qs)7*@W60uCq0YLx92`?sBy1JqcsH^f#{8CY zBl-lkY4q=9_UFFbG>bL)^ZI=#gx(hbb>kw0UA;4)@~wi0XN5#V(MxfD-$%B;j^(fL z3!fI|Jnk3ooiI`{9w(^`at%^q6T0qAeMLGvYujJk`ArPu=$Y(0J%Z*~v^-%>X zjLPr2z<52F&B~8Q*X(bW=!{;W`N|FNA8D)31H}4;&B=0tcFgirLK6Ir%8?~>UiEK; zCxK@Dn#W`w$5A#iA0;?6%gBpNxNp!K_hgj#(RZpTJpaf{Vju%dIKJnb%0kIYI8>G` z2`0T=9Dx*9wY;aD)1IcRuuoHOd@l4`e~X@u7&KHIR^z*1ip7tQF3QHEnoKaQ>xXycTOmYkm7T+4vCnbS@%|#K=u{o{Oj%Sw`FeW+pLJwhLNg4cmJsnT)p7Iheo3bi3pBZ=$)*j zo3@J~@>ctpdPP2LZ)Y;B4}4hO^N)20(M)%0HpPcijyeS!xgcLR!$%DW0*eR}$;Iv8 zj@AUL018Q9)G1Fqm(Hq4o?7ph3B(H%0;cl5K`Nk|3O3CbNfEBDVsR3dCcnqw;_Iv) zx{L<1eK0JF@3ek|v(6f0l2V36ak9Rbs9_rsRc-@H4B38r47#Vxm8N)apqtC&utguI zmqO3<^4;a#J1t87*^7UILq0jwfNo%iXq9EHGXO`LNsv@|vD0#Tyw{H62J2TEbWBDR z?~-{P%vsC5gdzYH>AJ?y|0!SxZUf)856c-v+XYBBUv4e_$N5c#!3}rD$!InI=7@C% z$hfD1VK>{U2Q$E=os6^wcWV<-q9clIvpCt7-`3y@{bhCat03l6uEoT4KmPui0#Z#t zdBuf(qd6@^6$!bSa1phhrc~pZ4oJKNLSwKctjtO|pl57GeknXhSD7VyT#n{lW8^-i zVw{Ie&YF7e6vGbKBB`BM;|-Yh(0m8FcmT)WJwJf}tnTE7d1c~M=l;}r2-F!^EgF>` z{xh)3zu6bunY+84ivb|Vpk8uv3mNLH4`rakimUEJ+MKhdf}+wJof)(Vqr|D$|J)Te zCUn`-WvhPMFGTr8)bE3%i3lvHK^>W}qAr0)9K9$cChrD~J4juvOd{B%5RPVoW*RCi zAIz`j-K|biz*U5rF)xo?7*NjHiDlH7w9qH)pR%+VJiv<5BNMhhb&9Lb{VfY z1u(0KJ}4FalD}&9RC#=6)o%Fu+?ZUUa~DZI*Wu7o8 zMX}VusA##93l!$6V$)RTa9{;+e;Z11cjxRZ^*||FJ76fC$UI2zvl3yYtRo!KNE9Rn z7)_g&B0U=bV*Io&(&p=X6*mteemYM8iSJbURC!|)%+rQopXk60hro{w@>N)DFfoZj zJ!Kq}Pt$*`TZtI(k<iLXelb7=U3JCunOZDS8wn*wcXy*8g477APvv>{{GL)z1i-2yLUe4I#(Pxt{c_AN~4fS?!Ew}Awr~+$sR$L z#Q85(lvYKzR6oF%VFO=pTC6*^nqjmskLh%)nzBv7PtS*);8$vrn&Qyik@w>n~i z_D{!Z|G`yXI&cFo$3B@`>8GBa{bOw@HNG(hT0)3aVlVUK_MIczoMBUN<$j^3Io?u9;tm*1%w3ndP>U-&)e;_lA1eD!-&A+;IH`h#;G*}t&$=jm50Bqgb)~&uZ znE(m`|NEn|#N#WrjHx_QEGvu04R_zygOrvIWIpxo0@NrZ0}+#k-p2~eu6&@w3cDPT za9e+p09`rO_hTvJ@o;{9dOYz)bVqYmWh&K}b&E^yu~i?*%l_HG4ik6wL{#X*!{dVU z$$ZdaF(2zK2pR$O%1%gmIN!p@JTrF7%IfdjAj=UD33JJ4N0F*qJw6?@c?76+7u{H^ zN*`B8j-K~`2O~|tEAi7zvjfMjbdQt`Z8NdSoG7g2S%->?&y@xfanDj~FE-~iTvA`8 z(e3LVx&Zm>Qf6?iA|iJ)DN_Zu+mvK8V+1^&U7|Ae(2NTn(^h0_PowCXM_ga5hi1N`j19&P&@Rbhr4rYkiYxzZUIAOoRrR$jdyFLtjOU$hE||vJZ+l#~ z!>*Vd44h2AH_Eft_`3Bxppy1GSV)-I8cbWK4;=oGfgb&qXpDc} z4IJ4+Rrm6Q@Z%tl7D`SV`C#3XOo4!v4g0f2CQIzZ`=rQ?nkC!&{q zo$`S8I!&=$J@hf~jjp6MvnD+j(VkiQ! zzCU9E}9u^UzsWLeg$s$5Dq2R5)kIAKA@&Eid8!(#@t z44KAB({NWrt*`hLS-MutpL}YrZk2T~V@aO=Gwby>c#nZdF2AGVT)%erF|j~W5#g7K z`186MD5beAx109;W}~g&_HJx@H6K_XaQw4E<{RYculrMJ-hW61Ce4}5O_nfs!vJF2 z(@Di9=?WFO(SPNFT1X`di!)p^G+fo^RwvspG^QE(j+TI|vw|zB7&`r)E^;8#*b28j zbi{o$#K8pQ+rNc0!c(bT7uL(#+cUel<2vbTR%JyZwe%o9qt;{whscq-J^6dwx5+a8 z*pul2!Eh-x;YTYxeSo3J(UTOh<7g4XyS07{zO+$g!1G_|@ESn&!B&zVv#MSqr@ntxi-*bt z?9TM2(yj06JD`Y>NNS<+x5mjaFSHX^u`a}b9K?ot|9yW|qmWyP&-G7*#wq_&V8|g+ z)8o5#)sA$g`Y9JZ{xm)G8BOI0iu8x#T}>vpY>MBX+J#<&TgxHVR+h7S5^$X8;XrXu zBno10DumsS0hnFVssGC#x4HEo1qV5KvJglP1mZh8@`KK11>PcrN(E%y-~Rw`6R(Vw z5joqTV#kmqE`K*)MWMCC$xs=mt0*tn7D0KBeC)~9uqOrh<m_Q@d|8!dhS#i zj<+sRVtWoj$pEHEh%}!Qo^oE_X#9-V*#;K1gYUGf{c4U5kzOeyLq^IgV#z23h9C@} zl@7an5W_&K>YM-WgUn{hio^UUD2?X-Q9DrL!%XQVH<0n>3#KXS5T_igXPiRI_d28$ zh{*P5KEkI%35EpmwqIS9N7=yU0y)N5i8Y=%xS%-09;&Cc3x2Y5_l_xw^{<(A0&mcT5e@9DCr(Kb`ZT~z;bld{S>{mA?c{l*F zW-krk`W&S>Sh^Dt{gy|hxsbSt`E6|bj6INU)$HP;JlHImu9xCK87dV+q| z<@bqt;sgA^^`PUx^W6DmPm^@OV91@%vkKVOtS>l0hZ2R=kMgri>5ek^5{1i?rRhoA zOiVE^REW>zPBJ)S2ov0Ch^8XAr)DIl86Dyij+CAM&Rv5UaN8$$D&&CoP^-B*qsYF- zdo2vRNhSmY$09L8Ba5X_*aa!;0&L)TFOsN`IKnL_J2o=#k$D#Xp0G!YJ)O(4vq4SeNp$%gG(KWTl7A2lYEC3YXrwRP7jplhi2Jz zwXwK))(m+HdXs?3>AvxJ zXV2P*LEAWDLLk5h$>-13q4Vy|ATNRfQS9y^}W2>9`nS}fmNqUP%>_GHXH@P ztK1wqD-DxWlzZyCXhuP~W#AY>q>?;erW2?~m3BCcdna@Ikc7_c1DgskV+3ZNfM57G zJIY^DGs!^Gu=wOtXtpRqP^1>z`(ICTc)c2ReLRZDzNu!86H+n&|vh0so(AO^&s`%25FZSR+5sMQ3 zhrZ=gINGxuv!th2J})XwBBc$|M(ZEm?WfcvU!r8X&?&bCcOGAYXgdHp!jwo-vDw>f zL#PolMdO}MHNzZhtsA>tmwefDdly_JPXMQpvf5Ko3R4vJOT9hft8-f%8x4n5KY<#O zqyHcga~$l)*LXxYIKvOL3>Ci?3vv4Xt=gY1qI^$sSt3?E+coSts+hiu_EIj+qeD%s z*O*D={Z=$&+aHN%)rc8D$Lhh49Js43$@*!btLr~@SDgtEl+gOcTWo77Ca5u2hxdZj z*a_>HO^anqkG`>z!F{4JfnmWo3CoPo?+_+G9G#rs>%Dfys1ow2wylh-NlQCkfbg7} zMrHY!5lD0g0^~;B7x0{NV}@|%;Vqilh13i}#J^F6k=zRc!FnAZG7tfHMj`4(vxqS{ zHRLmF74D{w^2N3DQ6R(u_!F!ji`W@9KibN^-_-+Snin&FOHqUA`STJ`EsI{kAq4PG zj~IO=khctW;Gm!(%%UZnB~bI<1Pt@zkmBJI^fv6pBRI{sSt8%uA<{PIu`XR6SS%U1 zb4-uvi)z>9pASPZPf&VN3-rBQg#U$+2UEYCv0KuF9Ti&bXO0qOkBD~`m_Y2J?2zhM;MS;{b6{SvUd^6jBBH*WW4 zS<|qPKo-$0r$)QBa-~Ix4XSzupRCM|@w7T*Jnl{f7c^KO&^|!rGpL2%H1pTvq|CC~ zeqJe;=Rmmz^P|WN;pP{cm6Wby};wN5E$xj{E*gb8$=Urbm z&I^odaDHv2a!?`2z8GR6_fjV?th1`!=H8!6+#2 zN?d*Bp+?K1#kO3#cDprUybDqJ;3!`}G)5QgAA-ff!0fWqN^A0vACWcN?9OcqC89TD ztlN2P)XO?9K=mQb)~up33-ot-&u?tyjE;c{*$gSTCgu)karK=RtdFy9R`8!SG4PxQ zlzEW)iLYbORby1@SJdr*jD>atlWe1mXq_`8%43v!%=-i~rf@H)rOD%ixs(?lBoI&c zZ5XkM2KlKgcl<{(D_8C4FY0*YEBx07p9$BQHSH06dURrSCt6hyLQ(vbs(wxfb_|Fc;Q)R2A*#0=N*XjJaUZ|Q?K6sRyPb=4t7JIO zrF85a<1A%tYgm>pbosz#UN)2Q$?RrJhDV6rzTc&8SdQ_$RQ7uEs)vO}i@Z*8H>u%d z<0Rfav{6{Fph&$KS+SLn|8O|av!C?OJry*Ee!IsA`6)cEQfhuG{OwePe?zW!GW_U^ z_7|_tL=I`k>~$yblsy!d?q{o|CJ%NS@?q2Xb7luViuOpzv;`>9rP(CcNWM!P{<}rs zu|MRFSMq`+amWS2^_gv>Q6||?NVrrQ@^ELjZTFXPnM_2vdWEikQGobf=gZjCQ_Qb7 z4BN}&7s;b!7%I#@k4)(^k>iVeK~m+p!CfxGm-}h0v*}BT^tlXRZAvvaX-JYBgntqW zzJ08x*vgQI9pp-7p?jkJ@QfF+b)}s@C`U_3mY50=ScZTZD;GU1U4w z9+%9x`hfyy_}HNvdz-D5+-#l_85VS^rN7bkf&@;)wAj8L%C>O5*&mlK6|Cr$Q~pzD z9>8Jl8y4oypq@cuP^)i`pW9m~nkrt|{-raAwL2?}P`BNz=oKeHx+SR(gW3#L3>aUf z)LXKUPyK(OFB$zI(Tx90{8j)N58YP@0%g0Vf;%EaYhyczz`tA*d_9=dlM;4bj>^jl zk9)EC^o3ldHj^0O&*$9ilgiWn>2J)t1bk!*cJ0!C?iqs?RQj#?!Yn-qo+^R(z(8^n zN^+Ok>AvYW!@c$%9o6;hTvuoU8Q)f0hwHgCXD=^)1BknKYLQUey6jxzPlxB|$Xtz~ zs#3b1cdJI}yf+g}+*0F^jlW`Tj6_doeo}y$nM3DcwmNE1P`iml1|`N-1wFDO%sdse z`+Bm+o%4Tn|KEU6nG|O5R3p7ws-vx?qE`2{i}JMM;<>H~nts%r{7i4dl1yOY6-Vat zu_89Yf~=^VRx41plA^Sl`t#FuBq5OWZ2?YHUp8JlzowPK5Bm37{isB>-@!~D?)=xg zmjTWjOd*b0IMML;FKJ^KV{h-%PHAwyj zVK)9CSZ|Vy(C$_N{EH3bZY{0d}ln5xyhq0mCHDK=f&NG-ZV3+r7LUUv5->2|%{ zuGNT8wf0DX4Gs8|`;y2X&sx!NVa|Yk*A8=^2v%HS^B%as$j{1*kZ()HuP6ext~s+n zfLF9ZQK^7OlmZQ(Q+hT+nwdJtCW^ASyb;#C6zNMA|KYXJjfvmCHbmZdu7DnyE9UEG z);}hQOPky#c`v$BbG!iahNCb3Z8g)IE?rW5mzek(xHo@FpN$k420=z9B|Ytn6MM)H z%qbs`SnmMbz$<^rc}t8!g+Q)IPmwgaB2b~rV$5M??#+9~OV={Hr4A7d^19iCc-tSu zppfKaQ}ubW4nD*79vq|Gl`(E8TBi4bhN~1*9T4M0iP%f$X@?{f5RCxt~Ji zT&?wmtw1bZpLz>l5HrZ9y*&%9^#)(|1`UvJ2lE_Vqf%By0R63PuN!q&nfj$z;z+3^My6i?i| zeH6>-hMS+yr$2del6B?=h?t5-fRU5218{IIleNGffcb#nLKi{iy{Nn{9uxMOD#P{L zaqkEBjCn|x94G6Ku~3G-;-3TYpJo%a07fV=$>1+TUk}zpZ|>HU4EnuV{DWXBjK?n_^6h__#j&PqnMJLZ>SD zqFLnchH}&#SrIJ{v4sBq4SxRPHp(?Cu4bJc1MZVm8yb0dTR~n*gtg%zz1{ntzT5A14A|TksJl$eaYB>rT8BL zy5;%*QHl6u@E>IUr=W`ngX2+TB0wii6K{27nBGcYimDJ`C_#7jn3N5?V_3$++bLHp z9);@@GwT00au`Mw@V;YuIz+NoPG6&5mG+pH>Wr^#p7#Z5?%4Tf;kD}b$^V}PP`Ish z+qXgRLhfH0!;;R$N4}fl`MsU^U~dT}G02LLg{=#7*N2A%OB5sMULMS*4#6}Fq#0Z2 zwE2d#)hR(OxvR2Hy?27j7k9bsQ_h%1w!WDB(W7&~HF?wsxD1c^koqbv#=)SkB6ytf z{DaYO`x(~#v5^zMN0VpDr+NOpmo^-o=V`dmNDo}Q>^zO;d9KZqxlm_V>F;bg^>SQu zdK%?Ox{E=2ECT(JEhoxT_E$iqOHVFlf^T&~Djs)}R(pVwx5cRqr&g5s zQtZy)-?hk&Gtobn27{((fjur|_;BB}#I(y7hjklGxM5oQSV81g(QhtMF}e+VZL0lU zVV_^Aw!v7KpL__jfEPBZ4giLHwsQ#2tHtLjpZK<9f?^gL2{S6atSdfb-xX2C1 zS^j#;e{}aNi6H{jr)W>8>{^`EGQ;jDQMkhbUSap5J1at1a~z`LyOvWy>VkpWOAhKF zXuLK@s4*0ZoTf9fh0_v3ACq1ljD)Z+5vi~SHp_~0xrmC1J7R6!iU;9K8gGmv=e(E= z-K=8Bc2ZD3S!fv^*w57%1CDnmuj|f(TH)5mLQp$&@j7F!w}Xzy zN0gB8QZgUS@t9*rbbb-2WY>!?0>HmZJ9h>rrClnhni%2JMu!s#%M zC|45IpLhMV`99FYOF2^r>j|R7r*PDfJNFZ;!=s=sa`{+z`3x-DhYX`JVlBxrgpCTt z4j1|w2{+_`ucv?hEH7RN&2q`lGf1cTt3RtW(-0##eewbchir$ z`?a>hWd*&--Qb4mTDT-Ag=+i^?)bk9LJaI7)iYjn;K{zxkO z!bdmai~~+Q*zHV{gQqpNz|WTdg#A+zg5-x2;^gU~@mGVslZLH)&)@(hIIsWX&gCy2 zyXH}$!CEKMzXJ7-B)-bBqV9HEF_>hTZqym{NckoN2lg{{eUKX#{4Ls0 zkt4ctkQqgIGuT`S= zB`51`JI1Xa;HW1{kFgbyr#8^0j^4GW4nC1biWr4wAh-#Rx86AS3aQD_3O?{x6t~G! zl2}MFO;`_gV(0GslYuv6P6d6e?g;iym=Q!{ScxtkNttL%nCQ=!8M=%kCVfGmp6~6? zPQ6$}4C7PX2n}zOvtvK@=JQ`re^2_}p>AxtKJEZW7U%E+`IA~7EU~6?ns8r2@P2Ny zR_T>bhL_0)!|ay^#N>?xGV9`!;td2MN7bhX2Nrj<%DC~o2LEQLKl25gD@#eqqQ#D7 zSY*k;hbe!+&HM#h{inMDisAfynVTGl*r#9%X5kP++|5qmMZ(325LcbO!lPTG(*Bt* z=TzJ&V*M@0q+pEp11gEvP&0;CaT}f+CwDBjoPL^v@TC&iVqZSPnR6uhV}L#MA?Ze+ z@TS6kWp)7U?GJ~Oua@)>FB!T&@BCwzi|4-NjzdxAw+Kd>_LjMO&;}()0_cE@7)MlR zcE(1Qn|H%!u$e1yAIyic%rwv{E_Uvu&CkMH8VNtlaOu~RAe+)O&>Lfa(BUXzc9x)x zAdUCUu?sX_0{#6kkv>;ur9OnCL3MeQ0GVv1ZD3pHiT#nbaTk*Der)Usy;y7!&mt$$ zzAo@_Qn^|+trG2ASsiANx)%P;kI5t7w!l9|5KJ2ou>fAk_oQ?%n6{Y?gY{eoUHGkKJVyF(Ms zsQS7?DOn#Kac_GvPZ+Hld?oQI&Qntld%LUNd8FN2i#tL7JdvREjzi1&d22L7FN+M$l=U5+-oKwXD2HR5mZR`;$t|{MgYpetO zF+FXo5pe)&>j+gZuti|9g}-wG?(nM>N`Kblk`CSJEU?r?1z?8quTUjv)BRd5j{Wz~ zM~@==?viN6mEqerTkTE3NTPMoO;Va(d`t5&u@3t>N1IV zX%JEA=|&a!7vTuRf9;)w1=Tp}){zIXGk7u~O1mN_MQC}iOQttxKIn7X`HC3*rn`K7 zoIk#(^-rR}0b5Bi@{arh-dT6ok z49c5UcaFblSKa@IBr>=GgY{okVGbOV*HLv4FyVbOsnI8dJQ0UcF4I}_zYcL>r5AnF z%JbBR-l(EAhbK07v19qZ@FXqe+WT^>{a-v)w(OyLc^C+B7_QmW=4V3e3P_8AYd3C< zet5Qjr-e^AoW;=UsOHS5Z>Wg|L}Z^tka2DTOa#^N4oNN7NLhR_*smT@cQ&5Pdiv@6 zKL*JmcB9n%@(>CBxml)(+npMKLLL0eJ0kP!o3ptHP<5K?(Pr(&TToXl=9I~5$;xr~ zwB`ueeA80G zZ_4n0gEbf}_H^iUXo?@m92hVWU_~4$rE(sI`AcX$>z2Y|R!wsD23sKTflWx!;@ca9 zs}$nPlVC^`SbZI+eJwDr(g`2sJkF>(`4+Ure4ith`!?sCa9JVQ_uZJG;N_)%oCLe_ z_qxwCbicQ`L~!{llUdftztaG4q-6u3Yos2*d6yKYcR(D!N64JN9i#(~d`N5*u;?xY z>7BKW4_rhg@tiXIaG8qTM-Si!UKanv@_{KCk#>(+R95gV%h_Q^wSO2u8{#ltFbQ~5 z4L0MC>Gx0Ac&E4JXLF0KvF#kdqoQ1v1HH56KPA42*7Qsqvt)uU;eR!HGy;^`OMGj@ z@(bHbPEK*;ZXx{T zXlchC(_~gwpmR9f>7ZHfWuj$BENV4UCZ+cw%Q!#Tw)%8O`DlRGSoq<68*6Xt_q456 zYbS5P%#%^g`L!tXzdM2HGV7SAgc+xBplE3D7o{H+k3V(xXc+Gsai_ZL%hwu6#9jpf z$>ctWb_vlS_u4ou3~du;hb^TLMo+i?Py{=!fK~TZgU$<2~?(9?2b#MQe|5d{++O3m1#h*KXrGOcqks<6s!X z#_qPl?W^dFke^K$Z-P@u9)rkc`)_)+ny`gjUAv!C=2Stbh54U5Nv)n;P=mm4SGA*Gm8#ZJjxEn3-#f2{ACVrviV@`<_`3OWc660+&S5DAhj-wNL*lvO^=0i+R1cP`B$tq-!YN!j0-faFIEyFE+xK?0xQq_>NpWU z@+rO%A9TQ|&wOfNzI3Bx27tQT~t+gM< z+M2G;pIb!m-Wmd)A67M00tCwqW#KGZVftnM7V%U@IDjf*a+n+Eoz+^ycC@$!D?HcL zC-u@GNt>;H^99{_-oo~+j;P)rt4##%(cL@eqntV-Z=&ig|BRHKDT~25KN8V) zA=@`F9fc5x-}aDL98sCgWb-3H3&(h!7z<_iO5Iog9dR9*yTa$aUB~+vAjK-E?q-lu zZuiJi>&w=#QxiCbtn5k1j?;C1w}(KC^-lhCC&_8y2%wK3COb= zXJW{mxs-)`#&Mk%c-#?Wb~ICJXi$RSq(KNSJF4Q}fjQRCvcWcHcLy@HZ)9 zydLs)F5UAeE$OT82g|iIBpWJrG`}Trmzh*!9oRU9D;U((dsBZ3a2{_^F&(FAf%4=F zRPx=ygi`62kEKtqQalg!6e?s1j(U zCwW6lccczGEx(cP&s8hS^^E&)=7vWvV2aPWGV1U^Jg=`ry; z`SwfJb_ncI?HB~PVx79~(GR|_?ct<>EEy^iTVUP{*7RtehOEa(3b){M!$2H(t;! zQ^in>Q}*_(n=CtdC^VAf1-Y~xrxo{uv8c{elJJ%@^JGb|z!wEPDh!X%2OJVxYn@4a z`L3-54)S^lj$pea41{G$-MY52?!R|_O)t6@mn*B|b344C*&S}@*k1M6#bbD9NsBlN z;u{;icdA+1s?t4AaOl8HTC#~!sI@(QwHvKq^js;y{u{;V8_9?OpZ!9HxZZ%x);DVV ze|Iug+WnHk(l{a!{ zhtM>HzqHI`;Is+}lLJ3Jv>c-}?lmD5OB`U#;(r7pV+Im6NQc0NM9rNSmiy z;)JCD)s@XZM=%vI_sz1B^skiQb-P6tz#DV3d-tZkHV8)>7X8{en9J=*sH;XIaG#+_ zwe(dTDu3zzbFMm-@2C6GhcSyKgRY1cpkG$y6&}z=7$5pK-^G?^h@S-IAZqo^ruQdY4su+IYKaOSJbHbKFQ8f zJPNLx1<9qfAm-Qot+~dM9rB;9cB~e)yT&;%5#?(ygf9(2vvJV?5l|$(;>s7`B!1>p zpphtg)#-2QO@8x739H&od`@1UPz)hr=OaUs(2b4O+Dy3?w)yb#zw~L7f9I`!jTMpO zl@f*Hm^p}8O~)f9`|G|2Xn5%Je{VVmaUc<53XCo4NPlN5?I|)b^DU9dV%x*IQ&qBk z!Xtp^;IO}VwU>lfl!Z);?Jt}z@)~2bL`<{u$#%uy*cZZEOnD|7zE$BA|FccBGCxNT zleH5Lszz|KWglr{=#`>M*Y*64YW$}x9CVCs>gT}Rig~moR@E4a_b~$JOSYc%a0VS5 z)!)eBjE84g;&;BnA3wNdw=}7vPw*5yIdN!2O}FH}W}`%jbG(-8VB^A4-`5Gnm27}C zDY3}t6^(IwmN=MC_JJ2~T`7xClm2Y0^5-yDOhv8`*J&=pwlw(H+)Gx~n#C7vWkmDe zl~ZjP-xR1oTo7p!InjH=zLO`Teqc)%EQCy?KJIgy`VwB4Ziee9SYf@nG?5s&Q03FE z@X{ONvsc0z6<{2N$m`)fUE z#K}-LcCn%>Dth%=JmJGzbSzI!$u>IuQ2o`U<=r4|>gF2sfmc8A%<8?7Kmk< zVhWn6yx85k|EsptN58mrx=q^32Tl7l1GvO?3~S{gyG0vgdn=Pca;`)UdE0Go^3YcL z4Y@jzk`w>&}rHr&G}$Vrxj6~&uTR?vDvlQI)-7TK(0g%8!B%tpl*W%CWfk*&h`eIQG%*cQx3^>x8*+AGO1qI`|HiW++)3 zuM2bVv41r#?LK#Wj^K8&)T^l0G(8pbyXAjoV94j!2-=1gWkGq^m&F8!fYrb}>BM&j zPJX7(IOL;)Bls#}WwnK0e5?Sj``2f&XATi>Qvet0BYSTxDeeXzCnrbtWfy)HeY3ZB zJT|iT7gemxw;HU^JIm0OnlM1J>Kd{ZrvZ|4^xOB(#m0nxp7}D;Z~|3vRY+jN zYtZ)8+7B1`7vb^rbBv)AT8Hyz&*p6igWKQS8!uT{`j9JaAcFI)ySI0=(vX35%q_e# zS_yfeXTjs#+@QI+@Wjsuwo>RP?;Hnoeldv=ZY(CM=;#f^y(LsV;zSB#`O2Ext#!Zq z@2A)ueWuAn*RaTu;@2$#p5x9zWY!~;3Q^o08ZaHqYY{i4O_zEvGaPh9Z(5*atn6BF1UorHSBzc$f@CB5}Kzda8bF^Rg5lJh7V zv3!QS&mcnp(;BIAd=@fELP8?itDJ~j|1clWyFq^rgsHq7OIAg!H*KW+eviY#J9O5WG)ROv7G3)(F(U@bE)GJ}!)?@LevN z7x`7)WA?OgQ7SK#(R?HOwpVKW!tUB;2drYV%L*7Y&k9LTZzlL(_x5P`$4fZV1{cl%@B1c zorspJ58Y_wc_!C&{w5+{n%G%*4_Df$vh?~@FRuoCvD}Odm9lXlTdfLEN0&{$&SDc7h3%zw!sy`$&O7vjIAW zyC}h?b1y3IJf^B=45x9|AzE+b>}UN-E~j1quuhBzEz$|xuPdbWjED?4Ba?Gn!BuXu zM?jVj3yTpn7~{y3iSwKox)%6NpIikq4X#bV)OdOg2e_d=VkQ9$aFg#d0fV?P*y~8_ z(S%xXgp?S@`vCu@V>TrhckX6!#EC1@4!1ii0i!Bf&nYE6_S=940y8Y)FC7B{(p1(d z(!I7rJ_*=4c(Bnu)Fn?TVT)2=-8{ZA*kF*Cp)KHFU#52Dj~11C$*~BkWj3U;&MQ0T zbVPh0fAX*)maXS{6~`*H%%Pd(?}3G%wflTjx8fIM^zCRi?2(L9BsG!Or*H-*aFca% z28ZH5<@{epAU7%<#=YmejOG^!)fE&8*jv&K3@2FJqoQvlG314|zFvY#XN=5@qR%DbY z<)-G!=TaUvcKjZi&|F3ojJjkCnR!r3UYCI<+I^3rCqRLgHTbq;Tw$aKVGXC$>SU!0 z{G+)w2pOB{{RxtG6~+g7hxeYgPYCb0nP`gyoSF(01Vf#P@gFD4#pAiDbljQ#ItTY3 zOh1N{BqFLd(AF`mYr8`Z5ZJWuv-iaa8E5crt6KahGT2Wks=fQr?J6J%M};k@?-zEz z=mt|i9KwW}ChbDH-7L?~8>G=uaoX=A!u&kA?*EqvbPx|?P-b384>4ZbejC6rpoPA; zN7KKy%twlX^CA}&{kkRq=o1hVbj$m>H?b-ak!EJhtB)kY50w5ULiS1A-F(sejBLah zw~ZeKPy>oCv~&ptA#*T~dC6Tif`k3hAK%1>D;#~W2(E_fyXRjr4iLE4O!{H&Uq|8! zX62P%F|{V(h%BI$*gE{6E2L{L8_|p>p1p=x03_yqUp_tN%HJgQ8|^GG2IXr2z4F?F zqpx|Z>ZW^)NPvk^Uh?n)0VGJqmUcGazU#$!r3N3SNFNFJgMegi^Sra3ik-!VI*g>s zUwK`>*ass#zdhGYt`xPOmQyovr#|v;Lrg}?E&$nh>jGus5jww|?2N!M5RV4$_KxLXS zZ6!`~KbMdKy9WZu_&G3v~RkEWcPVDm3i&J%;2+9Br2- z^7)*30pSfS5ettG8HFvK*5vhc2cd!Xx8@uf6XNgFpc&_h3{|*#(UMW9OUe6}BNh+L zd}sIFa8=KHlGzcBxc6{IYoQYV(!5*T-Z}gsb^J4&AN}&ub@cURZM6|@$Z_uGbh%TA zx#>D4C&8RTsR>mvA0muAuaJV`Mxlgdx%HJ-!)!WD4hB(C6on93`My9P)RSp);c^y6 zib5LileBqLKw)%|k(cVp2|#kWk>Cz1r6$!h8zuMV_9s}}eCl`_%W>|BYSQ(~-*%B> z--$K9_M4}!7j&}EKS?dJR`_O{&6lMOR`IAmt601HNa*lTab+=0(J`-kIR+1reTr)r zedvuh$eb6T5=I24Q8*~op=9B#m~QFCWyau%tlZYjv5Z!UU44IuE22IPCcea-Xmlv* z1wEGEh}o>Lv+%FVR{dekEn5p6QDYG+u+OiFxILDk`24g~FDTtPB7=&5 zUFS$3-fQHcl#Tvnc_H;dhG#7NLxnxwiJ?t^A}#>7k`)q3tzIxNi7TNN#tZ}^MB~GQ z;xH$4NBFx0T{)H)+AgcsH_s5Ng}^Oq0|>aLBua8DwB@~MoQ}Fp{-^H2+RI(sU{W;F zX_n=F!IOi2T0f_rRIYWNmft)NM1WhT@HCK@yX7|i60Zkt?<`{-N~+UN1q9t zrnY$A9Lis_3hA;Qm!6-;N3s*{=@o~6Mo;-RNW(u&$z10L&HACw_+oI2-ZILcj&_e< z9#---GE2tpPuqBE(-8$ANM+Y7qA4<^C=5tnm=~l`}!Ir6>cJ@IYaktH)Q2E zV-?G!&U^*?#nl^N`mJZ*kHSv(`cRE+TMrlg&@(sP$*=EdN(=&@H>?n>k@}`1fMzRky-9Z)Z~~tc^jCk8z^npKCrQ0cM(9mJ@^jpfD(y2po!` z9|0Svh}*Ezh~2mDrBgvr+WzZ`-o9}!2W0>vN2TulX+xg68 zl=&;7lqVd5!r-xB=2?*GyL z6V~E2#49Rr^^Vqx%z10HmLuXY5iLRRjBLix=h>G|FCh-wEttlF@SZ3@iIAG41-61Q z`x*%8L1Xq}AZGl?fug0O`E&f=u^)o@-90x^YTuLC$&ItCBfJ0+E_n*(66UN}Y86?q zl@!7jAK#G>{i7l)`j1~FhV@O{Lm0p&8OuC&8nTg<2kygm-`|I1GXg?us2i(P8>ioy zU6H;*{r_qxC!r}iMJg%Vs2kG;a(k+`Hzo5R@%b~Vo~l=1dbp}=Ct#P+s4tuDCeKky z&XMdFjkAkAx9(B8brjc$eR6d*(qX4R0#W!YwU4t}q`tlEsPV`#SEAoT(i_^z9hoX> zry}!h`jC1r3fzcbEeWr+cOV$6P@>LoaXT%jyf5Ue>tp_UieyWc~ z^NLHPwU9lEv99_qMXuAb_%PYG7`UW3OVuGCGcKern5DCds5}}DG>**F`a=TTGht*^ z(L{V5qPs44Yu~C;n!+BYpT0eemOfLbb$GIkRsO%8t}-mD@9Ppn*ANntl7ggk!%zd# zU=R-d1Bn6Yp&39xq*Xd4mF`ZZW#|}Mz#$|QiD8Hr#s7Q1+~@BW; zwGWQ{OJaU~!1t;#lU$A@=-+=u;v@oROt4uY~V4tTr!kawRL}DXzsy5C=~=$DTMgG%$RUFd zhAEAE?YBKjEeK9sAECTIn_~<{Fe$OGytjmSoJL`jO0Kh8+wyrsE$dschw47!w9pJ? zlu-Y1i6oW#;*MB1HU~=Hbp-6j&%IInl&-;Nu3Q@R%clLg#-|wOLq}$vOilUg-=jk- zx4?-5RN);{6-{rR-f%Xb9V_}VU6$27E9Do?GyWxh3i9(}=6nBQeh*d7v`kzEjN_2hgz2z0b%meTvLCEyXpoDmGEbWe{I z@|C4$9+dtWRZ~ro@4$2|g6YLqUDp<1PSVJPi`9GilYwaBoC*(mqGRu?eA7!}C?rep zNRikln*%iA+Fd>Qx`Zq9k(Uc?O7DH|)K-~?l48lR;OwrrT6@MeGu4NglsBlj#=J$2 zjvRb~>Tv<8UjkLroj4e`;Y&UuA^vfCFen7hn*tCv#KR2?wsk0PKQKG-hzaN}j&Y^ItcaL{?UOm#Ih6}J{RTkN2c{}iu{=Rgc5pg5 zcEXX5!LwKzf&&0i`=_PAqS5NSQjZ$fh*F9xtSel(BQKyCBuwg*9@KP4zY7!dF2%LA zDFy>f=2p!G_7jIE^Z}?m;d93f&%&cX~wWu6Pb{|tG9marF z4GXSw29@SI`mJZh`CHu<>ewG4aTV&yz+rG3)wg9G^)7N+C;-s`R$Db)P;?X_f%;(z84^Ff6dd4%fLv_DU$*jzZ z1=TEwfpMVL42U_oArKxi!RsR^tgM!_uri^p=jc3;F!6+?-_TY4!p}GOl}Foz*j>va zCnZc4_tQ#I`TV+PhLkv63R7%9+ZZoknwl;J&C$#p#2!l=aW;xC_?TJ0WcG0rqQGZ8 zbaWPNyP4hgKJmUtOrs?=+bH*)!mUHzgpUZ65$nS}=dJAcT|)BbS#tL7 zta;Kc0$pt!Y!vITPQb)1LO1~Po$_>q2;Fj#J~3#t%YZ5K(PP;}Fvierda7mJ16i|= zuldQy+wlPx{FOs8;EYq=`dVqig!`?V5!YQ+2f*@d?d1|Po8St5+S3X~5B> z_sT>{8ucrsCyaG?ixA+`*1Y2-0n3-JM|cf+$n&yG{Dvm}Y`<@3B&`%_i#IJYsGy^X zhj?FKKZR_|3?4jx6dZ3$^EMGM)k&h=ZL$J{#*U(wWS`VQEjFE6MsUXqL?t-^k1$;9 ze1{zEP5txEmJE&nB~UhN@s$j|8oRCzr8U*hY~@if(QMLPa;^3+t9=ix_>aMxT*?24 zPzYRAvG^Y*ASEnl<_n!TRkNiMtMn$f$W`5iL*_kd&vkU#v@zF{yUcdmSA%o{dObeTv!{7ce$ ziw=%RDCkG)aQw%{>$vGGAhdZN^N*oSDpY-;Ak^1w@#>!Mxqj@3BTOLwzXV?pRt@U@$m zDsDH88aV5UtFY@9u{;I#NHf{9q{uvs$q<|a!&G{V>iiKUiHQ$gao!@ud3pXCunBdx zeTx1G^+)Qr8iGd|f(O01Yq)_-NEhi#CHh38MojRMzWzzpog)9oW)6(?5FPjBIV4O6 zG+&p2Ctb|>cH+rbomVsi&&eSzE2I>&dg5h!7b+Z@g*u&yQT^P)EK^Gcoiz~uaty!} zMkUe0rTw@0I^u;xpMw=&bq(+N&gI7Cy`6C_6B;kthFy)%V<+gRE#K!WFs} z{51ii-a(i~d!{TPniK`3Hv(HXt+h zy{+-;q|95NN{CJU^tphd!NNL?`!&uBH(FImBKBlBXB^^1k{%VOU~VzBh~eF`IvX_L zxry8$788W+x z$-ME+trKk}WH>JbzGI2;5yNbr>MS_gSY!<|)zPr^&_~@vd~S*>Hdi4Sb-BTlsQQc2+eRlt)b(`kmNqN7xoj{CEWoTw_2;;_nbWb#TF zF-CyR%oh8ebWTMcjV8^MWA}LS!QiI=9_Q)K5J>Q`10p`27th5ZSzl5GIX&Iois3UJ z1U|8XyU0(UT7(lH#-vrhde1x;Jr7OP+Vzfu>ugA3K0y#=&kUa* zQ_%ck%=-owc;M+uZuw-N>G(|VP_)lab(ZsjJeaGM(2(=VTFnNUf4lb`?6cP|iUKBA zAN^FjnEl2oEotIEtYRZHrVec)Nq0QaLEh$|y!W~yM55G93-)HuY5BCBD zX1)f8bgnJUchHl#_*H&q&#(i(Ru2Cy4UEB~^2{uKmT&5xGC5VV{@Nh$7Zi*(Qyy)$ zQc4obXpsu`SS1!BsDyZPKyqF#^=RBRmE8w*6(6wf?e2>kqO+~Njw_5bl0<@OcNQAN zcQdcZAA5%4F2tk#)x(0r>nHbzi`0ok?JR{|Ln&~Df4ID%i{Dnue@;BlUpQi`_$~08 ze0S3piiZS!`eDod+Z`d5{TRK69gQ{A&DkIY>2ORPQ6RgC1S6rH!GXp?3!Y9%Y>IG^cVH;wKh89M{E(3r?~js)F^DnU(b z9AUK(J!}lI`MRNSHUX0t3!{W)!ng`#v^C(Y(LZvGsK%IT&auEvXH&evQ;u-qTp%^4 z5DFccv6zXWo8A&wRN2_1=UdWlf$c9cf2NBMOE{QpXjC*iJ+BO;IQ=qhUHjF!&o)Z0 zUYKt`5=zssBDwfl(XEo>WX%Ym}COKE@4&1ubDXfk}rac zAag__F223U)Q7YuapC^wrK*EzRLjRPYm-v^s+;?>(V4Y++@z_W+KX#0IZ^5llm?^| z^E|{$A|%UKqMscJ4oV{glj`9b?xQzE@h`m~7&}08cVdr-_chnsl$5jIkB0GEMkX?rmmw`(O`3#kzQ4N5&T4F7_k*zQISS%92&L%-9b zg^S0yf)yfy{1Vp>lP!jM{yIBAXhdiiJ9_*%y``qmElLD{Hcj4#QMS7dAmw-7!Zriv zdSf{`WsoI^|41z|uOI1pKD&Tl150=Gm6jRx-C&g9td(zN4VgXh3FBN`=cW7j1yXA0 zdGeY{x1=wuq!pdOIVla{D9DSQnv3|!-y~fNl5vPat9DQY_liZ4H!!?yjI3uLcw6ol zGrjY5z7S0-^)zhN=Tn3wPPaHOB?=Y_d^s*1+ZJz0z3bFnL~E}H_I$8VisYV*+uR{| zyE#F=G_pt^i?5pLF(sAOdnxke6_X_VsO;(e9~yfUrbB)k4mx`t$%yEx`c;_n5t#z@ z!|lT>V$lJE8)y4xHw&A+DmBQHjxAt<>n|oBqm_UpZ4|@qTD|nT<;9b*pI^k}6R-8g zsDW_L`!5~@qv%=4TL)11M<9*Z(QMfl76aw(S$+ShE%hr%yp>pr+o95$bK}3)Mt1F3 z9PY(>ldsIT37j|O0_t2RLrYI#NW(pb;b1{w+q?NHzj@WQlsq4F4#=watl8KW>o1 z;GC1**-F3b01D<^XheO;(>lf3S-J4SLsHfmDfm3^SBv`;M3(=|)tELwAX4i%CPP?F zD9Pk`n}~`sj-=~1&XxWUR7ZN5G%6Oi{rQJbhOm2xmwbF8LI;`@jL$l|zE4jJQ-^30 z>WFbu_4i|FF0B$^Ug>1gnfLiF`9~G;{W=iv#^byzyUy;*K*#H5&3;?!s$!Lqo)2iP z<$oy)Eh`SYvPHnGwjci=B~%i@>4sm_eer)8rxj4tBKyN7{@7c7#%(+9fid4HbHZ;Q z#$#)M3PJbk!7yk6Fsl4e(_LYeGbu;BirziB6ab2;99=sirSz5$B#W|>kK)p_U33~i z(@%u0UbQ$v)olM^Q$M9vXh7{rKJg5S^EhQRPH1f&w8WGU7+ zaN`PD8Jpb-T$9{t#U@`!Z2VVoa%M5u`Y**YiBZaAU9P1CFr@y=Hlhg=3XG;{A$gIQ zmd^Hznye*Fp;PIE#09qQf^x|RMa=xcuHR!y=(>{XbPM=P){66xS1JZBC_7%=KGh!V zwC9Peim>T|-otNlqCwoeTq5`!$GL|4cm)f?-xev`@DtXA=VT#*i&18g%8+>mxR{H?NaA{$zt0vURS$Z4gelAohMkcS`uHFII{=fFt54h z=y9WDc4`X)EQ85gx1B6$0dIug4m#vog-hyh2Jpv<*nzMdn;EkkLHWy5HAkmx zhV8iNn~e^#n(s-aOH}Nia%vi*$s}L*uA5^hlZ4jwNj}SA^D10A1Y0%*BO2jD^HA+? zQa6=Ye*bEMRyjePx6j1H$P^f)E>zB1!9=?AmP4zs{xycq%|EH{op(K65uQOR$%TC- z-7E!2l>FnTDBcg`%U_&mJ9?OgB$c-YCF?x{AoGLq>oSITIi~c<$J*Z&CX1Q01r3K7 zI&Df^4`x4=Np}amI-*>MDLM~?Dm$nI6|oG%{zXZyn^IG(&0J(}Ng=mUgAE_2N=L)t z0f&Tr>A5(wlfa{EqO+m$s(u&oqU}1wF=;$Gp=`TPWOWV?c+R=g=w3DMnmPN0cO^YqvN&dd2{XTKh5k<>c`vDE1KJzuWt=@2ZXh>9)W0CmcrbesMlj5 zI?>WRVCml3!L|pKYP{Tk9bpp4vLOPIgrkE0;LrDs>OTRnNiSKdr0e3afXjU5$(;Ht zaT7Zj$Tutc(O$-ir_^Y1bjsjs$yoQk{ZvlZbk%%Xsl47$kU8;FWx?&VT@>)nw2Nm)FnyT3Xt9uE2a2#(K$FGP5T>Ip3O6*l8I3k6~=W8h~$C17EA9 zc?E9=Ulk5?Qyv{`sAgc2>KgLA^D4(k@k?`#;e_e+LQA8mOy|5uyN<9G6gRMgW}fk0 zBHnt#e>_pY@%KZ0{P(d2E+>Kc_H4rKK3nrkoy2bH%&m1hA`=%}fWS9-4fg!+3mSIziz;0n6`(M;&@;IU8BU`o)_ym;AZ48t_~kg$%s}?>VlRyrDvU$Y}{ETJqMS-c;MO|A zDbem#<*HpL{r3b}pH%qJe?GKxs5{*>U-J35Cn^DuXv5!@|5o4op`m~QNZ13%UT3T~ zc$RwaV5$;~$XkZoZ_3`Z(6F(Q7q`*0_w#eRoR}H!_S~G$V69R!awCQRKwb3*8Km;1+ZaJEzRsEA1^IHE&!~KooliLEIb=vd5izXAxKPNP8o5md*FY_w^i`s)GuZ`?amBZ2Rqf z%I4fEFTB(YJ%;1H;*F3m7*+N>Wug(*C8v^z7kcP!nH?S&Y3zz(M4G$=cT zER)@H@1dG^jc-!>~I3x!K8$s$1P&OS$;_d+)cJ>{=c%*2JId<7p6bWL*ZZ}2&p=z&h@K^I&D_Hn{T4VwVRZ`0j+O%c&so55d&4P){eXtCFW1p$8jv-}# z@a+mKQ2Z)9T&>#fjiCr)^^kyaK%dJr3;4Gyg*{z OJeq2{sudth`2PWfSs|7H literal 554010 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
    G~4PgK7iQtt0uy$K)AQGZ4vaW1Zorf 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¬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

    +p>F2&trrks*c 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

    Zh`8avOag)|hW8|F-IGC)=z_(+3yW ztTwDE|N0a{4Y{D?(iMhN#rWI-uJ4u2ZgF8KNGQggOIm-C5vReZ9l6Yjv46JYU{h_+ zg0V2UzN-&Yu%qv5zwsb(Qv{p(c|IpX(|Gx-jXmV2c(z9@?bFn?+fYg95$CB(uu3>{ z^hbaF=cs%i*TO_sZ~du2?T$EZGAnF}XV&f4oR(%EJL`<#0g>h?vj644gzMFDR6A>b z|0fOnHPHR_0H@gTcVtB#8c;mHza8hVxN|SdAu#a1^~9j{lMnNKePv_*r@*irMC2w- zYhSUI3~=FNs(>4iy`f|70G}2BnwvDMw5#i z*2k{5!Eya=6{V{r*G0e9S1)HC&Q`q^3{{l|+J|X-?`isWr*sF$^*BQD6|6;U6YM!Q z?v7MP5`CTWT2}6?v}$L*K}SiXbRLEuN?{XgOdlnw8cM0Tn;~GgoMztvVT`Zw6_li5 zjNZ!SXRWP>5@Y+VD5A07F$+UsyG*&&kr%P-zefa_pQ~ZZomYByqUYj%U5eR$q@}e) zqxsZ)6;8qPl#K$<%>J}3h{7%1!E4#?YgoB)F@^xu_0>EryRb zCNZd{o{Dic)?Qi84sDBH61406D37J&Z8eWYhOSIm6r?`2P?fz=S9D0`oaQE6E%-(G zoKtw!NFo2#3Ei!gRf}8c1JwoPqdD3UEgLCJA2gz=S^zZ*l{M4OInSj5RLE^9Wk1S0 zpgceCAE0aTpb6F@E*}?!@*CM1^44(bZOF_`K$3=~$-gB5;bkFWi23XBflFc(U}A!O zRBmmkR**}kLBspGcm8dOQjr>Y%Q{Ay;w|(M28_a^E6zJZH}!ikpu_Ja;A)6`n(Lp2SAAWTc4|B}!x^LQf!-d$)j92#C_h3t@aU$sB$m%;8 z`3$j>vfx{I)wteD8AmR6dp;SJYhE-G_s1to(9SG9tl&t2}G1~%A&f4cXP8+5a zPa0?J{%vVsd57y7gEl{Dfr)Qzivya9yWgq@#Kd!YN$2~pgC89noOJWlxLKJE|BbbY z1RZGZwCT7CT02A31Sqlor*gRdS4SQ3-#Szxqah@Dn*xZq=lw}FxWZ@Qc0a%R6p8-u znQ8c5^MM`Iy+Ng=pJbh})CV-I=MWd{8O`_x_f8keCeZzZb8?787*H_s zTsUw!^KVIzp9n$T#0riFef(~6SnlkB<=0{FUueqD(%60Z!13WT7l6$Q3;@NkzQ(Uf zH6kKmfvFy+N3X{SiL7UUnxY@29Jg5S!tkFrl?i!K4l@DfK5&|*MvQ6j`Pf?+P!9~h z1^t!A;;lb+21ejRHp-=R16RmZ{Um<5Hv;ilWAu&JL; zAAA{C0u$jC_F2||aFIC~_P*2kL4h4XE#(#X7~koJX(rlKbYTBM3LDtMavEp-wQmazwYHC|tS!;}EKCN+CEa9N=P@{c7dA3vX z6%rUWp!{Z@aVPWzhoQAxZl~ZpO)&M~cv#+wY?X2gvq6A@_G^J9;QPekqMJ%vX zg9cakp-sGAoeTy1_BqDbhlE%ncoyE;L%v^xTXjStvv8~(VQM>O_}Qys7V?xDK+#RbU*+I1kz2?=>`4;+HRJ`kz-XJuS{JCPUw=C~Pa3$6EqwH|v^WUg%g zCfG~j?czFbBL-HEKoe>78- z25`?(>aIsPf#rj8(6j~7frajt0@JF9Ay%d>rp#xjzX6@eg;OZ9e7+#_DmYiExwU1y*}Dlb~wrfjQDj=;7@BSrAtKZg(dT$Qh= zV;Wcn0@KMai|K8F1GzdtrhOtKfdOS45!6~<@x9x*_sfIXsQ>hnF^~H$CVc-rr;g^m zV0b9`S~)l1M@*AWVm2$gG8pSmqR2)?MFTs=IHlm4`sGu|=SnW(*st03%2cuh;+UMV zuYSywm%Xu0^hgD5D*~vFdQipRGyt`d_sxS0gs^8rxh?U|IGoH2-BF>WoWvX;GfLQRrS!q1FOIk42w+Tezpb`4^TJzEbGteg;HZ529+l=;tdbZ#LSS$Vw~+Dp zqS9pJS(I?$SMv|5>``#3;1jEZSANwBIi_9JCj&y!P#SQ3_ErXo?WolRQLXM%DQb|; z>afp)%=>l8?(*XHmO&#%gQXi*UQC1zOJx${#WoalC%x{95~|Syn|AU<~>X1 zEm;^pn5R3J^k2#IFGy%33TrHMBQ>~0A}1qb2)9ebie>^TEz_btadQzvUL}zWW40b5 zXdQifNvouRufN$DK(#%NM`(~z=_g(RSZt0G{o>5I>oZg@q@!8m${8xwFFUc$n%ApB zCx00Sy4WBRBd%=quEsUa7x=ii#Hed+ym*2p`@qFklPV|*w72V7zHg>P2?9XSbSb#y zzp53T{~oCWLi&!K*~gtCEn@_%cJXUoAt3HpkAxq1?@a!KlM%i=uAaKEX5qsT(&GJ~ zV+V*(hObd-tdBId0!QQT31UpEjVTJjkZtr?RF=w)crPAIr0vY^?y_hHGZvJq8-ZN( z@aEwq1Me{YwJ1;Y(oT^297f&64$R#?0;ws+<8Z}4KgR@Sk5%Lj$XNmD|`W~0?Y+bb}z(391yZZDgC%s~0vrz~gAsK~}pT?Ckv|q6fgJwE1f#r z8SZ8`#TFhkzY~=n2Bke~sCvRY?PEe(0T=@M<1 z+Z?ylnb(<@afM>(iSflRD#ReJ4=E`v2$eb&%iY8%^#U;Vt~$8Q65-!pjagR#JaJ^B z#h*u(&vS=v&%<=e0`lA;Jm?Z=#&STHoN}10;D!D#dKF-zd#;Ga75J7iLbZ+nYD8oK zyMgQ17&S|iE0@x;`giWsIhnzrPM)7r_3eLvX^owMUlw&3I>mo!z&?O2Q2DxC`E?~P zVPbnH;LagPvXOv(x0pvye5D%F-xPgTID@3tVv9CViV1)VhOKM4X+^9fiG!SGiJuUz znQKu*y5vK;?>krCfwpB}$YwUmOQ03- zJHo@~zU8cUa+qK0t5y(T_MYKCg2mX`wbi<+e+v_P%ctNz^oEBNt`<9Q7mPcA5L4bM z=(ZIi?XeI_7em)VK@6R*b}L4z%K1`YrYVET+32($P$0|)tGm^zQ__LsCB+lvEq-VrCn zdT!(b>C10oY1INSjFbPJ*3L`Q=Kx4%^3#RCt`Ivdg)yoI<(f4LnAJhtrg4g?;+uA+ zRs|uDVd8<43RMeV9uh3c0#l^aR@0KQ2XNp=j))K@`g^uAWF{`xGl`X*deBrk6g@XZ zaG1Pt&1~boIYklFd8l8)X~9B$HHCQE1X&V0>j0F$4lAW3c_0b}T6YczB+;6}rjqNG zhaBu3R43Hf$eE4m$T+T^Uu+gXoy@bQ?7U)AnM<|CqCBW^Wcb3|z3e?lyFJlG zycDe-jES9jO9dA6w}z0|`mt0_-=pKA1Qu2tQGJGj@*eG?JRZPFeoNG`l%MKJ;b+p7 zxOQ|jxPwY5oN<oJh`BsSI(pT z=iLQC3E7ut^Cy<1u4+?KCos)^NLT&rP73IU6I6JYXKk&&XqPah0{EQ_-fSL+vkRYd z=(V%tLqi};!5Si`U6v^(OTl^t|6#r0W}^~HnG`J1{yH@IOw9TgRZsp0)c&$-;3rTyhLEXt{sA8NQ{HJBb8xP2Xt&;~DS3G#6zTbs8_A=u5|)>CnM5 z8AARiV$)r%3cUpV-`fc{v5LY+Guv8}!Zl6;;%imsX^6O4SBWhjjW-SeD{KVvOMPxY zC0N=fwwKMzN&tTQDI?=tCC&i+X4Am-=-b&2{&|*;0JR)i`<)44rpyHqBjEo1|KFNCV$6qxwVFx!sbJ9zAbnPpOr=5 zS0VInjvmYstaNnK%*$&1R!S-XG6Ub~$KF=+qA*?{8;VcIjBnx2D7<=x*|I<=riy_q z{E$NJGtFf*@omd9X=7GaaJ|OK<`Q1$`!ngV$o<|V1;an+9+mZt0tz*vW8Nk=^6Pzh zk|J*xx^sXch|S2RD80rTb+~}~*K{DdqIv@-C^Z*E7t^f;#u!Ez>gM7YHXE}M`sIK_i2i&oAHMdaag;**8WCS|_ z*C;f5?J?yH`fvq028jPEcgBkonD_OPH7^d>63zm%+U z+EY$PDn(fTa77MAo2p;f);cI5D*n+bE5t&Qr0txej8p|G!J1Cpq;Yto1y?JWwm1_J zGspTm!)?gQ5ZA@VN&{&Sa&cCcQa|Uf4+ry^zu&g~BB?9|^5O~7nJUTAE4zw4YIuiP0 zljwVNxtgli`9BH02qUP{8#B)A7;yXS06_Z<&605bo2fC|;Bx}#DXc-<2dTxsEr74j zc#)eivyMCC`mzK#CGA}UblOrv9Q&@I*Sh=~uw_oWX*^Koi^hqk_v^^3A+}Ry}_=mA|4wRNucEx1P4u=$L^186A)$O zojHO>{D8C9!mqU{sR~ROA;IwFm7}lcY+ouDpDlh+lf&@Y)Z!J&UQhp9|1afSJz1j= zJ%2k*8=IBP-1C{GgR{?MkN5Vb9hWsceTH7o;Y@f!@QsTv54E(s87NvJ$IC;qqZA}7 zq?6WLKP85$Y@3Kl5A|@Gid8tdQ3XmZ8U6Os?mKq}3^hGXuGq^!(QO72@#o3pZ&sCYK; zIxXqYyeEo!;>c=H6g@db%(vw>=vTWr8MC6o3u)jf8V?}8nH&?AUunGXtePl3Zav+L zJE=QP`t&zd7M476kOMl6$b&;6Cvv__5Q-KWsM1<*tXlwri`)#4-r;q)AtM2Ic3{U* z)6G;3anw7;8N5TMT+08N+#nF?IBMHqxvLB7Hw)x}=J%Z!k1;dh`%5@%bm46Xr0`3I ztpN5CdG4^)72u~iJgzP=c*5``VhB&TJi=rfcw5oQc%rWW9CT_@mF^I4)_n&kf?{I{ z;7=m|50x*~(@jjfF`l<942SRwH&$5_F*Hr%Qw;ImjNzpp^%rs>!z zF5o%B>;}6^Y_bWsX$2?5+Rpm)94VR3nDDDZ%Q={X42&IOke z1VZU_c-p*DntLk11gDf6j`QPRiFUxx^6M5pG4#vGQ04-3BYt!4811PafP4RGjOk<~ zKw8pCg9|yRe3qg4h(JvFvpCS|| zb@SvwyMyEezBHRl1JD^UAC}Jtw7(5$cu6w5@Eit}$8vgX#xXIE%~CZ2-yIJeA{Og& z#lFy!q#E80+ptIAY+>5uK;qHl65HDu*3(nmvV7RIBLgV4V(*^3Fq-%Dexa_!^^;9$ zNAzxhU8jj=zJ=+WTO=M&?ky+VV0qca3QfOZLx3DXp)_rh1}wM5Fux&bWm7Cg+E;zo zLc3$uXTW>zEw&i#OH#cGRvdT#xh~=sgRAI{5^|~TuMV@ISt<|5bTB62^pjh9d?@9t z2`3#{k@IT{I3+RhLKkv_3&j+W!UG$J0A34uIE?4_sj?fd$FW{7y)$pf0yg!v=fVqA zG~yv}Hb6(`nl(A}sPGBFiV_KJiI3#UzovZv*G5S?tf5mK0`nk+HUHOO;|7rYpyxR> z-*|xhQU$0QG zeo%;|sbS@-_Ap>gAtyGhob{*42Z2WB{C=e=`Py%qThBBre6F-P1k*u{?E8vc^r!m) zY{({(3|$gi^1yh!GedbokAANb|B?}vhNl6H5N)?Us4pD$)skLh>XTH#a#Z5YUyNX$ zm2aIn<-Nb-YSqjQPU?E0G6}D^2EDu_(8Hbp;V2qtr7TQR$fr{LtL4%yF)>3n)-WX@ ze%Po+EHwz8qzVf`8@|A)6W@a6TF?39sSo+nxpTo{HD$A*9iFr zOwFwooBh6xXn56f)+in>(A~|L0BM1CFsGjLWq`x4dIg7Fhtyol)$1aGsRm+>@-99r zjm?3f0KPLBr7)+QD{O1gQIUc)d_=Ems`jxP;B47?2riZy2u04OH9CW<>qS84-8jd8 zz-zPoF+e1lr!3gWm{nMo02bOKqtfvzHm#mbKC_S)>1^N&LnnF_!=%MN+vwY*-!^Nt=nf<3f z#ms%b0eT$@o6mU(VBhyfFMnz?`vwT)qfZ(~RyA)!C7@h^1{*oz1^|lfJ;RR<{8Ui% zfTa5tI5;QN<_|Z5If5#Av;6%k_5p1Wy?s>L{jOD^poOmb&|m$aUW)K&NbE&-M~C!J z^%yYW*YXTne-Y_XWyCdbD=Et;)gwIcK`IohNICUj*(RgjiIa#cZPoV#QFW7~jYIK;aLWRCV+ryOxXI`5 z44>Q(;mu}ZkV*v0DyU{hA^@Z+x};$(d_HuH=FC<9xzWmg)u9m393dW+_$BrZM(8c6 zrWVR)(HKVo#FI#S5aOZDV3;F~udSMvAvcAPU%9bi{c z>SA8^nI>({?%C}3pRP}+lYqoyWY48a=`^Q*R&>uGu?NI;{c~w;yt2s63$jfc2lX62 zhfF-niog8)j@$gVPk(XswxV42q;lNMC02T=F5Bl zCA#+vyB^?E4Qoxza;r5){EAxpwcd~BkFT_)JKVVwv^k{PK;wAA@b%~pqIZKB!f?$D zUFmAhX`sc)Sr2}G>x zLJ7bVNhzy9f|~}w$r5ef)SX#y2yBDAv$Joc2cxBkYtT0L&!7_SWY-wr%)0(%*kXL+ zqbuu=pqO4`QlA8z1G_IR82d~^{pauFSz~ck`h1}|WqOOuVr&6L3xaJPa_)_X&yD?`(+MyQm6E*l6_*BeE1n-qS> zPjjv7Vu?wic@U<1X5%zMsnnhENOtQSy8Er4NAT` zia+HIzIebxP6G;Vt261=nC0pe&WthNl7!zi79C4%#KR^TG8)1G_7J_-YGq|56K!z< z4vBB=fqCS$RXNCO;K8V$>qdj=tEoQc4G)Q5K`pNk-{us>uTg@pjLQ-~m=9ux{7gz6`h%K5f=(QxKRk?0w#4W z4?*rEI4WFL4IPTxPYXW{Cmo2(qeDvfsWXM3rmw_P+=hLX zw)4j##<#yt2;&Qe9*y^V@JMc{u`c;W6(FX+fAO0BY{MlhiA`5xdA@dGp0L;j>^oYc zO@T!;m*VEMyV}5z)@Nica)=wYHT{{cmSmYnYYwuQJ&T1f^qlyaHiH%!pJ6Q9cCpC&dj9aCr;GhR9Ryz&xeStHI`zrsNU%|rl90c7b3;&6tbgPjV%tQT;X6jHCP zU6TrIYY=xbOy1s>3=Y-+ymv$1Oo&Yu;q~a0p}R9eO$;W8QP-MeZk{>yS)M-t%YoUpL(4RyWiWZrG{e_E&QCTOz_UN8iyw5Qs` z9BI3(sBJJ1KBL{t0pw_ep}`90F)zSDa-zW!Ydzn)mZhmEm6<+LnacY%H5XY0?r!4f zm%-IXh@O^eK8k&KBJl>sd7Kw_i8qDvN@QU}+D<;{t_eK`>vM_zxVVEJ@Ms~n>(tG- zjiemz+wOn{!pdJ$Gqx&p6C%htWJ$WWhv3^&$iC(g3xeBdwQ6ud>{a!Rp~zqONE~al z7mwigruS}rqMksNe*IFE0mm9K;9-G&Mzz|f)kfKgR%xGKxcMTFhCxAN0;kp73u9!O z_Cq>BIrrbg7#`VLLR{}8iP{8+%N<|62jwEGWDm+$=RWVx3mDd!OZf5VVO^rkDbss8?|(}p2U!WYo24<< z`Til%f2;Kw@X=`1A$0U1M!V! z$mfvjJMu};*tsuVN2gRKgCv=~n&QVX+n}rO z4zORJYS}uuHuvKz^C%Sqh#urD5MSu*)f0(N7d8DQlCh4{@3{4Mtjr$mJ2mlC^n8hmZX)3JTBx%O?ptv+YnFqk(YgfzpSn-I&cM zu!PUAdo5PcGrwQzz-mi~=OGGj;&Igqcn1{=6XhrtS;TM&QVvWn7C-C6?lktHJw~MG z2nb#sKYrXt(E8eDx9I;&-yC_xjzoYvq0i~!38lZ4=%<}x7l(2vbFq?Uyp~e{yqcl?aL|v!6>Dx@wl|PL0WXqN&_Ni`tV+lo;}-ia z-Y);WpfAPsOdq*UtCDRvC0V*M-jUzkkWx&|;k92l(m0`+W&*=O1r0hXdIl~^aFcck zo6P3at1OVHIB^1gr12M2kaih@5bG(D{uZ$rx>jDrKhe}%| zAbF(!k@yDsdDucdBH!lRLcAcEk1M`#!7f4ncsOt9>h+1&kNoWyTreD%D`ZQZ>%;>p zAwX)ez6k9ZsFpxZ=mhoBxifSxaJg|EWycu#L)hjp1Mbd(?z}qj@Z3ywj=9s3Jxtfj z9pow5ZrvZpK6Wz(D&%5aeB#Hb$qYX^i*9v&);?Oc(YtE0(F=swkeM5EHL}0{!l?Vx zSu)Q)P^1}AB_GNBVoxJQdL0m+C=tu#MIS(t#* zo2!$ZPlmS-2wS>_lWz(i-U;_l5mdG5)&skmuN_8|nY?>rF3~NGlJAoXY=51}R_)+! z_U4GvshgTef%qq5m{_%?J{m^5>B3N`>U6iR(tR97Vx+j>uxV0^Ez`msT-oi6rB>L3 z4~_~nD6WrvMG!y6ne=oz`eScu2iao#M^@^10vMAkxw>WDed4 zC;M0^`xojT)%;>b@{i6zZ@QP#<@F>b!v0c$pM(USPlgM)Z4O~bpcfB`rK(v#jk=*k zvp27SM3!Kewwq$H;4fz3g2oObHcPU8j1RioNn05$!+nQC!! z`}zl5slB#j!Cj<9!GN~&r|GEV#!i-~dk2x^AIHa^dR}po2xxP9iu-EpoDy1r1hL&x z^3MeSt8ZqHsCb0O$0&$3e)v28aWZ{e3?j~9VuZvE>`U*cbk#EWA}o)0Kb#idkNU=B z+VC>y8fX#O4Eu~gGQz=Zd`Ohtpo)fngnz#WS);9g5`R%w$hFyDr~7G3%B-L5qSls* zK<0K=asEAWv*N6gywKmq^3*xJYgFaS18DE+-Pl=x2OkVSr$Z(3yb-lwGpnN+ZxJdK zkcd4sa#ZpvxBsep_Av2?eUVCyKSnE2+s+2B*RTiQ2%MUEAJ zNP&n?_T1Egi=C2f&SBDKPLA37ty_~lOZB%TVNusZAO{^69h`$wz*V)3souq3?ml@F~PFU~_ON^}juLDTt{)1ri9B~1|{=fy0N`@pq z5E#qoKuc_J;bNXZ5qz)qjq9ho^a^WxK^oPHoiCz5s+!;%T-G_~z0HXo*}f5%i*x69 z=6AvzO^n85_qFz`d@F+wjPGzknL|`!e`Z|}4q&DFzA^u2HWqvOXA`K8dB3l$q>aY# z`mbvC@Q?O)3M;OaY`KVHOa#_rpl6E15ri-O@{9CVR$x+$9Gf8HgDPRO zl(>B;5yn6wA_vaz>Z?Up^$ zzaK&EO<)hk)Nm{mXP2C+H~(xb=u2fZzLR}ba_Z4NzJ-79$U{*4FYfzj;(PPV4PxuU9%W-nX9WnbT2}Jfmp|iKe_j$axYA(M=eZt#%g(W|MgzL%|D$=32 zlcf(-xqGKHd3H7V>cw4wYrySje3GacwyN-Z@v|T_V>tV-$Q2*Sxo8)pKaEqP)9t${ ztADM9=-8^*0h!gzy!ZVgFx*@m`8vCMUo+%1#>QQ5Hn`cP zyxVU=VlCC^TL`w~A7D%!j(oCI)?<&!nE8;NhlKP;3}%K?t&0H%6g9Tk7yc8{=*QK< zOCGp?6JcvL%do8J4bkkD#<*H}5C+k&t&Q2p``-}zc2%jk{0pibiQnAK%ND^8?8u8} ziet;DZD02Tq3n&CgjP>*T9zRD3YJnzX4)Htu)`qy!Jx-o$R!d08_xpLv7~Q>5!a@n|f*g76#WDxv zZTsf@za%7ES1|6$!7=XX>MFYZYx!*iyV&4mbMt#xqz>@cwZqIW963us**pAdWkLYJ z#q1R_yh#i#Jrq8V&oP;4g$vQ;bSSxfcC1g-BYTb-fv+7F*R^4BP>u(-CuoIDTfgZ4kSA(i;nxB8+<l9)&)0;NFIR5Cs}Lpb9oZvQjB*)Y#x;MWI<$lWNfUeSY5UgG_$GM2mQ;uNvM z&9qR<4^>Vv7edEt4LFN>#>;a860tmWrTZsEF zC8X!Ag^u%i#9J+tKB8RWmq^w8{v(L2WTJeg5#~PBc0dDM*8Pe}>igE#+JM2t^HTl7 zjguc4lM5Gqors3~K%nJCUY00n=WDHgS6e-hP5eBWPQ9Nhys)5~oh%JfG~1 zsxAIOy|R%A?Q$Vv{Qbt{1mOr~Q1_oyMo!>*Drs}4uGcaJNhMixr=L;xoGh&wy)u{& zn~}TavA+Ge&0~qH8MuGR#Vp!_Vn!qf!ElK3b-DJ-+Ifat#I0PLnm}OC2+p`&5pwEt z8S+qzw_yI1J#=@lj$VDK&#C#geq8ukO|QbBkfpo?Q!@>!bV6B!^@)v~{M}plu9KdO z-zxPfzU04k1~d?KzyAtz*R%mf460N!H_f!Q2L#+^r6omIpmXQH)$>x?!c(wG%#i=S9Zo7RFe6u+B?qHI7F*V*u|K{pV|Ej7zfk;wqc~%oJ;LlRplOL#0LZJ3s z4*NO7zhq0GV;wM0Fe9Z(oUL3FM#+W6p<8{Bb@OFA=V^=EbudBbEJ+cezdYA#7j|w< zhT^H}+rowSRWdA5JF0hxWu`DPzkf5%ZL}1(A)pV)|5g(f3RRW?=gj8Tt!tB=)Wcap zg;m}riw!?^O^rd=!nV-alMvNfATE(Q;cN~R80In1?Rc$|ciSERTKs4SIhnJHE#@M< zG?r3}&Z7pI2&6p^C8nYo;m6)Y!X*n{&J``~F46!{xG%JuKt04H3X4!EBd*j2@^CbQ zqtU_nV?wWfMH?2ZhcW+6w1Ag9w#^8Zy@+v}?!vB)z|fv7MZz;7_cQ0)JdV-RErC;6mtjt0n}*W%rIK=ZkDig@t)O4BOJ%Uk4{2 z^?)>jCQSIlsy(B#z?s1b2)_w>8JVeVhphGWuQ@2=E~bFwpKn1*pJrXih(?9SN$%j= z9}To~`UsiHKjV!2Y@p^@Hrhg9K;vIcgiSvuc77O8z@z?F5oPFj;m9BL=0E4l_1pO# zOC~K@L4ZnHk!{J7+`1U4?>9>TC@-aYouhf;0lvzWfU1jo*erhRy$fVN=F*9_7rpy( zS%QFR6JK%LGDcaT(7Y@$1~E%O3lKQGrbS_bDZ1~!0&0*6q*YXiz~ONO;=35aK@pw{ z!gf7}27{o~g50|WP)znl)%S}=Ksnp9_#MuCE0EO*1dL+i5h1K2xaGwsp_`yOy#YDw zgDo$VbIy@s|9U6Y8q$7ua`HnalBI#F))P88`QbW77$%5D?f9S55>l`b417gg-n1~7 z2FIK6FmZC@cW^!4Ec2qgXmG^Byf-0>PvT+x2H-Rhqh5G!9DRy53YF8ktzxL`97su!UBFYbaW>DBtZz&M+MWZKv z8$id&s%`fBMLcX$;HS|~&;Y}YQhNcC={v%RpI2xAqe=bL?p?6=fi~naexA@p<8@2f zhfG_JYPQ7-u;!hV*!5N{&=(5aQP_cXUKSmyCW-VjB01jE4<-nHz+b_}=^RCC;K;uYUm7+}sCETI?n?73X5_6tYva|n$%=`9 zl=vUIxJ^Q9%~nMp^^HPWY?9U@S7T{RoK55KqQ31ZYayi`U zx908;7e3G3H$I0-XM&E1ABVEyP@U})ev6$cal23=Vo3gpVtJn)^J~apg9{MS6n!=7 zbP=*Cx3<>5W{X#g`j#P~m8y3m+T(Je+zE@ln=vgMI#n_)Ut&#-VT!(u6ky1Uy?qbN z6=`;$yz)ayAnSBeuR1%&p{2VX*1|=o1;G;YaXaSJcZ6Ys7xsB`j6#4hY!8$9>WCrO z(Dqz+dRvc;@T>I1Hh+^9Pb{Ow4cr?1edt^2FTX@u0}^XyW~dLFdPfO{x>$E?@ud@k zh$}~eKJdcaw0+euMRBi*I$_=wZlw!kj|%}unIn=ErM(Xjfp7lp^9E_*+p}dfzmcpC zzjUT9zprBR=8@QY_vWVFx`i~Pm7-mbIc5~!pu!B!pWk(-JTk}micw%Mps~CGS5^30 zA_dw>=ei_+H6a)q6=~`dbe(ixstd%~LwI3n(43Jy03~zBUQUGNHLO2`pc?IjtJ;`k z$R##60%$e@`?>#PwZQ*xbA@$i)@&4sAz&Ha$iCGO{!wr(=X45)3 z>LDF?!G6SKRt()nken*|GCW!I1*`5psmO(B0eFR{iyVWv$w`ObSsSnAa)VpnV=$i)6XJkcMOyMp1FUI;& z|LA_0H*vrAE1?|sS|vup?RqEC?e%<%o9)DIY$zSyb2|8#`hk9+5t)PyFD&$Zc>{u@ zGdB@lR;t6G+q)A`{Dm=>`3QONTcrMCdWDfLpTNk=$fHHN#>Q8+#*}7(s`AGE$W@ik zy>k!2vOa?=5?UxsLW!T!YC9U`Wjqu#O(W#)+;#uK9Au6q-#f(SduoFj=M=nQ9nekL zH-D*AM8l+06=CdX2b3C$Mu63I@pqij;6N?S2k0oG&BVD^!ok{iOzz6UfqX+z9mDx} zW#{QkiXGpENlKB|>k+9eOblX^sOXa)TV3e2 zTk3#Vy$RCB*D3hx!R$VMus&wG{t;a|34 zSwvm_D3}@S9&ux{I(mFdx(*UB2n=z$x0pDfop^`ffJEFbFZ#a8Iwi5|y7mMu45_`^ zriSsE>?r@?wAwiaqjlCD8M3l&51Wcs>f=4xRVJSZP+Ks02t5x5utY2Kv}BOvjStw}q{A*|9a>S!mU8ic63^`y#Q&LP9C&`~^cosgEsv11HhsVv(r9Oir^GY*nvDZh9P$)}^yI^1dq!4@y z^i*Yh)E_QzrHO_>rr|-wS0wvNnEDNUdi84ob4e2+_r2gQP@UDzS15wIfoY?4!Z>1^ zem`Eu+mb1fY_}iX-Y^jeQm~@C5Cz)BdVtG+gJ}jVPb&-K6kXA2YnI!;??E3N>0Id| ztC%;!i;N0oJ5b-w(2d9712FBgGVx1gF_f&?8yJ>0!m+1%lYRi)ut2rigWVDj3iEtJ z=W*Tb5WVu1Qv4OUPVQ3aIt!P5icyBB!Qwnnmm56xTy1mp{I^Ccp}u8JKDwu^>>>{k zoXa}%LP^6NXk`u`TsewPWt%t@TTev8JtGl6mP#VF`fr0hD7h=bfOl9Z@G~c?besGqY0t3_ztxBj@3&3b|*QV4!sBqC+RdnR3Y_5c%i%Wvk zqK@@3nM2U4``_cox)rj%;&ucVFP8yL>!6jn9vo`57`EO}^jELjxd+{^Bu5#-_Q$k~R-P2uc%Nh2N@Erh20VM}rW;oM z2M|}dSIGEPTy`q1z6~Vxryf1P_wC!oIzGn4JM?^YH=^ibq60=b1)+s$k^O69M=jXg}8y&rQ+ai%+ z=7fYD66G+wH=Tb{CG&UGy+1`Q&9u2HqYR=>OXD-7BvPSXPCc{ndV-SM!W~r;c_B@# ztiT`!ILWcd9S}5zQhvqsJ?j34dZ&|4*S~2Hb+j!Ow7XKAHlGL#yM*<%dvHL3QRJUc zI?Xp@OHFB>g?yOR%NZ3<5^pQ>kLsSiYX)tZW$nFU3Xm1?I6Fah-t;1#q^to-q>fYL zW2>zTK6J7=#4WL=A-vymnP z6*E7s=1Y?HJ;?2KrCGJObEAeEc{!2T^+H#L7I5bO3A7<2M{RWi0kPD_VxC!4a@wkE z0G(`Sm@DKo!o49xKk&uJHyz=5$Im98qURkT9Z9ZuN>0JAW0qUH+rGtOM2S3d>*}uJ z@Py#b%PtD)XsO@NI+d$jlTsB0W#^=x96gsjT`}9 z@2#<)bb|7#mWFOwh>Alq4?@>|PNlofA5H-OIFdP)g_L!6do^_{Lkw3M`JDr~5Pa`| zbEa;?R3x+MjZh8ST)@dGQYdY-z#I<(Z$3o$s5w`^GOj*|2hFxu0nP>S7Xlwo-D-;x zI4s)%mGpnlKG}t`xMK!2_;00O{brb4xkN+ya`OH7jtz{;I8IxWkCf`SUMZe+!XTUi zo6B>rKdD1c$G78Jn5!EUk=`TVD-s0#el8hp3u9EOkTwUY z2>~q7UUt4Zg;SzIWt!)iB^6yDz(mk}g;)xfFMAm7f*(})mn2=AkHn^c0(-&72xzc5 z8by9ZCm@scOYZ=FhnRbo;n|u}le8i3R2`suSDzAFpoQU>11pFPd0fz{J<}JwYl8g@EQaAAw8{km=++pNCIoV?jQAYkvWyFcr)&8WVMKxfNQYU8Z z1n}4Gf8PPFsst`AC|a~Y5$x>PX7=lGZ`*5O7Cu^g@>vSPE&YjcONR1ynCe{TYGVPr zD_jd90fBlZzU&FN@#{$leu~T+tp2OMmHKdxsFM_uP|E>+<&-<{w{KbDk{^ z>ATicj=4Az*8Sa>>-wLJ-q=I*`|Nh+um{R1r zTPYt0?_J40m>O{9A}V~(M-H0>p3EkF;gnwwj$vPJ(&3KFZ~S;8ES8$CvgFxzmFAhm zM2@~v>d7#Y98D51K+gLiu?0WsljSKQg7L6*7_1Vpz}M&|FAwv3YA*KfGWXZoLoD*d zFLYA>*;uMeUE9omeujzWoTB~OH5}R@bC?n^*=U*IHW8m}UOA(LF~tOuO}*G#;GJ@Y3D%Z^dsi8>R}Pc*L9(xOSif=`~Yk6~r3S+h)f`Wu^Mi z+9{r=k|bQu`+kYv-B=OQ1+luB`bW9;{g6PR`mg;1qa=3_;%TZ!9xKdFX9?wbqzZjc zdwt3ydb7JNaa&gWg6WHcs4R!@Qeix3T_l<=sdJL&SncXy81%p2u@~v zb-rM)6~?HtLzFHhbCK{k&f&Sw0?a8vF%fj3X-k95D>T2=*N|f(=dnd{M%iDtvL7j* zUn2}JQwf~?LY`CKiT4T;C%b9J=6hDX%X*gI%G&dem5-S1BviKo6|5!5FUvZ31O~!b zSopM$c1-PUxrk00SUErkl=Vwpgr;6of-bysLx3W^byvh#AjlV`RZbVR{CVptXOZ<~ z%lbjU^my$8p)0anQs6FRtX};Dli9PFMylWAfmyadcfre!jTWZen#Kh*wokW$XWwmR z>C&78R!yA(z7ui#e0^UUVcHVoeXH$Hsq)_o-e^># z>u<cKmRlM{|GM0SRmotN3U;-+sHDsG*PoJQ~io?N~>f=e$WY)yDJkaM&Ka z@&^Jk?jV!x#z~t*A?qh8LEn3#zM3@%XMVKg~T$^~wvh`^rW!oYrKZE6`Zoaqm90 z|LE%<(spHxbK3hbY4Kz#gUBPNP$S{6Z(PhM zN&n61i2$p9rY+d8D6eezxM%cFFL1?5M(7VcHAs+L^lw`HxHL=q+#l37Efba>!%q93 z@Ns?BWd6G4DA?h>G)~rSeNRi2g*v^ST>KwF?Ce9NKF7rw1FT zex$zQpC&ORyzSbJ(7V=VE(~1g{vx2szRg|<7I5oIfTpD0_K&rxed~#P)iu*@Gl$V< zW95<#qlCdB=XcgsO5QY`5)wl5FV51X)S!0JOJ_%3rtGlFfth$LU zG8W^VtDg=)Av%zzZhqlfq;Jh^i-i=Y5z;FeoZj&uH_Y7jMUZ0dt0XBsindRR%Ub^3 z&ORPQkE8t1xS!2iV>AP^&U{U{{woeL`Y1;R3!h1EwYt-2+s`Jj{0wseQ(r?zB z@aaL!%PHe=mWcVZbaB<_A5V?WG|vz`ga-J^6RI0nkfvF3z=yiZks81A4WjpS?&bg#}v0;!}j>lAd- z(ns*ZEREOH=Y@8IWt>abdmcGZl=Jbo=eqfNvb8tP#zC(wBX|i<#}_v5S^*t87Pk_| z<|S7O4aU7iDpR&kQwf?C;& za_^e-%yOiV1fBtCEfP~3Tx5=QalxUPnUX6sg$#@WhehafyUq~v3XewZXwbNMZZV8f zy>+%Rgh`w+GY6%xyY7p1wck6qT##Ug1pT$);Wd1 zNplmkHC^7BRS8u(*E>9J((1R6QR%mZv${W_9Nsr$$zYaS03ajt0ug zrw4cv^hEnb>U|H-mJ$ONBfau;0QI4SV`;U`dtOP|cR>Od(Umcj+NiRv+!KZ97XA0g z6{SBHEBj)f-zkC|XzGif$B##xXp_EMMJ?}6OAO92B^a^~#@T~{_wgaG6lsYaPlQDE zS6_sCsA@1kbuZ}RV$H;()tE0Dc+n-|F#C!iY5$G8Q_>NwRJ#S^ zvD%9#{)u8+2$j^Hal4qH`i^`SjFaQnh0v&f&Sp5A=xQ&>U9)?~AEG;}gPCg_a#8JR zFxHv10$9r$!VuwRm?Qn_JO>3G$8=wlBUpL@i$+(fGpFqLup5c~K;Ft>ytua2Xy5V- z{+dmz7-8mDRmc@#uE$e$TbIyBofX#0Bunqgg=i!NEH?Mkk$)>zua4o-p*Pg{{OC}z zzP|fAPv&YXABQpM^=I-1bA8UZ8BbJ3H?F@m&ZN*W4hA|(4r%+MBhQF22ei?iD>9=O zY_^Rl&as7gK9_i&S|YYupYd!W?a7Z8R(d57cE6evSYM7j2x+Oz(ime#w)cVO#)x$A zx7(sUM=oZTJdafqC%^WtQHt1?mm>ZD{%5b1yc=GOr|owWez(6+lKGfaS>{MSCyeV> z#vL^?aK)i69iRl0I(L2a7lQwkL+? z$t{SBM1$v~-vR^#nHe^_m{4~AV3l8nXiK-;HY*|+awc(*l757h2r;uP>*K!a>u3xa zysTJa9}gU{Bul?7%F2G1{bA36dx1^G_EQo6681wEeeSFL@D|!QnFS|J8wmhpP#`}K z_wo`&hkVL$i2Cu)aC@%p^};5`vC}il4=`!(W*nK?-S?GQ_uXEeL;ZsbagiCOXp))p z%~qpvcYh%&-@lEJYmY1Ykyt&miXFmB&pAiq;_%i>hFgV|QkAV)%qSFBMu~lWXL`T~ zCNP<~5#KfPJ5ML^wxm;Y9(R+7;a`8STY8#y`(;i0(#A6%<3a>{9<@dtoL3c>EC$)bS9PfX^dxn5pTcqUCiA2dG*StO#6tM7Mg-O|dfBBaG1+czMiwXUG2;bXdS zhtLd$q(WJyCN593T`?Wj%pbgn!$?!bbLUP}x%sp&u@_uimg37Tyv|eRMB9D@0NZ23 zAPntS(JA2Z`ozuAszU}7rDK!1$e5c2P2QPe^d#uKy)|0(wlw`!l<7EAt1&KSu)5qr z@?f(cEE}b_=9z=M;zY;J>V~A0f*4)LB~LQ*dAzu0c3`vV4h8Dz8AG#40VRBc9H(Ug zmq*9>IrP%)d2GA!mlt|8W6R4cgBKUBSSGX&qgPbcw_wl$r>7PlO+C~3 zaNfbVV9%JccU5yj@Q0aXvw?D4cCQhm?U~A`-nU3ba9CH*Fw+)NA(^iBLuBF_D?Fs>(mcy5CB%CojvwAB@t!I18SxcV zQK=nQTyZ-u)ghsEV6@{eMZ&6_#yJv=YE|{J`m+=lVqlK_fqkg!mAVAuj-J)BpYLtQ z+QbB9QqUvq&MN)RCyqSLDXibSW`z6W5>qi7>Es%SUGMPX6xErJxBrC=(T{jBZOP%H zrORz3C@OUK!5B-#ld(-;K5Sq6$xS%?cx$oyuAgzilXAM;B{#?lZER&dEKh8Fe&)W> zD&i#llQs)+z9jq*km8urqSrgq%)}AQA<5A3IHqbn*C2_Bh=glZ>Ty^H;k4~&Bf+3G)*3KcDK_5+ zA=n!3qNT4_Ddw?~e#YPXnq7v|GbxZP4316W*X3w`AD#ZKDWxdX!)xU1SDB{d1pXOJ zjv~}6;?EOYdWOF`9T5Rr2% z`1R}GqO!gcK980Y_w$y_zbY{l8xEx@!66#@-deoyh0WWOGf7$^!7#rK`&DUAu@IyA z5$(CvsP-;#M)Pxr@I|J#xR4`u_7Dx~?mx^ax%#)F-ML9|e#{2qHc?2LQ}^Y@7fOgZwxy)ziw$mt1SlIub2H%ivj2OG%mwwMNxfe-_Lrd>! zgXtMb&M_+57zs9sG&B9?gd<;n^nd&={UDAY!!dZ}%aKq<&9L^HX43p!yn||BG`?1)h@B0a(q1!S${-semw=&y|1|5<7rFN8 z`N!0q)#*nJ_C4eCF+7=sJwW$S+Guj^_(RFs(DS1hGf%$3VP>bJJfey_T?C00nKY#Vfos z`>`Ol)4-Q2tBl^$DIAJ+f_@{FS$_v-GvoIGxP^ODA|fKk40cAQUTL0=)~;Dz+Vn!! zOwE&h?$$JVWkx46Xx&AhIh!x_bcH|*_q7b?<#I7PAk#pZ4OP{#*(pp(UiAHD~C zzZmd?EOk;q*z{Af@&X@R)?M#=hC0P6fsh!YSoW%AUb4QjI|c~;s39781+M;ZQNK}c zPiGtTQJ%xvzS<@^H*M;yQA9BWO@sQE@MYeacAjFR$YWKa@t@jC7^3bS*U7apM7#7a z2w98d`r7Eq242W36Euhd3@N2$28Cfxh@N{X(k8!hBy=r1SIwj6o@8;JXGq=V-L&{~ zE3-nWv^B*WH{zqMk!X%9>97G#%Eqbh`>#@2koy);0EjqeDAW{FF1kGD^^ zr2m+-0#=FAoyFE-#WGGhBewbi_H4zuSC)C$wBsp3Yupf!USgHdnkjCpUSt2COFHu* zDxuTLV71J_-DcO@_^Jakn)332;L)SW{jyV*;2Mr*wO8d}@C_$-{r`Yx!7Q1}&Cs{cI} z7TdnG`Wr!Gyj7)>Yw#SQNnvhzXY&k%9?axpVUH<^O=?H@19kihj7~vELA;cG{cQRV zdl*6W%|b$ZHad!9wT!b!SL0B}gG9TFPx;mGp(RYfTz;a>JL9IQp^Za#*soYgXcV*e zQ2jCsB&~~AE>XDu9vBD@FS5bi?e+w(!Ik3RSeHf`PK%YaAL9W)hCuyOr6%&gN9m^3 zEc*|Gl&0Hsbqe&SLtKhaT4H_q=ja37DSCTZvEzjkW5*5XH@@lB;I_)$DRm3({I)+N$fcPyZ5V3AJtkc` zvh*Ro&b9MHK;0TUY}mm!4t-zg)LT8yEEG~hNPV;D!SYhqSif;NfZdcdg{T;9es|AQ z`w#WU7B3h^krL+$Z}oS9qOEW!=U2`HPD5j_pHdm5w3zpQl-7zhKO66-JN!Ewto{Z2-)OJ}<+V zY1%<@{*s;$696;Qf+FW_bh%}DBz9Whuv(5rLE%N}unYT+N4cMS$D4N*{9q^wbrY95 zlwYY5<2&}&JlgW-_vp#cxLQvOku}-RMM?GjL~VcHpf#x4*kwFRh<4@RgJ|&F#x2`n z*^<%u$eWRR-tpX@a~6py^*<&Z$;T|jAyaARwyY6}!GAVsQ&}~Ke$h5Fw*8yCqq8M0 z3q{6T(?shoEZDF>$RS*MQcOs?lWBEdT5M*ko_{(Q26$e0%L@6}c?wv5kq0Ym54tY$ z^f6Yfd?6IWSySp4I1|F@AxqkcI#{OCL8f&aqjJ+TNR+3S2-$g?$Oq6moA!?fAMJvEbpL!M?nD7Ol(N6 zef}KADZp%bifO|`HLxFaOt?0*@Fczq2JAd#vrH&F3Fk=*2_g!#J==KmH71?O(iW%Z zEHe7S2Rp{gBMa3UPygB%Ih+tVej;coh4y~)Obp%^&23#1 zEAKTZ;ix+9+*n-#N=)Ybs?SwfMjATg>B)S)W*etVhhT8qhRM|B_2k)|c()K~NyH7s z34gmQQP*N$%((18NOOUSYz+w|=^-KhZ}6RW@mDuT@W^FuD}%pM@eChfahe|ku-Hb;>v zg+OHy*&|$V156ftAo8`Bhn!0=An0(pPHF;+BtwTfPGP=ic8n8R)?j=hM=lS7NyG_z z1+F_POC21#SVvp;*!RB;0`Rnwf6g6Ut<4geA0QvGxHQ~UGkny*?iTN)Bw{X~!kR&qz#MYrmoHhAk>Qb|Nzllx*LdjKd4~ z!00g6@6x|AAq+<_WXqW946%wCCW01v?&O?4#iw4``7~HJL9u5Eo#U9*=SX6e<@kfl zG3P#xh4y9kB!GisbvZpxTVBRt=~i5Ixzp+&7>%RyDe0sE;eL<{LDyQV^7P3$zwpLKpir6HYEE7f_{#HowP9TZgCCS&d+QeslW)C8 zLZ-EpG>#jkH!R6=c!KjVyxWtq9{Ixwg}H7glEDDIMun0#Nk#1Mf{GTF)^PWH<+nN3C4cvB|54 zggqnL4~egUETKv!EcB50g+##!@;g*VP zh}h`HbKOZ~&R=2E(|Da21T-lf)2xK=ePlZO(fjdRR73VV%s^!nW74bUf+a*Ig8yHe z6Suk92Uc%4=eV!GY<)V({G0yEILV=KE{{PZG>?^Jc?Ts|0sbNp5}SXu^%S+dR25n6 zBUtG(s5?6sjq5@DD(b$VVQ~Ti!6-BDRH_PYqH5XC}Z0qdRx_g@ISQD zE&d?FxyIu@+&9kkRn(S>R%zw|xjqvU@D7lO*_Wvr3I9%i3fRvz%C*PQ{P24|e8~0g z!P@&jL4V-F_LeZY2gfEvku6rK>nvLF2Fzsz5F4xTcOnbpFRiq3 zj6lcehw_-cg z@vB(e=IWumxP|Is>Fv$#fYMQ*7|Fbw1v4Hxz4|3ZOjdTHcZNWGk;R*{-;wk3>%}Dk z5h3YU@0_y> zgOnYHgI!}x7%>^$QlBphEsS4uF@|2vS5D6o`05B5ec%|!sP}i5*`y52WXFuQI=#wE z9vC-qLF2G2;R~Lj)4_l_NVHF%`yJ~Sf*#xfFB!_Q0VAi%&z}qT1@g8~E1Ou4381^{aaJoQ5*vQ?1Z>o5;L zqZ5y=Z=U5Fx>jG5p4qU3jC*Nf`#CkIXC_v#e7u6c>C;cUFt(fvLp%!GF814^ZTJ8R zbtN#|yq|nz;RfU)svJdAUkf-^^5bQVuD0S_e2%#Ew(<@NVSMC&3Nq>@hkGben!wJ> zS?8s+#j*`Wz67KxvFBcZbuiqE0zgGW+>|@npm%wQmDph5Jrz>dIrjH=C;I|5ZTAa2tuwyavY17NH=~!C#--l79)x2k{ zB|2dG3cjJ_BjDOe_E@4=-O(qK$B3ag;-JS5>evTQkn%|ES?$<`XTVA?vGe)ZRHQdO z*heR8^z7J9>4}pkc6rTw?KSuxOBA;)zCo4m!$PI{ykj^d*gNE;scC*=JXuUA;P=$tWoPkX$GHh>p~qOnip=F9%7TvMP{C<@#C|2Isf$luK$?-f(f}DwA5!KAx1hNY#d!=hR~9W+S-R0a$@i{p`LTa)7mwzs-(Bc8pVb6cl`01oarr4if)v z;m|O;@H@ZRc%!%5buPRj-&YIgQlFi;lMP_=TU*z;S=JC-mAof$RKIa$nm4_s9}e8j zJ4T9hEmhBW_yrPy-hgCFY7~;=l!#fVkeY*=&GBb8VZ4ibz4CaXy%(wgBlDa+I+4*t4@Kd znkg=Uk}H1hw|{j2DbIo@X(au!Ajk8WIX%G2`q_L6%D&avdjy&QyaJoglBN&AFbByY zqZ?@42iz#2$u|9-pnI*|-&%Orbld?LbV=gxt=jl8OORO;XS(lys*?@pigp?cne{u@ z!6XUnk<%e0TWKegnU9iaRE(CgtcJ{mzHWh&TM>6Yu z6P@r)r#=tt4qW~F$Ve12zsNa=eYK0d2vG-L6O;+b4`&WG~U6K=noH>klA*yg?{4;z%s)4vYgEWQP6FOHb){`-%QUaUH-8 zV*-a^LPOysuj|S(^?J} zNNA50Uff;O*iA+mKPf$Dvfay;sV*k~Ci1Js!;Onz6D{pb!9p1VB5i!V~7lqhOn zs0=FPB?0Zu{n4!^=8hK!9)S+NaDY~&JfRqls2;J($I2!8Sk#Wl@_PntPMB844l>H6 zW+ldC(KWpD)L?jzG@#j9)Msj&8;ZIlxoo%DrivK74C=!|jLIm|*7|9+QuV-d-ym7| z6~nxlj1kMM9I8tAb9^vm^bb@i24cR4Bj4}mJhfHOt`4eNg~)IG1v zlwa!lBt(~#UtLiTT}!XJnSXVl^uC8M5Mfo_oP^1oN?c4 za|EQ_c;3=(aXL_5k>x6l)W^#cAk-npcet*=P4V)hH0+`(X7;V;3Qm2w>W%bF0(KWg zaJOt*wzUxegRPndJoN){t`U#8T|Hp@+4Ui$UjKq#GIrN3Q^QjWPfQ@4nyl1M8$zr! zm9G0P-AHQ=7R2W0UL{?7%_FhpvE{6{0f2B$K?3XFPLo7fp6iJc+IYN`z5Sbb$1>+@ zmXqHLU$y~2E~;%1R-9g`$~I`XaAa)u5GI%!{dmCR0uHFj$vK<^!{Y`4y8@^7I_cpQ z-Yp}!PvY~5_Q23Qj%EckimPXgR`~W`z4tH%ThnPEu>GH1;^Mt>j&#bK0mRmXuR}6w z)o%SVp5w~h<<@`ub9oJyC`nQb_mDDFhDGeCTcG=;LqB6OzedB58dO*WM?zbSz#ydN zC+27CoUA1eGGD%8m?tA~s%!b&=zz_6G15+PB0IzaVc7oAw<#$c+st8U^|rz$tcL0H zKUD*fT*WIe-JV8R;XiJQ=gR z#G?tdRZvP6PfvEn14?46j408 z$@*;(P*?3gEbk^fj?+7S3HydC1^J;|W;W7f+Vkmb64$j%7BAxdC59JyOjNQI_h0Cc z*zkB>W;b__Z+ByY4%-7d=K$n*&}GBE)L-UxG>Xy@VjoOBW_ZishW%v9o5;+*=f_QM zgmlPC&968Iws7#f%fdXOyRqjG_#Gj9 zPJ>|CudIW~q5II=DjQ( zl9fx{%T%-6{KB-RX3@bym6qIRkT#|?H7kv-OatG6$Urc}8~~QlUIz$UVKh@r0g$ll zZ=RO8E~>h??5_+gmH;Cef$(Y~@(LHV-g%rO?XVCU^_k;Cq>nbwhgbOj1hjvpBqNKm z9?*(M*J{)aCx>_OTaKnO-z>fw?Us<|GR2YUwC7fTDbc#1*F_J9juLmK& zD#Zuzp3*+aSSGW21jbjO$U+1et~Z(3;~a|kLzcRG(rtJwOkdb#!P);m(a!(X_1$4j zU*G?+w$fG#ergpg0&M{)MTSsB2oPJV7!YVf1x#2L1lck|*uh$*3W6pGG6GtG7$Jle zAYo}$G>ou9m|^cg0$~P1_+FG@f6w!K|0D9~9cQ1{Irm;|-T$HwZ*dm{6L;)Sc=!kH zoh=7u7RnO1Yi>{t3=7+gg?|9^zv%Kn=cOE46ZD1A?WRKUSzokh(A=xRVK~U_E2&19 z=(~40f2O>bkI!0I(CZ6_Z0#M7H&8NC)S$-mBkBe*WPvzOdLV!Eb-33_eswgUd-*n5Z$L z7XT?{&u=F1$LE{gE@nOY7~caPCJxJNIhpU&4SJu9p6*oz{SW2E0H3~<6$`@e2K!jh zqzbWWxRCY_ki4t;QpnAuZzxfTaH$=d3om6oE4^^ru+fK9pA4T$EcxBH-c_s&zj;AZ z1*RB=S6w%;e!_A3do_{3j2$}9aM9%mKvV)}IEh*U%l% zx%Km&N0x^=7L2S@GJuLmX!f7Lk85pZMy;+omvUY~b(gcY}FV6uyos&Xz!z zTenMOx~CYI^T%+oO3{+`ys6?1!@-=gbb8MCnPt9azZ~Zyqt;E?me~Z|4AtqMTs@p5 zjQybL0CMj?iEZd_8m?v`2gN_0ko@aftXZ0+U&{*Ye6UAQy;jkFokPLFd6VzDl~Dh9 z&7S(4e)dw(FU%CJ&A80SBo~>Wt8?-Yet!Q=KheMai6^NUHV-kLHj9=`tQ3_lEvagn z7QWKDC>v)id?eLW+%O^?3G-NLo-H>v64f3ERXXAElioZ?3&|6Q2U_gAFSmMuq-E@~ zoN^>+MA#A)zxX4A+r0n~$aBVE{`T8P;J2!vo4o0SkO`u5_(g|Dbrz=JDvfkd&2zfP z*!Zm#{{$8PBBO}C{XS}k9U2niLj|FJYth9VN(;NC9uz2Ca zG8ZJLHm~kl8~myj5;)%G^gFrq{v-zGY4w{yWzsigu<7qPj=oN9;m9CKh1Wrtpr12n zBb)x^P1uB2{5WVHzkzuxIut<0w9(>TUcPgfX;p+dYYIt7qDi0Chgi6^3`sCU{$oe+ z{|#G{x?F+3R;dG_`XgHUW}l`zX}nmc!V&bwWsr0{tiPS-2j}$#cm(ZNc!72Twg5u4 zdAjNbzX`&t`?Sdp88Uqc4nSNb`Of0VvaE2hakoEw{}b<6O8v(U{VsEX7wh|02@l%P z9))fuCcQ4EQvG9~F;PR+BPDd{HM6}+(Wx{Kb2&&-+xi%ISqCyu*iZ=tj^QKXSJRzP za0!ZOpa*y)tl1uyKd@~vz@MrgT)GK(uTVZ5yQXsDOMQ#Yw)g0UUmVnZ>)PPL6 zE^v_F;wc><-~R`?JMV=Lj(vjsy!U|oJt&^7K#1Pg(ca#AX=**XV#5y}`%j=}ExKCu zCIJ-krJrsdS0G-Zfd`AuWYB`NK`t~KduK9*t8!>lcKpp^W%@uXwGm>>d|3YAya zcRJwE76D?{jH3?s-H$=R=#Y@F%<16lOU@r*YeQ5m2jKmUrZ-zORlqY@dw#?}^NIvK z*#4p?w+^AtZj@p8zXfMVMDnps8TVDXirie^C@aUin4?NxDF1bA&zGM*JSj7M#6arN zHTcBLj~?dNe~#W~`Sp;sjmIO6$6qn8XAxzH&3}Fl&%1B&r^g8D>u)qwezEYr`<1GV z+wp{r(b_jQV5-^>n343SbiRyfTi~FB+GHEcejqP-U{2N&h&E7J+3(+7CwN- z*_)^=-e-RTi6}&HUAg;Yb>yILIz%DdPgj1{qmj{jCGo8c74lZ;FxuLE`#Q7LhBIwt zN9`W=Ew&=2Ts?(1luc3kWH*)e@-N*xzaY%^SebrDTH}%kuNb{(%mHUAvC)os1 zHT%R%XM?Kb65k0d$c=39g*-i!C*u$q>b#PeDO$aVYoJ$wQhlziM(t|@vhnUa zh2Bo39>Lm$RTaS+(>=l}xp;C-fpUjRs4XrA6+<=z`!~G)!e2bvlTk`q8%)FZ-W!Z; zT<=opI?+c6*$~>=yAO;WpUPSmu)o+l@GBPrF`>9F(Ai&Tr%&0j(?x|~@=NWfkLG2q zD=87=P^MdqC;HlH*}N|hM_>0Jcpm>`zRemclS34b{oAT!wIQ;zzvRs+HIw~&IIc59 zIHI4hFvZaey~0gue_R>iN?X2ffl?KZcB&jqLv~1}TBJFhw6QLw@+L6ZW7pYVKq9Uq zRFSIBo1cx|9Zq(H^%?HPjSQ|^hvOsYXbH)3q_wzUp$;QYAJ2J7c6q<154f?95m}KC z>3dw$+=@b26|h7|oCJ!fS5kF}R9mYp^egV#iAd8eCJ~7xQd<8e8s!c0&B=mu-1 z-w+42T!qA%H;)67yK}{Bb`_DU*ZtEu^BJ!oI8t-R`L*e60MAEHdgC0)C@y!JdY_z+zR#zwex;SWX zv?t#vRP>ggoJjHGw3=q%S#odaiej4Ou??YUVRa*Q+Rj(L-LIC{KZ`-cy(D~=z2t_{ zhs-`iaDTZI-u<(SOvd!0_%hDPSNb! zDW|!sM951vGC90l1DPdGldi-S zC%&1YnbzG(Ng5Fv@Iqmp{~&mM z%U zi@=1$##=!iKHl{sTyq8#i8*~{-{6+kX?c~Pw?w?a(D=uyKr5Uv+;?T#&fdb&8b|Ts z1m8JXD&@Q=*AvF652r5osL-CG>!T|kDZ?sy)nR&l1W{G1dW`|l8v^->&5b#YgIIM& z4WN!)T{W=8M)@oT`?KdVp{w`jr?_}g8v9$xGGuW@Imh7T=zUhi)1)vjVh7DDYMl<# z`*fQ@29AiWA1xW1ywV`*U&8sog{5p`tAB6boFq}nN_J%5i8#OYVtry#*|8%Y4!Uuk zf;j}Y2K7UgoMKA#m3*|-{$W(v`V4E8KNL9|_X7huP9*j<)Au@e8qeI}X3$D{p$9tD z|D8hAPv08mmL5G-FnpE!)vcZojNmlRoyv5MQu>x5p`OK2sztmjq zpy!!48?7UR1w_DP* z@69JD$Hi$!cVW1KVr;lS&aytEn}j;d=TK{|?9F}i-nvC;FuK_qMrxVx0BZ|h-a`C( zi%5);K}i^^aJ<;@+4BcgM#;dIGmkh|>3MY|G|qI*o#!5iejGg6&aE}oKWY}>$o*>I z_5&RDR1IbdP)xh>q;E!V_vA<)TYgqq-m)=M_OGpg$L7y%NOd5uySZxYpBBRa3$s#H zAy4^SfHL7*>2 z_eL&}p#z^q_#V*IE7RnKw`8j7FYNf7mzPItX1DSo*&h-v^y?&#)GF&|U`KPcjv9mp z3>6lZ3+l4+FWtU{qx-8cUwW2BW{pf}mF5qSo_gWz9X#{%2~4d7j4BL2l8>yHSIX{N zZ0?+n30&r=qHLocTclAUeb3ePPqz!`sYXxGO$AR0g2%v3Dpy$&zUR5@&*iANyonc+ zU%$F{Qe(za(9QneJ&NI{?#o-xk=hyLS8gpZwKJq$U2EbfN>|uvXYY7_B)u4&-&+4l zBqpUbvF9eGhix6P9!W_iE%Y13Q|ECT7p=wLsbGIA7S*sRPOB3y5-K-Z4yjK#76%(C zY2{~E=dpC|j|kO+eN8AMe9dXXsx(;_a*MN)blWN`(R@=M+Er!P`87uGOz6MYzV6Wx zt|A2SY*_#|>&wb~A+o_~ zC!N-MJ&#JQz7DLlIvP3i^B>O1$2=Q(Lz%zk#nF_p2y1@C&`;$KjsI?`koX6!>@CsF zt<%k<&GbGQXV?6OpMg6PTwhunyOBd*4poydCX0rv9ALCK@O)q;o)y{SX}F_ib@rYP zn%NDia18?-5~^~=!NMUqb&)z!i8F$#Sy@e`vgeE*TWMXea_BYu$hp&J%2I4^5mgAB zm+OPb{W6NxIu#f#s^;ZWcY#Ay4z=M*?PJ;=+14eys@r#7$o)njeZSqhNzL zEy>0vhcS`3d8_eTQBn@~EE%Ll;?A;2CEm7SG0I9aABZ64vX+t3yT5 z(f#~awzj1>>t9Wp>5%BG9Lw?;jRidYib(tgtmIyAC;hL-R4DMIrp?O=7X-vi#lLzM zVe@A`F=n{8CEgVEZ}h1l1T z6+DHWqM3`?EEF!ijV^HtU&ko=Q6Od?g1qz{S(%{f9RVIYy@;1%mAR2B9Kj%Cv?G9o zAdt4r5>iQtJzgYCyJJ<`w!zhYTN$?%axIkQmSzUNC^X#&qa^ap>lWdfB6UCie>&>* zjViI8ez8V26blZcgFWIf*KHsfhpY4h?xy0MwJIdzH?mox(_q7__7RuZHZ9Sukz0=3 z!?&7%R9V9_IP@DAU++v>Vn4DqsbqXEML|BzfIn4aUz(jbP8_>NUYvU+1>1 zuo>9YR43pg(vPSJTZEIOe(X9B~+M+ zuPjANSnNnzNcy(bhTQ57!3^2r1b8wun&>?_5->hw3iEG!!TuKV(z_BGipEKo@E{p? zR%>K(oECaF_wePd`pzUqM=}mm!gC&Fja;{^liv=0Al0m^AZ2?0UG=ye2F_uZS{_xS zR?^V>XA?z_{ZBuN7DM{dmz)C%Sife{62tjD%vN zDxtsO1@mN7wDrZqO|Vkm@jtkd(ckI^3tx@3>PkuM9g?f9!1$paGQ&|Z+TL|D@JI*l z=ay|w@_+TXZ=1}4pdICjexq@LAI1&A6eW+`Vrx8C`<^!U{JOj;${lz&M13jyi{~l7 z_ot5JC{xj&y?k=4?7^$k_BGnu0o*nAPMslIt3ca$aRWrCX++meXoO6P;OtW0JBe#_( z=kNHRk~PvQcdn;WBChr~Vml50x{UC(n&KjDB~^B0Ab0n^$`ze4AgZRdluB_Ax3yJ6 zg;s=?p0#b4)|&2FybdgYGU>`c=#Q=iA5UhY@Unlqyk?D*;$;6uedeV7sVzG%bmQMQ z{ee!~G5}GqMsBBl&pq{n8Lx8E+k^z%DhE)cNxkYq13!~a1L>uHP%TLCg5Vh~^p8(L zJtr&w@aJ1#S@au&1^)GDj^*Tx59h?AB~@B3JB+v;R7STq?ld7A8C=PO&RLn&X&sv^ ziQh97Ba?%P48(QQKL$>tGD46BtrEe3>Bw6h_;-O-MvZq40nC0cy?Y1dZ(OTdt-fj1 zD`K#J+G3!Q!4vY9k%m07V!fVps44N_mKsyp7?mS_@*ls<%b6dOjoE8=$gs+AFp8=@ z>j)B>p^C#xGpnb$2X39E8Ivep4lOa;xgA9E(;Zmy+UH}-ymb1kz(>n*svVO&QpYyd zPBasT`16^|WlYFGah)soBj-;N1@mypSB2ks2B5&7k?2ghzql->B9q@QB<-v;{fKYZ z_6Y#u;3kR?enhwouP#IHmrTjFteaO%?V}OVpF$XI)w~Bz6+r=w#Nn`CWTmo~3H!tS zs;kiZZuku+ap{ECo*uf(p>8KL8g*&Pfe;rl@HmoRRfFEX>A^i_f6=yltI7832=%Q6 z8^;VNV4@g7?*29?wg~+RB;m+Tyz~5X5)FO1pH+`?*FFkD^vnwZaBh6hp$0$O_x)taG@MoH~J7;-Op0MA?wOU08mc(hRJ~)3ly#T`>s@fbEG0- z=t{P&*c#_v>U;eKqQ64Bin|I_C8F;WRQ@{8ak3W}RJ+jZ;OfYzehUo9a|(QV102e% z!@^OR^vi4JYGq5Fe6}NT{`$*ho)K&NBye=Q$4=G@k;J_Y$8ZdR2I&W}gZpf}BF}IY zWDmqxY9@%*+5ZDrqT}R+5?@I7QxYuMwFoV7V`eZ?-(oYsegG`AhSl|Lt$|pYd+aoN z-SDi0`a2-RHOfuioR8M?aw0Z{7MT5BoITHFHls@rnxc&jik@9ROXW zxnZQ*K|76jWdl3BgqcnnlAaqmORQzY8q{sn&?9Xn^>%6ou5jmCHL@z61H%#b5%z1 zUFLiMQr&5X8M06r^#RgjuV-L`OUYs$yHcH~W9>z-U__A7Ic?mAB+D_V(iL&Dv3{cw z?TN4A5xzo&Dhb8(U7vkg)fansxnDF0)|9`Aq?(<}L1B#YlUWJLt+bu62jZT#6B5{c zYgI8spHEH-tGS26Cc2iOrSk&jsn$;AA^iMx@)^hqVi*PPS!96Zq1iT`m=uEun2*7zlY1++c#DV5 zHyimiLM?p6cn)u*G*xsC=U(RfXL}Y)l(i{0ULz~1UeCDF5?v7pMa6J#0}JVHt>ffH zm`v13b4=miU2;3zkskidyR0kxnG`3mZ4iLs8<``(0q^@otx7PaO!1Kaci@>?*#lPb zi37`LZ(K9DkCK5=y~M}Ux5;C9X;(j9PER(4zYYb-)x0h|N|Rwg4u4c7paAD04&r_e zsje*4I9OwCCVat`H!}E;K18?bBtvV@6b+U6Dx^C*F1|s5?mqLv^-TbGtk_3Xlf!Wu5Uw6^Jn-40=p!D@>)2(F)KE?OaA7u0a`nQf)pPaE$A1Hs(dv zB{;g52I=&pz7{V08_BH@Bn~=Esx6)f|W1iYw+MPHDlewZ+^$i^cKue#SJyXM$Kg{OpM%K@< zH6Rh8!vKDaXEA~9?X$3me}Ejb-Vt<4HZu|FX3mJ9uv7G&C>6(4FAYi*hc6?zV^L-P z^QAIq!$m6;M)IB`X;E%`d1m!0_rSikErf=fTiJ!M5FcmwC{ZyzZ|U>A^q%73`wu3z zTzItZZmf`JxEXF>m#VVIlCA5q$zB7~x!96|g$XpxZ@G}I0*SbiM(^pfvF>NlpVTDc zRjM!@tp*RlOTk(a=95RKS$(~Ta|-qqzB7CG#dXVaEu#vQwR|}zPDh1b4x2)gm1OPH zO1;AaH5MD;Y}k_Ss4HS4?^szotB0L$ysU}M+`=WazuzgSJ^ukc_qwM8M(0gfu@d!F z(0OR-^h0`OzNf0i^vw*>hw#yJTm3#lCw>zXZ*ey%2l1*8S!o5~!nr-8GP;Zegc%*Z z&%7AJr%h&n=ro_`;Lj1(n}<5i95)W*JyBX_HcT6}(zhc8=I&jd1$6|hu#|XrK`@rO zDs5Jj4<`SKf5|RvL?W=C=dx*^rfTy$gD+jmUqfLQ(o!pZ{KKZkk(k+EN)zHR34Lj< zfn416-?&)&&N42)gt;XckO>T78{U9Cw+&wDBg7mAsxuPcFrSVSn8V{segD)QsJ$7h z*yVdv>Jc_EyU&$-D~dHa8qfYB!T_3t7oFqYxsIrl_UkpGQPJBypQmd;VRUPf$f5g@ z{HSYDVdG8l`35u;Zts!tKl96SQ*%1JxAoUj>JI>sVDnNhi)HiW{ zoB#*qqZ6mk84^}=fD7IF*7JADDGcU=0P`^}&x_OQE{*`=K%vGDsLSzv!^08Sf6#9RzE|a* z&$p{|A6G>tZ%?_9Yq^u*4J;VxMAr9;7MPjFwB9az&nN@6SaRBc`brRGp}OtV(bHH% z@q__ITMF~Fr>`I3IbPdP;D!b3o{^y_JR?L%%?KmxBr;t^K~1S8KAY zlfy?8p%01$+*>aY9jt6TtZk>s;*ryXUD4?(_LwjAvr>gQTGyyD z&T|!R)vd#YgEuD$WmKs>1EeE85i|SEiSzDc=&FT2BB-U~H=Zc>chg;> zkMdn6HGOd8TlZK)J+QtTtg#l!X_#$M!jC2q{%m)l9#mQqJ0m zmhMI9Gq9<|fN<_U%ikI)rIxbVUg78wcckggph`Q&Q2S#k;LiGh7-k~h3W`0aybyt2 zV9eGFp4IODe3rCH<#?ntHGa>)1=2zC{#69HVc+n&b@9ryX%vh>1R9M)3U2M!%8UT8 z*4FsZQM(ti-(oCiya7r2j9sVxqTs%zkiMx?lA&|IFPf?GW#uRBX$5{$98kMF6{tyH z=yq2g{R9x`H;4RvL#vHEjyW|6+hgc*FVU3~KoS4`!5q6;8^p&UsD0@R)p+^!7l^5T zvpVyku#YU^!qbQ-&&#VhFh7Tno~P)uIZN0FENln;i8QB1+ZYY!ern12gyVH`Nhbii znf~rOYY|Vr6c{l7UJSNyFv#heiCtyuPTjQFuOqGb_MpT)LogJir>+*mc|M%i&&tYj zs@*P!jXUW}Nobb?w1X_S%Hpy2q-VtB_=TR*+bBf8`9_UFA3f+51%lr#Vx5NhzuCUR zXy7x4X3i41iq)Yaysj)$%DddY5=08^5v@%7jq)n2N&y>=PrZY91K~_RLaU!=quk+T z3vjiP1kru^j!*J~QMx{my`(*Y34}wjaMS7(fFSApcN+G=PHc!VIhd%cK>JMr42*R{ zI9)Usd*NP^E3S@NtBfjYxQ5nmR!cTFvvM*g5DjXWNiFvSOo3GO4;e#Y_i<@}`w!>O z)iE-?L7VIQuUX4%$4op**u?KhL5?yEvEC+onG1q>=A{aoL3O=@QWo zbgR)llx()57pEm=>~Ib-BO|L+YH-1a9x;?nwe|JmoN!ifs1sb-#PBrcH#@iJ_&nuTna%iJS_F2K*eTaHk;y=7;)7w*jnYu-O-p(UQG}_rA)}`PFP)c(bY^>hX>re(rf? zyEz4Nl_yeniX5B}w8n<(X=#%BlSU{i1~q8g%v`t$E)iwksF)epH`gN_HL{*i8vl{= z;yaeHkys+y6!wD}OdnP?58}d8#hbP0lZ=E?o~-u%Y|M14aJ@{kbeE=gdpX-TY+U8d zzUg02QMOKi;j%#F>3`{xX8%LnxJsxmA|sPkj|)n@neS^37k|fyF;l}3rtga9l-Byz zok5v&)ryS%2YsgI2Py_wb7rL>A}afM2lkI9p?)0$wHQ59JGk%C_zYa{0LIODre!|B0@v@i zb40tKdj~0nto8%XA+6dLIz5+7@5qxk*VH^xb&8=vs-mc=Ia!-)nh8o$?SDsTnoV^m z8(?of8}|~NhAZSznTd%K=4#Tck+$rlb*1s6{n!Z?ewxGM!;tg11v9^*lK2T!6%;9R zZRz+0ex(mU$}u<@&`+UEK(3+Rg4>tgeFJ$r9TE`9YG9bOj;#qghjYK)>|$b0%zcrq zOTX+v!#JKRA|1z^WVNF3$|?jjb%_ld#GAVtOd5-XiV4T#SYf9ojnY$JR*eRP3|226 zPru%O2$Jrva^*V`Sr@qC2R$hLYrzj#PGmJc=o2^{uel6LAUjcF?tQt)tuP)e>qyOX z_qb~o06yczzgq&6v66E`F?8bz+5A+j3-7Zvh*NVf%4ms3_Z&mD zCmY)l3g4?qCoPPHT^Vt951qW;;y5;bes@wo}}W*E7kF=l=~p{)kTa+ z18iX0#cJD5J5xU-(3$*1dsO2&LViueW<}N$jGa=!ACsspv#dU$w;?`$RQwB$rW~l3 zqQS67j3L5{;VJ5Bfz(8abB0wCuwu7$d*FTj4}ZPIUC7nlI2;0zEJJt^uFAK(;a!z~ zUWWo5J&GsMs#dHKTUdk zJk~>6UZ|!1MWl?yv$u0r$nydJ-(&v2WU5Lu(_?PekHFPooV z>}fgzi(2>>Ya#k-f0vS;6s? zPahybcT01VryAcE^s;V!lE*&WWa5-7_fM1HjiF+xnlkjxu@dcvJ1GM7Y?QyN;%?y?#VO_tpmH2E=y{}^zeFf{g`GENg0%e=$76>Pp z*V)4r&Xbmx!$x0nna~sHStUNU1ikZWpmyhOgaZESsCT!hsIdDIEE$x*P&UnTEWxj4 zekRn0EZ38I^J*y|)Cw|7v7j_8p9|NG9fw`RzH2&i-d>4w$lcQIR0aIb#*&h^#?yfe zU;7Xn`~PEy+rvO?U>_3m7c&5i>PH+=#Wkp;q4U?lcRqx0Kv$Bkk5n=o7?OcJA=4?cqrvVrpGmXG1oP;4EtN_pKW$39Y zyi<83X{(J27@PM0C~xvcitCz(2}X_DkZnC~*0@)1^hK7wE&fJ!kQ5j$DH$pqpTyiN zt)aynt>(O8x^6W<0d8x5coy)CYn1nxlOJ-Wd%q{c3umOtcmfZ7lw)Ft16>h$RHJ)f wX*#y%?xkQ^x6>bnyRIhD*y}r6yTRLl^a{e^XMZ&+-~1)~tmQBHKRf^Vf5^5s*8l(j From 163d13e4159e695a4bea8d428e860e121c4c0234 Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Wed, 26 May 2021 11:24:52 +0100 Subject: [PATCH 154/186] [kotlin][client] fix Android crash on API level 25 and bellow (#9578) * [kotlin][client] fix Android crash on API level * [kotlin][client] update sample project * Try to fix CI * [kotlin][client] add flag to control android api level supported * [kotlin][client] update docs * [kotlin][client] update docs --- bin/configs/kotlin-json-request-string.yaml | 1 + docs/generators/kotlin.md | 1 + .../codegen/languages/KotlinClientCodegen.java | 4 ++++ .../infrastructure/ApiClient.kt.mustache | 16 ++++++++++++++-- .../client/infrastructure/ApiClient.kt | 3 +-- .../client/infrastructure/ApiClient.kt | 3 +-- .../client/infrastructure/ApiClient.kt | 9 +++++++-- .../client/infrastructure/ApiClient.kt | 3 +-- .../client/infrastructure/ApiClient.kt | 3 +-- .../client/infrastructure/ApiClient.kt | 3 +-- .../client/infrastructure/ApiClient.kt | 3 +-- .../client/infrastructure/ApiClient.kt | 3 +-- .../client/infrastructure/ApiClient.kt | 3 +-- .../client/infrastructure/ApiClient.kt | 3 +-- .../client/infrastructure/ApiClient.kt | 3 +-- .../client/infrastructure/ApiClient.kt | 3 +-- 16 files changed, 38 insertions(+), 26 deletions(-) diff --git a/bin/configs/kotlin-json-request-string.yaml b/bin/configs/kotlin-json-request-string.yaml index 375622ae5df0..bbe5ddd4283b 100644 --- a/bin/configs/kotlin-json-request-string.yaml +++ b/bin/configs/kotlin-json-request-string.yaml @@ -6,3 +6,4 @@ additionalProperties: requestDateConverter: toString artifactId: kotlin-petstore-json-request-string parcelizeModels: true + supportAndroidApiLevel25AndBelow: true diff --git a/docs/generators/kotlin.md b/docs/generators/kotlin.md index f4b0aceeb60a..6432fc5be67a 100644 --- a/docs/generators/kotlin.md +++ b/docs/generators/kotlin.md @@ -25,6 +25,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |null| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |null| |sourceFolder|source folder for generated code| |src/main/kotlin| +|supportAndroidApiLevel25AndBelow|[WARNING] This flag will generate code that has a known security vulnerability. It uses `kotlin.io.createTempFile` instead of `java.nio.file.Files.createTempFile` in oder to support Android API level 25 and bellow. For more info, please check the following links https://github.com/OpenAPITools/openapi-generator/security/advisories/GHSA-23x4-m842-fmwf, https://github.com/OpenAPITools/openapi-generator/pull/9284| |false| |useCoroutines|Whether to use the Coroutines adapter with the retrofit2 library.| |false| |useRxJava|Whether to use the RxJava adapter with the retrofit2 library.| |false| |useRxJava2|Whether to use the RxJava2 adapter with the retrofit2 library.| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index d2a229fe9888..c98ffd60e72e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -63,6 +63,8 @@ public class KotlinClientCodegen extends AbstractKotlinCodegen { public static final String MOSHI_CODE_GEN = "moshiCodeGen"; + public static final String SUPPORT_ANDROID_API_LEVEL_25_AND_BELLOW = "supportAndroidApiLevel25AndBelow"; + protected static final String VENDOR_EXTENSION_BASE_NAME_LITERAL = "x-base-name-literal"; protected String dateLibrary = DateLibrary.JAVA8.value; @@ -208,6 +210,8 @@ public KotlinClientCodegen() { cliOptions.add(CliOption.newBoolean(USE_COROUTINES, "Whether to use the Coroutines adapter with the retrofit2 library.")); cliOptions.add(CliOption.newBoolean(MOSHI_CODE_GEN, "Whether to enable codegen with the Moshi library. Refer to the [official Moshi doc](https://github.com/square/moshi#codegen) for more info.")); + + cliOptions.add(CliOption.newBoolean(SUPPORT_ANDROID_API_LEVEL_25_AND_BELLOW, "[WARNING] This flag will generate code that has a known security vulnerability. It uses `kotlin.io.createTempFile` instead of `java.nio.file.Files.createTempFile` in oder to support Android API level 25 and bellow. For more info, please check the following links https://github.com/OpenAPITools/openapi-generator/security/advisories/GHSA-23x4-m842-fmwf, https://github.com/OpenAPITools/openapi-generator/pull/9284")); } public CodegenType getTag() { diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache index aa5a275a9f37..b470beae2e5d 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache @@ -1,5 +1,8 @@ package {{packageName}}.infrastructure +{{#supportAndroidApiLevel25AndBelow}} +import android.os.Build +{{/supportAndroidApiLevel25AndBelow}} import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody @@ -28,7 +31,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date {{^threetenbp}} import java.time.LocalDate @@ -176,7 +178,17 @@ import org.threeten.bp.OffsetTime } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.{{packageName}}", null).toFile() + {{^supportAndroidApiLevel25AndBelow}} + val f = java.nio.file.Files.createTempFile("tmp.{{packageName}}", null).toFile() + {{/supportAndroidApiLevel25AndBelow}} + {{#supportAndroidApiLevel25AndBelow}} + val f = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + java.nio.file.Files.createTempFile("tmp.net.medicineone.teleconsultationandroid.openapi.openapicommon", null).toFile() + } else { + @Suppress("DEPRECATION") + createTempFile("tmp.net.medicineone.teleconsultationandroid.openapi.openapicommon", null) + } + {{/supportAndroidApiLevel25AndBelow}} f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 8ffe54035961..a1c98200ac47 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 0ea33dc522cc..e9bcbc7981c3 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index cd2898923dd3..a9fe6b46d778 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,5 +1,6 @@ package org.openapitools.client.infrastructure +import android.os.Build import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody @@ -16,7 +17,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +119,12 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + java.nio.file.Files.createTempFile("tmp.net.medicineone.teleconsultationandroid.openapi.openapicommon", null).toFile() + } else { + @Suppress("DEPRECATION") + createTempFile("tmp.net.medicineone.teleconsultationandroid.openapi.openapicommon", null) + } f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 8ffe54035961..a1c98200ac47 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bc9ed02c0f16..c548762e28be 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index d43c0c614d57..98b12a971509 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ internal open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bc9ed02c0f16..c548762e28be 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 8fad7b08960f..72929a5dc0fc 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -14,7 +14,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -117,7 +116,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bc9ed02c0f16..c548762e28be 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bd6833418965..12ea3e7c065e 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import org.threeten.bp.LocalDate import org.threeten.bp.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index a9f5f6ce2a23..9da041200e1c 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bc9ed02c0f16..c548762e28be 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -16,7 +16,6 @@ import java.io.File import java.io.BufferedWriter import java.io.FileWriter import java.net.URLConnection -import java.nio.file.Files import java.util.Date import java.time.LocalDate import java.time.LocalDateTime @@ -119,7 +118,7 @@ open class ApiClient(val baseUrl: String) { } if (T::class.java == File::class.java) { // return tempfile - val f = Files.createTempFile("tmp.org.openapitools.client", null).toFile() + val f = java.nio.file.Files.createTempFile("tmp.org.openapitools.client", null).toFile() f.deleteOnExit() val out = BufferedWriter(FileWriter(f)) out.write(bodyContent) From b2041414eb4575679acd2f61716a060d89595a07 Mon Sep 17 00:00:00 2001 From: Anders Aaen Springborg Date: Wed, 26 May 2021 17:32:16 +0200 Subject: [PATCH 155/186] Change logo to English (#9591) * add Aalborg university * English logo --- .../img/companies/aalborg_university.png | Bin 198345 -> 17144 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/website/static/img/companies/aalborg_university.png b/website/static/img/companies/aalborg_university.png index 89282d904676005c74069e5d0e8350fe22e91b93..5fcf0511d478161f73004a87f9db365120c6771e 100644 GIT binary patch literal 17144 zcmcG0^N%mQ6Yko!ZQHhO+qP}nwrziwXK~iHy=QIR_j{B3C)_5T=9zigN%})OnQ0oW zq#y|og98Hu1OzWFC8h!d1UmG;4hH(42I>vI>c4?NNlr~%(n*d8Q;7&$i3saIsZ4~W zOoXjMg!F$Qj!GZDP~v|~Xg3uFRUrP$@o?97MwQ^hctBOp3H~|WZ4d)%?vF2>F$LX$`mf3k)_eVy(*Y_S{&p?%RG*y zsIFr1wFpe4jA!i#qkGx@tV3oAe;X_N(I&x|?d?~a*JPT^Nx+NMq>5Y(v@NG%(nY??#C9aKBCw1% z76#Y$^Jto&W#Tp1Rt~=o8Q4}UnC;L8@l?XUcG;8y1v_uf<V$$K;{4eP!%4b5U8f2RWDpg*>1&1eW6578>W#C6&wkvMA)O?dNLix ziN@4qSf$W-Rt@Pl^rZlBQk5$4RHRe-w}8n@HghMSIug)N4#-cR+uok&YhR@ZWrzRe z?rHZl?}isqi0?Sih#Z4$i)*owK1X9c-gt@@$fXNgv|{d(AmKWN`O;GBg^W?WNFlr_ zWRwZU<)9BmmWywbo=OggoJ+Hm9-NR(a;vabUa?4VPJ0$8m$wjhuV;J# z1M7VLmBO)-DO^zf6gFDg+(4S)GgbW^GaNh%8_Q?oN_mc`kgvO3l1Fr31wlKaJgL;w z((I$O&EV{1;lKsR7BbNL=u_X7?&bzH4^rQ>7Y>M2sIhO&mLYtbrgB9J+myT-sP~=a zO{9;ynLFeBC8!i0>cl9oD9b4)aC#)5kTFl`$w2ax>K{Xv4{hv2#vY(77Jdq(UF*Xq z3gkim*cL+hCcfw?t(KMjAxY&RN$fY9tf7&03$E~+xOzX?HLLzM3?E;`BcU;u|6V8=9-s_?-H&kaP>%*uuK<$}b-Py&~WU8or9YPtv&-AU&DCbbEfEr?vL5 z2Wx?S&7FEM1t4rJh}et>)y`OZB1r^l8;C{v426a9=Qa_EHmw;V?Hij=f`A2 z)FL{~-27C5gbZ$moEZH|c4h``%Ko)Tr>}8XkqJMvM5TWK&ZWAE8x$RwzYX1QlpG2p z9XMR64_1}>+0H%jTZE3M>fTS~PR0B`&sL2rD)hBKfDUrsA0-R&B8>OpTj)}eD+ z9aX>LG}r@?fZmIK+KR;rU2>@iMX*r}?pNs;rQUlHJJ@L)#aIBK(?`pCk!04%yuKxP;Q<_~~-X zcg?-bjhi&u2MF!M(JhUq!mY|uu364fxd@&__nCMgbeyd&K73#jJT$Qnv=LdP@g4OS${Js>w;_&(uAchscI>Z=ZbGhn;88oCP| zT&MIoZ$=fN`BiJ3=GPJ?2g=pBMS_#Lc@~Li&%^{b3bfv1Y(61lG?+(tQRQ7wHA$?C zQQ*F)u>3xnYUVR6gkTv#O4qm4XUgFeQD#c3$SJ9rJq0h5a)p*AYX32-_;1wg#VdI5qEMp(g(DA^) zU))b3%!DxSVZtP4c+cLo@IHuQjQBl!NLNam)KaR5bw#dui|DkRTr$TsK+qN&Gpj@3 zh{QZ4Y4!U``=xT6&`F3}8KKqz_Yyn;NV|M)^5mvNj>~|We}Jh>$W>haUV3bN?^ncu zoA)5qbK5aE5F_f-|ky+t+0$oerHfHmH|-6R!=BFJHH3>?KbZPljpQ( z9!BEv&Um9fVhh2!?V^8xY#yj9SGRMP;g>-y;;!2dne|OiIHF9)mRtQ*F}k5WpAIJr z)kSMQr55U=2y>4HGeWZ~Fk#@$&p4&MsJ!JFqV!Tu{%cuigPA30@6XuL%9?jbduc!J zksGx^&}pFJGk4q5^Lc)(-dP*<4ZVovW`+z#6ao^@d;i~p^h*+?ZPkL>V&rWnS6$f& zt?(S!Cg8?`va#pu-Vc0EXa^jDo&g{*#1sR>n_iy;55f+R$1IdHXovC`U)IkD^$9XQ ze->5vqSK%EDPL>SAdh_Kxs|x;$$zg26)ji1cV^{-f1wi6?I&JN-? z=90Uoqv`&qZ%RqtKrURb;d|9$X$_`Fu?TON(5hKfgm&mzidkin-7_fquDST4hGe%F zcun;xy;Wkp2&xos*2~suCoK3qX~Kl_7njj#!5J>z7Muvf)t0?zsP#!85KCZh(M(m} zAns&m;>Ih}6dXjI1;Z65!Yr*$!1q`8SPCm;q<0V>?4`+@#GpgftEH~W=VfrOWuP$>(Lz_;8i$IyBV&wBXXC3pvWDqlaV_?Ur|I&T}@NQd7Dx%yzBp zr*-026L+Uvd5kDwz8yINgwZ;K_$3)$5YBwx4TYftB)ijpKE4RufKYz~eKnU>I9kNW z?X*oS@v=sFrG`Oopk~OdBt;BPy(Oh)`xa(XnJDjPfrs<1@w|@lZc(z6o(BCho)_vh zI_-o|E-xEcW8n-t{CaEt)n7Is01a@N>z6HqDj_Q|)X9%8@chA@Hx$TT2GdA`1qE6+ z9W@DbneKU8^Q6KoSZ>1NogW|eT5gP8@nGge{6~#x0pd3qW3NcTx(w!Wuph8PaWkBm z0(#xDSz3R8wrHszt7#620GZ4ez$4YL+^`Mgsl>B{voLW8)%NrJ_F;CrCYTPJ3KVGS z^(>C|>=70to*a+xj|MYAFoRzrp7bq8X|3!XemL|m))Ay)?g38vR(QNyo$Ymru-V$;c%n_tedXa`VnX5?xCBX)2$Tp1skqDai2($B4vZE zRwI61Lh_SXj`9)FV>4GeNK3=LH)f>G$?ye^q+N&9=Yg)7^`hQraZhy+c{pix>=uc- zD}4=H_3r@{;^{IMNiDQHO<(#YL*8wT2}bL=3($~x(W_iHAXGrk_!B= zoUGxM&>jz25iD(Neehx~FJ3c?maH<(0J$w5^AK*15knmp`otHGWQ=k&hqF|-)9In& z^AG(3kOo6u_seHo+cw%2^K2SyYy1u_Aq;1-1UnS>DU0R+>F%V{3XvJ^2Ks-I_#WHoP10DRH35FJnzYHYiepfTk~%1lP`g5 zn6hg3-OTZ^FAb<>ALkJx0R2=4+&gdvzFz#jHn?UlhubtiKey`+72GN&c~e?`8M&zY zaxdVolg7!goGm57GiMT1zq;T|9jm^VDDc!<(<4LB>_@B_4U7b z^M1Zm%e?|Bl|hyqrY=n{#)fsCJI40!>f>y-p0-!jQPVEs#+uzA6P)Tvg&le*rDJ$H73wf^{o_OsH&g;smAn9vn7Aet8f;8 zhw(a2`Bm)6iB=Ens;{b8;hF5B0-7c>>!aA9a*y<gy8-03F^7jg1-{>Xg-pz#R%W|H&=|6+#fJ z))js3rus@Z6u11gVgax}FVcO~)l&^7?CZI%PXpILYYSGiY>@l#;i4B;T&DS9c5}ao z$M~iE+Q2`Hqdd_q?n=|1+A2Z$UX+rF5MGG$rW|JI!4LxA*Cmj;kaMQK-9Q)Iku4d{ zr{e`50*lgy2LhIgt0HxQNqbw+?kIW$C6aOXrEXA!rB>s<_)a5C81D^!pxC!@$OTCB z|KX(E~X;+<)UTyd(>=n(sg_bKZ&-ZO=mvb#;>J+^Et}cV>0@ifwvL zI`?dwtBtZ7EUcm>>|nY#(Ts6?8Eup}|HU*_Jkp7bae1ljMeVn!^*qZF2gZD!u2ffc zoYRbAzYx!LuWtwcB3QVNlRpaVpss`&p^sbrh3*$74gOTPzrR2chT7hzBJ<4fTResJ zgq2$tS^;L1O!Em>o8zb?R?M&YuSv61cj5b-aFy#CroC`{MA|wI_%j2gl>}9!OQH5F z!Wj67b@oHrtdF8|Z_W+jxj%me7C<{rP0E%z0@BRRnOM8n8=YgSgw z=)K;=U^Td9CAq*8FIEvJfjI!k^%%p{UC4&Xyo@*QXaWl%YA5&98hIgtW0`t$)4pjB zSgUETq%NVIxR$2bi7LZ53KzE;_ffyl>>^vKm_|3~M8(IpWnI%ZkM+XG(DlN1xq z988-Ab@^yRMtEEdyo86KsW3)D2zag%n7>=fuHXAyPH^S%OU>~EHHnZ>pcD4sg{I<7 zB;ZUyywbDORmKD6)Iq>m*l{?~Q(Buyp7?J6v%sFBZIgp~U^T#lH@#u}LyaeG6JKt- zgfY7RD?SOeLp0w&9TeWl!+&*!x^P*b3IuAbC1yFZw}G7hQ=kbH>rg)*d~}sa8GoQe z{*Fs;3~INtx4D@UC!=E(f-vs|YaF`0b}It8ep|aAY`MF-dc?d53kwTM1;>-q5&fD8 zKN+?ijBsb{Qie}p0%ayP8SuoXAFl>5J0s*6vL9_Wmm)_9lkisoHysZz0`+6d2#@n0zxs3d5<&r-%gK zLwq|K=7);KRQyZc5xGeg-7o^F)j26D1yR;(UU(3;RBoo48nreA{G#s_FQw!Z;d*WA z$2|5xn7KYL$Ot@Sia9mxC^QJ&%_V!t#7|mjUIO9Wc{|sS zT|f~FYY1a-YShK(&fFls!XIZg1aUj;C{|E2@@Jq8lvAl?2H8&-BM83ciX@AEQ_hdE znmv!s?p+dZUR0g{6QiTqW%tMqpNx{=B4iRUA14 ze>~HYkVWuyK!1os4O7A@Lm=KWAPwpS3a#~rXD*0yU?HzeD{SI2$>VL#g#SR#>p~u) zZ&~b7fd(8hDR3nXR&(iT4PmP7CQU{v;)YvDl54;F?o6K-*T99gJYw!V&T6Brm>RRe zK>g^MBF84W-DczBTN@SS#-06Sc!kCFf<6b3@<1sd9*w^WH_%l29~I5M04GOP*Bm-t zOvWFS*m@IC2CL~U&e-QPANN9bA1fKRX)Z4jgo~cAAj|sU&;y0<{*k)!LM-yo78}Ta z2{rGZ0E$W?t(cD&VP42>c&mBAKM)YxV5$~0jv%MOuApTDleB^E=yny`i_lY{47@qC zhh4^nv22l|ZvJ7#(6=tO#>sQpGjkjEH9?iPn@$e-R&kq{kw{IzTB!c#FNFs^VU*B>h}&m zD-V-htcf2;BlOSjEu2)Lv6+3c*_i;)yK6+sT8e&#$@=zb-d86tEm zkh7N?5KFKS_!0F+(cRxL3xr=Klk@1ntMzMg7Jh3JW1AFQ=r_v^)~ljTY8kx4u(S9W zGiw^c{>Nn>x%LgXUFAJG4}3NL$NQz_%d;gb_p<_8!_5?>l*)P}$G3oG*dE`HRIBpo z5wI#Sg}C>W>qx8+mN12PPV1G;2g)NqR82a|FKs($ zeGYYR(4EEv}g%Sv6Jv?oYrr@%syV2iZsq|qk!hlJUNWZ!P`b74(oaug3^Xu5lx3#7q{;~mTH{`) zu^u2xPpkd;j{nAS(7+Wr6LXNFxu6W?&Rpi~OQjr0TyI?X!v|+DvIkU~GQSr}rL!Zi zdPQ<0n{elI%Pl=LnR6;sW>m%EffEbWuGyR{3 zfH#X7VyVo@lcJwd>l$VRe;W zC-2dU3tTe3Dd4^~cNJW~XM%63*RT3Io$`g4@w(}o^F3S;Dvx$Zv%Qwjw)?lu_)B}^_ zN0+GIvU{s)aGdsT8w!^U)|;tT!ag{vGACAC;R+Q!Zw4XJh_}b&UBYwr+cxe&e|E@f4wBLB7f(YwCf5&uk6RDfh#z z9U|%R@ZJ8$W04<#Fh}xNd6Q^@5Xmsfb=%8DaA4w-q=fOd#QBy25&U+aR6he&dbN0l z-{A{xc`FO;S1Gn^gtw+q!?8T)i!S+69KY^s$?g^OYr@P>%nF|@&+{yC+}LAD0z z->NIin53uBl83AMz@L{AxKzG zts5z6_$vuwJmn!=#xpAUJsK9k4m%=za^oGitdUbfW4w;j*#G>DPiFto40C~j?Ynmg zP6Z1kLG_!cnfD#6ljPoKmgx$=M6qC(k4nOY_SnQw7cvxSRw(vVQ~&T(=AEBohS5?k-wnjcbU6FQcAv(wuI6RZ&+~1D~#<;Z0=s0IK2s{`JK$M8H?nr`dP}U2P-936W9G^d08{7bo z2X`d`Cu_AT z9GYy=Lsn5NVj5$Y{T>$s_D2+N!N-RPC$rM{r>XWSebvc#L?8dUT7*QBV0T&QN>zSy zN0#@8yuPWAzNLyr!^L?wn)jsdD8AIlxC9l9LX5|0CoZUai)xb;kv0c2f5&p@Jmgc$ zf{lXUVzH8>?AD$iD0EPfK|^dwRfQ^C{2l-EaGgqm3SwUddL^?dNogC71)!FUrsHt( zAyDk6G%F)hrepaLMp#ZdMK-u^Pa~I6|NBqnFaf7BLqIsq3VR0b$btA=rG&+)$LRr; zKD7J5bxo=Zew(F9z8%g(nn^3|FhRQPb}FF6oQYFz3m{2{>t#Xo)&@rbXv2pi7u$}n zpbs76&`iNYf#bg+B1u~m{o0NMiDhXV?J1&5eIht2P7w><5Sjo}YWri#M4!6TC=e+c zQtYH%O6IaxR9}@ujOEh&5#1j#+tZ}ukAMbhZbRcxX8nH}wVMjt=!;lFAg#X;8HBK^-;Hag|PJ8dEEs_fLwGps6)(HZH@x9SVvv15Ro z9h*Xv=fA2YAz<_ABq?p34Q4(|{O9!FicV|A#bAz@x%)r%Q9Opz@ky+V2hb41 zjav#>d`@DWg7b!uwJeqwK@?anX(pQ!Z=cdmPL^XnS4QevFaS+Dai`M>GX#P>^ql?p zt(%m1&Z55^LU+`Oq#ialU1=~1cZUW|r~MBIvP?|V$V9RGGpB}o9&)e6sC>F-UE|+@ zZjyI-lp>bjC(mZL&;bMbA&A~2Ps!HF?eqB85&IB|VY4+hv>o&^KGV^MOi zUa-XfSTk>PS-0?jt-k>J0x179`}6gBx*Y(Lh>p7{Mlq|Z6Tfmurwmh(dE_$MwQk}j zEr1RTG?BZaV*i@diS#dk0ZIV;N2aEbUoE7wH}p~Uj(cP7A2mP)3=vy}smGX^De+#0 z2|4jxo$2HIAp43;Ds8_WCC?DNwDJ9q9_0!@h1Y@}vBGY{&zk8O7^jw9-L<<)tG+Hc zk=AC>*!BYR33W=?^7~?jIU)Cq|xvicB2a6sw1&AqWr>kJG zWCyoP$XD4uSY}SORTudi-7D%qY2wX>VhR-&)NCT=+m%f(hqhlCS~MB3UuCh}n$`eH zpL&QcAGMbS`BRz^$z|BQO-4v#-3$hK7R=!vUIB1R$dFSw#<`^Q}Zz8lk8EpuHI5^E`C$WBcR0NOtDSl(~ zW`}`}E;UIAlauA0$3;Z_)`m(%)StkC-^2T6lq+_pW}t%bBfHHgGY&kBs(SrC|K`hTcY zy@V-Lb(k1Hrfjso<-P^_#U<%L4~tUAk^?o@0+*m2N0()k?_W9WV6jrPlGLj-B*df~ zQ3i8Bt(q=Is)w%~^z6Ek+=* z(TK+jHCPOhV7fb11rMuHf4Dk=E?9tCJ@6y}sfGN+FWBc!-X}egs!*_DN(Y#d0Bqcm z7Fw-daq)B~F>Rqj*rBJFrMp++9fj_qq?#y@Ph>H zvnoM%bZyFi#F;Kbab!}0;s#6}xUrxds3pnV%v30+n4l-q+d#yu2JGQBzu!r)#P7_C z$nK}lx8pILk@?CXfy49T99Xfn-@%TKyT+|hF2@&FT;-a^t$?xljaXV9V)Ix+Q8b0l zvk^9z*P$eIOg5c}4pbJakGpSG`VnAkDt?TzDG>!^B`ksnXtCB~_mwl^4L92hQ?%g%6~fktR)hp=9$ ziIU0{Mn@#2l+%E?F-u{!ZkDn+Jl2;u9Dt&u!@=11Nv5y2>N_eW{4cGe|1Y+@D);V;zc(lDQNR`Pzcb}+>0Q-jM`Qdr{~2fmQg-=uxB zV&NQO=)^auf?V}|rhrPbg;XX|z)&^VT$WMh+E*bOJ2Wc_oPIMhHtMy4G^BDc%MbT$ zKkRw-^T0cX$ElXaPG3pShFi0lKOG<#8!(@L!|xjMxW_*i6@%;gRH4nwFCf6}y<>;4 zO?HqGTn`QWwp$DiXs{_S&c!&%wDoiG``MtI>A(P0-No&4293OJ(U__SUEfnWa;7eM=5B%=qKLdT3i6u~ zc*ibj?zy8pCYVOtWv&v03sv9o7RuNggWjxPyW#*CmYqmSM!st|HkoYl0!QuXIjXcg zJ3@sihad%*E(&`fHBliArY9J#~mQIm$Y?>4r!LdEd1|8{5DQlr4gwY` zQ!GNxr5%ON0@*-QzT%pnUW43$C>ga-2NnulCqu!N?Gaw!v!h?$mbQ@U9+VM{!z>7B zD#cmAF8I=3z0UgDNsbGk+@{AJ1{0LYf;CRbbdM|y_dg7j!5nd?WTjR2n!`rj9;>IJ z2}tuI_{(WaO_?8QN_q6nyiUkOfrSRkjuEmkUH*}(nVia&bV?NcHy{uUn&aPmB3x)H zyH4C3;Pc}96zYmbDk|cl*r@SWR@8h-cO~v`NGd;0Um|fm$vF&)o-^y_o+TxgK|C?+ zU|#L+N|LxlH~lplduSEO9+P5HhsRT2bi7&dz<D;2V32!&4;Qn=d1t^O%+I`QPVC8Xx0fRrz1ZFcSO*Y*_4;-TKDr&< zs{t(|>~Ku$sSHr}GD7K<{oaF^W+eBo1WhIu&dG9@ z#?-lX{CA@_j86P;gj3stqBJ*O(%j4S`r5+lkt?CK$2wn4rO!KsKa5k-!`s#& z=3#xoo@9gIYR`e}9yka{UIkm z*$Zv%aS%lwlqz96Fz8hG-98;A4Od-W@v4`aH#nw}7=?f{F`<9UW#`r9ik!YeLK~Ei zuJ;{R?&e+bA*9)Fk?4X*R8Q!@mdR zpGudQg$9G3W6dcr=r0N`e#XXP2@GHfYadsy3F|r9#1Lj2`zicrr^3fgtf@lX)UQr+ z2LeSQvNW``$ImT4{(~-F%&D%aR^x23PM4m{(8MkLed z=|@pS1w(x1r88N9W7!G!8Xbduj5HI-z(Kao$}0V3$Pl!mBJZmB3&YJ%OT*+0aE%3# zhiuoGS1pT={CPQT{KCX257UQQyrfvy`zAM=*rkY~NW&tSUr@GfoSE)Hv;voUKBIoj zP_WafF^A^KCmDf19mK=po?ZsSouO_D*7#_<@#6O_Jy{;Q)&ah>8aeH{&^ z1*UXSndpTr)4)EP)AsyyT+dXtFn4s{jR#K+9@s+s6a35)iu#lI9^jhz=KWzyS3i9s zKM-*Z;%AYTFC{Zc)DeK#5f5c9n5Do>7yhE_XeokRhQl*zQ?dgRtUEROMuU`8A8}(`H5{DJwuSH04x-$WtZFLBk6&Yl&-vi|>lpMz+8*G2 zyDCUKFt^bc+gjM-X4BQ#WoJ3R5Ie1$kudyU{e=;gnzoY~n>NsMP=6@?LBz4*4@baZ zhA(srS$iQrfX~ZqAXy5HtI>gJne@3b%rK$pX7XdK!v2H4pwR=5o6W?^Iid^RDnS4f z#?!TnYlDlMjfRnL-WsA49^65~C8Y;1b>+!Fl2ORFg-J+mk`pqRgw(yJx#YYo;YNN( ziqI7)Qd7T(iBHaGIf&NSyIHhkmAVb-Jiw@P+*pUGG75#(jAOaVd=|lpV5ho^ikl<((Rb*E>V-|qmFu5Aox{`^2$L@bi`nOwtxC z_o9rR{e7Xi)>6I}@a*Tz9NJRhQIay8l|t4%MMkL&D<+f)^iX#d3ufj)wa;IwNvuv7ZJjdfF zW0>?$nvNRHl+*SlH_f-gY(NxFL;=WJXaBod+#u=UP#i2GmW*CjO1D{AF zo^`mT<8Ll*rzr3_%}lhordzBP`y6v6^tp>1b6uPHn(8=XUrUL1tYIsjrb42 zN0IU|YF=%0GTcK_RlDY1Vpo@8>cF%_V0%I{#B$2vM(I#0Y$5w`tTQ?1E6-i+ZRzPv zsRjPf#Q|gCNl{4Eq8A~}rd1fg8*&hJOpFotc+AVnVwx}=T0`o~1^5iNVJI1`EF<(N zZGR?c{ObZ5rxY13YhKl6`2KjxT?Jj=-CV`U+oS1$%gtIl(P<*+U;s9T%b}}EYx{LY zXp*mnZMwkdVB0{qu7$7dcBg<3lJ9K7Z_5SAsMmMOK%wL8TF#k{)Hx2OFJNFl2B8nJ z?8Y2WaigKlg#*q&b3oQSYk|RP5`*~%ie*Q&HIb7Ln0c;LkwC$}EF(@{^pIdU^)$bO zw%Ackp9`WTqBDDXU@RL_$)U=CPN?;u*A%Dp^4MqT{{{S`3V9UXh~2YBAqTPu&d*$= zGQ|{VJ_;A^@AS+F8rwSmqed}ol2o`+Jdns?3}OmzGwQH}E1f`5Eh$=|TY;wS7q999 z=mKL}F7w7wY&~>tF10$sy48sI^|nyIzQLIeYKJyeUVJfWrP>xJX0xWOUlz4wLu~Uo z3itC(I)i5_^cNfpa_`1cWxA#Zg?sm;9}6Nze5ZLNAw~aOPR?AgK)NlF@5<1sekYqj z`%|@Vm2mm2v^QM*cHGoZq~JABDYflHuxvZLzQarXz&q?m?z+p4gzA1TAirPF@ z;w6yQ=H4i8rmeqIgz<-2;mC=+REpAJ-w33oGB;{O@u;M=X{I_4t5(sXiEk$ui~Axw zf{-Ckn+Z?0r~dK$trxsar|-|6PCu((i}#!BU1DK*_3M#~M8u;H9FQ?^Ff*^q>|oQK z^+zJfOgXw-Z^Fsrd@^t%Cgsz?f*LIswITk+CY&^A0LN%7M{Gi&*U-TQsitG3wC{K0q0xZodqbbn6dWh?23 zhu%LgR_kGSuTRd0oI6%M0J@nvf@%)tDGY%uj;7Zig^zbZL7%}_U2s=yt++R?YNKw6 z8?rq+ht`I)la%zR!jAb4;^qKR)B^Bfi%lr{c5uaqB<-NnrwbvUGdFLW&-D19D+L?K zV)mqun~;zF(RzoN5z@~j1vG&HbTy|ol(!3jTMd!1wU#ru2FBT7v z=h{(zP78%xSP<_0?|F6gKD^H7@PJJv*KC_1v%T(L7}e!$^mDa^(CrN5^8B{Mes9SYrG=7&562@Ijh4zMIC({gZ&*`sQ-~`f==A6gNcQRs zf+<9H*IE zFr9SXb%2&v!VgpblS9l|Dy9SDt)}$Lu?tt>H((_VMeXYa-(!hk4>?VmQoe6 zFH)iPl99Sv*GduyJCyfH_VAW;)|6TD8>YGQk>&{X`XmN3v8J!zBv&YC`BU})I-)zJ zLOg_JWj~`zMY2YoOR6^_VSQ$10ofwsc3ryA`_pF1$8=?P{!%?Jg>mIIvd@c{f8FCkVy!2_)bn6riNO zVftH+E31xN9Yk>$^x~(b#ON)EYKiLE@5;7Z@Y7{%H*m*rLCiRAa5Vbq((q^(`?VbX zWVf>!iLj3E=j-Y;9St*^o$Ox{E-7tZsyz;nS40h`l=+@x8I6Z94oWGlq!%CBhvGwP zX?PNv=KrW*#TBD6B`Z_kTHNWz?732fWsJ0tv(Wqg0eKq!`8JzgO?|n^xT!Jz*FaL* za%I(ckaXCelfoQz1QgAFZ^M;elj=CApT}htB?7f9`g(Csrp5e+Iba-gys%2DXgQv- zj8(^_kvCm#grNi9#$tj0l2+5a(?L+?T>M!X%~uENUKjyBu}LXFLxBil6TDeOUE@lE z!9J1a0Fksty4V;sUzu6aTW`@w!#!fYt2&+*OII&OIA1ILGpMJixs*pf^0X8it&Kqe z*>N(I#$uz3!+$p$d1pQyDotwmS0O$CTvfH#$d!||-JyxZ;P+#2MVX122;Q=qyz9`2 ze=Cy!c~jA`BqxyMko}dm%y2QR)B0x%c$denUj#2PmfpKoK_-;i@_Ki_$j=KuHA;AQ z*qyLnTOw?&8mUMok~|HYSK*Ib92*?7-`Anhd~lxDUCZT1J@M5)r#!n+wnJA)I{aJs zV0dV=x8e$N85876ez3Aup$EU1RKcQh8xO4J9n|_=9VuW%KX}A?25%wfCyNrC}Z#B?@Ymf-l4A^{`0v)f? zun{siomYMPFq4~-O-OLd6B><=gy@KFd2r!FE-I3gQ4$9{_ig!+Ti&PSIXmfdeRPnA zjwTf!!p%bkz=5#@zI1(S9nR9QPn5w2T5dFwNMM$ex0|4rMw0WCu}Vb@Pp6C25jxa0 z&5@tQCN2Ex4@N+s>4ojl<2LUH0L>iuTRQM#;;;0Qs@*tWM=cI0e(V;uTI5k82^VmO zg5|6e&$+X%)zdmLy*7wMDeN`Izu5ZkkjKxjK=!HgJeZ($rDN<41eAMa%zyTIlpW$i z_l6{I;(kabgqQh|f*TgY{J?&)Mq{s|Z+jG6!BjZNv4WF7^LjbL$OED$OM6a-dO{lY zPSLMnOZ0HwK05R_b9nOTwZ`mUv>W&Hd1{Q^s?dbj5BVLZY{=U1cve5*8!k&CPxasYSUm`@^+9mh^z^Z_J-H)(Z296L@64{{$nRpfC7nw0)(zd8e z-dY7;HSpXVwQL%SVK+pOcy}HJ{9Eoetn5%uVLtlJv7ProU(5L|31o1i#+&y1T>PTp z&M1;#$8;1VU)k!=V_hWleO)22$xftmVouDiw+Pcp<6nCDzN`F=SBrj)HH({oy?UEm zjnA9eKF-I}cp9&4DrL257UsO_cAk5*FAt!nf!*uw$O<~h$9QXDOuWG$!vhs_BQfS0 zqrIs7qj5FKT==&c?trW?Z3Ms?*^oBfWszfIUI?zm-m1^SG<3bfFWLJ_$;Q%6GRIhl ze#o~zH~s4%j({i3K(mK-D2XBiyCENgLUi7jp}7HqVB!-j0P&X+Wgk5P(^$2NA5gr4 zV5DN^%FKwbx{^-y{c8SlgR-rUp&l}Qm#=&GCkK;ou(=YO_9Om?@$=h}7yDQ5?4;3o zIA=HODGj{(gl9Tj*2#3wR~Xai?GJUAwIgEZEYF7Gl7sE1=fuxZy<@`Pe?%r{+Pn}w zeSf#fyQ25h`)qi@eQhfSI`)a&+igcUu*!VlA*Q;kPEg(<5dcY<^Zlg)hN@0mXdJSN zEgtdX)l!?AI%r4%DkcBb&5`x=UEN!1p$cFDs;&WpNP$}hX*G_P`A_}GevQz+S?su( znpZIY%E5d+jJJvMGk2=8H=zLHFa2nS;h|4GTJrG6wotoy`^qS6 z@Q-M-7O)PR@;#%QYWnHxa7cPko9V6nWDW2SXtNR_v_1PV`srKpbI=0>i{H`vCK?$a z?_jBY6h9xkW(iB8;&*C&jLI~Aq-hu5NizsaPyw1Fs^rl5nlqP`j4T18LulJ53Lv$W zE5S+_TDOsZ(vb9mjOFk2$7&J?&d{#A!38Y_)tQM9pBVH7LSk9{Dxn4xGnh2!Z0nKu zn#5MZ_KS~5;*mpOS@|@<1i^Yz^)$;7XQbI=??h>~k$hEAB_XpQ{fw6O1;iU%Mt6|F&0()g}Ttm&pRPqJnFh9dhVWO>ey8Y#bI(NZsLYZDXP-s zi>2Z;2LuFS^}l}slDy!C1o2DDv@&v=DZep|6MlGCdFP#=3MOiI`IRMa9l|%G3|Of+ z;{MfpzRaNLp@x+HpB;H&<<;uy=^iE{ex`1RlgGmoeEg5g#bwIZa<`maWi4EN_1H1C z5617Ki#X=(VsW?EmFj%X9RAx=YyGyl8c%H=<|`x;l&f3KP-4s{`#%z+WDVDUR$uv&u;3y z9q@k2mN!$D?+cx$)3oUHsi-FPb*rDuzZt%4hW*0@OQ!F8^Vj81;Qsn;RZ92+gJD(-C zIqdDNGO%{euUvWR*++LHkGPsE*H=BbzpkQ7_1N^L^RZ2P4N`7qg)i1Q{#EXx-NQ3J zU6I>vo%Fm>cYxay=K9pUQWSFO50-ujlwSXP(^sE7w;4HgN7+EEKTIf5-ID z=FIQQ|0whH*H@lv-LU&;{Id9q&#(LSSlO(TePW&5AeYYFHuuTliYZ}!vsfNpp8QSy*5E^>L5f=ZbH~jX_6CkPFPt*Ebxt{^G~z(G4=f)78&qol`;+02tSl A?f?J) literal 198345 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¦q^9G&?{M9J7<{{Cw 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�(uRegao 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 z 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 z�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
    &cov(2rvIjM1&CW#TYP0j%-%FM~ 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 OJeq2{sudth`2PWfSs|7H From 81343622443ecc6b0e1c15fac0f07fd3ca7e5ff0 Mon Sep 17 00:00:00 2001 From: Samuel Kahn <48932506+Kahncode@users.noreply.github.com> Date: Wed, 26 May 2021 17:33:47 +0200 Subject: [PATCH 156/186] [cpp-ue4] Added public methods to process enums in string form (#9569) * [cpp-ue4] Added public methods to process enums in string form as it may be useful for the user code * [cpp-ue4] Fixed linker errors in some configurations --- .../cpp-ue4/api-operations-header.mustache | 3 + .../cpp-ue4/api-operations-source.mustache | 31 +++++++--- .../resources/cpp-ue4/model-header.mustache | 6 ++ .../resources/cpp-ue4/model-source.mustache | 62 ++++++++++++++----- 4 files changed, 78 insertions(+), 24 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-header.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-header.mustache index 2319c59b3fa1..f4810ba58888 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-header.mustache @@ -35,6 +35,9 @@ public: {{/enumVars}} }; {{/allowableValues}} + + static FString EnumToString(const {{{enumName}}}& EnumValue); + static bool EnumFromString(const FString& EnumAsString, {{{enumName}}}& EnumValue); {{#description}}/* {{{description}}} */ {{/description}}{{^required}}TOptional<{{/required}}{{{datatypeWithEnum}}}{{^required}}>{{/required}} {{paramName}}{{#required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/required}}; {{/isEnum}} diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-source.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-source.mustache index 07b557157ea2..4d262483e1f3 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/api-operations-source.mustache @@ -32,6 +32,28 @@ inline FString ToString(const {{classname}}::{{operationIdCamelCase}}Request::{{ return TEXT(""); } +FString {{classname}}::{{operationIdCamelCase}}Request::EnumToString(const {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}& EnumValue) +{ + return ToString(EnumValue); +} + +inline bool FromString(const FString& EnumAsString, {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}& Value) +{ + static TMap StringToEnum = { {{#allowableValues}}{{#enumVars}} + { TEXT("{{{value}}}"), {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}::{{name}} },{{/enumVars}}{{/allowableValues}} }; + + const auto Found = StringToEnum.Find(EnumAsString); + if(Found) + Value = *Found; + + return Found != nullptr; +} + +bool {{classname}}::{{operationIdCamelCase}}Request::EnumFromString(const FString& EnumAsString, {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}& EnumValue) +{ + return FromString(EnumAsString, EnumValue); +} + inline FStringFormatArg ToStringFormatArg(const {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}& Value) { return FStringFormatArg(ToString(Value)); @@ -48,15 +70,8 @@ inline bool TryGetJsonValue(const TSharedPtr& JsonValue, {{classname FString TmpValue; if (JsonValue->TryGetString(TmpValue)) { - static TMap StringToEnum = { {{#enumVars}} - { TEXT("{{{value}}}"), {{classname}}::{{operationIdCamelCase}}Request::{{{enumName}}}::{{name}} },{{/enumVars}} }; - - const auto Found = StringToEnum.Find(TmpValue); - if(Found) - { - Value = *Found; + if(FromString(TmpValue, Value)) return true; - } } {{/allowableValues}} return false; diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/model-header.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/model-header.mustache index 900dcf7f3189..8742ad7a85f5 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/model-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/model-header.mustache @@ -36,6 +36,9 @@ public: Values Value{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}; {{/allowableValues}} + + static FString EnumToString(const Values& EnumValue); + static bool EnumFromString(const FString& EnumAsString, Values& EnumValue); {{/isEnum}} {{^isEnum}} FString Value{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}; @@ -51,6 +54,9 @@ public: {{/enumVars}} }; {{/allowableValues}} + + static FString EnumToString(const {{{enumName}}}& EnumValue); + static bool EnumFromString(const FString& EnumAsString, {{{enumName}}}& EnumValue); {{#description}}/* {{{description}}} */ {{/description}}{{^required}}TOptional<{{/required}}{{{datatypeWithEnum}}}{{^required}}>{{/required}} {{name}}{{#required}}{{#defaultValue}} = {{{defaultValue}}}{{/defaultValue}}{{/required}}; {{/isEnum}} diff --git a/modules/openapi-generator/src/main/resources/cpp-ue4/model-source.mustache b/modules/openapi-generator/src/main/resources/cpp-ue4/model-source.mustache index d084f8a80339..3022a7a935d7 100644 --- a/modules/openapi-generator/src/main/resources/cpp-ue4/model-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-ue4/model-source.mustache @@ -28,6 +28,28 @@ inline FString ToString(const {{classname}}::Values& Value) return TEXT(""); } +FString {{classname}}::EnumToString(const {{classname}}::Values& EnumValue) +{ + return ToString(EnumValue); +} + +inline bool FromString(const FString& EnumAsString, {{classname}}::Values& Value) +{ + static TMap StringToEnum = { {{#allowableValues}}{{#enumVars}} + { TEXT("{{{value}}}"), {{classname}}::Values::{{name}} },{{/enumVars}}{{/allowableValues}} }; + + const auto Found = StringToEnum.Find(EnumAsString); + if(Found) + Value = *Found; + + return Found != nullptr; +} + +bool {{classname}}::EnumFromString(const FString& EnumAsString, {{classname}}::Values& EnumValue) +{ + return FromString(EnumAsString, EnumValue); +} + inline FStringFormatArg ToStringFormatArg(const {{classname}}::Values& Value) { return FStringFormatArg(ToString(Value)); @@ -44,15 +66,8 @@ inline bool TryGetJsonValue(const TSharedPtr& JsonValue, {{classname FString TmpValue; if (JsonValue->TryGetString(TmpValue)) { - static TMap StringToEnum = { {{#enumVars}} - { TEXT("{{{value}}}"), {{classname}}::Values::{{name}} },{{/enumVars}} }; - - const auto Found = StringToEnum.Find(TmpValue); - if(Found) - { - Value = *Found; + if(FromString(TmpValue, Value)) return true; - } } {{/allowableValues}} return false; @@ -78,6 +93,28 @@ inline FString ToString(const {{classname}}::{{{enumName}}}& Value) return TEXT(""); } +FString {{classname}}::EnumToString(const {{classname}}::{{{enumName}}}& EnumValue) +{ + return ToString(EnumValue); +} + +inline bool FromString(const FString& EnumAsString, {{classname}}::{{{enumName}}}& Value) +{ + static TMap StringToEnum = { {{#allowableValues}}{{#enumVars}} + { TEXT("{{{value}}}"), {{classname}}::{{{enumName}}}::{{name}} },{{/enumVars}}{{/allowableValues}} }; + + const auto Found = StringToEnum.Find(EnumAsString); + if(Found) + Value = *Found; + + return Found != nullptr; +} + +bool {{classname}}::EnumFromString(const FString& EnumAsString, {{classname}}::{{{enumName}}}& EnumValue) +{ + return FromString(EnumAsString, EnumValue); +} + inline FStringFormatArg ToStringFormatArg(const {{classname}}::{{{enumName}}}& Value) { return FStringFormatArg(ToString(Value)); @@ -94,15 +131,8 @@ inline bool TryGetJsonValue(const TSharedPtr& JsonValue, {{classname FString TmpValue; if (JsonValue->TryGetString(TmpValue)) { - static TMap StringToEnum = { {{#enumVars}} - { TEXT("{{{value}}}"), {{classname}}::{{{enumName}}}::{{name}} },{{/enumVars}} }; - - const auto Found = StringToEnum.Find(TmpValue); - if(Found) - { - Value = *Found; + if(FromString(TmpValue, Value)) return true; - } } {{/allowableValues}} return false; From 6e6b8472d4869148840ebaf7cfe5c72d6ed22d7b Mon Sep 17 00:00:00 2001 From: Justin Black Date: Wed, 26 May 2021 11:59:28 -0700 Subject: [PATCH 157/186] Adds isShort + isUnboundedInteger to IJsonSchemaValidationProperties implementers (#9519) * Adds getter + setter methods for isShortInteger in IJsonSchemaValidationProperties * Adds isShortInteger to CodegenModel * Adds isShortInteger to CodegenProperty * Adds isShortInteger to CodegenParameter * Adds isShortInteger to CodegenResponse * Ensures that samples are up to date * Changes interface to isShort * Removes typescript file * Adds isShort to CodegenModel and CodegenProperty instances * Samples updated, shows too many changes across generators * Adds isUnboundedInteger and implements it in CodegenModel * Adds isUnboundedInteger to COdegenProperty * Adds isUnboundedInteger to CodegenParameter * Adds isUnboundedInteger to CodegenResponse * Regenerates samples and docs * Adds testBooleansSetForIntSchemas * Fixes integer tests --- .../openapitools/codegen/CodegenModel.java | 24 +++- .../codegen/CodegenParameter.java | 26 +++- .../openapitools/codegen/CodegenProperty.java | 24 +++- .../openapitools/codegen/CodegenResponse.java | 24 +++- .../openapitools/codegen/DefaultCodegen.java | 29 ++++- .../IJsonSchemaValidationProperties.java | 10 +- .../codegen/DefaultCodegenTest.java | 123 ++++++++++++++++++ .../src/test/resources/3_0/issue_9447.yaml | 106 +++++++++++++++ .../handler/PathHandlerInterface.java | 4 +- 9 files changed, 356 insertions(+), 14 deletions(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/issue_9447.yaml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java index e7a3adce6a39..7669f8379193 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java @@ -64,7 +64,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { public String defaultValue; public String arrayModelType; public boolean isAlias; // Is this effectively an alias of another simple type - public boolean isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble, isDate, isDateTime; + public boolean isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble, isDate, isDateTime, isShort, isUnboundedInteger; private boolean additionalPropertiesIsAnyType; public List vars = new ArrayList(); // all properties (without parent's properties) public List allVars = new ArrayList(); // all properties (with parent's properties) @@ -606,6 +606,22 @@ public void setIsArray(boolean isArray) { this.isArray = isArray; } + @Override + public boolean getIsShort() { return isShort; } + + @Override + public void setIsShort(boolean isShort) { + this.isShort = isShort; + } + + @Override + public boolean getIsUnboundedInteger() { return isUnboundedInteger; } + + @Override + public void setIsUnboundedInteger(boolean isUnboundedInteger) { + this.isUnboundedInteger = isUnboundedInteger; + } + @Override public CodegenProperty getAdditionalProperties() { return additionalProperties; } @@ -752,7 +768,9 @@ public boolean equals(Object o) { return isAlias == that.isAlias && isString == that.isString && isInteger == that.isInteger && + isShort == that.isShort && isLong == that.isLong && + isUnboundedInteger == that.isUnboundedInteger && isNumber == that.isNumber && isNumeric == that.isNumeric && isFloat == that.isFloat && @@ -839,7 +857,7 @@ public int hashCode() { getDescription(), getClassVarName(), getModelJson(), getDataType(), getXmlPrefix(), getXmlNamespace(), getXmlName(), getClassFilename(), getUnescapedDescription(), getDiscriminator(), getDefaultValue(), getArrayModelType(), isAlias, isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble, - isDate, isDateTime, isNull, hasValidation, + isDate, isDateTime, isNull, hasValidation, isShort, isUnboundedInteger, getVars(), getAllVars(), getRequiredVars(), getOptionalVars(), getReadOnlyVars(), getReadWriteVars(), getParentVars(), getAllowableValues(), getMandatory(), getAllMandatory(), getImports(), hasVars, isEmptyVars(), hasMoreModels, hasEnums, isEnum, isNullable, hasRequired, hasOptional, isArray, @@ -881,7 +899,9 @@ public String toString() { sb.append(", isAlias=").append(isAlias); sb.append(", isString=").append(isString); sb.append(", isInteger=").append(isInteger); + sb.append(", isShort=").append(isShort); sb.append(", isLong=").append(isLong); + sb.append(", isUnboundedInteger=").append(isUnboundedInteger); sb.append(", isNumber=").append(isNumber); sb.append(", isNumeric=").append(isNumeric); sb.append(", isFloat=").append(isFloat); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java index 326785046d9a..d2dc9fa98089 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java @@ -35,7 +35,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { public String example; // example value (x-example) public String jsonSchema; public boolean isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, - isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isAnyType; + isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isAnyType, isShort, isUnboundedInteger; public boolean isArray, isMap; public boolean isFile; public boolean isEnum; @@ -184,7 +184,9 @@ public CodegenParameter copy() { output.isString = this.isString; output.isNumeric = this.isNumeric; output.isInteger = this.isInteger; + output.isShort = this.isShort; output.isLong = this.isLong; + output.isUnboundedInteger = this.isUnboundedInteger; output.isDouble = this.isDouble; output.isDecimal = this.isDecimal; output.isFloat = this.isFloat; @@ -209,7 +211,7 @@ public CodegenParameter copy() { @Override public int hashCode() { - return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, isContainer, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style, isDeepObject, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isAnyType, isArray, isMap, isFile, isEnum, _enum, allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull, additionalPropertiesIsAnyType, hasVars, hasRequired); + return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, isContainer, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style, isDeepObject, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isAnyType, isArray, isMap, isFile, isEnum, _enum, allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull, additionalPropertiesIsAnyType, hasVars, hasRequired, isShort, isUnboundedInteger); } @Override @@ -231,7 +233,9 @@ public boolean equals(Object o) { isString == that.isString && isNumeric == that.isNumeric && isInteger == that.isInteger && + isShort == that.isShort && isLong == that.isLong && + isUnboundedInteger == that.isUnboundedInteger && isNumber == that.isNumber && isFloat == that.isFloat && isDouble == that.isDouble && @@ -328,7 +332,9 @@ public String toString() { sb.append(", isString=").append(isString); sb.append(", isNumeric=").append(isNumeric); sb.append(", isInteger=").append(isInteger); + sb.append(", isShort=").append(isShort); sb.append(", isLong=").append(isLong); + sb.append(", isUnboundedInteger=").append(isUnboundedInteger); sb.append(", isNumber=").append(isNumber); sb.append(", isFloat=").append(isFloat); sb.append(", isDouble=").append(isDouble); @@ -560,6 +566,22 @@ public void setIsArray(boolean isArray) { this.isArray = isArray; } + @Override + public boolean getIsShort() { return isShort; } + + @Override + public void setIsShort(boolean isShort) { + this.isShort = isShort; + } + + @Override + public boolean getIsUnboundedInteger() { return isUnboundedInteger; } + + @Override + public void setIsUnboundedInteger(boolean isUnboundedInteger) { + this.isUnboundedInteger = isUnboundedInteger; + } + @Override public CodegenProperty getAdditionalProperties() { return additionalProperties; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java index b20e55f61b42..47e69fe89d4a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java @@ -118,7 +118,9 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti public boolean isString; public boolean isNumeric; public boolean isInteger; + public boolean isShort; public boolean isLong; + public boolean isUnboundedInteger; public boolean isNumber; public boolean isFloat; public boolean isDouble; @@ -507,6 +509,22 @@ public void setIsArray(boolean isArray) { this.isArray = isArray; } + @Override + public boolean getIsShort() { return isShort; } + + @Override + public void setIsShort(boolean isShort) { + this.isShort = isShort; + } + + @Override + public boolean getIsUnboundedInteger() { return isUnboundedInteger; } + + @Override + public void setIsUnboundedInteger(boolean isUnboundedInteger) { + this.isUnboundedInteger = isUnboundedInteger; + } + public Map getVendorExtensions() { return vendorExtensions; } @@ -765,7 +783,9 @@ public String toString() { sb.append(", isString=").append(isString); sb.append(", isNumeric=").append(isNumeric); sb.append(", isInteger=").append(isInteger); + sb.append(", isShort=").append(isShort); sb.append(", isLong=").append(isLong); + sb.append(", isUnboundedInteger=").append(isUnboundedInteger); sb.append(", isNumber=").append(isNumber); sb.append(", isFloat=").append(isFloat); sb.append(", isDouble=").append(isDouble); @@ -838,7 +858,9 @@ public boolean equals(Object o) { isString == that.isString && isNumeric == that.isNumeric && isInteger == that.isInteger && + isShort == that.isShort && isLong == that.isLong && + isUnboundedInteger == that.isUnboundedInteger && isNumber == that.isNumber && isFloat == that.isFloat && isDouble == that.isDouble && @@ -926,7 +948,7 @@ public int hashCode() { hasMoreNonReadOnly, isPrimitiveType, isModel, isContainer, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isFile, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, - isArray, isMap, isEnum, isReadOnly, isWriteOnly, isNullable, + isArray, isMap, isEnum, isReadOnly, isWriteOnly, isNullable, isShort, isUnboundedInteger, isSelfReference, isCircularReference, isDiscriminator, _enum, allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars, vendorExtensions, hasValidation, isInherited, discriminatorValue, nameInCamelCase, diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenResponse.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenResponse.java index bb062c1304fc..d8c1756f4462 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenResponse.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenResponse.java @@ -36,7 +36,9 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { public boolean isString; public boolean isNumeric; public boolean isInteger; + public boolean isShort; public boolean isLong; + public boolean isUnboundedInteger; public boolean isNumber; public boolean isFloat; public boolean isDouble; @@ -89,7 +91,7 @@ public int hashCode() { isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBoolean, isDate, isDateTime, isUuid, isEmail, isModel, isFreeFormObject, isAnyType, isDefault, simpleType, primitiveType, isMap, isArray, isBinary, isFile, schema, jsonSchema, vendorExtensions, items, additionalProperties, - vars, requiredVars, isNull, hasValidation, + vars, requiredVars, isNull, hasValidation, isShort, isUnboundedInteger, getMaxProperties(), getMinProperties(), uniqueItems, getMaxItems(), getMinItems(), getMaxLength(), getMinLength(), exclusiveMinimum, exclusiveMaximum, getMinimum(), getMaximum(), getPattern(), is1xx, is2xx, is3xx, is4xx, is5xx, additionalPropertiesIsAnyType, hasVars, hasRequired); @@ -104,7 +106,9 @@ public boolean equals(Object o) { isString == that.isString && isNumeric == that.isNumeric && isInteger == that.isInteger && + isShort == that.isShort && isLong == that.isLong && + isUnboundedInteger == that.isUnboundedInteger && isNumber == that.isNumber && isFloat == that.isFloat && isDouble == that.isDouble && @@ -316,6 +320,22 @@ public void setIsArray(boolean isArray) { this.isArray = isArray; } + @Override + public boolean getIsShort() { return isShort; } + + @Override + public void setIsShort(boolean isShort) { + this.isShort = isShort; + } + + @Override + public boolean getIsUnboundedInteger() { return isUnboundedInteger; } + + @Override + public void setIsUnboundedInteger(boolean isUnboundedInteger) { + this.isUnboundedInteger = isUnboundedInteger; + } + @Override public void setIsModel(boolean isModel) { this.isModel = isModel; @@ -402,7 +422,9 @@ public String toString() { sb.append(", isString=").append(isString); sb.append(", isNumeric=").append(isNumeric); sb.append(", isInteger=").append(isInteger); + sb.append(", isShort=").append(isShort); sb.append(", isLong=").append(isLong); + sb.append(", isUnboundedInteger=").append(isUnboundedInteger); sb.append(", isNumber=").append(isNumber); sb.append(", isFloat=").append(isFloat); sb.append(", isDouble=").append(isDouble); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 2edf1bf15af0..c26a4df1362e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -2532,8 +2532,13 @@ public CodegenModel fromModel(String name, Schema schema) { m.isNumeric = Boolean.TRUE; if (ModelUtils.isLongSchema(schema)) { // int64/long format m.isLong = Boolean.TRUE; - } else { // int32 format - m.isInteger = Boolean.TRUE; + } else { + m.isInteger = Boolean.TRUE; // older use case, int32 and unbounded int + if (ModelUtils.isShortSchema(schema)) { // int32 + m.setIsShort(Boolean.TRUE); + } else { // unbounded integer + m.setIsUnboundedInteger(Boolean.TRUE); + } } } else if (ModelUtils.isDateTimeSchema(schema)) { // NOTE: DateTime schemas as CodegenModel is a rare use case and may be removed at a later date. @@ -3192,10 +3197,14 @@ public CodegenProperty fromProperty(String name, Schema p) { property.isNumeric = Boolean.TRUE; if (ModelUtils.isLongSchema(p)) { // int64/long format property.isLong = Boolean.TRUE; - } else { // int32 format - property.isInteger = Boolean.TRUE; + } else { + property.isInteger = Boolean.TRUE; // older use case, int32 and unbounded int + if (ModelUtils.isShortSchema(p)) { // int32 + property.setIsShort(Boolean.TRUE); + } else { // unbounded integer + property.setIsUnboundedInteger(Boolean.TRUE); + } } - } else if (ModelUtils.isBooleanSchema(p)) { // boolean type property.isBoolean = true; property.getter = toBooleanGetter(name); @@ -4067,6 +4076,11 @@ public CodegenResponse fromResponse(String responseCode, ApiResponse response) { } else if (Boolean.TRUE.equals(cp.isInteger)) { r.isInteger = true; r.isNumeric = true; + if (Boolean.TRUE.equals(cp.isShort)) { + r.isShort = true; + } else if (Boolean.TRUE.equals(cp.isUnboundedInteger)) { + r.isUnboundedInteger = true; + } } else if (Boolean.TRUE.equals(cp.isNumber)) { r.isNumber = true; r.isNumeric = true; @@ -5383,6 +5397,11 @@ public void setParameterBooleanFlagWithCodegenProperty(CodegenParameter paramete } else if (Boolean.TRUE.equals(property.isInteger)) { parameter.isInteger = true; parameter.isPrimitiveType = true; + if (Boolean.TRUE.equals(property.isShort)) { + parameter.isShort = true; + } else if (Boolean.TRUE.equals(property.isUnboundedInteger)) { + parameter.isUnboundedInteger = true; + } } else if (Boolean.TRUE.equals(property.isDouble)) { parameter.isDouble = true; parameter.isPrimitiveType = true; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java index 4eb567b6cdc3..ea677853335f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java @@ -77,7 +77,15 @@ public interface IJsonSchemaValidationProperties { boolean getIsArray(); - void setIsArray(boolean isArray); + void setIsArray(boolean isShort); + + boolean getIsShort(); + + void setIsShort(boolean isShort); + + boolean getIsUnboundedInteger(); + + void setIsUnboundedInteger(boolean isUnboundedInteger); CodegenProperty getAdditionalProperties(); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index e125c98a4635..1d249e687e4d 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -3437,4 +3437,127 @@ public void testHasRequiredInResponses() { } } } + + @Test + public void testBooleansSetForIntSchemas() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_9447.yaml"); + final DefaultCodegen codegen = new DefaultCodegen(); + codegen.setOpenAPI(openAPI); + codegen.setDisallowAdditionalPropertiesIfNotPresent(false); + + String modelName; + Schema sc; + CodegenModel cm; + + modelName = "UnboundedInteger"; + sc = openAPI.getComponents().getSchemas().get(modelName); + cm = codegen.fromModel(modelName, sc); + assertEquals(cm.isUnboundedInteger, true); + assertEquals(cm.isInteger, true); + assertEquals(cm.isShort, false); + assertEquals(cm.isLong, false); + + modelName = "Int32"; + sc = openAPI.getComponents().getSchemas().get(modelName); + cm = codegen.fromModel(modelName, sc); + assertEquals(cm.isUnboundedInteger, false); + assertEquals(cm.isInteger, true); + assertEquals(cm.isShort, true); + assertEquals(cm.isLong, false); + + modelName = "Int64"; + sc = openAPI.getComponents().getSchemas().get(modelName); + cm = codegen.fromModel(modelName, sc); + assertEquals(cm.isUnboundedInteger, false); + assertEquals(cm.isInteger, false); + assertEquals(cm.isShort, false); + assertEquals(cm.isLong, true); + + modelName = "ObjectModelWithIntegerProps"; + sc = openAPI.getComponents().getSchemas().get(modelName); + cm = codegen.fromModel(modelName, sc); + assertEquals(cm.isUnboundedInteger, false); + assertEquals(cm.isInteger, false); + assertEquals(cm.isShort, false); + assertEquals(cm.isLong, false); + CodegenProperty cp; + cp = cm.vars.get(0); + assertEquals(cp.isUnboundedInteger, true); + assertEquals(cp.isInteger, true); + assertEquals(cp.isShort, false); + assertEquals(cp.isLong, false); + cp = cm.vars.get(1); + assertEquals(cp.isUnboundedInteger, false); + assertEquals(cp.isInteger, true); + assertEquals(cp.isShort, true); + assertEquals(cp.isLong, false); + cp = cm.vars.get(2); + assertEquals(cp.isUnboundedInteger, false); + assertEquals(cp.isInteger, false); + assertEquals(cp.isShort, false); + assertEquals(cp.isLong, true); + + String path; + Operation operation; + CodegenOperation co; + CodegenParameter cpa; + CodegenResponse cr; + + path = "/UnboundedInteger"; + operation = openAPI.getPaths().get(path).getPost(); + co = codegen.fromOperation(path, "POST", operation, null); + cpa = co.pathParams.get(0); + assertEquals(cpa.isUnboundedInteger, true); + assertEquals(cpa.isInteger, true); + assertEquals(cpa.isShort, false); + assertEquals(cpa.isLong, false); + cpa = co.bodyParam; + assertEquals(cpa.isUnboundedInteger, true); + assertEquals(cpa.isInteger, true); + assertEquals(cpa.isShort, false); + assertEquals(cpa.isLong, false); + cr = co.responses.get(0); + assertEquals(cr.isUnboundedInteger, true); + assertEquals(cr.isInteger, true); + assertEquals(cr.isShort, false); + assertEquals(cr.isLong, false); + + path = "/Int32"; + operation = openAPI.getPaths().get(path).getPost(); + co = codegen.fromOperation(path, "POST", operation, null); + cpa = co.pathParams.get(0); + assertEquals(cpa.isUnboundedInteger, false); + assertEquals(cpa.isInteger, true); + assertEquals(cpa.isShort, true); + assertEquals(cpa.isLong, false); + cpa = co.bodyParam; + assertEquals(cpa.isUnboundedInteger, false); + assertEquals(cpa.isInteger, true); + assertEquals(cpa.isShort, true); + assertEquals(cpa.isLong, false); + cr = co.responses.get(0); + assertEquals(cr.isUnboundedInteger, false); + assertEquals(cr.isInteger, true); + assertEquals(cr.isShort, true); + assertEquals(cr.isLong, false); + + path = "/Int64"; + operation = openAPI.getPaths().get(path).getPost(); + co = codegen.fromOperation(path, "POST", operation, null); + cpa = co.pathParams.get(0); + assertEquals(cpa.isUnboundedInteger, false); + assertEquals(cpa.isInteger, false); + assertEquals(cpa.isShort, false); + assertEquals(cpa.isLong, true); + cpa = co.bodyParam; + assertEquals(cpa.isUnboundedInteger, false); + assertEquals(cpa.isInteger, false); + assertEquals(cpa.isShort, false); + assertEquals(cpa.isLong, true); + cr = co.responses.get(0); + assertEquals(cr.isUnboundedInteger, false); + assertEquals(cr.isInteger, false); + assertEquals(cr.isShort, false); + assertEquals(cr.isLong, true); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/issue_9447.yaml b/modules/openapi-generator/src/test/resources/3_0/issue_9447.yaml new file mode 100644 index 000000000000..7cfa010c37f8 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/issue_9447.yaml @@ -0,0 +1,106 @@ +openapi: 3.0.1 +info: + title: OpenAPI Petstore + description: "sample to vet integer handling" + license: + name: Apache-2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: 1.0.0 +servers: + - url: http://petstore.swagger.io:80/v2 +tags: [] +paths: + /UnboundedInteger: + post: + operationId: UnboundedInteger + parameters: + - name: UnboundedInteger + in: path + required: true + schema: + type: integer + requestBody: + content: + application/json: + schema: + type: integer + required: true + responses: + 200: + description: success + content: + application/json: + schema: + type: integer + /Int64: + post: + operationId: Int64 + parameters: + - name: Int64 + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + type: integer + format: int64 + required: true + responses: + 200: + description: success + content: + application/json: + schema: + type: integer + format: int64 + /Int32: + post: + operationId: Int32 + parameters: + - name: Int32 + in: path + required: true + schema: + type: integer + format: int32 + requestBody: + content: + application/json: + schema: + type: integer + format: int32 + required: true + responses: + 200: + description: success + content: + application/json: + schema: + type: integer + format: int32 +components: + schemas: + UnboundedInteger: + type: integer + Int32: + type: integer + format: int32 + Int64: + type: integer + format: int64 + ObjectModelWithIntegerProps: + type: object + properties: + UnboundedInteger: + type: integer + Int32: + type: integer + format: int32 + Int64: + type: integer + format: int64 + securitySchemes: {} \ No newline at end of file diff --git a/samples/server/petstore/java-undertow/src/main/java/org/openapitools/handler/PathHandlerInterface.java b/samples/server/petstore/java-undertow/src/main/java/org/openapitools/handler/PathHandlerInterface.java index 41b91a89132f..362ae2441189 100644 --- a/samples/server/petstore/java-undertow/src/main/java/org/openapitools/handler/PathHandlerInterface.java +++ b/samples/server/petstore/java-undertow/src/main/java/org/openapitools/handler/PathHandlerInterface.java @@ -539,10 +539,10 @@ public interface PathHandlerInterface { *

    Response headers: [CodegenProperty{openApiType='integer', baseName='X-Rate-Limit', complexType='null', getter='getxRateLimit', setter='setxRateLimit', description='calls per hour allowed by the user', dataType='Integer', datatypeWithEnum='Integer', dataFormat='int32', name='xRateLimit', min='null', max='null', defaultValue='null', defaultValueWithParam=' = data.X-Rate-Limit;', baseType='Integer', containerType='null', title='null', unescapedDescription='calls per hour allowed by the user', maxLength=null, minLength=null, pattern='null', example='null', jsonSchema='{ "type" : "integer", "format" : "int32" -}', minimum='null', maximum='null', exclusiveMinimum=false, exclusiveMaximum=false, required=false, deprecated=false, hasMoreNonReadOnly=false, isPrimitiveType=true, isModel=false, isContainer=false, isString=false, isNumeric=true, isInteger=true, isLong=false, isNumber=false, isFloat=false, isDouble=false, isDecimal=false, isByteArray=false, isBinary=false, isFile=false, isBoolean=false, isDate=false, isDateTime=false, isUuid=false, isUri=false, isEmail=false, isFreeFormObject=false, isArray=false, isMap=false, isEnum=false, isReadOnly=false, isWriteOnly=false, isNullable=false, isSelfReference=false, isCircularReference=false, isDiscriminator=false, _enum=null, allowableValues=null, items=null, additionalProperties=null, vars=[], requiredVars=[], mostInnerItems=null, vendorExtensions={}, hasValidation=false, isInherited=false, discriminatorValue='null', nameInCamelCase='XRateLimit', nameInSnakeCase='X_RATE_LIMIT', enumName='null', maxItems=null, minItems=null, maxProperties=null, minProperties=null, uniqueItems=false, multipleOf=null, isXmlAttribute=false, xmlPrefix='null', xmlName='null', xmlNamespace='null', isXmlWrapped=false, isNull=false, getAdditionalPropertiesIsAnyType=false, getHasVars=false, getHasRequired=false}, CodegenProperty{openApiType='string', baseName='X-Expires-After', complexType='Date', getter='getxExpiresAfter', setter='setxExpiresAfter', description='date in UTC when toekn expires', dataType='Date', datatypeWithEnum='Date', dataFormat='date-time', name='xExpiresAfter', min='null', max='null', defaultValue='null', defaultValueWithParam=' = data.X-Expires-After;', baseType='Date', containerType='null', title='null', unescapedDescription='date in UTC when toekn expires', maxLength=null, minLength=null, pattern='null', example='null', jsonSchema='{ +}', minimum='null', maximum='null', exclusiveMinimum=false, exclusiveMaximum=false, required=false, deprecated=false, hasMoreNonReadOnly=false, isPrimitiveType=true, isModel=false, isContainer=false, isString=false, isNumeric=true, isInteger=true, isShort=true, isLong=false, isUnboundedInteger=false, isNumber=false, isFloat=false, isDouble=false, isDecimal=false, isByteArray=false, isBinary=false, isFile=false, isBoolean=false, isDate=false, isDateTime=false, isUuid=false, isUri=false, isEmail=false, isFreeFormObject=false, isArray=false, isMap=false, isEnum=false, isReadOnly=false, isWriteOnly=false, isNullable=false, isSelfReference=false, isCircularReference=false, isDiscriminator=false, _enum=null, allowableValues=null, items=null, additionalProperties=null, vars=[], requiredVars=[], mostInnerItems=null, vendorExtensions={}, hasValidation=false, isInherited=false, discriminatorValue='null', nameInCamelCase='XRateLimit', nameInSnakeCase='X_RATE_LIMIT', enumName='null', maxItems=null, minItems=null, maxProperties=null, minProperties=null, uniqueItems=false, multipleOf=null, isXmlAttribute=false, xmlPrefix='null', xmlName='null', xmlNamespace='null', isXmlWrapped=false, isNull=false, getAdditionalPropertiesIsAnyType=false, getHasVars=false, getHasRequired=false}, CodegenProperty{openApiType='string', baseName='X-Expires-After', complexType='Date', getter='getxExpiresAfter', setter='setxExpiresAfter', description='date in UTC when toekn expires', dataType='Date', datatypeWithEnum='Date', dataFormat='date-time', name='xExpiresAfter', min='null', max='null', defaultValue='null', defaultValueWithParam=' = data.X-Expires-After;', baseType='Date', containerType='null', title='null', unescapedDescription='date in UTC when toekn expires', maxLength=null, minLength=null, pattern='null', example='null', jsonSchema='{ "type" : "string", "format" : "date-time" -}', minimum='null', maximum='null', exclusiveMinimum=false, exclusiveMaximum=false, required=false, deprecated=false, hasMoreNonReadOnly=false, isPrimitiveType=false, isModel=false, isContainer=false, isString=false, isNumeric=false, isInteger=false, isLong=false, isNumber=false, isFloat=false, isDouble=false, isDecimal=false, isByteArray=false, isBinary=false, isFile=false, isBoolean=false, isDate=false, isDateTime=true, isUuid=false, isUri=false, isEmail=false, isFreeFormObject=false, isArray=false, isMap=false, isEnum=false, isReadOnly=false, isWriteOnly=false, isNullable=false, isSelfReference=false, isCircularReference=false, isDiscriminator=false, _enum=null, allowableValues=null, items=null, additionalProperties=null, vars=[], requiredVars=[], mostInnerItems=null, vendorExtensions={}, hasValidation=false, isInherited=false, discriminatorValue='null', nameInCamelCase='XExpiresAfter', nameInSnakeCase='X_EXPIRES_AFTER', enumName='null', maxItems=null, minItems=null, maxProperties=null, minProperties=null, uniqueItems=false, multipleOf=null, isXmlAttribute=false, xmlPrefix='null', xmlName='null', xmlNamespace='null', isXmlWrapped=false, isNull=false, getAdditionalPropertiesIsAnyType=false, getHasVars=false, getHasRequired=false}]

    +}', minimum='null', maximum='null', exclusiveMinimum=false, exclusiveMaximum=false, required=false, deprecated=false, hasMoreNonReadOnly=false, isPrimitiveType=false, isModel=false, isContainer=false, isString=false, isNumeric=false, isInteger=false, isShort=false, isLong=false, isUnboundedInteger=false, isNumber=false, isFloat=false, isDouble=false, isDecimal=false, isByteArray=false, isBinary=false, isFile=false, isBoolean=false, isDate=false, isDateTime=true, isUuid=false, isUri=false, isEmail=false, isFreeFormObject=false, isArray=false, isMap=false, isEnum=false, isReadOnly=false, isWriteOnly=false, isNullable=false, isSelfReference=false, isCircularReference=false, isDiscriminator=false, _enum=null, allowableValues=null, items=null, additionalProperties=null, vars=[], requiredVars=[], mostInnerItems=null, vendorExtensions={}, hasValidation=false, isInherited=false, discriminatorValue='null', nameInCamelCase='XExpiresAfter', nameInSnakeCase='X_EXPIRES_AFTER', enumName='null', maxItems=null, minItems=null, maxProperties=null, minProperties=null, uniqueItems=false, multipleOf=null, isXmlAttribute=false, xmlPrefix='null', xmlName='null', xmlNamespace='null', isXmlWrapped=false, isNull=false, getAdditionalPropertiesIsAnyType=false, getHasVars=false, getHasRequired=false}]

    * *

    Produces: [{mediaType=application/xml}, {mediaType=application/json}]

    *

    Returns: {@link String}

    From b5843f41a60da7202f2dd86782e72fb4fe5f57b0 Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Thu, 27 May 2021 03:05:48 +0100 Subject: [PATCH 158/186] [swift5] update docs (#9587) --- docs/generators/swift5.md | 2 +- .../org/openapitools/codegen/languages/Swift5ClientCodegen.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index 480eda2ebfd0..bace7f1f0492 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -17,7 +17,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |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| |lenientTypeCast|Accept and cast values for simple types (string->bool, string->int, int->string)| |false| |library|Library template (sub-template) to use|
    **urlsession**
    [DEFAULT] HTTP client: URLSession
    **alamofire**
    HTTP client: Alamofire
    |urlsession| -|mapFileBinaryToData|Map File and Binary to Data (default: false)| |false| +|mapFileBinaryToData|[WARNING] This option will be removed and enabled by default in the future once we've enhanced the code to work with `Data` in all the different situations. Map File and Binary to Data (default: false)| |false| |nonPublicApi|Generates code with reduced access modifiers; allows embedding elsewhere without exposing non-public API calls to consumers.(default: false)| |null| |objcCompatible|Add additional properties and methods for Objective-C compatibility (default: false)| |null| |podAuthors|Authors used for Podspec| |null| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index e84cd3313698..c810c01a891c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -288,7 +288,7 @@ public Swift5ClientCodegen() { .defaultValue(Boolean.TRUE.toString())); cliOptions.add(new CliOption(MAP_FILE_BINARY_TO_DATA, - "Map File and Binary to Data (default: false)") + "[WARNING] This option will be removed and enabled by default in the future once we've enhanced the code to work with `Data` in all the different situations. Map File and Binary to Data (default: false)") .defaultValue(Boolean.FALSE.toString())); supportedLibraries.put(LIBRARY_URLSESSION, "[DEFAULT] HTTP client: URLSession"); From a61db6e596cba545132bd4cdc8ea5310d8fa0c76 Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Thu, 27 May 2021 03:18:51 +0100 Subject: [PATCH 159/186] [swift5][client] fix binary response (#9595) * [swift5][client] fix binary respose * [swift5][client] fix binary respose --- .../AlamofireImplementations.mustache | 64 ++++++++++++++++++- .../URLSessionImplementations.mustache | 47 +++++++++++++- .../OpenAPIs/AlamofireImplementations.swift | 64 ++++++++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- .../URLSessionImplementations.swift | 47 +++++++++++++- .../OpenAPIs/URLSessionImplementations.swift | 47 +++++++++++++- 15 files changed, 709 insertions(+), 30 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache b/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache index 71e9670965bf..b7aac0d8ef16 100644 --- a/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache @@ -190,16 +190,18 @@ private var managerStore = SynchronizedDictionary() } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.{{projectName}}.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ private var urlSessionStore = SynchronizedDictionary() completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ private var urlSessionStore = SynchronizedDictionary() completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.{{projectName}}.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift index f26fae21f710..8b73fa8aaf63 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift @@ -190,16 +190,18 @@ open class AlamofireRequestBuilder: RequestBuilder { let fileManager = FileManager.default let urlRequest = try request.asURLRequest() - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try self.getURL(from: urlRequest) var requestPath = try self.getPath(from: requestURL) if let headerFileName = self.getFileName(fromContentDisposition: dataResponse.response?.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -225,6 +227,18 @@ open class AlamofireRequestBuilder: RequestBuilder { completion(.failure(ErrorResponse.error(voidResponse.response?.statusCode ?? 500, voidResponse.data, voidResponse.response, error))) } + }) + case is Data.Type: + validatedRequest.responseData(queue: apiResponseQueue, completionHandler: { dataResponse in + cleanupRequest() + + switch dataResponse.result { + case .success: + completion(.success(Response(response: dataResponse.response!, body: dataResponse.data as? T))) + case let .failure(error): + completion(.failure(ErrorResponse.error(dataResponse.response?.statusCode ?? 500, dataResponse.data, dataResponse.response, error))) + } + }) default: validatedRequest.responseData(queue: apiResponseQueue, completionHandler: { dataResponse in @@ -328,6 +342,52 @@ open class AlamofireDecodableRequestBuilder: AlamofireRequestBuild } }) + case is URL.Type: + validatedRequest.responseData(queue: apiResponseQueue, completionHandler: { dataResponse in + cleanupRequest() + + do { + + guard !dataResponse.result.isFailure else { + throw DownloadException.responseFailed + } + + guard let data = dataResponse.data else { + throw DownloadException.responseDataMissing + } + + guard let request = request.request else { + throw DownloadException.requestMissing + } + + let fileManager = FileManager.default + let urlRequest = try request.asURLRequest() + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try self.getURL(from: urlRequest) + + var requestPath = try self.getPath(from: requestURL) + + if let headerFileName = self.getFileName(fromContentDisposition: dataResponse.response?.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: dataResponse.response!, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, dataResponse.data, dataResponse.response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, dataResponse.data, dataResponse.response, error))) + } + return + }) case is Void.Type: validatedRequest.responseData(queue: apiResponseQueue, completionHandler: { voidResponse in cleanupRequest() diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index c8ac98f20266..66b9d23bb399 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ internal class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ internal class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ internal class URLSessionDecodableRequestBuilder: URLSessionReques completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 52b2071ec1aa..fbf069a93c49 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -205,16 +205,18 @@ open class URLSessionRequestBuilder: RequestBuilder { } let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] let requestURL = try getURL(from: urlRequest) var requestPath = try getPath(from: requestURL) if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") } - let filePath = documentsDirectory.appendingPathComponent(requestPath) + let filePath = cachesDirectory.appendingPathComponent(requestPath) let directoryPath = filePath.deletingLastPathComponent().path try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) @@ -232,6 +234,10 @@ open class URLSessionRequestBuilder: RequestBuilder { completion(.success(Response(response: httpResponse, body: nil))) + case is Data.Type: + + completion(.success(Response(response: httpResponse, body: data as? T))) + default: completion(.success(Response(response: httpResponse, body: data as? T))) @@ -328,6 +334,43 @@ open class URLSessionDecodableRequestBuilder: URLSessionRequestBui completion(.success(Response(response: httpResponse, body: body as? T))) + case is URL.Type: + do { + + guard error == nil else { + throw DownloadException.responseFailed + } + + guard let data = data else { + throw DownloadException.responseDataMissing + } + + let fileManager = FileManager.default + let cachesDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] + let requestURL = try getURL(from: urlRequest) + + var requestPath = try getPath(from: requestURL) + + if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { + requestPath = requestPath.appending("/\(headerFileName)") + } else { + requestPath = requestPath.appending("/tmp.PetstoreClient.\(UUID().uuidString)") + } + + let filePath = cachesDirectory.appendingPathComponent(requestPath) + let directoryPath = filePath.deletingLastPathComponent().path + + try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) + try data.write(to: filePath, options: .atomic) + + completion(.success(Response(response: httpResponse, body: filePath as? T))) + + } catch let requestParserError as DownloadException { + completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) + } catch { + completion(.failure(ErrorResponse.error(400, data, response, error))) + } + case is Void.Type: completion(.success(Response(response: httpResponse, body: nil))) From 4f1d8f469904878c215f9c07027abf7048627bc0 Mon Sep 17 00:00:00 2001 From: desmese Date: Thu, 27 May 2021 04:24:38 +0200 Subject: [PATCH 160/186] - added localVar prefix to the contentType variable defined in the api.mustache template in the java resttemplate library (#9568) - rerun generate-samples.sh and export_docs_generators.sh --- docs/generators/fsharp-functions.md | 2 +- docs/generators/fsharp-giraffe-server.md | 2 +- docs/generators/java-inflector.md | 2 +- docs/generators/jaxrs-cxf-client.md | 2 +- docs/generators/swift5.md | 4 +- .../Java/libraries/resttemplate/api.mustache | 4 +- .../petstore/R/.openapi-generator/FILES | 2 +- .../client/api/AnotherFakeApi.java | 4 +- .../org/openapitools/client/api/FakeApi.java | 56 +++--- .../client/api/FakeClassnameTags123Api.java | 4 +- .../org/openapitools/client/api/PetApi.java | 36 ++-- .../org/openapitools/client/api/StoreApi.java | 16 +- .../org/openapitools/client/api/UserApi.java | 32 ++-- .../client/api/AnotherFakeApi.java | 4 +- .../org/openapitools/client/api/FakeApi.java | 56 +++--- .../client/api/FakeClassnameTags123Api.java | 4 +- .../org/openapitools/client/api/PetApi.java | 36 ++-- .../org/openapitools/client/api/StoreApi.java | 16 +- .../org/openapitools/client/api/UserApi.java | 32 ++-- .../.openapi-generator/FILES | 2 +- .../php/OpenAPIClient-php/phpunit.xml.dist | 4 +- samples/client/petstore/powershell/README.md | 12 +- .../petstore/powershell/docs/PSPetApi.md | 2 +- .../petstore/powershell/docs/PSStoreApi.md | 2 +- .../petstore/powershell/docs/PSUserApi.md | 2 +- .../default-v3.0/models/Capitalization.ts | 1 + .../petstore_client_lib_fake/README.md | 168 +++++++++--------- .../dart-dio/petstore_client_lib/README.md | 52 +++--- .../petstore_client_lib_fake/README.md | 168 +++++++++--------- .../dart2/petstore_client_lib/README.md | 52 +++--- .../dart2/petstore_client_lib_fake/README.md | 168 +++++++++--------- .../README.md | 168 +++++++++--------- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 12 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- samples/server/petstore/php-slim4/README.md | 4 +- .../petstore/php-slim4/phpunit.xml.dist | 4 +- .../SymfonyBundle-php/phpunit.xml.dist | 6 +- .../python-aiohttp-srclayout/setup.py | 6 +- .../tests/conftest.py | 2 +- .../petstore/python-aiohttp-srclayout/tox.ini | 2 +- 50 files changed, 600 insertions(+), 599 deletions(-) diff --git a/docs/generators/fsharp-functions.md b/docs/generators/fsharp-functions.md index bb16f39fa776..2a81000a7fb0 100644 --- a/docs/generators/fsharp-functions.md +++ b/docs/generators/fsharp-functions.md @@ -22,7 +22,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |OpenAPI/src| +|sourceFolder|source folder for generated code| |OpenAPI\src| ## IMPORT MAPPING diff --git a/docs/generators/fsharp-giraffe-server.md b/docs/generators/fsharp-giraffe-server.md index f374168aa71f..66150dbec0de 100644 --- a/docs/generators/fsharp-giraffe-server.md +++ b/docs/generators/fsharp-giraffe-server.md @@ -19,7 +19,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |packageVersion|F# package version.| |1.0.0| |returnICollection|Return ICollection<T> instead of the concrete type.| |false| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |OpenAPI/src| +|sourceFolder|source folder for generated code| |OpenAPI\src| |useCollection|Deserialize array types to Collection<T> instead of List<T>.| |false| |useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false| |useSwashbuckle|Uses the Swashbuckle.AspNetCore NuGet package for documentation.| |false| diff --git a/docs/generators/java-inflector.md b/docs/generators/java-inflector.md index 373bc61861b2..131b09f3f90e 100644 --- a/docs/generators/java-inflector.md +++ b/docs/generators/java-inflector.md @@ -48,7 +48,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |snapshotVersion|Uses a SNAPSHOT version.|
    **true**
    Use a SnapShot Version
    **false**
    Use a Release Version
    |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |src/gen/java| +|sourceFolder|source folder for generated code| |src\gen\java| |withXml|whether to include support for application/xml content type and include XML annotations in the model (works with libraries that provide support for JSON and XML)| |false| ## IMPORT MAPPING diff --git a/docs/generators/jaxrs-cxf-client.md b/docs/generators/jaxrs-cxf-client.md index fb3547c920d8..25d03ea104b9 100644 --- a/docs/generators/jaxrs-cxf-client.md +++ b/docs/generators/jaxrs-cxf-client.md @@ -48,7 +48,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |snapshotVersion|Uses a SNAPSHOT version.|
    **true**
    Use a SnapShot Version
    **false**
    Use a Release Version
    |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |src/gen/java| +|sourceFolder|source folder for generated code| |src\gen\java| |useBeanValidation|Use BeanValidation API annotations| |false| |useGenericResponse|Use generic response| |false| |useGzipFeatureForTests|Use Gzip Feature for tests| |false| diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index bace7f1f0492..2846d6de2b95 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -36,10 +36,10 @@ These options may be applied as additional-properties (cli) or configOptions (pl |responseAs|Optionally use libraries to manage response. Currently PromiseKit, RxSwift, Result, Combine are available.| |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|swiftPackagePath|Set a custom source path instead of OpenAPIClient/Classes/OpenAPIs.| |null| +|swiftPackagePath|Set a custom source path instead of OpenAPIClient\Classes\OpenAPIs.| |null| |swiftUseApiNamespace|Flag to make all the API classes inner-class of {{projectName}}API| |null| |useBacktickEscapes|Escape reserved words using backticks (default: false)| |false| -|useSPMFileStructure|Use SPM file structure and set the source path to Sources/{{projectName}} (default: false).| |null| +|useSPMFileStructure|Use SPM file structure and set the source path to Sources\{{projectName}} (default: false).| |null| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache index 006e6cf8f931..e0c75bdc0daa 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/resttemplate/api.mustache @@ -139,12 +139,12 @@ public class {{classname}} { final String[] contentTypes = { {{#hasConsumes}} {{#consumes}}"{{{mediaType}}}"{{^-last}}, {{/-last}}{{/consumes}} {{/hasConsumes}} }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { {{#authMethods}}"{{name}}"{{^-last}}, {{/-last}}{{/authMethods}} }; {{#returnType}}ParameterizedTypeReference<{{{returnType}}}> returnType = new ParameterizedTypeReference<{{{returnType}}}>() {};{{/returnType}}{{^returnType}}ParameterizedTypeReference returnType = new ParameterizedTypeReference() {};{{/returnType}} - return apiClient.invokeAPI(path, HttpMethod.{{httpMethod}}, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.{{httpMethod}}, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } {{/operation}} } diff --git a/samples/client/petstore/R/.openapi-generator/FILES b/samples/client/petstore/R/.openapi-generator/FILES index 9385728f0103..5ec829dd19d5 100644 --- a/samples/client/petstore/R/.openapi-generator/FILES +++ b/samples/client/petstore/R/.openapi-generator/FILES @@ -3,6 +3,7 @@ .travis.yml DESCRIPTION NAMESPACE +README.md R/api_client.R R/api_response.R R/category.R @@ -14,7 +15,6 @@ R/store_api.R R/tag.R R/user.R R/user_api.R -README.md docs/Category.md docs/ModelApiResponse.md docs/Order.md diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/AnotherFakeApi.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/AnotherFakeApi.java index 6cd06d48e579..dee726fce33a 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/AnotherFakeApi.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/AnotherFakeApi.java @@ -89,11 +89,11 @@ public ResponseEntity call123testSpecialTagsWithHttpInfo(Client body) th final String[] contentTypes = { "application/json" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/FakeApi.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/FakeApi.java index a4388e7f41d6..045664b3bbbf 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/FakeApi.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/FakeApi.java @@ -94,12 +94,12 @@ public ResponseEntity createXmlItemWithHttpInfo(XmlItem xmlItem) throws Re final String[] contentTypes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -136,12 +136,12 @@ public ResponseEntity fakeOuterBooleanSerializeWithHttpInfo(Boolean bod }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -178,12 +178,12 @@ public ResponseEntity fakeOuterCompositeSerializeWithHttpInfo(Ou }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -220,12 +220,12 @@ public ResponseEntity fakeOuterNumberSerializeWithHttpInfo(BigDecima }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -262,12 +262,12 @@ public ResponseEntity fakeOuterStringSerializeWithHttpInfo(String body) }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -308,12 +308,12 @@ public ResponseEntity testBodyWithFileSchemaWithHttpInfo(FileSchemaTestCla final String[] contentTypes = { "application/json" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -363,12 +363,12 @@ public ResponseEntity testBodyWithQueryParamsWithHttpInfo(String query, Us final String[] contentTypes = { "application/json" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * To test \"client\" model @@ -412,12 +412,12 @@ public ResponseEntity testClientModelWithHttpInfo(Client body) throws Re final String[] contentTypes = { "application/json" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -530,12 +530,12 @@ public ResponseEntity testEndpointParametersWithHttpInfo(BigDecimal number final String[] contentTypes = { "application/x-www-form-urlencoded" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "http_basic_test" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * To test enum parameters @@ -602,12 +602,12 @@ public ResponseEntity testEnumParametersWithHttpInfo(List enumHead final String[] contentTypes = { "application/x-www-form-urlencoded" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Fake endpoint to test group parameters (optional) @@ -676,12 +676,12 @@ public ResponseEntity testGroupParametersWithHttpInfo(Integer requiredStri final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * test inline additionalProperties @@ -722,12 +722,12 @@ public ResponseEntity testInlineAdditionalPropertiesWithHttpInfo(Map returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * test json serialization of form data @@ -780,12 +780,12 @@ public ResponseEntity testJsonFormDataWithHttpInfo(String param, String pa final String[] contentTypes = { "application/x-www-form-urlencoded" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -858,11 +858,11 @@ public ResponseEntity testQueryParameterCollectionFormatWithHttpInfo(List< final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java index 1aaa79e9b97c..26ad7b235468 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java @@ -89,11 +89,11 @@ public ResponseEntity testClassnameWithHttpInfo(Client body) throws Rest final String[] contentTypes = { "application/json" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "api_key_query" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/PetApi.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/PetApi.java index 6e44289f45e0..b5ff30e3cf28 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/PetApi.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/PetApi.java @@ -91,12 +91,12 @@ public ResponseEntity addPetWithHttpInfo(Pet body) throws RestClientExcept final String[] contentTypes = { "application/json", "application/xml" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Deletes a pet @@ -145,12 +145,12 @@ public ResponseEntity deletePetWithHttpInfo(Long petId, String apiKey) thr final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Finds Pets by status @@ -196,12 +196,12 @@ public ResponseEntity> findPetsByStatusWithHttpInfo(List statu }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference> returnType = new ParameterizedTypeReference>() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Finds Pets by tags @@ -249,12 +249,12 @@ public ResponseEntity> findPetsByTagsWithHttpInfo(Set tags) thr }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference> returnType = new ParameterizedTypeReference>() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Find pet by ID @@ -303,12 +303,12 @@ public ResponseEntity getPetByIdWithHttpInfo(Long petId) throws RestClientE }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "api_key" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Update an existing pet @@ -355,12 +355,12 @@ public ResponseEntity updatePetWithHttpInfo(Pet body) throws RestClientExc final String[] contentTypes = { "application/json", "application/xml" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Updates a pet in the store with form data @@ -413,12 +413,12 @@ public ResponseEntity updatePetWithFormWithHttpInfo(Long petId, String nam final String[] contentTypes = { "application/x-www-form-urlencoded" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * uploads an image @@ -474,12 +474,12 @@ public ResponseEntity uploadFileWithHttpInfo(Long petId, Strin final String[] contentTypes = { "multipart/form-data" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * uploads an image (required) @@ -540,11 +540,11 @@ public ResponseEntity uploadFileWithRequiredFileWithHttpInfo(L final String[] contentTypes = { "multipart/form-data" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/StoreApi.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/StoreApi.java index 1f1cbc751efe..63aa265f38e4 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/StoreApi.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/StoreApi.java @@ -89,12 +89,12 @@ public ResponseEntity deleteOrderWithHttpInfo(String orderId) throws RestC final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Returns pet inventories by status @@ -129,12 +129,12 @@ public ResponseEntity> getInventoryWithHttpInfo() throws Re }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "api_key" }; ParameterizedTypeReference> returnType = new ParameterizedTypeReference>() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Find purchase order by ID @@ -183,12 +183,12 @@ public ResponseEntity getOrderByIdWithHttpInfo(Long orderId) throws RestC }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Place an order for a pet @@ -232,11 +232,11 @@ public ResponseEntity placeOrderWithHttpInfo(Order body) throws RestClien }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/UserApi.java b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/UserApi.java index 35f6e6609633..46be8cbbd613 100644 --- a/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/UserApi.java +++ b/samples/client/petstore/java/resttemplate-withXml/src/main/java/org/openapitools/client/api/UserApi.java @@ -84,12 +84,12 @@ public ResponseEntity createUserWithHttpInfo(User body) throws RestClientE final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Creates list of users with given input array @@ -128,12 +128,12 @@ public ResponseEntity createUsersWithArrayInputWithHttpInfo(List bod final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Creates list of users with given input array @@ -172,12 +172,12 @@ public ResponseEntity createUsersWithListInputWithHttpInfo(List body final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Delete user @@ -221,12 +221,12 @@ public ResponseEntity deleteUserWithHttpInfo(String username) throws RestC final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Get user by user name @@ -275,12 +275,12 @@ public ResponseEntity getUserByNameWithHttpInfo(String username) throws Re }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Logs user into the system @@ -334,12 +334,12 @@ public ResponseEntity loginUserWithHttpInfo(String username, String pass }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Logs out current logged in user session @@ -371,12 +371,12 @@ public ResponseEntity logoutUserWithHttpInfo() throws RestClientException final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Updated user @@ -427,11 +427,11 @@ public ResponseEntity updateUserWithHttpInfo(String username, User body) t final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/AnotherFakeApi.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/AnotherFakeApi.java index 6cd06d48e579..dee726fce33a 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/AnotherFakeApi.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/AnotherFakeApi.java @@ -89,11 +89,11 @@ public ResponseEntity call123testSpecialTagsWithHttpInfo(Client body) th final String[] contentTypes = { "application/json" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/FakeApi.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/FakeApi.java index a4388e7f41d6..045664b3bbbf 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/FakeApi.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/FakeApi.java @@ -94,12 +94,12 @@ public ResponseEntity createXmlItemWithHttpInfo(XmlItem xmlItem) throws Re final String[] contentTypes = { "application/xml", "application/xml; charset=utf-8", "application/xml; charset=utf-16", "text/xml", "text/xml; charset=utf-8", "text/xml; charset=utf-16" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -136,12 +136,12 @@ public ResponseEntity fakeOuterBooleanSerializeWithHttpInfo(Boolean bod }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -178,12 +178,12 @@ public ResponseEntity fakeOuterCompositeSerializeWithHttpInfo(Ou }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -220,12 +220,12 @@ public ResponseEntity fakeOuterNumberSerializeWithHttpInfo(BigDecima }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -262,12 +262,12 @@ public ResponseEntity fakeOuterStringSerializeWithHttpInfo(String body) }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -308,12 +308,12 @@ public ResponseEntity testBodyWithFileSchemaWithHttpInfo(FileSchemaTestCla final String[] contentTypes = { "application/json" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -363,12 +363,12 @@ public ResponseEntity testBodyWithQueryParamsWithHttpInfo(String query, Us final String[] contentTypes = { "application/json" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * To test \"client\" model @@ -412,12 +412,12 @@ public ResponseEntity testClientModelWithHttpInfo(Client body) throws Re final String[] contentTypes = { "application/json" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 @@ -530,12 +530,12 @@ public ResponseEntity testEndpointParametersWithHttpInfo(BigDecimal number final String[] contentTypes = { "application/x-www-form-urlencoded" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "http_basic_test" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * To test enum parameters @@ -602,12 +602,12 @@ public ResponseEntity testEnumParametersWithHttpInfo(List enumHead final String[] contentTypes = { "application/x-www-form-urlencoded" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Fake endpoint to test group parameters (optional) @@ -676,12 +676,12 @@ public ResponseEntity testGroupParametersWithHttpInfo(Integer requiredStri final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * test inline additionalProperties @@ -722,12 +722,12 @@ public ResponseEntity testInlineAdditionalPropertiesWithHttpInfo(Map returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * test json serialization of form data @@ -780,12 +780,12 @@ public ResponseEntity testJsonFormDataWithHttpInfo(String param, String pa final String[] contentTypes = { "application/x-www-form-urlencoded" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * @@ -858,11 +858,11 @@ public ResponseEntity testQueryParameterCollectionFormatWithHttpInfo(List< final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java index 1aaa79e9b97c..26ad7b235468 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/FakeClassnameTags123Api.java @@ -89,11 +89,11 @@ public ResponseEntity testClassnameWithHttpInfo(Client body) throws Rest final String[] contentTypes = { "application/json" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "api_key_query" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PATCH, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/PetApi.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/PetApi.java index 6e44289f45e0..b5ff30e3cf28 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/PetApi.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/PetApi.java @@ -91,12 +91,12 @@ public ResponseEntity addPetWithHttpInfo(Pet body) throws RestClientExcept final String[] contentTypes = { "application/json", "application/xml" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Deletes a pet @@ -145,12 +145,12 @@ public ResponseEntity deletePetWithHttpInfo(Long petId, String apiKey) thr final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Finds Pets by status @@ -196,12 +196,12 @@ public ResponseEntity> findPetsByStatusWithHttpInfo(List statu }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference> returnType = new ParameterizedTypeReference>() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Finds Pets by tags @@ -249,12 +249,12 @@ public ResponseEntity> findPetsByTagsWithHttpInfo(Set tags) thr }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference> returnType = new ParameterizedTypeReference>() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Find pet by ID @@ -303,12 +303,12 @@ public ResponseEntity getPetByIdWithHttpInfo(Long petId) throws RestClientE }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "api_key" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Update an existing pet @@ -355,12 +355,12 @@ public ResponseEntity updatePetWithHttpInfo(Pet body) throws RestClientExc final String[] contentTypes = { "application/json", "application/xml" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Updates a pet in the store with form data @@ -413,12 +413,12 @@ public ResponseEntity updatePetWithFormWithHttpInfo(Long petId, String nam final String[] contentTypes = { "application/x-www-form-urlencoded" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * uploads an image @@ -474,12 +474,12 @@ public ResponseEntity uploadFileWithHttpInfo(Long petId, Strin final String[] contentTypes = { "multipart/form-data" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * uploads an image (required) @@ -540,11 +540,11 @@ public ResponseEntity uploadFileWithRequiredFileWithHttpInfo(L final String[] contentTypes = { "multipart/form-data" }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "petstore_auth" }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/StoreApi.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/StoreApi.java index 1f1cbc751efe..63aa265f38e4 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/StoreApi.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/StoreApi.java @@ -89,12 +89,12 @@ public ResponseEntity deleteOrderWithHttpInfo(String orderId) throws RestC final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Returns pet inventories by status @@ -129,12 +129,12 @@ public ResponseEntity> getInventoryWithHttpInfo() throws Re }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { "api_key" }; ParameterizedTypeReference> returnType = new ParameterizedTypeReference>() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Find purchase order by ID @@ -183,12 +183,12 @@ public ResponseEntity getOrderByIdWithHttpInfo(Long orderId) throws RestC }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Place an order for a pet @@ -232,11 +232,11 @@ public ResponseEntity placeOrderWithHttpInfo(Order body) throws RestClien }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/UserApi.java b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/UserApi.java index 35f6e6609633..46be8cbbd613 100644 --- a/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/UserApi.java +++ b/samples/client/petstore/java/resttemplate/src/main/java/org/openapitools/client/api/UserApi.java @@ -84,12 +84,12 @@ public ResponseEntity createUserWithHttpInfo(User body) throws RestClientE final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Creates list of users with given input array @@ -128,12 +128,12 @@ public ResponseEntity createUsersWithArrayInputWithHttpInfo(List bod final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Creates list of users with given input array @@ -172,12 +172,12 @@ public ResponseEntity createUsersWithListInputWithHttpInfo(List body final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Delete user @@ -221,12 +221,12 @@ public ResponseEntity deleteUserWithHttpInfo(String username) throws RestC final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.DELETE, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Get user by user name @@ -275,12 +275,12 @@ public ResponseEntity getUserByNameWithHttpInfo(String username) throws Re }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Logs user into the system @@ -334,12 +334,12 @@ public ResponseEntity loginUserWithHttpInfo(String username, String pass }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Logs out current logged in user session @@ -371,12 +371,12 @@ public ResponseEntity logoutUserWithHttpInfo() throws RestClientException final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.GET, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } /** * Updated user @@ -427,11 +427,11 @@ public ResponseEntity updateUserWithHttpInfo(String username, User body) t final String[] localVarAccepts = { }; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); final String[] contentTypes = { }; - final MediaType contentType = apiClient.selectHeaderContentType(contentTypes); + final MediaType localVarContentType = apiClient.selectHeaderContentType(contentTypes); String[] authNames = new String[] { }; ParameterizedTypeReference returnType = new ParameterizedTypeReference() {}; - return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, contentType, authNames, returnType); + return apiClient.invokeAPI(path, HttpMethod.PUT, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, authNames, returnType); } } diff --git a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES index fda1dc9138c5..dcbafb2b3197 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES +++ b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES @@ -55,6 +55,7 @@ docs/Model/SpecialModelName.md docs/Model/Tag.md docs/Model/User.md git_push.sh +lib/ApiException.php lib/Api/AnotherFakeApi.php lib/Api/DefaultApi.php lib/Api/FakeApi.php @@ -62,7 +63,6 @@ lib/Api/FakeClassnameTags123Api.php lib/Api/PetApi.php lib/Api/StoreApi.php lib/Api/UserApi.php -lib/ApiException.php lib/Configuration.php lib/HeaderSelector.php lib/Model/AdditionalPropertiesClass.php diff --git a/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist b/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist index 3dd90bbe32c9..afbe167922d2 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist +++ b/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist @@ -13,8 +13,8 @@ - ./lib/Api - ./lib/Model + ./lib\/Api + ./lib\/Model diff --git a/samples/client/petstore/powershell/README.md b/samples/client/petstore/powershell/README.md index d394a82a0e91..45adbebb0967 100644 --- a/samples/client/petstore/powershell/README.md +++ b/samples/client/petstore/powershell/README.md @@ -79,12 +79,12 @@ Class | Method | HTTP request | Description ## Documentation for Models - - [PSPetstore/Model.ApiResponse](docs/ApiResponse.md) - - [PSPetstore/Model.Category](docs/Category.md) - - [PSPetstore/Model.Order](docs/Order.md) - - [PSPetstore/Model.Pet](docs/Pet.md) - - [PSPetstore/Model.Tag](docs/Tag.md) - - [PSPetstore/Model.User](docs/User.md) + - [PSPetstore\Model.ApiResponse](docs/ApiResponse.md) + - [PSPetstore\Model.Category](docs/Category.md) + - [PSPetstore\Model.Order](docs/Order.md) + - [PSPetstore\Model.Pet](docs/Pet.md) + - [PSPetstore\Model.Tag](docs/Tag.md) + - [PSPetstore\Model.User](docs/User.md) ## Documentation for Authorization diff --git a/samples/client/petstore/powershell/docs/PSPetApi.md b/samples/client/petstore/powershell/docs/PSPetApi.md index 5b8c2a0f2e3e..af5ef7d0dede 100644 --- a/samples/client/petstore/powershell/docs/PSPetApi.md +++ b/samples/client/petstore/powershell/docs/PSPetApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore/Api.PSPetApi +# PSPetstore.PSPetstore\Api.PSPetApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/powershell/docs/PSStoreApi.md b/samples/client/petstore/powershell/docs/PSStoreApi.md index 33b3541ced6c..2ae1104846c5 100644 --- a/samples/client/petstore/powershell/docs/PSStoreApi.md +++ b/samples/client/petstore/powershell/docs/PSStoreApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore/Api.PSStoreApi +# PSPetstore.PSPetstore\Api.PSStoreApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/powershell/docs/PSUserApi.md b/samples/client/petstore/powershell/docs/PSUserApi.md index f008e292f2cf..0288084bf1f4 100644 --- a/samples/client/petstore/powershell/docs/PSUserApi.md +++ b/samples/client/petstore/powershell/docs/PSUserApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore/Api.PSUserApi +# PSPetstore.PSPetstore\Api.PSUserApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts index 72152fe04620..dbb703aad5ee 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts @@ -51,6 +51,7 @@ export interface Capitalization { sCAETHFlowPoints?: string; /** * Name of the pet + * @type {string} * @memberof Capitalization */ diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md index 31cdc5ce99bf..b4a60640c2e6 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md @@ -64,94 +64,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc/DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc\AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc\DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc\FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc\FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc\FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc\FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc\FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc\FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc\FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc\FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc\FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc\FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc\FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc\FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc\FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc\FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc\FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc\FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc\PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc\PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc\PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc\PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc\PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc\PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc\PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc\PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc\PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc\StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc\StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc\StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc\StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc\UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc\UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc\UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc\UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc\UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc\UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc\UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc\UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc/AdditionalPropertiesClass.md) - - [Animal](doc/Animal.md) - - [ApiResponse](doc/ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc/ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc/ArrayOfNumberOnly.md) - - [ArrayTest](doc/ArrayTest.md) - - [Capitalization](doc/Capitalization.md) - - [Cat](doc/Cat.md) - - [CatAllOf](doc/CatAllOf.md) - - [Category](doc/Category.md) - - [ClassModel](doc/ClassModel.md) - - [Dog](doc/Dog.md) - - [DogAllOf](doc/DogAllOf.md) - - [EnumArrays](doc/EnumArrays.md) - - [EnumTest](doc/EnumTest.md) - - [FileSchemaTestClass](doc/FileSchemaTestClass.md) - - [Foo](doc/Foo.md) - - [FormatTest](doc/FormatTest.md) - - [HasOnlyReadOnly](doc/HasOnlyReadOnly.md) - - [HealthCheckResult](doc/HealthCheckResult.md) - - [InlineResponseDefault](doc/InlineResponseDefault.md) - - [MapTest](doc/MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc/MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc/Model200Response.md) - - [ModelClient](doc/ModelClient.md) - - [ModelEnumClass](doc/ModelEnumClass.md) - - [ModelFile](doc/ModelFile.md) - - [ModelList](doc/ModelList.md) - - [ModelReturn](doc/ModelReturn.md) - - [Name](doc/Name.md) - - [NullableClass](doc/NullableClass.md) - - [NumberOnly](doc/NumberOnly.md) - - [Order](doc/Order.md) - - [OuterComposite](doc/OuterComposite.md) - - [OuterEnum](doc/OuterEnum.md) - - [OuterEnumDefaultValue](doc/OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc/OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc/OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc/OuterObjectWithEnumProperty.md) - - [Pet](doc/Pet.md) - - [ReadOnlyFirst](doc/ReadOnlyFirst.md) - - [SpecialModelName](doc/SpecialModelName.md) - - [Tag](doc/Tag.md) - - [User](doc/User.md) + - [AdditionalPropertiesClass](doc\AdditionalPropertiesClass.md) + - [Animal](doc\Animal.md) + - [ApiResponse](doc\ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc\ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc\ArrayOfNumberOnly.md) + - [ArrayTest](doc\ArrayTest.md) + - [Capitalization](doc\Capitalization.md) + - [Cat](doc\Cat.md) + - [CatAllOf](doc\CatAllOf.md) + - [Category](doc\Category.md) + - [ClassModel](doc\ClassModel.md) + - [Dog](doc\Dog.md) + - [DogAllOf](doc\DogAllOf.md) + - [EnumArrays](doc\EnumArrays.md) + - [EnumTest](doc\EnumTest.md) + - [FileSchemaTestClass](doc\FileSchemaTestClass.md) + - [Foo](doc\Foo.md) + - [FormatTest](doc\FormatTest.md) + - [HasOnlyReadOnly](doc\HasOnlyReadOnly.md) + - [HealthCheckResult](doc\HealthCheckResult.md) + - [InlineResponseDefault](doc\InlineResponseDefault.md) + - [MapTest](doc\MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc\MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc\Model200Response.md) + - [ModelClient](doc\ModelClient.md) + - [ModelEnumClass](doc\ModelEnumClass.md) + - [ModelFile](doc\ModelFile.md) + - [ModelList](doc\ModelList.md) + - [ModelReturn](doc\ModelReturn.md) + - [Name](doc\Name.md) + - [NullableClass](doc\NullableClass.md) + - [NumberOnly](doc\NumberOnly.md) + - [Order](doc\Order.md) + - [OuterComposite](doc\OuterComposite.md) + - [OuterEnum](doc\OuterEnum.md) + - [OuterEnumDefaultValue](doc\OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc\OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc\OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc\OuterObjectWithEnumProperty.md) + - [Pet](doc\Pet.md) + - [ReadOnlyFirst](doc\ReadOnlyFirst.md) + - [SpecialModelName](doc\SpecialModelName.md) + - [Tag](doc\Tag.md) + - [User](doc\User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md index ac04fa9f72b0..b20e32f01416 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md @@ -58,36 +58,36 @@ All URIs are relative to *http://petstore.swagger.io/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*PetApi* | [**addPet**](doc\PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc\PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc\PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc\PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc\PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc\PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc\PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc\PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*StoreApi* | [**deleteOrder**](doc\StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc\StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc\StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc\StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc\UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc\UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc\UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc\UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc\UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc\UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc\UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc\UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [ApiResponse](doc/ApiResponse.md) - - [Category](doc/Category.md) - - [Order](doc/Order.md) - - [Pet](doc/Pet.md) - - [Tag](doc/Tag.md) - - [User](doc/User.md) + - [ApiResponse](doc\ApiResponse.md) + - [Category](doc\Category.md) + - [Order](doc\Order.md) + - [Pet](doc\Pet.md) + - [Tag](doc\Tag.md) + - [User](doc\User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md index 22789ae77619..a516da3036f6 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md @@ -58,94 +58,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc/DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc\AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc\DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc\FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc\FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc\FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc\FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc\FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc\FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc\FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc\FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc\FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc\FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc\FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc\FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc\FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc\FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc\FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc\FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc\PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc\PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc\PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc\PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc\PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc\PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc\PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc\PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc\PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc\StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc\StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc\StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc\StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc\UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc\UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc\UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc\UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc\UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc\UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc\UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc\UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc/AdditionalPropertiesClass.md) - - [Animal](doc/Animal.md) - - [ApiResponse](doc/ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc/ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc/ArrayOfNumberOnly.md) - - [ArrayTest](doc/ArrayTest.md) - - [Capitalization](doc/Capitalization.md) - - [Cat](doc/Cat.md) - - [CatAllOf](doc/CatAllOf.md) - - [Category](doc/Category.md) - - [ClassModel](doc/ClassModel.md) - - [Dog](doc/Dog.md) - - [DogAllOf](doc/DogAllOf.md) - - [EnumArrays](doc/EnumArrays.md) - - [EnumTest](doc/EnumTest.md) - - [FileSchemaTestClass](doc/FileSchemaTestClass.md) - - [Foo](doc/Foo.md) - - [FormatTest](doc/FormatTest.md) - - [HasOnlyReadOnly](doc/HasOnlyReadOnly.md) - - [HealthCheckResult](doc/HealthCheckResult.md) - - [InlineResponseDefault](doc/InlineResponseDefault.md) - - [MapTest](doc/MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc/MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc/Model200Response.md) - - [ModelClient](doc/ModelClient.md) - - [ModelEnumClass](doc/ModelEnumClass.md) - - [ModelFile](doc/ModelFile.md) - - [ModelList](doc/ModelList.md) - - [ModelReturn](doc/ModelReturn.md) - - [Name](doc/Name.md) - - [NullableClass](doc/NullableClass.md) - - [NumberOnly](doc/NumberOnly.md) - - [Order](doc/Order.md) - - [OuterComposite](doc/OuterComposite.md) - - [OuterEnum](doc/OuterEnum.md) - - [OuterEnumDefaultValue](doc/OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc/OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc/OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc/OuterObjectWithEnumProperty.md) - - [Pet](doc/Pet.md) - - [ReadOnlyFirst](doc/ReadOnlyFirst.md) - - [SpecialModelName](doc/SpecialModelName.md) - - [Tag](doc/Tag.md) - - [User](doc/User.md) + - [AdditionalPropertiesClass](doc\AdditionalPropertiesClass.md) + - [Animal](doc\Animal.md) + - [ApiResponse](doc\ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc\ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc\ArrayOfNumberOnly.md) + - [ArrayTest](doc\ArrayTest.md) + - [Capitalization](doc\Capitalization.md) + - [Cat](doc\Cat.md) + - [CatAllOf](doc\CatAllOf.md) + - [Category](doc\Category.md) + - [ClassModel](doc\ClassModel.md) + - [Dog](doc\Dog.md) + - [DogAllOf](doc\DogAllOf.md) + - [EnumArrays](doc\EnumArrays.md) + - [EnumTest](doc\EnumTest.md) + - [FileSchemaTestClass](doc\FileSchemaTestClass.md) + - [Foo](doc\Foo.md) + - [FormatTest](doc\FormatTest.md) + - [HasOnlyReadOnly](doc\HasOnlyReadOnly.md) + - [HealthCheckResult](doc\HealthCheckResult.md) + - [InlineResponseDefault](doc\InlineResponseDefault.md) + - [MapTest](doc\MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc\MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc\Model200Response.md) + - [ModelClient](doc\ModelClient.md) + - [ModelEnumClass](doc\ModelEnumClass.md) + - [ModelFile](doc\ModelFile.md) + - [ModelList](doc\ModelList.md) + - [ModelReturn](doc\ModelReturn.md) + - [Name](doc\Name.md) + - [NullableClass](doc\NullableClass.md) + - [NumberOnly](doc\NumberOnly.md) + - [Order](doc\Order.md) + - [OuterComposite](doc\OuterComposite.md) + - [OuterEnum](doc\OuterEnum.md) + - [OuterEnumDefaultValue](doc\OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc\OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc\OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc\OuterObjectWithEnumProperty.md) + - [Pet](doc\Pet.md) + - [ReadOnlyFirst](doc\ReadOnlyFirst.md) + - [SpecialModelName](doc\SpecialModelName.md) + - [Tag](doc\Tag.md) + - [User](doc\User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md b/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md index 99bd229f3c50..18de35ccec0d 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md @@ -60,36 +60,36 @@ All URIs are relative to *http://petstore.swagger.io/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [ApiResponse](doc//ApiResponse.md) - - [Category](doc//Category.md) - - [Order](doc//Order.md) - - [Pet](doc//Pet.md) - - [Tag](doc//Tag.md) - - [User](doc//User.md) + - [ApiResponse](doc\/ApiResponse.md) + - [Category](doc\/Category.md) + - [Order](doc\/Order.md) + - [Pet](doc\/Pet.md) + - [Tag](doc\/Tag.md) + - [User](doc\/User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md index fe39c2f21264..9b39a96c6b70 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md @@ -58,94 +58,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc//AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc//DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc//FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc//FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc//FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc//FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc//FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc//FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc//FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc//FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc//FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc//FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc//FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc//FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc//FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc//FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc//FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc//FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc//FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc//PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc\/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc\/DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc\/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc\/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc\/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc\/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc\/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc\/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc\/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc\/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc\/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc\/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc\/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc\/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc\/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc\/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc\/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc\/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc\/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc//AdditionalPropertiesClass.md) - - [Animal](doc//Animal.md) - - [ApiResponse](doc//ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc//ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc//ArrayOfNumberOnly.md) - - [ArrayTest](doc//ArrayTest.md) - - [Capitalization](doc//Capitalization.md) - - [Cat](doc//Cat.md) - - [CatAllOf](doc//CatAllOf.md) - - [Category](doc//Category.md) - - [ClassModel](doc//ClassModel.md) - - [Dog](doc//Dog.md) - - [DogAllOf](doc//DogAllOf.md) - - [EnumArrays](doc//EnumArrays.md) - - [EnumClass](doc//EnumClass.md) - - [EnumTest](doc//EnumTest.md) - - [FileSchemaTestClass](doc//FileSchemaTestClass.md) - - [Foo](doc//Foo.md) - - [FormatTest](doc//FormatTest.md) - - [HasOnlyReadOnly](doc//HasOnlyReadOnly.md) - - [HealthCheckResult](doc//HealthCheckResult.md) - - [InlineResponseDefault](doc//InlineResponseDefault.md) - - [MapTest](doc//MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc//MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc//Model200Response.md) - - [ModelClient](doc//ModelClient.md) - - [ModelFile](doc//ModelFile.md) - - [ModelList](doc//ModelList.md) - - [ModelReturn](doc//ModelReturn.md) - - [Name](doc//Name.md) - - [NullableClass](doc//NullableClass.md) - - [NumberOnly](doc//NumberOnly.md) - - [Order](doc//Order.md) - - [OuterComposite](doc//OuterComposite.md) - - [OuterEnum](doc//OuterEnum.md) - - [OuterEnumDefaultValue](doc//OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc//OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc//OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc//OuterObjectWithEnumProperty.md) - - [Pet](doc//Pet.md) - - [ReadOnlyFirst](doc//ReadOnlyFirst.md) - - [SpecialModelName](doc//SpecialModelName.md) - - [Tag](doc//Tag.md) - - [User](doc//User.md) + - [AdditionalPropertiesClass](doc\/AdditionalPropertiesClass.md) + - [Animal](doc\/Animal.md) + - [ApiResponse](doc\/ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc\/ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc\/ArrayOfNumberOnly.md) + - [ArrayTest](doc\/ArrayTest.md) + - [Capitalization](doc\/Capitalization.md) + - [Cat](doc\/Cat.md) + - [CatAllOf](doc\/CatAllOf.md) + - [Category](doc\/Category.md) + - [ClassModel](doc\/ClassModel.md) + - [Dog](doc\/Dog.md) + - [DogAllOf](doc\/DogAllOf.md) + - [EnumArrays](doc\/EnumArrays.md) + - [EnumClass](doc\/EnumClass.md) + - [EnumTest](doc\/EnumTest.md) + - [FileSchemaTestClass](doc\/FileSchemaTestClass.md) + - [Foo](doc\/Foo.md) + - [FormatTest](doc\/FormatTest.md) + - [HasOnlyReadOnly](doc\/HasOnlyReadOnly.md) + - [HealthCheckResult](doc\/HealthCheckResult.md) + - [InlineResponseDefault](doc\/InlineResponseDefault.md) + - [MapTest](doc\/MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc\/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc\/Model200Response.md) + - [ModelClient](doc\/ModelClient.md) + - [ModelFile](doc\/ModelFile.md) + - [ModelList](doc\/ModelList.md) + - [ModelReturn](doc\/ModelReturn.md) + - [Name](doc\/Name.md) + - [NullableClass](doc\/NullableClass.md) + - [NumberOnly](doc\/NumberOnly.md) + - [Order](doc\/Order.md) + - [OuterComposite](doc\/OuterComposite.md) + - [OuterEnum](doc\/OuterEnum.md) + - [OuterEnumDefaultValue](doc\/OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc\/OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc\/OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc\/OuterObjectWithEnumProperty.md) + - [Pet](doc\/Pet.md) + - [ReadOnlyFirst](doc\/ReadOnlyFirst.md) + - [SpecialModelName](doc\/SpecialModelName.md) + - [Tag](doc\/Tag.md) + - [User](doc\/User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md index fe39c2f21264..9b39a96c6b70 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md @@ -58,94 +58,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc//AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc//DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc//FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc//FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc//FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc//FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc//FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc//FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc//FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc//FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc//FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc//FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc//FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc//FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc//FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc//FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc//FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc//FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc//FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc//PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc\/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc\/DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc\/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc\/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc\/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc\/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc\/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc\/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc\/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc\/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc\/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc\/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc\/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc\/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc\/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc\/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc\/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc\/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc\/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc//AdditionalPropertiesClass.md) - - [Animal](doc//Animal.md) - - [ApiResponse](doc//ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc//ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc//ArrayOfNumberOnly.md) - - [ArrayTest](doc//ArrayTest.md) - - [Capitalization](doc//Capitalization.md) - - [Cat](doc//Cat.md) - - [CatAllOf](doc//CatAllOf.md) - - [Category](doc//Category.md) - - [ClassModel](doc//ClassModel.md) - - [Dog](doc//Dog.md) - - [DogAllOf](doc//DogAllOf.md) - - [EnumArrays](doc//EnumArrays.md) - - [EnumClass](doc//EnumClass.md) - - [EnumTest](doc//EnumTest.md) - - [FileSchemaTestClass](doc//FileSchemaTestClass.md) - - [Foo](doc//Foo.md) - - [FormatTest](doc//FormatTest.md) - - [HasOnlyReadOnly](doc//HasOnlyReadOnly.md) - - [HealthCheckResult](doc//HealthCheckResult.md) - - [InlineResponseDefault](doc//InlineResponseDefault.md) - - [MapTest](doc//MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc//MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc//Model200Response.md) - - [ModelClient](doc//ModelClient.md) - - [ModelFile](doc//ModelFile.md) - - [ModelList](doc//ModelList.md) - - [ModelReturn](doc//ModelReturn.md) - - [Name](doc//Name.md) - - [NullableClass](doc//NullableClass.md) - - [NumberOnly](doc//NumberOnly.md) - - [Order](doc//Order.md) - - [OuterComposite](doc//OuterComposite.md) - - [OuterEnum](doc//OuterEnum.md) - - [OuterEnumDefaultValue](doc//OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc//OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc//OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc//OuterObjectWithEnumProperty.md) - - [Pet](doc//Pet.md) - - [ReadOnlyFirst](doc//ReadOnlyFirst.md) - - [SpecialModelName](doc//SpecialModelName.md) - - [Tag](doc//Tag.md) - - [User](doc//User.md) + - [AdditionalPropertiesClass](doc\/AdditionalPropertiesClass.md) + - [Animal](doc\/Animal.md) + - [ApiResponse](doc\/ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc\/ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc\/ArrayOfNumberOnly.md) + - [ArrayTest](doc\/ArrayTest.md) + - [Capitalization](doc\/Capitalization.md) + - [Cat](doc\/Cat.md) + - [CatAllOf](doc\/CatAllOf.md) + - [Category](doc\/Category.md) + - [ClassModel](doc\/ClassModel.md) + - [Dog](doc\/Dog.md) + - [DogAllOf](doc\/DogAllOf.md) + - [EnumArrays](doc\/EnumArrays.md) + - [EnumClass](doc\/EnumClass.md) + - [EnumTest](doc\/EnumTest.md) + - [FileSchemaTestClass](doc\/FileSchemaTestClass.md) + - [Foo](doc\/Foo.md) + - [FormatTest](doc\/FormatTest.md) + - [HasOnlyReadOnly](doc\/HasOnlyReadOnly.md) + - [HealthCheckResult](doc\/HealthCheckResult.md) + - [InlineResponseDefault](doc\/InlineResponseDefault.md) + - [MapTest](doc\/MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc\/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc\/Model200Response.md) + - [ModelClient](doc\/ModelClient.md) + - [ModelFile](doc\/ModelFile.md) + - [ModelList](doc\/ModelList.md) + - [ModelReturn](doc\/ModelReturn.md) + - [Name](doc\/Name.md) + - [NullableClass](doc\/NullableClass.md) + - [NumberOnly](doc\/NumberOnly.md) + - [Order](doc\/Order.md) + - [OuterComposite](doc\/OuterComposite.md) + - [OuterEnum](doc\/OuterEnum.md) + - [OuterEnumDefaultValue](doc\/OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc\/OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc\/OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc\/OuterObjectWithEnumProperty.md) + - [Pet](doc\/Pet.md) + - [ReadOnlyFirst](doc\/ReadOnlyFirst.md) + - [SpecialModelName](doc\/SpecialModelName.md) + - [Tag](doc\/Tag.md) + - [User](doc\/User.md) ## Documentation For Authorization diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs index d58ff968d3c5..04aa969cb957 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; + exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs index 79c62f5c672d..cb4da58b6105 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs index 17fdac817ad8..c4f77f108acb 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; + exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs index d58ff968d3c5..04aa969cb957 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; + exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs index 79c62f5c672d..cb4da58b6105 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs index 17fdac817ad8..c4f77f108acb 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; + exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs index 3162f82261ba..c99e55e5f2d4 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -48,7 +48,7 @@ public virtual IActionResult AddPet([FromBody]Pet pet) //TODO: Uncomment the next line to return response 405 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(405); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -97,7 +97,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -161,7 +161,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -197,7 +197,7 @@ public virtual IActionResult UpdatePet([FromBody]Pet pet) //TODO: Uncomment the next line to return response 405 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(405); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -247,7 +247,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; + exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs index 431fccf19057..881cd5107a94 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -128,7 +128,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order order) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs index 406c969ffb24..327c18b86878 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -134,7 +134,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; + exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs index 68722c6b4cb0..6f7fae5e120b 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; + exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs index 4503e177b9c9..213f6a8479e4 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs index 06ca8107d072..b4752ae73d15 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; + exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/php-slim4/README.md b/samples/server/petstore/php-slim4/README.md index 3f5c820198c5..78d2322ebb72 100644 --- a/samples/server/petstore/php-slim4/README.md +++ b/samples/server/petstore/php-slim4/README.md @@ -168,10 +168,10 @@ Class | Method | HTTP request | Description ## Authentication ### Security schema `api_key` -> Important! To make ApiKey authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class. +> Important! To make ApiKey authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib\/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class. ### Security schema `petstore_auth` -> Important! To make OAuth authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\OAuthAuthenticator](./src/Auth/OAuthAuthenticator.php) class. +> Important! To make OAuth authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib\/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\OAuthAuthenticator](./src/Auth/OAuthAuthenticator.php) class. Scope list: * `write:pets` - modify pets in your account diff --git a/samples/server/petstore/php-slim4/phpunit.xml.dist b/samples/server/petstore/php-slim4/phpunit.xml.dist index 3efb4b45f4aa..10eaa6529577 100644 --- a/samples/server/petstore/php-slim4/phpunit.xml.dist +++ b/samples/server/petstore/php-slim4/phpunit.xml.dist @@ -21,9 +21,9 @@ - ./lib/Api + ./lib\/Api ./lib/BaseModel.php - ./lib/Model + ./lib\/Model diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist b/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist index e754829e6283..40d39d2f5a8c 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist @@ -14,9 +14,9 @@ - ././Api - ././Model - ././Controller + ./.\/Api + ./.\/Model + ./.\/Controller diff --git a/samples/server/petstore/python-aiohttp-srclayout/setup.py b/samples/server/petstore/python-aiohttp-srclayout/setup.py index 6f62aec44149..600b620958c6 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/setup.py +++ b/samples/server/petstore/python-aiohttp-srclayout/setup.py @@ -27,9 +27,9 @@ url="", keywords=["OpenAPI", "OpenAPI Petstore"], install_requires=REQUIRES, - packages=find_packages("src/"), - package_dir={"": "src/"}, - package_data={'': ['src//openapi/openapi.yaml']}, + packages=find_packages("src\"), + package_dir={"": "src\"}, + package_data={'': ['src\/openapi/openapi.yaml']}, include_package_data=True, entry_points={ 'console_scripts': ['openapi_server=openapi_server.__main__:main']}, diff --git a/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py b/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py index 578bf18e982c..63ba2f413d1b 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py +++ b/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py @@ -12,7 +12,7 @@ def client(loop, aiohttp_client): "swagger_ui": True } specification_dir = os.path.join(os.path.dirname(__file__), '..', - "src/", + "src\", 'openapi_server', 'openapi') app = connexion.AioHttpApp(__name__, specification_dir=specification_dir, diff --git a/samples/server/petstore/python-aiohttp-srclayout/tox.ini b/samples/server/petstore/python-aiohttp-srclayout/tox.ini index 25d12bb84c0b..3d847999b3c9 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tox.ini +++ b/samples/server/petstore/python-aiohttp-srclayout/tox.ini @@ -8,4 +8,4 @@ deps=-r{toxinidir}/requirements.txt {toxinidir} commands= - pytest --cov=src/openapi_server + pytest --cov=src\openapi_server From 32d5900611b808228bcbbc296521f8d1c22e1f11 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 27 May 2021 10:40:32 +0800 Subject: [PATCH 161/186] update samples, docs --- docs/generators/fsharp-functions.md | 2 +- docs/generators/fsharp-giraffe-server.md | 2 +- docs/generators/java-inflector.md | 2 +- docs/generators/jaxrs-cxf-client.md | 2 +- docs/generators/swift5.md | 4 +- .../petstore/R/.openapi-generator/FILES | 2 +- .../.openapi-generator/FILES | 2 +- .../php/OpenAPIClient-php/phpunit.xml.dist | 4 +- samples/client/petstore/powershell/README.md | 12 +- .../petstore/powershell/docs/PSPetApi.md | 2 +- .../petstore/powershell/docs/PSStoreApi.md | 2 +- .../petstore/powershell/docs/PSUserApi.md | 2 +- .../default-v3.0/models/Capitalization.ts | 1 - .../petstore_client_lib_fake/README.md | 168 +++++++++--------- .../dart-dio/petstore_client_lib/README.md | 52 +++--- .../petstore_client_lib_fake/README.md | 168 +++++++++--------- .../dart2/petstore_client_lib/README.md | 52 +++--- .../dart2/petstore_client_lib_fake/README.md | 168 +++++++++--------- .../README.md | 168 +++++++++--------- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 12 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- samples/server/petstore/php-slim4/README.md | 4 +- .../petstore/php-slim4/phpunit.xml.dist | 4 +- .../SymfonyBundle-php/phpunit.xml.dist | 6 +- .../python-aiohttp-srclayout/setup.py | 6 +- .../tests/conftest.py | 2 +- .../petstore/python-aiohttp-srclayout/tox.ini | 2 +- 37 files changed, 449 insertions(+), 450 deletions(-) diff --git a/docs/generators/fsharp-functions.md b/docs/generators/fsharp-functions.md index 2a81000a7fb0..bb16f39fa776 100644 --- a/docs/generators/fsharp-functions.md +++ b/docs/generators/fsharp-functions.md @@ -22,7 +22,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |OpenAPI\src| +|sourceFolder|source folder for generated code| |OpenAPI/src| ## IMPORT MAPPING diff --git a/docs/generators/fsharp-giraffe-server.md b/docs/generators/fsharp-giraffe-server.md index 66150dbec0de..f374168aa71f 100644 --- a/docs/generators/fsharp-giraffe-server.md +++ b/docs/generators/fsharp-giraffe-server.md @@ -19,7 +19,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |packageVersion|F# package version.| |1.0.0| |returnICollection|Return ICollection<T> instead of the concrete type.| |false| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |OpenAPI\src| +|sourceFolder|source folder for generated code| |OpenAPI/src| |useCollection|Deserialize array types to Collection<T> instead of List<T>.| |false| |useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false| |useSwashbuckle|Uses the Swashbuckle.AspNetCore NuGet package for documentation.| |false| diff --git a/docs/generators/java-inflector.md b/docs/generators/java-inflector.md index 131b09f3f90e..373bc61861b2 100644 --- a/docs/generators/java-inflector.md +++ b/docs/generators/java-inflector.md @@ -48,7 +48,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |snapshotVersion|Uses a SNAPSHOT version.|
    **true**
    Use a SnapShot Version
    **false**
    Use a Release Version
    |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |src\gen\java| +|sourceFolder|source folder for generated code| |src/gen/java| |withXml|whether to include support for application/xml content type and include XML annotations in the model (works with libraries that provide support for JSON and XML)| |false| ## IMPORT MAPPING diff --git a/docs/generators/jaxrs-cxf-client.md b/docs/generators/jaxrs-cxf-client.md index 25d03ea104b9..fb3547c920d8 100644 --- a/docs/generators/jaxrs-cxf-client.md +++ b/docs/generators/jaxrs-cxf-client.md @@ -48,7 +48,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |snapshotVersion|Uses a SNAPSHOT version.|
    **true**
    Use a SnapShot Version
    **false**
    Use a Release Version
    |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |src\gen\java| +|sourceFolder|source folder for generated code| |src/gen/java| |useBeanValidation|Use BeanValidation API annotations| |false| |useGenericResponse|Use generic response| |false| |useGzipFeatureForTests|Use Gzip Feature for tests| |false| diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index 2846d6de2b95..bace7f1f0492 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -36,10 +36,10 @@ These options may be applied as additional-properties (cli) or configOptions (pl |responseAs|Optionally use libraries to manage response. Currently PromiseKit, RxSwift, Result, Combine are available.| |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|swiftPackagePath|Set a custom source path instead of OpenAPIClient\Classes\OpenAPIs.| |null| +|swiftPackagePath|Set a custom source path instead of OpenAPIClient/Classes/OpenAPIs.| |null| |swiftUseApiNamespace|Flag to make all the API classes inner-class of {{projectName}}API| |null| |useBacktickEscapes|Escape reserved words using backticks (default: false)| |false| -|useSPMFileStructure|Use SPM file structure and set the source path to Sources\{{projectName}} (default: false).| |null| +|useSPMFileStructure|Use SPM file structure and set the source path to Sources/{{projectName}} (default: false).| |null| ## IMPORT MAPPING diff --git a/samples/client/petstore/R/.openapi-generator/FILES b/samples/client/petstore/R/.openapi-generator/FILES index 5ec829dd19d5..9385728f0103 100644 --- a/samples/client/petstore/R/.openapi-generator/FILES +++ b/samples/client/petstore/R/.openapi-generator/FILES @@ -3,7 +3,6 @@ .travis.yml DESCRIPTION NAMESPACE -README.md R/api_client.R R/api_response.R R/category.R @@ -15,6 +14,7 @@ R/store_api.R R/tag.R R/user.R R/user_api.R +README.md docs/Category.md docs/ModelApiResponse.md docs/Order.md diff --git a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES index dcbafb2b3197..fda1dc9138c5 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES +++ b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES @@ -55,7 +55,6 @@ docs/Model/SpecialModelName.md docs/Model/Tag.md docs/Model/User.md git_push.sh -lib/ApiException.php lib/Api/AnotherFakeApi.php lib/Api/DefaultApi.php lib/Api/FakeApi.php @@ -63,6 +62,7 @@ lib/Api/FakeClassnameTags123Api.php lib/Api/PetApi.php lib/Api/StoreApi.php lib/Api/UserApi.php +lib/ApiException.php lib/Configuration.php lib/HeaderSelector.php lib/Model/AdditionalPropertiesClass.php diff --git a/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist b/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist index afbe167922d2..3dd90bbe32c9 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist +++ b/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist @@ -13,8 +13,8 @@ - ./lib\/Api - ./lib\/Model + ./lib/Api + ./lib/Model diff --git a/samples/client/petstore/powershell/README.md b/samples/client/petstore/powershell/README.md index 45adbebb0967..d394a82a0e91 100644 --- a/samples/client/petstore/powershell/README.md +++ b/samples/client/petstore/powershell/README.md @@ -79,12 +79,12 @@ Class | Method | HTTP request | Description ## Documentation for Models - - [PSPetstore\Model.ApiResponse](docs/ApiResponse.md) - - [PSPetstore\Model.Category](docs/Category.md) - - [PSPetstore\Model.Order](docs/Order.md) - - [PSPetstore\Model.Pet](docs/Pet.md) - - [PSPetstore\Model.Tag](docs/Tag.md) - - [PSPetstore\Model.User](docs/User.md) + - [PSPetstore/Model.ApiResponse](docs/ApiResponse.md) + - [PSPetstore/Model.Category](docs/Category.md) + - [PSPetstore/Model.Order](docs/Order.md) + - [PSPetstore/Model.Pet](docs/Pet.md) + - [PSPetstore/Model.Tag](docs/Tag.md) + - [PSPetstore/Model.User](docs/User.md) ## Documentation for Authorization diff --git a/samples/client/petstore/powershell/docs/PSPetApi.md b/samples/client/petstore/powershell/docs/PSPetApi.md index af5ef7d0dede..5b8c2a0f2e3e 100644 --- a/samples/client/petstore/powershell/docs/PSPetApi.md +++ b/samples/client/petstore/powershell/docs/PSPetApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore\Api.PSPetApi +# PSPetstore.PSPetstore/Api.PSPetApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/powershell/docs/PSStoreApi.md b/samples/client/petstore/powershell/docs/PSStoreApi.md index 2ae1104846c5..33b3541ced6c 100644 --- a/samples/client/petstore/powershell/docs/PSStoreApi.md +++ b/samples/client/petstore/powershell/docs/PSStoreApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore\Api.PSStoreApi +# PSPetstore.PSPetstore/Api.PSStoreApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/powershell/docs/PSUserApi.md b/samples/client/petstore/powershell/docs/PSUserApi.md index 0288084bf1f4..f008e292f2cf 100644 --- a/samples/client/petstore/powershell/docs/PSUserApi.md +++ b/samples/client/petstore/powershell/docs/PSUserApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore\Api.PSUserApi +# PSPetstore.PSPetstore/Api.PSUserApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts index dbb703aad5ee..72152fe04620 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts @@ -51,7 +51,6 @@ export interface Capitalization { sCAETHFlowPoints?: string; /** * Name of the pet - * @type {string} * @memberof Capitalization */ diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md index b4a60640c2e6..31cdc5ce99bf 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md @@ -64,94 +64,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc\AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc\DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc\FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc\FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc\FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc\FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc\FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc\FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc\FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc\FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc\FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc\FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc\FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc\FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc\FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc\FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc\FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc\FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc\PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc\PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc\PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc\PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc\PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc\PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc\PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc\PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc\PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc\StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc\StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc\StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc\StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc\UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc\UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc\UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc\UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc\UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc\UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc\UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc\UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc/DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc\AdditionalPropertiesClass.md) - - [Animal](doc\Animal.md) - - [ApiResponse](doc\ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc\ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc\ArrayOfNumberOnly.md) - - [ArrayTest](doc\ArrayTest.md) - - [Capitalization](doc\Capitalization.md) - - [Cat](doc\Cat.md) - - [CatAllOf](doc\CatAllOf.md) - - [Category](doc\Category.md) - - [ClassModel](doc\ClassModel.md) - - [Dog](doc\Dog.md) - - [DogAllOf](doc\DogAllOf.md) - - [EnumArrays](doc\EnumArrays.md) - - [EnumTest](doc\EnumTest.md) - - [FileSchemaTestClass](doc\FileSchemaTestClass.md) - - [Foo](doc\Foo.md) - - [FormatTest](doc\FormatTest.md) - - [HasOnlyReadOnly](doc\HasOnlyReadOnly.md) - - [HealthCheckResult](doc\HealthCheckResult.md) - - [InlineResponseDefault](doc\InlineResponseDefault.md) - - [MapTest](doc\MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc\MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc\Model200Response.md) - - [ModelClient](doc\ModelClient.md) - - [ModelEnumClass](doc\ModelEnumClass.md) - - [ModelFile](doc\ModelFile.md) - - [ModelList](doc\ModelList.md) - - [ModelReturn](doc\ModelReturn.md) - - [Name](doc\Name.md) - - [NullableClass](doc\NullableClass.md) - - [NumberOnly](doc\NumberOnly.md) - - [Order](doc\Order.md) - - [OuterComposite](doc\OuterComposite.md) - - [OuterEnum](doc\OuterEnum.md) - - [OuterEnumDefaultValue](doc\OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc\OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc\OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc\OuterObjectWithEnumProperty.md) - - [Pet](doc\Pet.md) - - [ReadOnlyFirst](doc\ReadOnlyFirst.md) - - [SpecialModelName](doc\SpecialModelName.md) - - [Tag](doc\Tag.md) - - [User](doc\User.md) + - [AdditionalPropertiesClass](doc/AdditionalPropertiesClass.md) + - [Animal](doc/Animal.md) + - [ApiResponse](doc/ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc/ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc/ArrayOfNumberOnly.md) + - [ArrayTest](doc/ArrayTest.md) + - [Capitalization](doc/Capitalization.md) + - [Cat](doc/Cat.md) + - [CatAllOf](doc/CatAllOf.md) + - [Category](doc/Category.md) + - [ClassModel](doc/ClassModel.md) + - [Dog](doc/Dog.md) + - [DogAllOf](doc/DogAllOf.md) + - [EnumArrays](doc/EnumArrays.md) + - [EnumTest](doc/EnumTest.md) + - [FileSchemaTestClass](doc/FileSchemaTestClass.md) + - [Foo](doc/Foo.md) + - [FormatTest](doc/FormatTest.md) + - [HasOnlyReadOnly](doc/HasOnlyReadOnly.md) + - [HealthCheckResult](doc/HealthCheckResult.md) + - [InlineResponseDefault](doc/InlineResponseDefault.md) + - [MapTest](doc/MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc/Model200Response.md) + - [ModelClient](doc/ModelClient.md) + - [ModelEnumClass](doc/ModelEnumClass.md) + - [ModelFile](doc/ModelFile.md) + - [ModelList](doc/ModelList.md) + - [ModelReturn](doc/ModelReturn.md) + - [Name](doc/Name.md) + - [NullableClass](doc/NullableClass.md) + - [NumberOnly](doc/NumberOnly.md) + - [Order](doc/Order.md) + - [OuterComposite](doc/OuterComposite.md) + - [OuterEnum](doc/OuterEnum.md) + - [OuterEnumDefaultValue](doc/OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc/OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc/OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc/OuterObjectWithEnumProperty.md) + - [Pet](doc/Pet.md) + - [ReadOnlyFirst](doc/ReadOnlyFirst.md) + - [SpecialModelName](doc/SpecialModelName.md) + - [Tag](doc/Tag.md) + - [User](doc/User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md index b20e32f01416..ac04fa9f72b0 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md @@ -58,36 +58,36 @@ All URIs are relative to *http://petstore.swagger.io/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*PetApi* | [**addPet**](doc\PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc\PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc\PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc\PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc\PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc\PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc\PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc\PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*StoreApi* | [**deleteOrder**](doc\StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc\StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc\StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc\StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc\UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc\UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc\UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc\UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc\UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc\UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc\UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc\UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [ApiResponse](doc\ApiResponse.md) - - [Category](doc\Category.md) - - [Order](doc\Order.md) - - [Pet](doc\Pet.md) - - [Tag](doc\Tag.md) - - [User](doc\User.md) + - [ApiResponse](doc/ApiResponse.md) + - [Category](doc/Category.md) + - [Order](doc/Order.md) + - [Pet](doc/Pet.md) + - [Tag](doc/Tag.md) + - [User](doc/User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md index a516da3036f6..22789ae77619 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md @@ -58,94 +58,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc\AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc\DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc\FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc\FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc\FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc\FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc\FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc\FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc\FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc\FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc\FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc\FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc\FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc\FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc\FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc\FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc\FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc\FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc\PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc\PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc\PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc\PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc\PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc\PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc\PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc\PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc\PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc\StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc\StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc\StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc\StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc\UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc\UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc\UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc\UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc\UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc\UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc\UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc\UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc/DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc\AdditionalPropertiesClass.md) - - [Animal](doc\Animal.md) - - [ApiResponse](doc\ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc\ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc\ArrayOfNumberOnly.md) - - [ArrayTest](doc\ArrayTest.md) - - [Capitalization](doc\Capitalization.md) - - [Cat](doc\Cat.md) - - [CatAllOf](doc\CatAllOf.md) - - [Category](doc\Category.md) - - [ClassModel](doc\ClassModel.md) - - [Dog](doc\Dog.md) - - [DogAllOf](doc\DogAllOf.md) - - [EnumArrays](doc\EnumArrays.md) - - [EnumTest](doc\EnumTest.md) - - [FileSchemaTestClass](doc\FileSchemaTestClass.md) - - [Foo](doc\Foo.md) - - [FormatTest](doc\FormatTest.md) - - [HasOnlyReadOnly](doc\HasOnlyReadOnly.md) - - [HealthCheckResult](doc\HealthCheckResult.md) - - [InlineResponseDefault](doc\InlineResponseDefault.md) - - [MapTest](doc\MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc\MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc\Model200Response.md) - - [ModelClient](doc\ModelClient.md) - - [ModelEnumClass](doc\ModelEnumClass.md) - - [ModelFile](doc\ModelFile.md) - - [ModelList](doc\ModelList.md) - - [ModelReturn](doc\ModelReturn.md) - - [Name](doc\Name.md) - - [NullableClass](doc\NullableClass.md) - - [NumberOnly](doc\NumberOnly.md) - - [Order](doc\Order.md) - - [OuterComposite](doc\OuterComposite.md) - - [OuterEnum](doc\OuterEnum.md) - - [OuterEnumDefaultValue](doc\OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc\OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc\OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc\OuterObjectWithEnumProperty.md) - - [Pet](doc\Pet.md) - - [ReadOnlyFirst](doc\ReadOnlyFirst.md) - - [SpecialModelName](doc\SpecialModelName.md) - - [Tag](doc\Tag.md) - - [User](doc\User.md) + - [AdditionalPropertiesClass](doc/AdditionalPropertiesClass.md) + - [Animal](doc/Animal.md) + - [ApiResponse](doc/ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc/ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc/ArrayOfNumberOnly.md) + - [ArrayTest](doc/ArrayTest.md) + - [Capitalization](doc/Capitalization.md) + - [Cat](doc/Cat.md) + - [CatAllOf](doc/CatAllOf.md) + - [Category](doc/Category.md) + - [ClassModel](doc/ClassModel.md) + - [Dog](doc/Dog.md) + - [DogAllOf](doc/DogAllOf.md) + - [EnumArrays](doc/EnumArrays.md) + - [EnumTest](doc/EnumTest.md) + - [FileSchemaTestClass](doc/FileSchemaTestClass.md) + - [Foo](doc/Foo.md) + - [FormatTest](doc/FormatTest.md) + - [HasOnlyReadOnly](doc/HasOnlyReadOnly.md) + - [HealthCheckResult](doc/HealthCheckResult.md) + - [InlineResponseDefault](doc/InlineResponseDefault.md) + - [MapTest](doc/MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc/Model200Response.md) + - [ModelClient](doc/ModelClient.md) + - [ModelEnumClass](doc/ModelEnumClass.md) + - [ModelFile](doc/ModelFile.md) + - [ModelList](doc/ModelList.md) + - [ModelReturn](doc/ModelReturn.md) + - [Name](doc/Name.md) + - [NullableClass](doc/NullableClass.md) + - [NumberOnly](doc/NumberOnly.md) + - [Order](doc/Order.md) + - [OuterComposite](doc/OuterComposite.md) + - [OuterEnum](doc/OuterEnum.md) + - [OuterEnumDefaultValue](doc/OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc/OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc/OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc/OuterObjectWithEnumProperty.md) + - [Pet](doc/Pet.md) + - [ReadOnlyFirst](doc/ReadOnlyFirst.md) + - [SpecialModelName](doc/SpecialModelName.md) + - [Tag](doc/Tag.md) + - [User](doc/User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md b/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md index 18de35ccec0d..99bd229f3c50 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md @@ -60,36 +60,36 @@ All URIs are relative to *http://petstore.swagger.io/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [ApiResponse](doc\/ApiResponse.md) - - [Category](doc\/Category.md) - - [Order](doc\/Order.md) - - [Pet](doc\/Pet.md) - - [Tag](doc\/Tag.md) - - [User](doc\/User.md) + - [ApiResponse](doc//ApiResponse.md) + - [Category](doc//Category.md) + - [Order](doc//Order.md) + - [Pet](doc//Pet.md) + - [Tag](doc//Tag.md) + - [User](doc//User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md index 9b39a96c6b70..fe39c2f21264 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md @@ -58,94 +58,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc\/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc\/DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc\/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc\/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc\/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc\/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc\/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc\/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc\/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc\/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc\/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc\/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc\/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc\/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc\/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc\/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc\/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc\/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc\/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc//AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc//DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc//FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc//FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc//FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc//FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc//FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc//FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc//FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc//FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc//FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc//FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc//FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc//FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc//FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc//FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc//FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc//FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc//FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc//PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc\/AdditionalPropertiesClass.md) - - [Animal](doc\/Animal.md) - - [ApiResponse](doc\/ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc\/ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc\/ArrayOfNumberOnly.md) - - [ArrayTest](doc\/ArrayTest.md) - - [Capitalization](doc\/Capitalization.md) - - [Cat](doc\/Cat.md) - - [CatAllOf](doc\/CatAllOf.md) - - [Category](doc\/Category.md) - - [ClassModel](doc\/ClassModel.md) - - [Dog](doc\/Dog.md) - - [DogAllOf](doc\/DogAllOf.md) - - [EnumArrays](doc\/EnumArrays.md) - - [EnumClass](doc\/EnumClass.md) - - [EnumTest](doc\/EnumTest.md) - - [FileSchemaTestClass](doc\/FileSchemaTestClass.md) - - [Foo](doc\/Foo.md) - - [FormatTest](doc\/FormatTest.md) - - [HasOnlyReadOnly](doc\/HasOnlyReadOnly.md) - - [HealthCheckResult](doc\/HealthCheckResult.md) - - [InlineResponseDefault](doc\/InlineResponseDefault.md) - - [MapTest](doc\/MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc\/MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc\/Model200Response.md) - - [ModelClient](doc\/ModelClient.md) - - [ModelFile](doc\/ModelFile.md) - - [ModelList](doc\/ModelList.md) - - [ModelReturn](doc\/ModelReturn.md) - - [Name](doc\/Name.md) - - [NullableClass](doc\/NullableClass.md) - - [NumberOnly](doc\/NumberOnly.md) - - [Order](doc\/Order.md) - - [OuterComposite](doc\/OuterComposite.md) - - [OuterEnum](doc\/OuterEnum.md) - - [OuterEnumDefaultValue](doc\/OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc\/OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc\/OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc\/OuterObjectWithEnumProperty.md) - - [Pet](doc\/Pet.md) - - [ReadOnlyFirst](doc\/ReadOnlyFirst.md) - - [SpecialModelName](doc\/SpecialModelName.md) - - [Tag](doc\/Tag.md) - - [User](doc\/User.md) + - [AdditionalPropertiesClass](doc//AdditionalPropertiesClass.md) + - [Animal](doc//Animal.md) + - [ApiResponse](doc//ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc//ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc//ArrayOfNumberOnly.md) + - [ArrayTest](doc//ArrayTest.md) + - [Capitalization](doc//Capitalization.md) + - [Cat](doc//Cat.md) + - [CatAllOf](doc//CatAllOf.md) + - [Category](doc//Category.md) + - [ClassModel](doc//ClassModel.md) + - [Dog](doc//Dog.md) + - [DogAllOf](doc//DogAllOf.md) + - [EnumArrays](doc//EnumArrays.md) + - [EnumClass](doc//EnumClass.md) + - [EnumTest](doc//EnumTest.md) + - [FileSchemaTestClass](doc//FileSchemaTestClass.md) + - [Foo](doc//Foo.md) + - [FormatTest](doc//FormatTest.md) + - [HasOnlyReadOnly](doc//HasOnlyReadOnly.md) + - [HealthCheckResult](doc//HealthCheckResult.md) + - [InlineResponseDefault](doc//InlineResponseDefault.md) + - [MapTest](doc//MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc//MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc//Model200Response.md) + - [ModelClient](doc//ModelClient.md) + - [ModelFile](doc//ModelFile.md) + - [ModelList](doc//ModelList.md) + - [ModelReturn](doc//ModelReturn.md) + - [Name](doc//Name.md) + - [NullableClass](doc//NullableClass.md) + - [NumberOnly](doc//NumberOnly.md) + - [Order](doc//Order.md) + - [OuterComposite](doc//OuterComposite.md) + - [OuterEnum](doc//OuterEnum.md) + - [OuterEnumDefaultValue](doc//OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc//OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc//OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc//OuterObjectWithEnumProperty.md) + - [Pet](doc//Pet.md) + - [ReadOnlyFirst](doc//ReadOnlyFirst.md) + - [SpecialModelName](doc//SpecialModelName.md) + - [Tag](doc//Tag.md) + - [User](doc//User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md index 9b39a96c6b70..fe39c2f21264 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md @@ -58,94 +58,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc\/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc\/DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc\/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc\/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc\/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc\/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc\/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc\/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc\/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc\/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc\/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc\/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc\/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc\/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc\/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc\/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc\/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc\/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc\/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc//AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc//DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc//FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc//FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc//FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc//FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc//FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc//FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc//FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc//FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc//FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc//FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc//FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc//FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc//FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc//FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc//FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc//FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc//FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc//PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc\/AdditionalPropertiesClass.md) - - [Animal](doc\/Animal.md) - - [ApiResponse](doc\/ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc\/ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc\/ArrayOfNumberOnly.md) - - [ArrayTest](doc\/ArrayTest.md) - - [Capitalization](doc\/Capitalization.md) - - [Cat](doc\/Cat.md) - - [CatAllOf](doc\/CatAllOf.md) - - [Category](doc\/Category.md) - - [ClassModel](doc\/ClassModel.md) - - [Dog](doc\/Dog.md) - - [DogAllOf](doc\/DogAllOf.md) - - [EnumArrays](doc\/EnumArrays.md) - - [EnumClass](doc\/EnumClass.md) - - [EnumTest](doc\/EnumTest.md) - - [FileSchemaTestClass](doc\/FileSchemaTestClass.md) - - [Foo](doc\/Foo.md) - - [FormatTest](doc\/FormatTest.md) - - [HasOnlyReadOnly](doc\/HasOnlyReadOnly.md) - - [HealthCheckResult](doc\/HealthCheckResult.md) - - [InlineResponseDefault](doc\/InlineResponseDefault.md) - - [MapTest](doc\/MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc\/MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc\/Model200Response.md) - - [ModelClient](doc\/ModelClient.md) - - [ModelFile](doc\/ModelFile.md) - - [ModelList](doc\/ModelList.md) - - [ModelReturn](doc\/ModelReturn.md) - - [Name](doc\/Name.md) - - [NullableClass](doc\/NullableClass.md) - - [NumberOnly](doc\/NumberOnly.md) - - [Order](doc\/Order.md) - - [OuterComposite](doc\/OuterComposite.md) - - [OuterEnum](doc\/OuterEnum.md) - - [OuterEnumDefaultValue](doc\/OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc\/OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc\/OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc\/OuterObjectWithEnumProperty.md) - - [Pet](doc\/Pet.md) - - [ReadOnlyFirst](doc\/ReadOnlyFirst.md) - - [SpecialModelName](doc\/SpecialModelName.md) - - [Tag](doc\/Tag.md) - - [User](doc\/User.md) + - [AdditionalPropertiesClass](doc//AdditionalPropertiesClass.md) + - [Animal](doc//Animal.md) + - [ApiResponse](doc//ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc//ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc//ArrayOfNumberOnly.md) + - [ArrayTest](doc//ArrayTest.md) + - [Capitalization](doc//Capitalization.md) + - [Cat](doc//Cat.md) + - [CatAllOf](doc//CatAllOf.md) + - [Category](doc//Category.md) + - [ClassModel](doc//ClassModel.md) + - [Dog](doc//Dog.md) + - [DogAllOf](doc//DogAllOf.md) + - [EnumArrays](doc//EnumArrays.md) + - [EnumClass](doc//EnumClass.md) + - [EnumTest](doc//EnumTest.md) + - [FileSchemaTestClass](doc//FileSchemaTestClass.md) + - [Foo](doc//Foo.md) + - [FormatTest](doc//FormatTest.md) + - [HasOnlyReadOnly](doc//HasOnlyReadOnly.md) + - [HealthCheckResult](doc//HealthCheckResult.md) + - [InlineResponseDefault](doc//InlineResponseDefault.md) + - [MapTest](doc//MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc//MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc//Model200Response.md) + - [ModelClient](doc//ModelClient.md) + - [ModelFile](doc//ModelFile.md) + - [ModelList](doc//ModelList.md) + - [ModelReturn](doc//ModelReturn.md) + - [Name](doc//Name.md) + - [NullableClass](doc//NullableClass.md) + - [NumberOnly](doc//NumberOnly.md) + - [Order](doc//Order.md) + - [OuterComposite](doc//OuterComposite.md) + - [OuterEnum](doc//OuterEnum.md) + - [OuterEnumDefaultValue](doc//OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc//OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc//OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc//OuterObjectWithEnumProperty.md) + - [Pet](doc//Pet.md) + - [ReadOnlyFirst](doc//ReadOnlyFirst.md) + - [SpecialModelName](doc//SpecialModelName.md) + - [Tag](doc//Tag.md) + - [User](doc//User.md) ## Documentation For Authorization diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs index 04aa969cb957..d58ff968d3c5 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; + exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs index cb4da58b6105..79c62f5c672d 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs index c4f77f108acb..17fdac817ad8 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; + exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs index 04aa969cb957..d58ff968d3c5 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; + exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs index cb4da58b6105..79c62f5c672d 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs index c4f77f108acb..17fdac817ad8 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; + exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs index c99e55e5f2d4..3162f82261ba 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -48,7 +48,7 @@ public virtual IActionResult AddPet([FromBody]Pet pet) //TODO: Uncomment the next line to return response 405 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(405); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -97,7 +97,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -161,7 +161,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -197,7 +197,7 @@ public virtual IActionResult UpdatePet([FromBody]Pet pet) //TODO: Uncomment the next line to return response 405 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(405); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -247,7 +247,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; + exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs index 881cd5107a94..431fccf19057 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -128,7 +128,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order order) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs index 327c18b86878..406c969ffb24 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -134,7 +134,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; + exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs index 6f7fae5e120b..68722c6b4cb0 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; + exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs index 213f6a8479e4..4503e177b9c9 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs index b4752ae73d15..06ca8107d072 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; + exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/php-slim4/README.md b/samples/server/petstore/php-slim4/README.md index 78d2322ebb72..3f5c820198c5 100644 --- a/samples/server/petstore/php-slim4/README.md +++ b/samples/server/petstore/php-slim4/README.md @@ -168,10 +168,10 @@ Class | Method | HTTP request | Description ## Authentication ### Security schema `api_key` -> Important! To make ApiKey authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib\/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class. +> Important! To make ApiKey authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class. ### Security schema `petstore_auth` -> Important! To make OAuth authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib\/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\OAuthAuthenticator](./src/Auth/OAuthAuthenticator.php) class. +> Important! To make OAuth authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\OAuthAuthenticator](./src/Auth/OAuthAuthenticator.php) class. Scope list: * `write:pets` - modify pets in your account diff --git a/samples/server/petstore/php-slim4/phpunit.xml.dist b/samples/server/petstore/php-slim4/phpunit.xml.dist index 10eaa6529577..3efb4b45f4aa 100644 --- a/samples/server/petstore/php-slim4/phpunit.xml.dist +++ b/samples/server/petstore/php-slim4/phpunit.xml.dist @@ -21,9 +21,9 @@ - ./lib\/Api + ./lib/Api ./lib/BaseModel.php - ./lib\/Model + ./lib/Model diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist b/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist index 40d39d2f5a8c..e754829e6283 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist @@ -14,9 +14,9 @@ - ./.\/Api - ./.\/Model - ./.\/Controller + ././Api + ././Model + ././Controller diff --git a/samples/server/petstore/python-aiohttp-srclayout/setup.py b/samples/server/petstore/python-aiohttp-srclayout/setup.py index 600b620958c6..6f62aec44149 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/setup.py +++ b/samples/server/petstore/python-aiohttp-srclayout/setup.py @@ -27,9 +27,9 @@ url="", keywords=["OpenAPI", "OpenAPI Petstore"], install_requires=REQUIRES, - packages=find_packages("src\"), - package_dir={"": "src\"}, - package_data={'': ['src\/openapi/openapi.yaml']}, + packages=find_packages("src/"), + package_dir={"": "src/"}, + package_data={'': ['src//openapi/openapi.yaml']}, include_package_data=True, entry_points={ 'console_scripts': ['openapi_server=openapi_server.__main__:main']}, diff --git a/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py b/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py index 63ba2f413d1b..578bf18e982c 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py +++ b/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py @@ -12,7 +12,7 @@ def client(loop, aiohttp_client): "swagger_ui": True } specification_dir = os.path.join(os.path.dirname(__file__), '..', - "src\", + "src/", 'openapi_server', 'openapi') app = connexion.AioHttpApp(__name__, specification_dir=specification_dir, diff --git a/samples/server/petstore/python-aiohttp-srclayout/tox.ini b/samples/server/petstore/python-aiohttp-srclayout/tox.ini index 3d847999b3c9..25d12bb84c0b 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tox.ini +++ b/samples/server/petstore/python-aiohttp-srclayout/tox.ini @@ -8,4 +8,4 @@ deps=-r{toxinidir}/requirements.txt {toxinidir} commands= - pytest --cov=src\openapi_server + pytest --cov=src/openapi_server From 62a52bf1e8f56f74ea3a7a233975d34ab9ac0059 Mon Sep 17 00:00:00 2001 From: Elan Thangamani Date: Wed, 26 May 2021 21:46:22 -0500 Subject: [PATCH 162/186] Upgrade Virtualan version with 2.2.1 -> Open API Mock service (#9598) * changed correct values * Updated virtualan version * updated the correct version * Updated with latest version * Update pom.xml * Updated with 2.5.0 * Updated with db 2.5.0 version --- .../libraries/spring-boot/application.mustache | 10 +++++----- .../JavaSpring/libraries/spring-boot/pom.mustache | 9 ++------- samples/server/petstore/springboot-virtualan/pom.xml | 9 ++------- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/application.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/application.mustache index b7fea3f62620..6eb4ae242983 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/application.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/application.mustache @@ -5,8 +5,8 @@ server.port={{serverPort}} spring.jackson.date-format={{basePackage}}.RFC3339DateFormat spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false {{#virtualService}} -virtual.datasource.driver-class-name=org.hsqldb.jdbcDriver -virtual.datasource.jdbcurl=jdbc:hsqldb:mem:dataSource -virtual.datasource.username=sa -virtual.datasource.password= -{{/virtualService}} \ No newline at end of file +virtualan.datasource.driver-class-name=org.hsqldb.jdbcDriver +virtualan.datasource.jdbcurl=jdbc:hsqldb:mem:dataSource +virtualan.datasource.username=sa +virtualan.datasource.password= +{{/virtualService}} diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache index e2733633e359..d5ae34ff8a55 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/libraries/spring-boot/pom.mustache @@ -176,18 +176,13 @@ io.virtualan virtualan-plugin - 2.1.7 + 2.2.1 org.hsqldb hsqldb - 2.3.2 - - - org.springframework.boot - spring-boot-starter-data-jpa - 1.5.9.RELEASE + 2.5.0 {{/virtualService}} diff --git a/samples/server/petstore/springboot-virtualan/pom.xml b/samples/server/petstore/springboot-virtualan/pom.xml index 3dceb8a963e7..8dc39bea12e3 100644 --- a/samples/server/petstore/springboot-virtualan/pom.xml +++ b/samples/server/petstore/springboot-virtualan/pom.xml @@ -75,18 +75,13 @@ io.virtualan virtualan-plugin - 2.1.7 + 2.2.1 org.hsqldb hsqldb - 2.3.2 - - - org.springframework.boot - spring-boot-starter-data-jpa - 1.5.9.RELEASE + 2.5.0 From 6edbc91eebdd5cfdccf26e384c6f75dfe0e8686c Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Thu, 27 May 2021 04:58:37 +0200 Subject: [PATCH 163/186] [dart][dart-dio] Update docs for dart-dio-next (#9584) * remove deprecated author field from all pubspec templates * improve dart-dio-next readme/markdown documentation * add a lot of dart-doc to model and API classes --- .../main/resources/dart-dio/pubspec.mustache | 2 - .../dart/libraries/dio/README.mustache | 6 +- .../resources/dart/libraries/dio/api.mustache | 24 +- .../dart/libraries/dio/api_doc.mustache | 14 +- .../dart/libraries/dio/object_doc.mustache | 2 +- .../dart/libraries/dio/pubspec.mustache | 2 - .../serialization/built_value/class.mustache | 12 +- .../src/main/resources/dart2/pubspec.mustache | 2 - .../petstore_client_lib_fake/README.md | 84 +++--- .../doc/AdditionalPropertiesClass.md | 4 +- .../doc/AnotherFakeApi.md | 10 +- .../doc/ArrayOfArrayOfNumberOnly.md | 2 +- .../doc/ArrayOfNumberOnly.md | 2 +- .../petstore_client_lib_fake/doc/ArrayTest.md | 6 +- .../doc/DefaultApi.md | 8 +- .../doc/EnumArrays.md | 2 +- .../petstore_client_lib_fake/doc/FakeApi.md | 224 +++++++-------- .../doc/FakeClassnameTags123Api.md | 10 +- .../doc/FileSchemaTestClass.md | 2 +- .../petstore_client_lib_fake/doc/MapTest.md | 8 +- ...dPropertiesAndAdditionalPropertiesClass.md | 2 +- .../doc/NullableClass.md | 12 +- .../petstore_client_lib_fake/doc/Pet.md | 4 +- .../petstore_client_lib_fake/doc/PetApi.md | 104 +++---- .../petstore_client_lib_fake/doc/StoreApi.md | 38 +-- .../petstore_client_lib_fake/doc/UserApi.md | 74 ++--- .../lib/src/api/another_fake_api.dart | 13 +- .../lib/src/api/default_api.dart | 12 +- .../lib/src/api/fake_api.dart | 256 ++++++++++++++++-- .../src/api/fake_classname_tags123_api.dart | 13 +- .../lib/src/api/pet_api.dart | 125 ++++++++- .../lib/src/api/store_api.dart | 51 +++- .../lib/src/api/user_api.dart | 105 ++++++- .../model/additional_properties_class.dart | 7 +- .../lib/src/model/animal.dart | 7 +- .../lib/src/model/api_response.dart | 8 +- .../model/array_of_array_of_number_only.dart | 6 +- .../lib/src/model/array_of_number_only.dart | 6 +- .../lib/src/model/array_test.dart | 8 +- .../lib/src/model/capitalization.dart | 11 +- .../lib/src/model/cat.dart | 6 + .../lib/src/model/cat_all_of.dart | 6 +- .../lib/src/model/category.dart | 7 +- .../lib/src/model/class_model.dart | 6 +- .../lib/src/model/dog.dart | 6 + .../lib/src/model/dog_all_of.dart | 6 +- .../lib/src/model/enum_arrays.dart | 7 +- .../lib/src/model/enum_test.dart | 13 +- .../lib/src/model/file_schema_test_class.dart | 7 +- .../lib/src/model/foo.dart | 6 +- .../lib/src/model/format_test.dart | 21 +- .../lib/src/model/has_only_read_only.dart | 7 +- .../lib/src/model/health_check_result.dart | 6 +- .../src/model/inline_response_default.dart | 6 +- .../lib/src/model/map_test.dart | 9 +- ...rties_and_additional_properties_class.dart | 8 +- .../lib/src/model/model200_response.dart | 7 +- .../lib/src/model/model_client.dart | 6 +- .../lib/src/model/model_file.dart | 6 +- .../lib/src/model/model_list.dart | 6 +- .../lib/src/model/model_return.dart | 6 +- .../lib/src/model/name.dart | 9 +- .../lib/src/model/nullable_class.dart | 17 +- .../lib/src/model/number_only.dart | 6 +- .../lib/src/model/order.dart | 11 +- .../lib/src/model/outer_composite.dart | 8 +- .../outer_object_with_enum_property.dart | 6 +- .../lib/src/model/pet.dart | 11 +- .../lib/src/model/read_only_first.dart | 7 +- .../lib/src/model/special_model_name.dart | 6 +- .../lib/src/model/tag.dart | 7 +- .../lib/src/model/user.dart | 13 +- .../petstore_client_lib_fake/pubspec.yaml | 2 - .../dart-dio/petstore_client_lib/pubspec.yaml | 2 - .../petstore_client_lib_fake/pubspec.yaml | 2 - .../dart2/petstore_client_lib/pubspec.yaml | 2 - .../petstore_client_lib_fake/pubspec.yaml | 2 - .../pubspec.yaml | 2 - 78 files changed, 1107 insertions(+), 452 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/dart-dio/pubspec.mustache b/modules/openapi-generator/src/main/resources/dart-dio/pubspec.mustache index 025230b7357f..2484e50837a5 100644 --- a/modules/openapi-generator/src/main/resources/dart-dio/pubspec.mustache +++ b/modules/openapi-generator/src/main/resources/dart-dio/pubspec.mustache @@ -2,8 +2,6 @@ name: {{pubName}} version: {{pubVersion}} description: {{pubDescription}} homepage: {{pubHomepage}} -authors: - - '{{{pubAuthor}}} <{{{pubAuthorEmail}}}>' environment: sdk: '>=2.7.0 <3.0.0' diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/README.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/README.mustache index 3ef0679e726d..69591ce24a3c 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/README.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/README.mustache @@ -60,9 +60,9 @@ Please follow the [installation procedure](#installation--usage) and then run th import 'package:{{pubName}}/{{pubName}}.dart'; {{#apiInfo}}{{#apis}}{{#-first}}{{#operations}}{{#operation}}{{#-first}} -final api = {{classname}}(); +final api = {{clientName}}().get{{classname}}(); {{#allParams}} -final {{paramName}} = {{#isArray}}[{{/isArray}}{{#isBodyParam}}{{dataType}}(){{/isBodyParam}}{{^isBodyParam}}{{{example}}}{{/isBodyParam}}{{#isArray}}]{{/isArray}}; // {{{dataType}}} | {{{description}}} +final {{{dataType}}} {{paramName}} = {{{example}}}; // {{{dataType}}} | {{{description}}} {{/allParams}} try { @@ -82,7 +82,7 @@ All URIs are relative to *{{basePath}}* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**]({{apiDocPath}}{{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{summary}}{{/summary}} +{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}[*{{classname}}*]({{modelDocPath}}{{{classname}}}.md) | [**{{operationId}}**]({{apiDocPath}}{{classname}}.md#{{operationIdLowerCase}}) | **{{httpMethod}}** {{path}} | {{#summary}}{{summary}}{{/summary}} {{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} ## Documentation For Models diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache index 328506457c04..5182266d24b9 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache @@ -19,9 +19,29 @@ class {{classname}} { const {{classname}}(this._dio{{#useBuiltValue}}, this._serializers{{/useBuiltValue}}); {{#operation}} - /// {{{summary}}} + /// {{#summary}}{{.}}{{/summary}}{{^summary}}{{nickname}}{{/summary}} + /// {{notes}} /// - /// {{{notes}}} + /// Parameters: + {{#allParams}} + /// * [{{paramName}}] {{#description}}- {{{.}}}{{/description}} + {{/allParams}} + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future]{{#returnType}} containing a [Response] with a [{{{returnType}}}] as data{{/returnType}} + /// Throws [DioError] if API call or serialization fails + {{#externalDocs}} + /// {{description}} + /// Also see [{{summary}} Documentation]({{url}}) + {{/externalDocs}} + {{#isDeprecated}} + @Deprecated('This operation has been deprecated') + {{/isDeprecated}} Future> {{nickname}}({ {{#allParams}}{{#isPathParam}} required {{{dataType}}} {{paramName}},{{/isPathParam}}{{#isQueryParam}} {{#required}}required {{/required}}{{{dataType}}}{{^required}}?{{/required}} {{paramName}},{{/isQueryParam}}{{#isHeaderParam}} diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api_doc.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api_doc.mustache index 1e28b16012e4..548c8b140ce2 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api_doc.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api_doc.mustache @@ -45,17 +45,17 @@ import 'package:{{pubName}}/api.dart'; {{/authMethods}} {{/hasAuthMethods}} -var api_instance = new {{classname}}(); +final api = {{clientName}}().get{{classname}}(); {{#allParams}} -var {{paramName}} = {{#isArray}}[{{/isArray}}{{#isBodyParam}}new {{{dataType}}}(){{/isBodyParam}}{{^isBodyParam}}{{{example}}}{{/isBodyParam}}{{#isArray}}]{{/isArray}}; // {{{dataType}}} | {{{description}}} +final {{{dataType}}} {{paramName}} = {{{example}}}; // {{{dataType}}} | {{{description}}} {{/allParams}} try { - {{#returnType}}var result = {{/returnType}}api_instance.{{{operationId}}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}); + {{#returnType}}final response = {{/returnType}}api.{{{operationId}}}({{#allParams}}{{paramName}}{{^-last}}, {{/-last}}{{/allParams}}); {{#returnType}} - print(result); + print(response); {{/returnType}} -} catch (e) { +} catch on DioError (e) { print('Exception when calling {{classname}}->{{operationId}}: $e\n'); } ``` @@ -64,12 +64,12 @@ try { {{^allParams}}This endpoint does not need any parameter.{{/allParams}}{{#allParams}}{{#-last}} Name | Type | Description | Notes ------------- | ------------- | ------------- | -------------{{/-last}}{{/allParams}} -{{#allParams}} **{{paramName}}** | {{#isPrimitiveType}}**{{{dataType}}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{{dataType}}}**]({{baseType}}.md){{/isPrimitiveType}}| {{{description}}} | {{^required}}[optional] {{/required}}{{#defaultValue}}[default to {{{defaultValue}}}]{{/defaultValue}} +{{#allParams}} **{{paramName}}** | {{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{dataType}}**]({{baseType}}.md){{/isPrimitiveType}}| {{{description}}} | {{^required}}[optional] {{/required}}{{#defaultValue}}[default to {{{defaultValue}}}]{{/defaultValue}} {{/allParams}} ### Return type -{{#returnType}}{{#returnTypeIsPrimitive}}**{{{returnType}}}**{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}[**{{{returnType}}}**]({{returnBaseType}}.md){{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}void (empty response body){{/returnType}} +{{#returnType}}{{#returnTypeIsPrimitive}}**{{returnType}}**{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}[**{{returnType}}**]({{returnBaseType}}.md){{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}void (empty response body){{/returnType}} ### Authorization diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/object_doc.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/object_doc.mustache index f2a52db11a4b..84b70087bf48 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/object_doc.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/object_doc.mustache @@ -8,7 +8,7 @@ import 'package:{{pubName}}/api.dart'; ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -{{#vars}}**{{name}}** | {{#isPrimitiveType}}**{{{dataType}}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{{dataType}}}**]({{complexType}}.md){{/isPrimitiveType}} | {{{description}}} | {{^required}}[optional] {{/required}}{{#readOnly}}[readonly] {{/readOnly}}{{#defaultValue}}[default to {{{defaultValue}}}]{{/defaultValue}} +{{#vars}}**{{name}}** | {{#isPrimitiveType}}**{{dataType}}**{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{dataType}}**]({{complexType}}.md){{/isPrimitiveType}} | {{{description}}} | {{^required}}[optional] {{/required}}{{#readOnly}}[readonly] {{/readOnly}}{{#defaultValue}}[default to {{{defaultValue}}}]{{/defaultValue}} {{/vars}} [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache index b2eef72f91e5..991de1e44b52 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache @@ -2,8 +2,6 @@ name: {{pubName}} version: {{pubVersion}} description: {{pubDescription}} homepage: {{pubHomepage}} -authors: - - '{{{pubAuthor}}} <{{{pubAuthorEmail}}}>' environment: sdk: '>=2.12.0 <3.0.0' diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/class.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/class.mustache index f359b8d5a91b..9eb53c756c78 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/class.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/class.mustache @@ -7,8 +7,18 @@ part '{{classFilename}}.g.dart'; Classes with polymorphism or composition may generate unused imports, these need to be ignored for said classes so that there are no lint errors. }} -{{#parentModel}}// ignore_for_file: unused_import{{/parentModel}} +{{#parentModel}} +// ignore_for_file: unused_import +{{/parentModel}} +/// {{#description}}{{{.}}}{{/description}}{{^description}}{{classname}}{{/description}} +{{#hasVars}} +/// +/// Properties: +{{#allVars}} +/// * [{{{name}}}] {{#description}}- {{{.}}}{{/description}} +{{/allVars}} +{{/hasVars}} abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builder> { {{#vars}} {{#description}} diff --git a/modules/openapi-generator/src/main/resources/dart2/pubspec.mustache b/modules/openapi-generator/src/main/resources/dart2/pubspec.mustache index 93c848aa5c12..4ce12df9e486 100644 --- a/modules/openapi-generator/src/main/resources/dart2/pubspec.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/pubspec.mustache @@ -5,8 +5,6 @@ name: '{{{pubName}}}' version: '{{{pubVersion}}}' description: '{{{pubDescription}}}' -authors: - - '{{{pubAuthor}}} <{{{pubAuthorEmail}}}>' homepage: '{{{pubHomepage}}}' environment: sdk: '>=2.12.0 <3.0.0' diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md index 31cdc5ce99bf..48f3b73ec03c 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md @@ -46,8 +46,8 @@ Please follow the [installation procedure](#installation--usage) and then run th import 'package:openapi/openapi.dart'; -final api = AnotherFakeApi(); -final modelClient = ModelClient(); // ModelClient | client model +final api = Openapi().getAnotherFakeApi(); +final ModelClient modelClient = ; // ModelClient | client model try { final response = await api.call123testSpecialTags(modelClient); @@ -64,46 +64,46 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc/DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +[*AnotherFakeApi*](doc/AnotherFakeApi.md) | [**call123testSpecialTags**](doc/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +[*DefaultApi*](doc/DefaultApi.md) | [**fooGet**](doc/DefaultApi.md#fooget) | **GET** /foo | +[*FakeApi*](doc/FakeApi.md) | [**fakeHealthGet**](doc/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +[*FakeApi*](doc/FakeApi.md) | [**fakeHttpSignatureTest**](doc/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +[*FakeApi*](doc/FakeApi.md) | [**fakeOuterBooleanSerialize**](doc/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +[*FakeApi*](doc/FakeApi.md) | [**fakeOuterCompositeSerialize**](doc/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +[*FakeApi*](doc/FakeApi.md) | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +[*FakeApi*](doc/FakeApi.md) | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +[*FakeApi*](doc/FakeApi.md) | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +[*FakeApi*](doc/FakeApi.md) | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +[*FakeApi*](doc/FakeApi.md) | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +[*FakeApi*](doc/FakeApi.md) | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +[*FakeApi*](doc/FakeApi.md) | [**testEndpointParameters**](doc/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +[*FakeApi*](doc/FakeApi.md) | [**testEnumParameters**](doc/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +[*FakeApi*](doc/FakeApi.md) | [**testGroupParameters**](doc/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +[*FakeApi*](doc/FakeApi.md) | [**testInlineAdditionalProperties**](doc/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +[*FakeApi*](doc/FakeApi.md) | [**testJsonFormData**](doc/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +[*FakeApi*](doc/FakeApi.md) | [**testQueryParameterCollectionFormat**](doc/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +[*FakeClassnameTags123Api*](doc/FakeClassnameTags123Api.md) | [**testClassname**](doc/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +[*PetApi*](doc/PetApi.md) | [**addPet**](doc/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +[*PetApi*](doc/PetApi.md) | [**deletePet**](doc/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +[*PetApi*](doc/PetApi.md) | [**findPetsByStatus**](doc/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +[*PetApi*](doc/PetApi.md) | [**findPetsByTags**](doc/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +[*PetApi*](doc/PetApi.md) | [**getPetById**](doc/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +[*PetApi*](doc/PetApi.md) | [**updatePet**](doc/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +[*PetApi*](doc/PetApi.md) | [**updatePetWithForm**](doc/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +[*PetApi*](doc/PetApi.md) | [**uploadFile**](doc/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +[*PetApi*](doc/PetApi.md) | [**uploadFileWithRequiredFile**](doc/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +[*StoreApi*](doc/StoreApi.md) | [**deleteOrder**](doc/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +[*StoreApi*](doc/StoreApi.md) | [**getInventory**](doc/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +[*StoreApi*](doc/StoreApi.md) | [**getOrderById**](doc/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +[*StoreApi*](doc/StoreApi.md) | [**placeOrder**](doc/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +[*UserApi*](doc/UserApi.md) | [**createUser**](doc/UserApi.md#createuser) | **POST** /user | Create user +[*UserApi*](doc/UserApi.md) | [**createUsersWithArrayInput**](doc/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +[*UserApi*](doc/UserApi.md) | [**createUsersWithListInput**](doc/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +[*UserApi*](doc/UserApi.md) | [**deleteUser**](doc/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +[*UserApi*](doc/UserApi.md) | [**getUserByName**](doc/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +[*UserApi*](doc/UserApi.md) | [**loginUser**](doc/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +[*UserApi*](doc/UserApi.md) | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +[*UserApi*](doc/UserApi.md) | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AdditionalPropertiesClass.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AdditionalPropertiesClass.md index 5443d024fd25..f9f7857894d0 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AdditionalPropertiesClass.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AdditionalPropertiesClass.md @@ -8,8 +8,8 @@ import 'package:openapi/api.dart'; ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**mapProperty** | **BuiltMap** | | [optional] -**mapOfMapProperty** | [**BuiltMap>**](BuiltMap.md) | | [optional] +**mapProperty** | **BuiltMap<String, String>** | | [optional] +**mapOfMapProperty** | [**BuiltMap<String, BuiltMap<String, String>>**](BuiltMap.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AnotherFakeApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AnotherFakeApi.md index bb401f7c20cb..9416627d74d6 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AnotherFakeApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/AnotherFakeApi.md @@ -23,13 +23,13 @@ To test special tags and operation ID starting with number ```dart import 'package:openapi/api.dart'; -var api_instance = new AnotherFakeApi(); -var modelClient = new ModelClient(); // ModelClient | client model +final api = Openapi().getAnotherFakeApi(); +final ModelClient modelClient = ; // ModelClient | client model try { - var result = api_instance.call123testSpecialTags(modelClient); - print(result); -} catch (e) { + final response = api.call123testSpecialTags(modelClient); + print(response); +} catch on DioError (e) { print('Exception when calling AnotherFakeApi->call123testSpecialTags: $e\n'); } ``` diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayOfArrayOfNumberOnly.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayOfArrayOfNumberOnly.md index 0a9d69c7e3cb..d1a272ab6023 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayOfArrayOfNumberOnly.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayOfArrayOfNumberOnly.md @@ -8,7 +8,7 @@ import 'package:openapi/api.dart'; ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**arrayArrayNumber** | [**BuiltList>**](BuiltList.md) | | [optional] +**arrayArrayNumber** | [**BuiltList<BuiltList<num>>**](BuiltList.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayOfNumberOnly.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayOfNumberOnly.md index 6ffe36730c25..94b60f272fd4 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayOfNumberOnly.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayOfNumberOnly.md @@ -8,7 +8,7 @@ import 'package:openapi/api.dart'; ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**arrayNumber** | **BuiltList** | | [optional] +**arrayNumber** | **BuiltList<num>** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayTest.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayTest.md index fc38f8ae52d5..0813d4fa93c6 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayTest.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/ArrayTest.md @@ -8,9 +8,9 @@ import 'package:openapi/api.dart'; ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**arrayOfString** | **BuiltList** | | [optional] -**arrayArrayOfInteger** | [**BuiltList>**](BuiltList.md) | | [optional] -**arrayArrayOfModel** | [**BuiltList>**](BuiltList.md) | | [optional] +**arrayOfString** | **BuiltList<String>** | | [optional] +**arrayArrayOfInteger** | [**BuiltList<BuiltList<int>>**](BuiltList.md) | | [optional] +**arrayArrayOfModel** | [**BuiltList<BuiltList<ReadOnlyFirst>>**](BuiltList.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/DefaultApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/DefaultApi.md index 5c305ecaa71f..5b5a2cdead65 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/DefaultApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/DefaultApi.md @@ -21,12 +21,12 @@ Method | HTTP request | Description ```dart import 'package:openapi/api.dart'; -var api_instance = new DefaultApi(); +final api = Openapi().getDefaultApi(); try { - var result = api_instance.fooGet(); - print(result); -} catch (e) { + final response = api.fooGet(); + print(response); +} catch on DioError (e) { print('Exception when calling DefaultApi->fooGet: $e\n'); } ``` diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/EnumArrays.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/EnumArrays.md index 9cc4d727b2a9..06170bb8f51d 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/EnumArrays.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/EnumArrays.md @@ -9,7 +9,7 @@ import 'package:openapi/api.dart'; Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **justSymbol** | **String** | | [optional] -**arrayEnum** | **BuiltList** | | [optional] +**arrayEnum** | **BuiltList<String>** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md index 8ceda8fa68d9..00d1bde3e34d 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md @@ -36,12 +36,12 @@ Health check endpoint ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); +final api = Openapi().getFakeApi(); try { - var result = api_instance.fakeHealthGet(); - print(result); -} catch (e) { + final response = api.fakeHealthGet(); + print(response); +} catch on DioError (e) { print('Exception when calling FakeApi->fakeHealthGet: $e\n'); } ``` @@ -76,14 +76,14 @@ import 'package:openapi/api.dart'; //defaultApiClient.getAuthentication('http_signature_test').username = 'YOUR_USERNAME' //defaultApiClient.getAuthentication('http_signature_test').password = 'YOUR_PASSWORD'; -var api_instance = new FakeApi(); -var pet = new Pet(); // Pet | Pet object that needs to be added to the store -var query1 = query1_example; // String | query parameter -var header1 = header1_example; // String | header parameter +final api = Openapi().getFakeApi(); +final Pet pet = ; // Pet | Pet object that needs to be added to the store +final String query1 = query1_example; // String | query parameter +final String header1 = header1_example; // String | header parameter try { - api_instance.fakeHttpSignatureTest(pet, query1, header1); -} catch (e) { + api.fakeHttpSignatureTest(pet, query1, header1); +} catch on DioError (e) { print('Exception when calling FakeApi->fakeHttpSignatureTest: $e\n'); } ``` @@ -122,13 +122,13 @@ Test serialization of outer boolean types ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var body = new bool(); // bool | Input boolean as post body +final api = Openapi().getFakeApi(); +final bool body = true; // bool | Input boolean as post body try { - var result = api_instance.fakeOuterBooleanSerialize(body); - print(result); -} catch (e) { + final response = api.fakeOuterBooleanSerialize(body); + print(response); +} catch on DioError (e) { print('Exception when calling FakeApi->fakeOuterBooleanSerialize: $e\n'); } ``` @@ -165,13 +165,13 @@ Test serialization of object with outer number type ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var outerComposite = new OuterComposite(); // OuterComposite | Input composite as post body +final api = Openapi().getFakeApi(); +final OuterComposite outerComposite = ; // OuterComposite | Input composite as post body try { - var result = api_instance.fakeOuterCompositeSerialize(outerComposite); - print(result); -} catch (e) { + final response = api.fakeOuterCompositeSerialize(outerComposite); + print(response); +} catch on DioError (e) { print('Exception when calling FakeApi->fakeOuterCompositeSerialize: $e\n'); } ``` @@ -208,13 +208,13 @@ Test serialization of outer number types ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var body = new num(); // num | Input number as post body +final api = Openapi().getFakeApi(); +final num body = 8.14; // num | Input number as post body try { - var result = api_instance.fakeOuterNumberSerialize(body); - print(result); -} catch (e) { + final response = api.fakeOuterNumberSerialize(body); + print(response); +} catch on DioError (e) { print('Exception when calling FakeApi->fakeOuterNumberSerialize: $e\n'); } ``` @@ -251,13 +251,13 @@ Test serialization of outer string types ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var body = new String(); // String | Input string as post body +final api = Openapi().getFakeApi(); +final String body = body_example; // String | Input string as post body try { - var result = api_instance.fakeOuterStringSerialize(body); - print(result); -} catch (e) { + final response = api.fakeOuterStringSerialize(body); + print(response); +} catch on DioError (e) { print('Exception when calling FakeApi->fakeOuterStringSerialize: $e\n'); } ``` @@ -294,13 +294,13 @@ Test serialization of enum (int) properties with examples ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var outerObjectWithEnumProperty = new OuterObjectWithEnumProperty(); // OuterObjectWithEnumProperty | Input enum (int) as post body +final api = Openapi().getFakeApi(); +final OuterObjectWithEnumProperty outerObjectWithEnumProperty = ; // OuterObjectWithEnumProperty | Input enum (int) as post body try { - var result = api_instance.fakePropertyEnumIntegerSerialize(outerObjectWithEnumProperty); - print(result); -} catch (e) { + final response = api.fakePropertyEnumIntegerSerialize(outerObjectWithEnumProperty); + print(response); +} catch on DioError (e) { print('Exception when calling FakeApi->fakePropertyEnumIntegerSerialize: $e\n'); } ``` @@ -337,12 +337,12 @@ For this test, the body for this request much reference a schema named `File`. ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var fileSchemaTestClass = new FileSchemaTestClass(); // FileSchemaTestClass | +final api = Openapi().getFakeApi(); +final FileSchemaTestClass fileSchemaTestClass = ; // FileSchemaTestClass | try { - api_instance.testBodyWithFileSchema(fileSchemaTestClass); -} catch (e) { + api.testBodyWithFileSchema(fileSchemaTestClass); +} catch on DioError (e) { print('Exception when calling FakeApi->testBodyWithFileSchema: $e\n'); } ``` @@ -377,13 +377,13 @@ No authorization required ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var query = query_example; // String | -var user = new User(); // User | +final api = Openapi().getFakeApi(); +final String query = query_example; // String | +final User user = ; // User | try { - api_instance.testBodyWithQueryParams(query, user); -} catch (e) { + api.testBodyWithQueryParams(query, user); +} catch on DioError (e) { print('Exception when calling FakeApi->testBodyWithQueryParams: $e\n'); } ``` @@ -421,13 +421,13 @@ To test \"client\" model ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var modelClient = new ModelClient(); // ModelClient | client model +final api = Openapi().getFakeApi(); +final ModelClient modelClient = ; // ModelClient | client model try { - var result = api_instance.testClientModel(modelClient); - print(result); -} catch (e) { + final response = api.testClientModel(modelClient); + print(response); +} catch on DioError (e) { print('Exception when calling FakeApi->testClientModel: $e\n'); } ``` @@ -467,25 +467,25 @@ import 'package:openapi/api.dart'; //defaultApiClient.getAuthentication('http_basic_test').username = 'YOUR_USERNAME' //defaultApiClient.getAuthentication('http_basic_test').password = 'YOUR_PASSWORD'; -var api_instance = new FakeApi(); -var number = 8.14; // num | None -var double_ = 1.2; // double | None -var patternWithoutDelimiter = patternWithoutDelimiter_example; // String | None -var byte = BYTE_ARRAY_DATA_HERE; // String | None -var integer = 56; // int | None -var int32 = 56; // int | None -var int64 = 789; // int | None -var float = 3.4; // double | None -var string = string_example; // String | None -var binary = BINARY_DATA_HERE; // Uint8List | None -var date = 2013-10-20; // Date | None -var dateTime = 2013-10-20T19:20:30+01:00; // DateTime | None -var password = password_example; // String | None -var callback = callback_example; // String | None +final api = Openapi().getFakeApi(); +final num number = 8.14; // num | None +final double double_ = 1.2; // double | None +final String patternWithoutDelimiter = patternWithoutDelimiter_example; // String | None +final String byte = BYTE_ARRAY_DATA_HERE; // String | None +final int integer = 56; // int | None +final int int32 = 56; // int | None +final int int64 = 789; // int | None +final double float = 3.4; // double | None +final String string = string_example; // String | None +final Uint8List binary = BINARY_DATA_HERE; // Uint8List | None +final Date date = 2013-10-20; // Date | None +final DateTime dateTime = 2013-10-20T19:20:30+01:00; // DateTime | None +final String password = password_example; // String | None +final String callback = callback_example; // String | None try { - api_instance.testEndpointParameters(number, double_, patternWithoutDelimiter, byte, integer, int32, int64, float, string, binary, date, dateTime, password, callback); -} catch (e) { + api.testEndpointParameters(number, double_, patternWithoutDelimiter, byte, integer, int32, int64, float, string, binary, date, dateTime, password, callback); +} catch on DioError (e) { print('Exception when calling FakeApi->testEndpointParameters: $e\n'); } ``` @@ -535,19 +535,19 @@ To test enum parameters ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var enumHeaderStringArray = []; // BuiltList | Header parameter enum test (string array) -var enumHeaderString = enumHeaderString_example; // String | Header parameter enum test (string) -var enumQueryStringArray = []; // BuiltList | Query parameter enum test (string array) -var enumQueryString = enumQueryString_example; // String | Query parameter enum test (string) -var enumQueryInteger = 56; // int | Query parameter enum test (double) -var enumQueryDouble = 1.2; // double | Query parameter enum test (double) -var enumFormStringArray = [enumFormStringArray_example]; // BuiltList | Form parameter enum test (string array) -var enumFormString = enumFormString_example; // String | Form parameter enum test (string) +final api = Openapi().getFakeApi(); +final BuiltList enumHeaderStringArray = ; // BuiltList | Header parameter enum test (string array) +final String enumHeaderString = enumHeaderString_example; // String | Header parameter enum test (string) +final BuiltList enumQueryStringArray = ; // BuiltList | Query parameter enum test (string array) +final String enumQueryString = enumQueryString_example; // String | Query parameter enum test (string) +final int enumQueryInteger = 56; // int | Query parameter enum test (double) +final double enumQueryDouble = 1.2; // double | Query parameter enum test (double) +final BuiltList enumFormStringArray = enumFormStringArray_example; // BuiltList | Form parameter enum test (string array) +final String enumFormString = enumFormString_example; // String | Form parameter enum test (string) try { - api_instance.testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString); -} catch (e) { + api.testEnumParameters(enumHeaderStringArray, enumHeaderString, enumQueryStringArray, enumQueryString, enumQueryInteger, enumQueryDouble, enumFormStringArray, enumFormString); +} catch on DioError (e) { print('Exception when calling FakeApi->testEnumParameters: $e\n'); } ``` @@ -556,13 +556,13 @@ try { Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **enumHeaderStringArray** | [**BuiltList**](String.md)| Header parameter enum test (string array) | [optional] + **enumHeaderStringArray** | [**BuiltList<String>**](String.md)| Header parameter enum test (string array) | [optional] **enumHeaderString** | **String**| Header parameter enum test (string) | [optional] [default to '-efg'] - **enumQueryStringArray** | [**BuiltList**](String.md)| Query parameter enum test (string array) | [optional] + **enumQueryStringArray** | [**BuiltList<String>**](String.md)| Query parameter enum test (string array) | [optional] **enumQueryString** | **String**| Query parameter enum test (string) | [optional] [default to '-efg'] **enumQueryInteger** | **int**| Query parameter enum test (double) | [optional] **enumQueryDouble** | **double**| Query parameter enum test (double) | [optional] - **enumFormStringArray** | [**BuiltList**](String.md)| Form parameter enum test (string array) | [optional] [default to '$'] + **enumFormStringArray** | [**BuiltList<String>**](String.md)| Form parameter enum test (string array) | [optional] [default to '$'] **enumFormString** | **String**| Form parameter enum test (string) | [optional] [default to '-efg'] ### Return type @@ -594,17 +594,17 @@ import 'package:openapi/api.dart'; //defaultApiClient.getAuthentication('bearer_test').username = 'YOUR_USERNAME' //defaultApiClient.getAuthentication('bearer_test').password = 'YOUR_PASSWORD'; -var api_instance = new FakeApi(); -var requiredStringGroup = 56; // int | Required String in group parameters -var requiredBooleanGroup = true; // bool | Required Boolean in group parameters -var requiredInt64Group = 789; // int | Required Integer in group parameters -var stringGroup = 56; // int | String in group parameters -var booleanGroup = true; // bool | Boolean in group parameters -var int64Group = 789; // int | Integer in group parameters +final api = Openapi().getFakeApi(); +final int requiredStringGroup = 56; // int | Required String in group parameters +final bool requiredBooleanGroup = true; // bool | Required Boolean in group parameters +final int requiredInt64Group = 789; // int | Required Integer in group parameters +final int stringGroup = 56; // int | String in group parameters +final bool booleanGroup = true; // bool | Boolean in group parameters +final int int64Group = 789; // int | Integer in group parameters try { - api_instance.testGroupParameters(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group); -} catch (e) { + api.testGroupParameters(requiredStringGroup, requiredBooleanGroup, requiredInt64Group, stringGroup, booleanGroup, int64Group); +} catch on DioError (e) { print('Exception when calling FakeApi->testGroupParameters: $e\n'); } ``` @@ -644,12 +644,12 @@ test inline additionalProperties ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var requestBody = new BuiltMap(); // BuiltMap | request body +final api = Openapi().getFakeApi(); +final BuiltMap requestBody = ; // BuiltMap | request body try { - api_instance.testInlineAdditionalProperties(requestBody); -} catch (e) { + api.testInlineAdditionalProperties(requestBody); +} catch on DioError (e) { print('Exception when calling FakeApi->testInlineAdditionalProperties: $e\n'); } ``` @@ -658,7 +658,7 @@ try { Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **requestBody** | [**BuiltMap**](String.md)| request body | + **requestBody** | [**BuiltMap<String, String>**](String.md)| request body | ### Return type @@ -684,13 +684,13 @@ test json serialization of form data ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var param = param_example; // String | field1 -var param2 = param2_example; // String | field2 +final api = Openapi().getFakeApi(); +final String param = param_example; // String | field1 +final String param2 = param2_example; // String | field2 try { - api_instance.testJsonFormData(param, param2); -} catch (e) { + api.testJsonFormData(param, param2); +} catch on DioError (e) { print('Exception when calling FakeApi->testJsonFormData: $e\n'); } ``` @@ -728,16 +728,16 @@ To test the collection format in query parameters ```dart import 'package:openapi/api.dart'; -var api_instance = new FakeApi(); -var pipe = []; // BuiltList | -var ioutil = []; // BuiltList | -var http = []; // BuiltList | -var url = []; // BuiltList | -var context = []; // BuiltList | +final api = Openapi().getFakeApi(); +final BuiltList pipe = ; // BuiltList | +final BuiltList ioutil = ; // BuiltList | +final BuiltList http = ; // BuiltList | +final BuiltList url = ; // BuiltList | +final BuiltList context = ; // BuiltList | try { - api_instance.testQueryParameterCollectionFormat(pipe, ioutil, http, url, context); -} catch (e) { + api.testQueryParameterCollectionFormat(pipe, ioutil, http, url, context); +} catch on DioError (e) { print('Exception when calling FakeApi->testQueryParameterCollectionFormat: $e\n'); } ``` @@ -746,11 +746,11 @@ try { Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **pipe** | [**BuiltList**](String.md)| | - **ioutil** | [**BuiltList**](String.md)| | - **http** | [**BuiltList**](String.md)| | - **url** | [**BuiltList**](String.md)| | - **context** | [**BuiltList**](String.md)| | + **pipe** | [**BuiltList<String>**](String.md)| | + **ioutil** | [**BuiltList<String>**](String.md)| | + **http** | [**BuiltList<String>**](String.md)| | + **url** | [**BuiltList<String>**](String.md)| | + **context** | [**BuiltList<String>**](String.md)| | ### Return type diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md index 98fe0b47358b..cabd6fe0a99b 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeClassnameTags123Api.md @@ -27,13 +27,13 @@ import 'package:openapi/api.dart'; // uncomment below to setup prefix (e.g. Bearer) for API key, if needed //defaultApiClient.getAuthentication('api_key_query').apiKeyPrefix = 'Bearer'; -var api_instance = new FakeClassnameTags123Api(); -var modelClient = new ModelClient(); // ModelClient | client model +final api = Openapi().getFakeClassnameTags123Api(); +final ModelClient modelClient = ; // ModelClient | client model try { - var result = api_instance.testClassname(modelClient); - print(result); -} catch (e) { + final response = api.testClassname(modelClient); + print(response); +} catch on DioError (e) { print('Exception when calling FakeClassnameTags123Api->testClassname: $e\n'); } ``` diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FileSchemaTestClass.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FileSchemaTestClass.md index 9b7eebcb2bf1..105fece87f1d 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FileSchemaTestClass.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FileSchemaTestClass.md @@ -9,7 +9,7 @@ import 'package:openapi/api.dart'; Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **file** | [**ModelFile**](ModelFile.md) | | [optional] -**files** | [**BuiltList**](ModelFile.md) | | [optional] +**files** | [**BuiltList<ModelFile>**](ModelFile.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/MapTest.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/MapTest.md index 2da739ba8b83..4ad87df64232 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/MapTest.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/MapTest.md @@ -8,10 +8,10 @@ import 'package:openapi/api.dart'; ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**mapMapOfString** | [**BuiltMap>**](BuiltMap.md) | | [optional] -**mapOfEnumString** | **BuiltMap** | | [optional] -**directMap** | **BuiltMap** | | [optional] -**indirectMap** | **BuiltMap** | | [optional] +**mapMapOfString** | [**BuiltMap<String, BuiltMap<String, String>>**](BuiltMap.md) | | [optional] +**mapOfEnumString** | **BuiltMap<String, String>** | | [optional] +**directMap** | **BuiltMap<String, bool>** | | [optional] +**indirectMap** | **BuiltMap<String, bool>** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/MixedPropertiesAndAdditionalPropertiesClass.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/MixedPropertiesAndAdditionalPropertiesClass.md index f50d97687517..b1a4c4ccc401 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/MixedPropertiesAndAdditionalPropertiesClass.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/MixedPropertiesAndAdditionalPropertiesClass.md @@ -10,7 +10,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **uuid** | **String** | | [optional] **dateTime** | [**DateTime**](DateTime.md) | | [optional] -**map** | [**BuiltMap**](Animal.md) | | [optional] +**map** | [**BuiltMap<String, Animal>**](Animal.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/NullableClass.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/NullableClass.md index 0241e3eb15e8..4ce8d5e17576 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/NullableClass.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/NullableClass.md @@ -14,12 +14,12 @@ Name | Type | Description | Notes **stringProp** | **String** | | [optional] **dateProp** | [**Date**](Date.md) | | [optional] **datetimeProp** | [**DateTime**](DateTime.md) | | [optional] -**arrayNullableProp** | [**BuiltList**](JsonObject.md) | | [optional] -**arrayAndItemsNullableProp** | [**BuiltList**](JsonObject.md) | | [optional] -**arrayItemsNullable** | [**BuiltList**](JsonObject.md) | | [optional] -**objectNullableProp** | [**BuiltMap**](JsonObject.md) | | [optional] -**objectAndItemsNullableProp** | [**BuiltMap**](JsonObject.md) | | [optional] -**objectItemsNullable** | [**BuiltMap**](JsonObject.md) | | [optional] +**arrayNullableProp** | [**BuiltList<JsonObject>**](JsonObject.md) | | [optional] +**arrayAndItemsNullableProp** | [**BuiltList<JsonObject>**](JsonObject.md) | | [optional] +**arrayItemsNullable** | [**BuiltList<JsonObject>**](JsonObject.md) | | [optional] +**objectNullableProp** | [**BuiltMap<String, JsonObject>**](JsonObject.md) | | [optional] +**objectAndItemsNullableProp** | [**BuiltMap<String, JsonObject>**](JsonObject.md) | | [optional] +**objectItemsNullable** | [**BuiltMap<String, JsonObject>**](JsonObject.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/Pet.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/Pet.md index 3640640df190..08e0aeedd784 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/Pet.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/Pet.md @@ -11,8 +11,8 @@ Name | Type | Description | Notes **id** | **int** | | [optional] **category** | [**Category**](Category.md) | | [optional] **name** | **String** | | -**photoUrls** | **BuiltSet** | | -**tags** | [**BuiltList**](Tag.md) | | [optional] +**photoUrls** | **BuiltSet<String>** | | +**tags** | [**BuiltList<Tag>**](Tag.md) | | [optional] **status** | **String** | pet status in the store | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md index bca230088d8b..70f5342d771d 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/PetApi.md @@ -31,12 +31,12 @@ import 'package:openapi/api.dart'; // TODO Configure OAuth2 access token for authorization: petstore_auth //defaultApiClient.getAuthentication('petstore_auth').accessToken = 'YOUR_ACCESS_TOKEN'; -var api_instance = new PetApi(); -var pet = new Pet(); // Pet | Pet object that needs to be added to the store +final api = Openapi().getPetApi(); +final Pet pet = ; // Pet | Pet object that needs to be added to the store try { - api_instance.addPet(pet); -} catch (e) { + api.addPet(pet); +} catch on DioError (e) { print('Exception when calling PetApi->addPet: $e\n'); } ``` @@ -73,13 +73,13 @@ import 'package:openapi/api.dart'; // TODO Configure OAuth2 access token for authorization: petstore_auth //defaultApiClient.getAuthentication('petstore_auth').accessToken = 'YOUR_ACCESS_TOKEN'; -var api_instance = new PetApi(); -var petId = 789; // int | Pet id to delete -var apiKey = apiKey_example; // String | +final api = Openapi().getPetApi(); +final int petId = 789; // int | Pet id to delete +final String apiKey = apiKey_example; // String | try { - api_instance.deletePet(petId, apiKey); -} catch (e) { + api.deletePet(petId, apiKey); +} catch on DioError (e) { print('Exception when calling PetApi->deletePet: $e\n'); } ``` @@ -119,13 +119,13 @@ import 'package:openapi/api.dart'; // TODO Configure OAuth2 access token for authorization: petstore_auth //defaultApiClient.getAuthentication('petstore_auth').accessToken = 'YOUR_ACCESS_TOKEN'; -var api_instance = new PetApi(); -var status = []; // BuiltList | Status values that need to be considered for filter +final api = Openapi().getPetApi(); +final BuiltList status = ; // BuiltList | Status values that need to be considered for filter try { - var result = api_instance.findPetsByStatus(status); - print(result); -} catch (e) { + final response = api.findPetsByStatus(status); + print(response); +} catch on DioError (e) { print('Exception when calling PetApi->findPetsByStatus: $e\n'); } ``` @@ -134,11 +134,11 @@ try { Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **status** | [**BuiltList**](String.md)| Status values that need to be considered for filter | + **status** | [**BuiltList<String>**](String.md)| Status values that need to be considered for filter | ### Return type -[**BuiltList**](Pet.md) +[**BuiltList<Pet>**](Pet.md) ### Authorization @@ -164,13 +164,13 @@ import 'package:openapi/api.dart'; // TODO Configure OAuth2 access token for authorization: petstore_auth //defaultApiClient.getAuthentication('petstore_auth').accessToken = 'YOUR_ACCESS_TOKEN'; -var api_instance = new PetApi(); -var tags = []; // BuiltSet | Tags to filter by +final api = Openapi().getPetApi(); +final BuiltSet tags = ; // BuiltSet | Tags to filter by try { - var result = api_instance.findPetsByTags(tags); - print(result); -} catch (e) { + final response = api.findPetsByTags(tags); + print(response); +} catch on DioError (e) { print('Exception when calling PetApi->findPetsByTags: $e\n'); } ``` @@ -179,11 +179,11 @@ try { Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **tags** | [**BuiltSet**](String.md)| Tags to filter by | + **tags** | [**BuiltSet<String>**](String.md)| Tags to filter by | ### Return type -[**BuiltSet**](Pet.md) +[**BuiltSet<Pet>**](Pet.md) ### Authorization @@ -211,13 +211,13 @@ import 'package:openapi/api.dart'; // uncomment below to setup prefix (e.g. Bearer) for API key, if needed //defaultApiClient.getAuthentication('api_key').apiKeyPrefix = 'Bearer'; -var api_instance = new PetApi(); -var petId = 789; // int | ID of pet to return +final api = Openapi().getPetApi(); +final int petId = 789; // int | ID of pet to return try { - var result = api_instance.getPetById(petId); - print(result); -} catch (e) { + final response = api.getPetById(petId); + print(response); +} catch on DioError (e) { print('Exception when calling PetApi->getPetById: $e\n'); } ``` @@ -254,12 +254,12 @@ import 'package:openapi/api.dart'; // TODO Configure OAuth2 access token for authorization: petstore_auth //defaultApiClient.getAuthentication('petstore_auth').accessToken = 'YOUR_ACCESS_TOKEN'; -var api_instance = new PetApi(); -var pet = new Pet(); // Pet | Pet object that needs to be added to the store +final api = Openapi().getPetApi(); +final Pet pet = ; // Pet | Pet object that needs to be added to the store try { - api_instance.updatePet(pet); -} catch (e) { + api.updatePet(pet); +} catch on DioError (e) { print('Exception when calling PetApi->updatePet: $e\n'); } ``` @@ -296,14 +296,14 @@ import 'package:openapi/api.dart'; // TODO Configure OAuth2 access token for authorization: petstore_auth //defaultApiClient.getAuthentication('petstore_auth').accessToken = 'YOUR_ACCESS_TOKEN'; -var api_instance = new PetApi(); -var petId = 789; // int | ID of pet that needs to be updated -var name = name_example; // String | Updated name of the pet -var status = status_example; // String | Updated status of the pet +final api = Openapi().getPetApi(); +final int petId = 789; // int | ID of pet that needs to be updated +final String name = name_example; // String | Updated name of the pet +final String status = status_example; // String | Updated status of the pet try { - api_instance.updatePetWithForm(petId, name, status); -} catch (e) { + api.updatePetWithForm(petId, name, status); +} catch on DioError (e) { print('Exception when calling PetApi->updatePetWithForm: $e\n'); } ``` @@ -342,15 +342,15 @@ import 'package:openapi/api.dart'; // TODO Configure OAuth2 access token for authorization: petstore_auth //defaultApiClient.getAuthentication('petstore_auth').accessToken = 'YOUR_ACCESS_TOKEN'; -var api_instance = new PetApi(); -var petId = 789; // int | ID of pet to update -var additionalMetadata = additionalMetadata_example; // String | Additional data to pass to server -var file = BINARY_DATA_HERE; // MultipartFile | file to upload +final api = Openapi().getPetApi(); +final int petId = 789; // int | ID of pet to update +final String additionalMetadata = additionalMetadata_example; // String | Additional data to pass to server +final MultipartFile file = BINARY_DATA_HERE; // MultipartFile | file to upload try { - var result = api_instance.uploadFile(petId, additionalMetadata, file); - print(result); -} catch (e) { + final response = api.uploadFile(petId, additionalMetadata, file); + print(response); +} catch on DioError (e) { print('Exception when calling PetApi->uploadFile: $e\n'); } ``` @@ -389,15 +389,15 @@ import 'package:openapi/api.dart'; // TODO Configure OAuth2 access token for authorization: petstore_auth //defaultApiClient.getAuthentication('petstore_auth').accessToken = 'YOUR_ACCESS_TOKEN'; -var api_instance = new PetApi(); -var petId = 789; // int | ID of pet to update -var requiredFile = BINARY_DATA_HERE; // MultipartFile | file to upload -var additionalMetadata = additionalMetadata_example; // String | Additional data to pass to server +final api = Openapi().getPetApi(); +final int petId = 789; // int | ID of pet to update +final MultipartFile requiredFile = BINARY_DATA_HERE; // MultipartFile | file to upload +final String additionalMetadata = additionalMetadata_example; // String | Additional data to pass to server try { - var result = api_instance.uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata); - print(result); -} catch (e) { + final response = api.uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata); + print(response); +} catch on DioError (e) { print('Exception when calling PetApi->uploadFileWithRequiredFile: $e\n'); } ``` diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/StoreApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/StoreApi.md index a7dbf9ad0197..e955785ca95e 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/StoreApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/StoreApi.md @@ -26,12 +26,12 @@ For valid response try integer IDs with value < 1000. Anything above 1000 or non ```dart import 'package:openapi/api.dart'; -var api_instance = new StoreApi(); -var orderId = orderId_example; // String | ID of the order that needs to be deleted +final api = Openapi().getStoreApi(); +final String orderId = orderId_example; // String | ID of the order that needs to be deleted try { - api_instance.deleteOrder(orderId); -} catch (e) { + api.deleteOrder(orderId); +} catch on DioError (e) { print('Exception when calling StoreApi->deleteOrder: $e\n'); } ``` @@ -72,12 +72,12 @@ import 'package:openapi/api.dart'; // uncomment below to setup prefix (e.g. Bearer) for API key, if needed //defaultApiClient.getAuthentication('api_key').apiKeyPrefix = 'Bearer'; -var api_instance = new StoreApi(); +final api = Openapi().getStoreApi(); try { - var result = api_instance.getInventory(); - print(result); -} catch (e) { + final response = api.getInventory(); + print(response); +} catch on DioError (e) { print('Exception when calling StoreApi->getInventory: $e\n'); } ``` @@ -87,7 +87,7 @@ This endpoint does not need any parameter. ### Return type -**BuiltMap** +**BuiltMap<String, int>** ### Authorization @@ -111,13 +111,13 @@ For valid response try integer IDs with value <= 5 or > 10. Other values will ge ```dart import 'package:openapi/api.dart'; -var api_instance = new StoreApi(); -var orderId = 789; // int | ID of pet that needs to be fetched +final api = Openapi().getStoreApi(); +final int orderId = 789; // int | ID of pet that needs to be fetched try { - var result = api_instance.getOrderById(orderId); - print(result); -} catch (e) { + final response = api.getOrderById(orderId); + print(response); +} catch on DioError (e) { print('Exception when calling StoreApi->getOrderById: $e\n'); } ``` @@ -152,13 +152,13 @@ Place an order for a pet ```dart import 'package:openapi/api.dart'; -var api_instance = new StoreApi(); -var order = new Order(); // Order | order placed for purchasing the pet +final api = Openapi().getStoreApi(); +final Order order = ; // Order | order placed for purchasing the pet try { - var result = api_instance.placeOrder(order); - print(result); -} catch (e) { + final response = api.placeOrder(order); + print(response); +} catch on DioError (e) { print('Exception when calling StoreApi->placeOrder: $e\n'); } ``` diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/UserApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/UserApi.md index 32bc2e675da9..5e96b548e3b0 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/UserApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/UserApi.md @@ -30,12 +30,12 @@ This can only be done by the logged in user. ```dart import 'package:openapi/api.dart'; -var api_instance = new UserApi(); -var user = new User(); // User | Created user object +final api = Openapi().getUserApi(); +final User user = ; // User | Created user object try { - api_instance.createUser(user); -} catch (e) { + api.createUser(user); +} catch on DioError (e) { print('Exception when calling UserApi->createUser: $e\n'); } ``` @@ -70,12 +70,12 @@ Creates list of users with given input array ```dart import 'package:openapi/api.dart'; -var api_instance = new UserApi(); -var user = [new BuiltList()]; // BuiltList | List of user object +final api = Openapi().getUserApi(); +final BuiltList user = ; // BuiltList | List of user object try { - api_instance.createUsersWithArrayInput(user); -} catch (e) { + api.createUsersWithArrayInput(user); +} catch on DioError (e) { print('Exception when calling UserApi->createUsersWithArrayInput: $e\n'); } ``` @@ -84,7 +84,7 @@ try { Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **user** | [**BuiltList**](User.md)| List of user object | + **user** | [**BuiltList<User>**](User.md)| List of user object | ### Return type @@ -110,12 +110,12 @@ Creates list of users with given input array ```dart import 'package:openapi/api.dart'; -var api_instance = new UserApi(); -var user = [new BuiltList()]; // BuiltList | List of user object +final api = Openapi().getUserApi(); +final BuiltList user = ; // BuiltList | List of user object try { - api_instance.createUsersWithListInput(user); -} catch (e) { + api.createUsersWithListInput(user); +} catch on DioError (e) { print('Exception when calling UserApi->createUsersWithListInput: $e\n'); } ``` @@ -124,7 +124,7 @@ try { Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **user** | [**BuiltList**](User.md)| List of user object | + **user** | [**BuiltList<User>**](User.md)| List of user object | ### Return type @@ -152,12 +152,12 @@ This can only be done by the logged in user. ```dart import 'package:openapi/api.dart'; -var api_instance = new UserApi(); -var username = username_example; // String | The name that needs to be deleted +final api = Openapi().getUserApi(); +final String username = username_example; // String | The name that needs to be deleted try { - api_instance.deleteUser(username); -} catch (e) { + api.deleteUser(username); +} catch on DioError (e) { print('Exception when calling UserApi->deleteUser: $e\n'); } ``` @@ -192,13 +192,13 @@ Get user by user name ```dart import 'package:openapi/api.dart'; -var api_instance = new UserApi(); -var username = username_example; // String | The name that needs to be fetched. Use user1 for testing. +final api = Openapi().getUserApi(); +final String username = username_example; // String | The name that needs to be fetched. Use user1 for testing. try { - var result = api_instance.getUserByName(username); - print(result); -} catch (e) { + final response = api.getUserByName(username); + print(response); +} catch on DioError (e) { print('Exception when calling UserApi->getUserByName: $e\n'); } ``` @@ -233,14 +233,14 @@ Logs user into the system ```dart import 'package:openapi/api.dart'; -var api_instance = new UserApi(); -var username = username_example; // String | The user name for login -var password = password_example; // String | The password for login in clear text +final api = Openapi().getUserApi(); +final String username = username_example; // String | The user name for login +final String password = password_example; // String | The password for login in clear text try { - var result = api_instance.loginUser(username, password); - print(result); -} catch (e) { + final response = api.loginUser(username, password); + print(response); +} catch on DioError (e) { print('Exception when calling UserApi->loginUser: $e\n'); } ``` @@ -276,11 +276,11 @@ Logs out current logged in user session ```dart import 'package:openapi/api.dart'; -var api_instance = new UserApi(); +final api = Openapi().getUserApi(); try { - api_instance.logoutUser(); -} catch (e) { + api.logoutUser(); +} catch on DioError (e) { print('Exception when calling UserApi->logoutUser: $e\n'); } ``` @@ -314,13 +314,13 @@ This can only be done by the logged in user. ```dart import 'package:openapi/api.dart'; -var api_instance = new UserApi(); -var username = username_example; // String | name that need to be deleted -var user = new User(); // User | Updated user object +final api = Openapi().getUserApi(); +final String username = username_example; // String | name that need to be deleted +final User user = ; // User | Updated user object try { - api_instance.updateUser(username, user); -} catch (e) { + api.updateUser(username, user); +} catch on DioError (e) { print('Exception when calling UserApi->updateUser: $e\n'); } ``` diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart index a65b96479442..4d0e1366d063 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/another_fake_api.dart @@ -18,8 +18,19 @@ class AnotherFakeApi { const AnotherFakeApi(this._dio, this._serializers); /// To test special tags - /// /// To test special tags and operation ID starting with number + /// + /// Parameters: + /// * [modelClient] - client model + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [ModelClient] as data + /// Throws [DioError] if API call or serialization fails Future> call123testSpecialTags({ required ModelClient modelClient, CancelToken? cancelToken, diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart index 22b4500214c8..3a46c9a2048e 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/default_api.dart @@ -17,9 +17,19 @@ class DefaultApi { const DefaultApi(this._dio, this._serializers); + /// fooGet /// /// - /// + /// Parameters: + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [InlineResponseDefault] as data + /// Throws [DioError] if API call or serialization fails Future> fooGet({ CancelToken? cancelToken, Map? headers, diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart index c9f67f4b736b..583f89de933b 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart @@ -28,8 +28,18 @@ class FakeApi { const FakeApi(this._dio, this._serializers); /// Health check endpoint - /// /// + /// + /// Parameters: + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [HealthCheckResult] as data + /// Throws [DioError] if API call or serialization fails Future> fakeHealthGet({ CancelToken? cancelToken, Map? headers, @@ -94,8 +104,21 @@ class FakeApi { } /// test http signature authentication - /// /// + /// + /// Parameters: + /// * [pet] - Pet object that needs to be added to the store + /// * [query1] - query parameter + /// * [header1] - header parameter + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> fakeHttpSignatureTest({ required Pet pet, String? query1, @@ -162,9 +185,20 @@ class FakeApi { return _response; } - /// - /// + /// fakeOuterBooleanSerialize /// Test serialization of outer boolean types + /// + /// Parameters: + /// * [body] - Input boolean as post body + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [bool] as data + /// Throws [DioError] if API call or serialization fails Future> fakeOuterBooleanSerialize({ bool? body, CancelToken? cancelToken, @@ -244,9 +278,20 @@ class FakeApi { ); } - /// - /// + /// fakeOuterCompositeSerialize /// Test serialization of object with outer number type + /// + /// Parameters: + /// * [outerComposite] - Input composite as post body + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [OuterComposite] as data + /// Throws [DioError] if API call or serialization fails Future> fakeOuterCompositeSerialize({ OuterComposite? outerComposite, CancelToken? cancelToken, @@ -331,9 +376,20 @@ class FakeApi { ); } - /// - /// + /// fakeOuterNumberSerialize /// Test serialization of outer number types + /// + /// Parameters: + /// * [body] - Input number as post body + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [num] as data + /// Throws [DioError] if API call or serialization fails Future> fakeOuterNumberSerialize({ num? body, CancelToken? cancelToken, @@ -413,9 +469,20 @@ class FakeApi { ); } - /// - /// + /// fakeOuterStringSerialize /// Test serialization of outer string types + /// + /// Parameters: + /// * [body] - Input string as post body + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [String] as data + /// Throws [DioError] if API call or serialization fails Future> fakeOuterStringSerialize({ String? body, CancelToken? cancelToken, @@ -495,9 +562,20 @@ class FakeApi { ); } - /// - /// + /// fakePropertyEnumIntegerSerialize /// Test serialization of enum (int) properties with examples + /// + /// Parameters: + /// * [outerObjectWithEnumProperty] - Input enum (int) as post body + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [OuterObjectWithEnumProperty] as data + /// Throws [DioError] if API call or serialization fails Future> fakePropertyEnumIntegerSerialize({ required OuterObjectWithEnumProperty outerObjectWithEnumProperty, CancelToken? cancelToken, @@ -582,9 +660,20 @@ class FakeApi { ); } - /// + /// testBodyWithFileSchema + /// For this test, the body for this request much reference a schema named `File`. /// - /// For this test, the body for this request much reference a schema named `File`. + /// Parameters: + /// * [fileSchemaTestClass] + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> testBodyWithFileSchema({ required FileSchemaTestClass fileSchemaTestClass, CancelToken? cancelToken, @@ -642,9 +731,21 @@ class FakeApi { return _response; } + /// testBodyWithQueryParams /// /// - /// + /// Parameters: + /// * [query] + /// * [user] + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> testBodyWithQueryParams({ required String query, required User user, @@ -704,9 +805,20 @@ class FakeApi { return _response; } - /// To test \"client\" model + /// To test \"client\" model + /// To test \"client\" model + /// + /// Parameters: + /// * [modelClient] - client model + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress /// - /// To test \"client\" model + /// Returns a [Future] containing a [Response] with a [ModelClient] as data + /// Throws [DioError] if API call or serialization fails Future> testClientModel({ required ModelClient modelClient, CancelToken? cancelToken, @@ -792,8 +904,32 @@ class FakeApi { } /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 - /// /// Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 + /// + /// Parameters: + /// * [number] - None + /// * [double_] - None + /// * [patternWithoutDelimiter] - None + /// * [byte] - None + /// * [integer] - None + /// * [int32] - None + /// * [int64] - None + /// * [float] - None + /// * [string] - None + /// * [binary] - None + /// * [date] - None + /// * [dateTime] - None + /// * [password] - None + /// * [callback] - None + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> testEndpointParameters({ required num number, required double double_, @@ -884,8 +1020,26 @@ class FakeApi { } /// To test enum parameters - /// /// To test enum parameters + /// + /// Parameters: + /// * [enumHeaderStringArray] - Header parameter enum test (string array) + /// * [enumHeaderString] - Header parameter enum test (string) + /// * [enumQueryStringArray] - Query parameter enum test (string array) + /// * [enumQueryString] - Query parameter enum test (string) + /// * [enumQueryInteger] - Query parameter enum test (double) + /// * [enumQueryDouble] - Query parameter enum test (double) + /// * [enumFormStringArray] - Form parameter enum test (string array) + /// * [enumFormString] - Form parameter enum test (string) + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> testEnumParameters({ BuiltList? enumHeaderStringArray, String? enumHeaderString, @@ -959,8 +1113,24 @@ class FakeApi { } /// Fake endpoint to test group parameters (optional) - /// /// Fake endpoint to test group parameters (optional) + /// + /// Parameters: + /// * [requiredStringGroup] - Required String in group parameters + /// * [requiredBooleanGroup] - Required Boolean in group parameters + /// * [requiredInt64Group] - Required Integer in group parameters + /// * [stringGroup] - String in group parameters + /// * [booleanGroup] - Boolean in group parameters + /// * [int64Group] - Integer in group parameters + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> testGroupParameters({ required int requiredStringGroup, required bool requiredBooleanGroup, @@ -1015,8 +1185,19 @@ class FakeApi { } /// test inline additionalProperties - /// /// + /// + /// Parameters: + /// * [requestBody] - request body + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> testInlineAdditionalProperties({ required BuiltMap requestBody, CancelToken? cancelToken, @@ -1075,8 +1256,20 @@ class FakeApi { } /// test json serialization of form data - /// /// + /// + /// Parameters: + /// * [param] - field1 + /// * [param2] - field2 + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> testJsonFormData({ required String param, required String param2, @@ -1137,9 +1330,24 @@ class FakeApi { return _response; } - /// - /// + /// testQueryParameterCollectionFormat /// To test the collection format in query parameters + /// + /// Parameters: + /// * [pipe] + /// * [ioutil] + /// * [http] + /// * [url] + /// * [context] + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> testQueryParameterCollectionFormat({ required BuiltList pipe, required BuiltList ioutil, diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart index e97d899d0be1..e48c38c96ba6 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_classname_tags123_api.dart @@ -18,8 +18,19 @@ class FakeClassnameTags123Api { const FakeClassnameTags123Api(this._dio, this._serializers); /// To test class name in snake case - /// /// To test class name in snake case + /// + /// Parameters: + /// * [modelClient] - client model + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [ModelClient] as data + /// Throws [DioError] if API call or serialization fails Future> testClassname({ required ModelClient modelClient, CancelToken? cancelToken, diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart index ede9b4e65bad..be1d9d27924d 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/pet_api.dart @@ -21,8 +21,19 @@ class PetApi { const PetApi(this._dio, this._serializers); /// Add a new pet to the store - /// /// + /// + /// Parameters: + /// * [pet] - Pet object that needs to be added to the store + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> addPet({ required Pet pet, CancelToken? cancelToken, @@ -86,8 +97,20 @@ class PetApi { } /// Deletes a pet - /// /// + /// + /// Parameters: + /// * [petId] - Pet id to delete + /// * [apiKey] + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> deletePet({ required int petId, String? apiKey, @@ -133,8 +156,19 @@ class PetApi { } /// Finds Pets by status - /// /// Multiple status values can be provided with comma separated strings + /// + /// Parameters: + /// * [status] - Status values that need to be considered for filter + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [BuiltList] as data + /// Throws [DioError] if API call or serialization fails Future>> findPetsByStatus({ required BuiltList status, CancelToken? cancelToken, @@ -206,8 +240,20 @@ class PetApi { } /// Finds Pets by tags - /// /// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + /// + /// Parameters: + /// * [tags] - Tags to filter by + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [BuiltSet] as data + /// Throws [DioError] if API call or serialization fails + @Deprecated('This operation has been deprecated') Future>> findPetsByTags({ required BuiltSet tags, CancelToken? cancelToken, @@ -279,8 +325,19 @@ class PetApi { } /// Find pet by ID - /// /// Returns a single pet + /// + /// Parameters: + /// * [petId] - ID of pet to return + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [Pet] as data + /// Throws [DioError] if API call or serialization fails Future> getPetById({ required int petId, CancelToken? cancelToken, @@ -353,8 +410,19 @@ class PetApi { } /// Update an existing pet - /// /// + /// + /// Parameters: + /// * [pet] - Pet object that needs to be added to the store + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> updatePet({ required Pet pet, CancelToken? cancelToken, @@ -418,8 +486,21 @@ class PetApi { } /// Updates a pet in the store with form data - /// /// + /// + /// Parameters: + /// * [petId] - ID of pet that needs to be updated + /// * [name] - Updated name of the pet + /// * [status] - Updated status of the pet + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> updatePetWithForm({ required int petId, String? name, @@ -487,8 +568,21 @@ class PetApi { } /// uploads an image - /// /// + /// + /// Parameters: + /// * [petId] - ID of pet to update + /// * [additionalMetadata] - Additional data to pass to server + /// * [file] - file to upload + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [ApiResponse] as data + /// Throws [DioError] if API call or serialization fails Future> uploadFile({ required int petId, String? additionalMetadata, @@ -583,8 +677,21 @@ class PetApi { } /// uploads an image (required) - /// /// + /// + /// Parameters: + /// * [petId] - ID of pet to update + /// * [requiredFile] - file to upload + /// * [additionalMetadata] - Additional data to pass to server + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [ApiResponse] as data + /// Throws [DioError] if API call or serialization fails Future> uploadFileWithRequiredFile({ required int petId, required MultipartFile requiredFile, diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart index 66fccc40e4bc..24c4bd7a55c8 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/store_api.dart @@ -19,8 +19,19 @@ class StoreApi { const StoreApi(this._dio, this._serializers); /// Delete purchase order by ID + /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors /// - /// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + /// Parameters: + /// * [orderId] - ID of the order that needs to be deleted + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> deleteOrder({ required String orderId, CancelToken? cancelToken, @@ -59,8 +70,18 @@ class StoreApi { } /// Returns pet inventories by status - /// /// Returns a map of status codes to quantities + /// + /// Parameters: + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [BuiltMap] as data + /// Throws [DioError] if API call or serialization fails Future>> getInventory({ CancelToken? cancelToken, Map? headers, @@ -132,8 +153,19 @@ class StoreApi { } /// Find purchase order by ID + /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions /// - /// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + /// Parameters: + /// * [orderId] - ID of pet that needs to be fetched + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [Order] as data + /// Throws [DioError] if API call or serialization fails Future> getOrderById({ required int orderId, CancelToken? cancelToken, @@ -199,8 +231,19 @@ class StoreApi { } /// Place an order for a pet - /// /// + /// + /// Parameters: + /// * [order] - order placed for purchasing the pet + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [Order] as data + /// Throws [DioError] if API call or serialization fails Future> placeOrder({ required Order order, CancelToken? cancelToken, diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart index d8f42219111b..a05524844039 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/user_api.dart @@ -19,8 +19,19 @@ class UserApi { const UserApi(this._dio, this._serializers); /// Create user - /// /// This can only be done by the logged in user. + /// + /// Parameters: + /// * [user] - Created user object + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> createUser({ required User user, CancelToken? cancelToken, @@ -79,8 +90,19 @@ class UserApi { } /// Creates list of users with given input array - /// /// + /// + /// Parameters: + /// * [user] - List of user object + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> createUsersWithArrayInput({ required BuiltList user, CancelToken? cancelToken, @@ -139,8 +161,19 @@ class UserApi { } /// Creates list of users with given input array - /// /// + /// + /// Parameters: + /// * [user] - List of user object + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> createUsersWithListInput({ required BuiltList user, CancelToken? cancelToken, @@ -199,8 +232,19 @@ class UserApi { } /// Delete user - /// /// This can only be done by the logged in user. + /// + /// Parameters: + /// * [username] - The name that needs to be deleted + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> deleteUser({ required String username, CancelToken? cancelToken, @@ -239,8 +283,19 @@ class UserApi { } /// Get user by user name - /// /// + /// + /// Parameters: + /// * [username] - The name that needs to be fetched. Use user1 for testing. + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [User] as data + /// Throws [DioError] if API call or serialization fails Future> getUserByName({ required String username, CancelToken? cancelToken, @@ -306,8 +361,20 @@ class UserApi { } /// Logs user into the system - /// /// + /// + /// Parameters: + /// * [username] - The user name for login + /// * [password] - The password for login in clear text + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] containing a [Response] with a [String] as data + /// Throws [DioError] if API call or serialization fails Future> loginUser({ required String username, required String password, @@ -372,8 +439,18 @@ class UserApi { } /// Logs out current logged in user session - /// /// + /// + /// Parameters: + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> logoutUser({ CancelToken? cancelToken, Map? headers, @@ -411,8 +488,20 @@ class UserApi { } /// Updated user - /// /// This can only be done by the logged in user. + /// + /// Parameters: + /// * [username] - name that need to be deleted + /// * [user] - Updated user object + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails Future> updateUser({ required String username, required User user, diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/additional_properties_class.dart index f92d8336bbb5..25e0fb4fdbff 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/additional_properties_class.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/additional_properties_class.dart @@ -8,8 +8,11 @@ import 'package:built_value/serializer.dart'; part 'additional_properties_class.g.dart'; - - +/// AdditionalPropertiesClass +/// +/// Properties: +/// * [mapProperty] +/// * [mapOfMapProperty] abstract class AdditionalPropertiesClass implements Built { @BuiltValueField(wireName: r'map_property') BuiltMap? get mapProperty; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/animal.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/animal.dart index 14419f9eca45..d51c6d7b0be3 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/animal.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/animal.dart @@ -7,8 +7,11 @@ import 'package:built_value/serializer.dart'; part 'animal.g.dart'; - - +/// Animal +/// +/// Properties: +/// * [className] +/// * [color] abstract class Animal implements Built { @BuiltValueField(wireName: r'className') String get className; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/api_response.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/api_response.dart index 4c9fa0b7159c..fc9554f36cec 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/api_response.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/api_response.dart @@ -7,8 +7,12 @@ import 'package:built_value/serializer.dart'; part 'api_response.g.dart'; - - +/// ApiResponse +/// +/// Properties: +/// * [code] +/// * [type] +/// * [message] abstract class ApiResponse implements Built { @BuiltValueField(wireName: r'code') int? get code; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_of_array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_of_array_of_number_only.dart index 0f86aa08c5bb..899697f7efc8 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_of_array_of_number_only.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_of_array_of_number_only.dart @@ -8,8 +8,10 @@ import 'package:built_value/serializer.dart'; part 'array_of_array_of_number_only.g.dart'; - - +/// ArrayOfArrayOfNumberOnly +/// +/// Properties: +/// * [arrayArrayNumber] abstract class ArrayOfArrayOfNumberOnly implements Built { @BuiltValueField(wireName: r'ArrayArrayNumber') BuiltList>? get arrayArrayNumber; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_of_number_only.dart index b68a04794aa5..2e886df9b04c 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_of_number_only.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_of_number_only.dart @@ -8,8 +8,10 @@ import 'package:built_value/serializer.dart'; part 'array_of_number_only.g.dart'; - - +/// ArrayOfNumberOnly +/// +/// Properties: +/// * [arrayNumber] abstract class ArrayOfNumberOnly implements Built { @BuiltValueField(wireName: r'ArrayNumber') BuiltList? get arrayNumber; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_test.dart index e9657764dc43..82ee6c2c01a9 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/array_test.dart @@ -9,8 +9,12 @@ import 'package:built_value/serializer.dart'; part 'array_test.g.dart'; - - +/// ArrayTest +/// +/// Properties: +/// * [arrayOfString] +/// * [arrayArrayOfInteger] +/// * [arrayArrayOfModel] abstract class ArrayTest implements Built { @BuiltValueField(wireName: r'array_of_string') BuiltList? get arrayOfString; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/capitalization.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/capitalization.dart index 9b7cd294db36..fb1bfd7a5b92 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/capitalization.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/capitalization.dart @@ -7,8 +7,15 @@ import 'package:built_value/serializer.dart'; part 'capitalization.g.dart'; - - +/// Capitalization +/// +/// Properties: +/// * [smallCamel] +/// * [capitalCamel] +/// * [smallSnake] +/// * [capitalSnake] +/// * [sCAETHFlowPoints] +/// * [ATT_NAME] - Name of the pet abstract class Capitalization implements Built { @BuiltValueField(wireName: r'smallCamel') String? get smallCamel; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/cat.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/cat.dart index 1ee68912ba71..fa9282bb8cb0 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/cat.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/cat.dart @@ -11,6 +11,12 @@ part 'cat.g.dart'; // ignore_for_file: unused_import +/// Cat +/// +/// Properties: +/// * [className] +/// * [color] +/// * [declawed] abstract class Cat implements Built { @BuiltValueField(wireName: r'className') String get className; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/cat_all_of.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/cat_all_of.dart index cbbf63216034..b8019b936d8f 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/cat_all_of.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/cat_all_of.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'cat_all_of.g.dart'; - - +/// CatAllOf +/// +/// Properties: +/// * [declawed] abstract class CatAllOf implements Built { @BuiltValueField(wireName: r'declawed') bool? get declawed; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/category.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/category.dart index 3bc36cefbcc2..351842659923 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/category.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/category.dart @@ -7,8 +7,11 @@ import 'package:built_value/serializer.dart'; part 'category.g.dart'; - - +/// Category +/// +/// Properties: +/// * [id] +/// * [name] abstract class Category implements Built { @BuiltValueField(wireName: r'id') int? get id; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/class_model.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/class_model.dart index bdc392005cf0..7b99dc2be1ae 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/class_model.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/class_model.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'class_model.g.dart'; - - +/// Model for testing model with \"_class\" property +/// +/// Properties: +/// * [class_] abstract class ClassModel implements Built { @BuiltValueField(wireName: r'_class') String? get class_; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/dog.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/dog.dart index 63f2d483d5d7..9ca43e054025 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/dog.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/dog.dart @@ -11,6 +11,12 @@ part 'dog.g.dart'; // ignore_for_file: unused_import +/// Dog +/// +/// Properties: +/// * [className] +/// * [color] +/// * [breed] abstract class Dog implements Built { @BuiltValueField(wireName: r'className') String get className; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/dog_all_of.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/dog_all_of.dart index e896ffe4b1bf..291310df2c28 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/dog_all_of.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/dog_all_of.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'dog_all_of.g.dart'; - - +/// DogAllOf +/// +/// Properties: +/// * [breed] abstract class DogAllOf implements Built { @BuiltValueField(wireName: r'breed') String? get breed; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/enum_arrays.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/enum_arrays.dart index 371f28947d86..0e28f7247a88 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/enum_arrays.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/enum_arrays.dart @@ -8,8 +8,11 @@ import 'package:built_value/serializer.dart'; part 'enum_arrays.g.dart'; - - +/// EnumArrays +/// +/// Properties: +/// * [justSymbol] +/// * [arrayEnum] abstract class EnumArrays implements Built { @BuiltValueField(wireName: r'just_symbol') EnumArraysJustSymbolEnum? get justSymbol; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/enum_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/enum_test.dart index 51c417dcaddb..8e6d8c6d23e7 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/enum_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/enum_test.dart @@ -12,8 +12,17 @@ import 'package:built_value/serializer.dart'; part 'enum_test.g.dart'; - - +/// EnumTest +/// +/// Properties: +/// * [enumString] +/// * [enumStringRequired] +/// * [enumInteger] +/// * [enumNumber] +/// * [outerEnum] +/// * [outerEnumInteger] +/// * [outerEnumDefaultValue] +/// * [outerEnumIntegerDefaultValue] abstract class EnumTest implements Built { @BuiltValueField(wireName: r'enum_string') EnumTestEnumStringEnum? get enumString; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/file_schema_test_class.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/file_schema_test_class.dart index 083b61e326aa..0fdd83670854 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/file_schema_test_class.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/file_schema_test_class.dart @@ -9,8 +9,11 @@ import 'package:built_value/serializer.dart'; part 'file_schema_test_class.g.dart'; - - +/// FileSchemaTestClass +/// +/// Properties: +/// * [file] +/// * [files] abstract class FileSchemaTestClass implements Built { @BuiltValueField(wireName: r'file') ModelFile? get file; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/foo.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/foo.dart index 045d8857577e..148b67aacea6 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/foo.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/foo.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'foo.g.dart'; - - +/// Foo +/// +/// Properties: +/// * [bar] abstract class Foo implements Built { @BuiltValueField(wireName: r'bar') String? get bar; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/format_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/format_test.dart index 745e9b5c63bc..eb013af8673c 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/format_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/format_test.dart @@ -9,8 +9,25 @@ import 'package:built_value/serializer.dart'; part 'format_test.g.dart'; - - +/// FormatTest +/// +/// Properties: +/// * [integer] +/// * [int32] +/// * [int64] +/// * [number] +/// * [float] +/// * [double_] +/// * [decimal] +/// * [string] +/// * [byte] +/// * [binary] +/// * [date] +/// * [dateTime] +/// * [uuid] +/// * [password] +/// * [patternWithDigits] - A string that is a 10 digit number. Can have leading zeros. +/// * [patternWithDigitsAndDelimiter] - A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01. abstract class FormatTest implements Built { @BuiltValueField(wireName: r'integer') int? get integer; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/has_only_read_only.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/has_only_read_only.dart index f7cb2cd2e5ab..d1ed7b46954c 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/has_only_read_only.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/has_only_read_only.dart @@ -7,8 +7,11 @@ import 'package:built_value/serializer.dart'; part 'has_only_read_only.g.dart'; - - +/// HasOnlyReadOnly +/// +/// Properties: +/// * [bar] +/// * [foo] abstract class HasOnlyReadOnly implements Built { @BuiltValueField(wireName: r'bar') String? get bar; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/health_check_result.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/health_check_result.dart index 69bca6dce0fb..a071f9567878 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/health_check_result.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/health_check_result.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'health_check_result.g.dart'; - - +/// Just a string to inform instance is up and running. Make it nullable in hope to get it as pointer in generated model. +/// +/// Properties: +/// * [nullableMessage] abstract class HealthCheckResult implements Built { @BuiltValueField(wireName: r'NullableMessage') String? get nullableMessage; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/inline_response_default.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/inline_response_default.dart index 875b612c5d6d..d6eb09c8797f 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/inline_response_default.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/inline_response_default.dart @@ -8,8 +8,10 @@ import 'package:built_value/serializer.dart'; part 'inline_response_default.g.dart'; - - +/// InlineResponseDefault +/// +/// Properties: +/// * [string] abstract class InlineResponseDefault implements Built { @BuiltValueField(wireName: r'string') Foo? get string; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/map_test.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/map_test.dart index 21af21a52bb9..89fa1e3065e0 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/map_test.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/map_test.dart @@ -8,8 +8,13 @@ import 'package:built_value/serializer.dart'; part 'map_test.g.dart'; - - +/// MapTest +/// +/// Properties: +/// * [mapMapOfString] +/// * [mapOfEnumString] +/// * [directMap] +/// * [indirectMap] abstract class MapTest implements Built { @BuiltValueField(wireName: r'map_map_of_string') BuiltMap>? get mapMapOfString; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/mixed_properties_and_additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/mixed_properties_and_additional_properties_class.dart index 4da5f4d520df..55328c39f6f0 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/mixed_properties_and_additional_properties_class.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/mixed_properties_and_additional_properties_class.dart @@ -9,8 +9,12 @@ import 'package:built_value/serializer.dart'; part 'mixed_properties_and_additional_properties_class.g.dart'; - - +/// MixedPropertiesAndAdditionalPropertiesClass +/// +/// Properties: +/// * [uuid] +/// * [dateTime] +/// * [map] abstract class MixedPropertiesAndAdditionalPropertiesClass implements Built { @BuiltValueField(wireName: r'uuid') String? get uuid; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model200_response.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model200_response.dart index be8614351cb1..f8eaf0f3e2d9 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model200_response.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model200_response.dart @@ -7,8 +7,11 @@ import 'package:built_value/serializer.dart'; part 'model200_response.g.dart'; - - +/// Model for testing model name starting with number +/// +/// Properties: +/// * [name] +/// * [class_] abstract class Model200Response implements Built { @BuiltValueField(wireName: r'name') int? get name; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_client.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_client.dart index 57871562a076..045a68057077 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_client.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_client.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'model_client.g.dart'; - - +/// ModelClient +/// +/// Properties: +/// * [client] abstract class ModelClient implements Built { @BuiltValueField(wireName: r'client') String? get client; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_file.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_file.dart index 8a6c468bc00b..2ad4601d2f08 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_file.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_file.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'model_file.g.dart'; - - +/// Must be named `File` for test. +/// +/// Properties: +/// * [sourceURI] - Test capitalization abstract class ModelFile implements Built { /// Test capitalization @BuiltValueField(wireName: r'sourceURI') diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_list.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_list.dart index 901616e8dc65..4bb83e5f277a 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_list.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_list.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'model_list.g.dart'; - - +/// ModelList +/// +/// Properties: +/// * [n123list] abstract class ModelList implements Built { @BuiltValueField(wireName: r'123-list') String? get n123list; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_return.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_return.dart index 42c03755627d..4e7bad16424e 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_return.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/model_return.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'model_return.g.dart'; - - +/// Model for testing reserved words +/// +/// Properties: +/// * [return_] abstract class ModelReturn implements Built { @BuiltValueField(wireName: r'return') int? get return_; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/name.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/name.dart index 911fa0a54710..1963c3ace078 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/name.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/name.dart @@ -7,8 +7,13 @@ import 'package:built_value/serializer.dart'; part 'name.g.dart'; - - +/// Model for testing model name same as property name +/// +/// Properties: +/// * [name] +/// * [snakeCase] +/// * [property] +/// * [n123number] abstract class Name implements Built { @BuiltValueField(wireName: r'name') int get name; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/nullable_class.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/nullable_class.dart index 13fa27880f67..30dc376cb02a 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/nullable_class.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/nullable_class.dart @@ -10,8 +10,21 @@ import 'package:built_value/serializer.dart'; part 'nullable_class.g.dart'; - - +/// NullableClass +/// +/// Properties: +/// * [integerProp] +/// * [numberProp] +/// * [booleanProp] +/// * [stringProp] +/// * [dateProp] +/// * [datetimeProp] +/// * [arrayNullableProp] +/// * [arrayAndItemsNullableProp] +/// * [arrayItemsNullable] +/// * [objectNullableProp] +/// * [objectAndItemsNullableProp] +/// * [objectItemsNullable] abstract class NullableClass implements Built { @BuiltValueField(wireName: r'integer_prop') int? get integerProp; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/number_only.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/number_only.dart index 55e00d4d65cf..b423c6fc6566 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/number_only.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/number_only.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'number_only.g.dart'; - - +/// NumberOnly +/// +/// Properties: +/// * [justNumber] abstract class NumberOnly implements Built { @BuiltValueField(wireName: r'JustNumber') num? get justNumber; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/order.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/order.dart index 9c65fbf0c3a4..cdebcd96b1eb 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/order.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/order.dart @@ -8,8 +8,15 @@ import 'package:built_value/serializer.dart'; part 'order.g.dart'; - - +/// Order +/// +/// Properties: +/// * [id] +/// * [petId] +/// * [quantity] +/// * [shipDate] +/// * [status] - Order Status +/// * [complete] abstract class Order implements Built { @BuiltValueField(wireName: r'id') int? get id; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/outer_composite.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/outer_composite.dart index 69007a114640..0a8f4296c13e 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/outer_composite.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/outer_composite.dart @@ -7,8 +7,12 @@ import 'package:built_value/serializer.dart'; part 'outer_composite.g.dart'; - - +/// OuterComposite +/// +/// Properties: +/// * [myNumber] +/// * [myString] +/// * [myBoolean] abstract class OuterComposite implements Built { @BuiltValueField(wireName: r'my_number') num? get myNumber; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/outer_object_with_enum_property.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/outer_object_with_enum_property.dart index 6f4563d7a5eb..a95f92d8837c 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/outer_object_with_enum_property.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/outer_object_with_enum_property.dart @@ -8,8 +8,10 @@ import 'package:built_value/serializer.dart'; part 'outer_object_with_enum_property.g.dart'; - - +/// OuterObjectWithEnumProperty +/// +/// Properties: +/// * [value] abstract class OuterObjectWithEnumProperty implements Built { @BuiltValueField(wireName: r'value') OuterEnumInteger get value; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/pet.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/pet.dart index 99ef939eb1bf..ea94306056cc 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/pet.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/pet.dart @@ -10,8 +10,15 @@ import 'package:built_value/serializer.dart'; part 'pet.g.dart'; - - +/// Pet +/// +/// Properties: +/// * [id] +/// * [category] +/// * [name] +/// * [photoUrls] +/// * [tags] +/// * [status] - pet status in the store abstract class Pet implements Built { @BuiltValueField(wireName: r'id') int? get id; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/read_only_first.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/read_only_first.dart index d53617d1c0b4..ce46f919ea33 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/read_only_first.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/read_only_first.dart @@ -7,8 +7,11 @@ import 'package:built_value/serializer.dart'; part 'read_only_first.g.dart'; - - +/// ReadOnlyFirst +/// +/// Properties: +/// * [bar] +/// * [baz] abstract class ReadOnlyFirst implements Built { @BuiltValueField(wireName: r'bar') String? get bar; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/special_model_name.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/special_model_name.dart index 36880f32998d..dc69b29e4968 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/special_model_name.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/special_model_name.dart @@ -7,8 +7,10 @@ import 'package:built_value/serializer.dart'; part 'special_model_name.g.dart'; - - +/// SpecialModelName +/// +/// Properties: +/// * [dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket] abstract class SpecialModelName implements Built { @BuiltValueField(wireName: r'$special[property.name]') int? get dollarSpecialLeftSquareBracketPropertyPeriodNameRightSquareBracket; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/tag.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/tag.dart index d46c2aa40452..6723a6ea9f2f 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/tag.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/tag.dart @@ -7,8 +7,11 @@ import 'package:built_value/serializer.dart'; part 'tag.g.dart'; - - +/// Tag +/// +/// Properties: +/// * [id] +/// * [name] abstract class Tag implements Built { @BuiltValueField(wireName: r'id') int? get id; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/user.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/user.dart index dec21c7e473c..8aeb8f43aded 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/user.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/model/user.dart @@ -7,8 +7,17 @@ import 'package:built_value/serializer.dart'; part 'user.g.dart'; - - +/// User +/// +/// Properties: +/// * [id] +/// * [username] +/// * [firstName] +/// * [lastName] +/// * [email] +/// * [password] +/// * [phone] +/// * [userStatus] - User Status abstract class User implements Built { @BuiltValueField(wireName: r'id') int? get id; diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pubspec.yaml b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pubspec.yaml index 4a109ee28d3a..2a62f274f368 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/pubspec.yaml @@ -2,8 +2,6 @@ name: openapi version: 1.0.0 description: OpenAPI API client homepage: homepage -authors: - - 'Author ' environment: sdk: '>=2.12.0 <3.0.0' diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/pubspec.yaml b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/pubspec.yaml index 3182395f5791..34a1aa76180f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/pubspec.yaml @@ -2,8 +2,6 @@ name: openapi version: 1.0.0 description: OpenAPI API client homepage: homepage -authors: - - 'Author ' environment: sdk: '>=2.7.0 <3.0.0' diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/pubspec.yaml b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/pubspec.yaml index 3182395f5791..34a1aa76180f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/pubspec.yaml @@ -2,8 +2,6 @@ name: openapi version: 1.0.0 description: OpenAPI API client homepage: homepage -authors: - - 'Author ' environment: sdk: '>=2.7.0 <3.0.0' diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/pubspec.yaml b/samples/openapi3/client/petstore/dart2/petstore_client_lib/pubspec.yaml index 4d55880cd856..163b29ec3ecc 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/pubspec.yaml @@ -5,8 +5,6 @@ name: 'openapi' version: '1.0.0' description: 'OpenAPI API client' -authors: - - 'Author ' homepage: 'homepage' environment: sdk: '>=2.12.0 <3.0.0' diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/pubspec.yaml b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/pubspec.yaml index 4d55880cd856..163b29ec3ecc 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/pubspec.yaml @@ -5,8 +5,6 @@ name: 'openapi' version: '1.0.0' description: 'OpenAPI API client' -authors: - - 'Author ' homepage: 'homepage' environment: sdk: '>=2.12.0 <3.0.0' diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/pubspec.yaml b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/pubspec.yaml index 73931cb6b83a..66b0d5a7acde 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/pubspec.yaml +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/pubspec.yaml @@ -5,8 +5,6 @@ name: 'openapi' version: '1.0.0' description: 'OpenAPI API client' -authors: - - 'Author ' homepage: 'homepage' environment: sdk: '>=2.12.0 <3.0.0' From 5227e060552171c93cb211f35525880dd84fc94d Mon Sep 17 00:00:00 2001 From: Hemant Zope <42613258+zhemant@users.noreply.github.com> Date: Thu, 27 May 2021 05:00:21 +0200 Subject: [PATCH 164/186] [C]: Fix enum values (#9537) * use unmodified enum values in arrays * update enum values in body and api mustache --- .../src/main/resources/C-libcurl/api-body.mustache | 4 ++-- .../src/main/resources/C-libcurl/model-body.mustache | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache b/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache index 0c85a67a2b39..81c1fbdba39c 100644 --- a/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache +++ b/modules/openapi-generator/src/main/resources/C-libcurl/api-body.mustache @@ -18,13 +18,13 @@ // Functions for enum {{enumName}} for {{{classname}}}_{{{operationId}}} static char* {{{operationId}}}_{{enumName}}_ToString({{projectName}}_{{operationId}}_{{baseName}}_e {{enumName}}){ - char *{{enumName}}Array[] = { "NULL"{{#allowableValues}}{{#enumVars}}, "{{{value}}}"{{/enumVars}}{{/allowableValues}} }; + char *{{enumName}}Array[] = { "NULL"{{#allowableValues}}{{#values}}, "{{.}}"{{/values}}{{/allowableValues}} }; return {{enumName}}Array[{{enumName}}]; } static {{projectName}}_{{operationId}}_{{baseName}}_e {{{operationId}}}_{{enumName}}_FromString(char* {{enumName}}){ int stringToReturn = 0; - char *{{enumName}}Array[] = { "NULL"{{#allowableValues}}{{#enumVars}}, "{{{value}}}"{{/enumVars}}{{/allowableValues}} }; + char *{{enumName}}Array[] = { "NULL"{{#allowableValues}}{{#values}}, "{{.}}"{{/values}}{{/allowableValues}} }; size_t sizeofArray = sizeof({{enumName}}Array) / sizeof({{enumName}}Array[0]); while(stringToReturn < sizeofArray) { if(strcmp({{enumName}}, {{enumName}}Array[stringToReturn]) == 0) { diff --git a/modules/openapi-generator/src/main/resources/C-libcurl/model-body.mustache b/modules/openapi-generator/src/main/resources/C-libcurl/model-body.mustache index e487cb0f4746..6f4259a6f183 100644 --- a/modules/openapi-generator/src/main/resources/C-libcurl/model-body.mustache +++ b/modules/openapi-generator/src/main/resources/C-libcurl/model-body.mustache @@ -8,13 +8,13 @@ {{#isEnum}} char* {{classFilename}}_{{classname}}_ToString({{projectName}}_{{classVarName}}_{{enumName}}_e {{classname}}) { - char *{{classname}}Array[] = { "NULL"{{#allowableValues}}{{#enumVars}}, "{{{value}}}"{{/enumVars}}{{/allowableValues}} }; + char *{{classname}}Array[] = { "NULL"{{#allowableValues}}{{#values}}, "{{.}}"{{/values}}{{/allowableValues}} }; return {{classname}}Array[{{classname}}]; } {{projectName}}_{{classVarName}}_{{enumName}}_e {{classFilename}}_{{classname}}_FromString(char* {{classname}}) { int stringToReturn = 0; - char *{{classname}}Array[] = { "NULL"{{#allowableValues}}{{#enumVars}}, "{{{value}}}"{{/enumVars}}{{/allowableValues}} }; + char *{{classname}}Array[] = { "NULL"{{#allowableValues}}{{#values}}, "{{.}}"{{/values}}{{/allowableValues}} }; size_t sizeofArray = sizeof({{classname}}Array) / sizeof({{classname}}Array[0]); while(stringToReturn < sizeofArray) { if(strcmp({{classname}}, {{classname}}Array[stringToReturn]) == 0) { @@ -78,13 +78,13 @@ end: {{^isModel}} {{#isEnum}} char* {{name}}{{classname}}_ToString({{projectName}}_{{classVarName}}_{{enumName}}_e {{name}}) { - char* {{name}}Array[] = { "NULL"{{#allowableValues}}{{#enumVars}}, "{{{value}}}"{{/enumVars}}{{/allowableValues}} }; + char* {{name}}Array[] = { "NULL"{{#allowableValues}}{{#values}}, "{{.}}"{{/values}}{{/allowableValues}} }; return {{name}}Array[{{name}}]; } {{projectName}}_{{classVarName}}_{{enumName}}_e {{name}}{{classname}}_FromString(char* {{name}}){ int stringToReturn = 0; - char *{{name}}Array[] = { "NULL"{{#allowableValues}}{{#enumVars}}, "{{{value}}}"{{/enumVars}}{{/allowableValues}} }; + char *{{name}}Array[] = { "NULL"{{#allowableValues}}{{#values}}, "{{.}}"{{/values}}{{/allowableValues}} }; size_t sizeofArray = sizeof({{name}}Array) / sizeof({{name}}Array[0]); while(stringToReturn < sizeofArray) { if(strcmp({{name}}, {{name}}Array[stringToReturn]) == 0) { @@ -102,13 +102,13 @@ char* {{name}}{{classname}}_ToString({{projectName}}_{{classVarName}}_{{enumName {{^isModel}} {{#isEnum}} char* {{name}}{{classname}}_ToString({{projectName}}_{{classVarName}}_{{enumName}}_e {{name}}) { - char *{{name}}Array[] = { "NULL"{{#allowableValues}}{{#enumVars}}, "{{{value}}}"{{/enumVars}}{{/allowableValues}} }; + char *{{name}}Array[] = { "NULL"{{#allowableValues}}{{#values}}, "{{.}}"{{/values}}{{/allowableValues}} }; return {{name}}Array[{{name}} - 1]; } {{projectName}}_{{classVarName}}_{{enumName}}_e {{name}}{{classname}}_FromString(char* {{name}}) { int stringToReturn = 0; - char *{{name}}Array[] = { "NULL"{{#allowableValues}}{{#enumVars}}, "{{{value}}}"{{/enumVars}}{{/allowableValues}} }; + char *{{name}}Array[] = { "NULL"{{#allowableValues}}{{#values}}, "{{.}}"{{/values}}{{/allowableValues}} }; size_t sizeofArray = sizeof({{name}}Array) / sizeof({{name}}Array[0]); while(stringToReturn < sizeofArray) { if(strcmp({{name}}, {{name}}Array[stringToReturn]) == 0) { From 670c5884b65137b78863e491bf079d73217d16ad Mon Sep 17 00:00:00 2001 From: William Cheng Date: Thu, 27 May 2021 11:23:00 +0800 Subject: [PATCH 165/186] update samples --- .../src/main/resources/application.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/server/petstore/springboot-virtualan/src/main/resources/application.properties b/samples/server/petstore/springboot-virtualan/src/main/resources/application.properties index cf5e33b68698..64073b52f1eb 100644 --- a/samples/server/petstore/springboot-virtualan/src/main/resources/application.properties +++ b/samples/server/petstore/springboot-virtualan/src/main/resources/application.properties @@ -2,7 +2,7 @@ springfox.documentation.swagger.v2.path=/api-docs server.port=80 spring.jackson.date-format=org.openapitools.RFC3339DateFormat spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false -virtual.datasource.driver-class-name=org.hsqldb.jdbcDriver -virtual.datasource.jdbcurl=jdbc:hsqldb:mem:dataSource -virtual.datasource.username=sa -virtual.datasource.password= +virtualan.datasource.driver-class-name=org.hsqldb.jdbcDriver +virtualan.datasource.jdbcurl=jdbc:hsqldb:mem:dataSource +virtualan.datasource.username=sa +virtualan.datasource.password= From 73b34ade6ad6fb2967283c5c9faca1c360ce0a7f Mon Sep 17 00:00:00 2001 From: adameste <32512271+adameste@users.noreply.github.com> Date: Fri, 28 May 2021 03:58:01 +0200 Subject: [PATCH 166/186] [cpp-restsdk] Update json double/float parse. (#9577) * [cpp-restsdk] Update json double/float parse. Fix cpp-restsdk double and float parse. double.NaN was parsed when server doesn't ensure the floating point value has decimal point in in. * Update docs & samples. --- .../cpp-rest-sdk-client/modelbase-source.mustache | 8 ++++---- samples/client/petstore/cpp-restsdk/client/ModelBase.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/modelbase-source.mustache b/modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/modelbase-source.mustache index cfe9c44feccc..faa2333603a4 100644 --- a/modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/modelbase-source.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/modelbase-source.mustache @@ -249,13 +249,13 @@ bool ModelBase::fromJson( const web::json::value& val, bool & outVal ) } bool ModelBase::fromJson( const web::json::value& val, float & outVal ) { - outVal = !val.is_double() ? std::numeric_limits::quiet_NaN(): static_cast(val.as_double()); - return val.is_double(); + outVal = (!val.is_double() && !val.is_integer()) ? std::numeric_limits::quiet_NaN(): static_cast(val.as_double()); + return val.is_double() || val.is_integer(); } bool ModelBase::fromJson( const web::json::value& val, double & outVal ) { - outVal = !val.is_double() ? std::numeric_limits::quiet_NaN(): val.as_double(); - return val.is_double() ; + outVal = (!val.is_double() && !val.is_integer()) ? std::numeric_limits::quiet_NaN(): val.as_double(); + return val.is_double() || val.is_integer(); } bool ModelBase::fromJson( const web::json::value& val, int32_t & outVal ) { diff --git a/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp b/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp index 4803353fa2c6..8c02ac7c40d5 100644 --- a/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp +++ b/samples/client/petstore/cpp-restsdk/client/ModelBase.cpp @@ -260,13 +260,13 @@ bool ModelBase::fromJson( const web::json::value& val, bool & outVal ) } bool ModelBase::fromJson( const web::json::value& val, float & outVal ) { - outVal = !val.is_double() ? std::numeric_limits::quiet_NaN(): static_cast(val.as_double()); - return val.is_double(); + outVal = (!val.is_double() && !val.is_integer()) ? std::numeric_limits::quiet_NaN(): static_cast(val.as_double()); + return val.is_double() || val.is_integer(); } bool ModelBase::fromJson( const web::json::value& val, double & outVal ) { - outVal = !val.is_double() ? std::numeric_limits::quiet_NaN(): val.as_double(); - return val.is_double() ; + outVal = (!val.is_double() && !val.is_integer()) ? std::numeric_limits::quiet_NaN(): val.as_double(); + return val.is_double() || val.is_integer(); } bool ModelBase::fromJson( const web::json::value& val, int32_t & outVal ) { From 12c34d4658ab3b1cd3cdfb9b7e72ce3cc55c27ba Mon Sep 17 00:00:00 2001 From: adessoDpd <83429301+adessoDpd@users.noreply.github.com> Date: Fri, 28 May 2021 04:22:28 +0200 Subject: [PATCH 167/186] New generator: WSDL (#9545) * init port * add outputDir * fill out current .md * update samples Co-authored-by: William Cheng --- bin/configs/wsdl-spec.yaml | 6 + docs/generators/fsharp-functions.md | 2 +- docs/generators/fsharp-giraffe-server.md | 2 +- docs/generators/java-inflector.md | 2 +- docs/generators/jaxrs-cxf-client.md | 2 +- docs/generators/swift5.md | 4 +- docs/generators/wsdl.md | 150 +++ .../languages/WsdlGeneratorCodegen.java | 264 ++++ .../org.openapitools.codegen.CodegenConfig | 1 + .../wsdl/jaxb-customization.mustache | 50 + .../resources/wsdl/wsdl-converter.mustache | 348 +++++ .../codegen/wsdl/WsdlGeneratorTest.java | 269 ++++ .../src/test/resources/3_0/wsdl/petstore.yaml | 728 +++++++++++ .../petstore/R/.openapi-generator/FILES | 2 +- .../.openapi-generator/FILES | 2 +- .../php/OpenAPIClient-php/phpunit.xml.dist | 4 +- samples/client/petstore/powershell/README.md | 12 +- .../petstore/powershell/docs/PSPetApi.md | 2 +- .../petstore/powershell/docs/PSStoreApi.md | 2 +- .../petstore/powershell/docs/PSUserApi.md | 2 +- .../default-v3.0/models/Capitalization.ts | 1 + .../wsdl/.openapi-generator-ignore | 23 + .../wsdl/.openapi-generator/FILES | 2 + .../wsdl/.openapi-generator/VERSION | 1 + .../documentation/wsdl/jaxb-customization.xml | 28 + samples/documentation/wsdl/service.wsdl | 1158 +++++++++++++++++ .../petstore_client_lib_fake/README.md | 89 +- .../dart-dio/petstore_client_lib/README.md | 12 +- .../petstore_client_lib_fake/README.md | 88 +- .../dart2/petstore_client_lib/README.md | 52 +- .../dart2/petstore_client_lib_fake/README.md | 168 +-- .../README.md | 168 +-- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 12 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- samples/server/petstore/php-slim4/README.md | 4 +- .../petstore/php-slim4/phpunit.xml.dist | 4 +- .../SymfonyBundle-php/phpunit.xml.dist | 6 +- .../python-aiohttp-srclayout/setup.py | 6 +- .../tests/conftest.py | 2 +- .../petstore/python-aiohttp-srclayout/tox.ini | 2 +- 50 files changed, 3378 insertions(+), 350 deletions(-) create mode 100644 bin/configs/wsdl-spec.yaml create mode 100644 docs/generators/wsdl.md create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlGeneratorCodegen.java create mode 100644 modules/openapi-generator/src/main/resources/wsdl/jaxb-customization.mustache create mode 100644 modules/openapi-generator/src/main/resources/wsdl/wsdl-converter.mustache create mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlGeneratorTest.java create mode 100644 modules/openapi-generator/src/test/resources/3_0/wsdl/petstore.yaml create mode 100644 samples/documentation/wsdl/.openapi-generator-ignore create mode 100644 samples/documentation/wsdl/.openapi-generator/FILES create mode 100644 samples/documentation/wsdl/.openapi-generator/VERSION create mode 100644 samples/documentation/wsdl/jaxb-customization.xml create mode 100644 samples/documentation/wsdl/service.wsdl diff --git a/bin/configs/wsdl-spec.yaml b/bin/configs/wsdl-spec.yaml new file mode 100644 index 000000000000..2674412251dd --- /dev/null +++ b/bin/configs/wsdl-spec.yaml @@ -0,0 +1,6 @@ +generatorName: wsdl +outputDir: samples/documentation/wsdl +inputSpec: modules/openapi-generator/src/test/resources/3_0/wsdl/petstore.yaml +templateDir: modules/openapi-generator/src/main/resources/wsdl +additionalProperties: + hideGenerationTimestamp: "true" diff --git a/docs/generators/fsharp-functions.md b/docs/generators/fsharp-functions.md index bb16f39fa776..2a81000a7fb0 100644 --- a/docs/generators/fsharp-functions.md +++ b/docs/generators/fsharp-functions.md @@ -22,7 +22,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |OpenAPI/src| +|sourceFolder|source folder for generated code| |OpenAPI\src| ## IMPORT MAPPING diff --git a/docs/generators/fsharp-giraffe-server.md b/docs/generators/fsharp-giraffe-server.md index f374168aa71f..66150dbec0de 100644 --- a/docs/generators/fsharp-giraffe-server.md +++ b/docs/generators/fsharp-giraffe-server.md @@ -19,7 +19,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |packageVersion|F# package version.| |1.0.0| |returnICollection|Return ICollection<T> instead of the concrete type.| |false| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |OpenAPI/src| +|sourceFolder|source folder for generated code| |OpenAPI\src| |useCollection|Deserialize array types to Collection<T> instead of List<T>.| |false| |useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false| |useSwashbuckle|Uses the Swashbuckle.AspNetCore NuGet package for documentation.| |false| diff --git a/docs/generators/java-inflector.md b/docs/generators/java-inflector.md index 373bc61861b2..131b09f3f90e 100644 --- a/docs/generators/java-inflector.md +++ b/docs/generators/java-inflector.md @@ -48,7 +48,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |snapshotVersion|Uses a SNAPSHOT version.|
    **true**
    Use a SnapShot Version
    **false**
    Use a Release Version
    |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |src/gen/java| +|sourceFolder|source folder for generated code| |src\gen\java| |withXml|whether to include support for application/xml content type and include XML annotations in the model (works with libraries that provide support for JSON and XML)| |false| ## IMPORT MAPPING diff --git a/docs/generators/jaxrs-cxf-client.md b/docs/generators/jaxrs-cxf-client.md index fb3547c920d8..25d03ea104b9 100644 --- a/docs/generators/jaxrs-cxf-client.md +++ b/docs/generators/jaxrs-cxf-client.md @@ -48,7 +48,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |snapshotVersion|Uses a SNAPSHOT version.|
    **true**
    Use a SnapShot Version
    **false**
    Use a Release Version
    |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |src/gen/java| +|sourceFolder|source folder for generated code| |src\gen\java| |useBeanValidation|Use BeanValidation API annotations| |false| |useGenericResponse|Use generic response| |false| |useGzipFeatureForTests|Use Gzip Feature for tests| |false| diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index bace7f1f0492..2846d6de2b95 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -36,10 +36,10 @@ These options may be applied as additional-properties (cli) or configOptions (pl |responseAs|Optionally use libraries to manage response. Currently PromiseKit, RxSwift, Result, Combine are available.| |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|swiftPackagePath|Set a custom source path instead of OpenAPIClient/Classes/OpenAPIs.| |null| +|swiftPackagePath|Set a custom source path instead of OpenAPIClient\Classes\OpenAPIs.| |null| |swiftUseApiNamespace|Flag to make all the API classes inner-class of {{projectName}}API| |null| |useBacktickEscapes|Escape reserved words using backticks (default: false)| |false| -|useSPMFileStructure|Use SPM file structure and set the source path to Sources/{{projectName}} (default: false).| |null| +|useSPMFileStructure|Use SPM file structure and set the source path to Sources\{{projectName}} (default: false).| |null| ## IMPORT MAPPING diff --git a/docs/generators/wsdl.md b/docs/generators/wsdl.md new file mode 100644 index 000000000000..46d30e123937 --- /dev/null +++ b/docs/generators/wsdl.md @@ -0,0 +1,150 @@ +--- +title: Config Options for wsdl +sidebar_label: wsdl +--- + +These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. + +| Option | Description | Values | Default | +| ------ | ----------- | ------ | ------- | +|allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| +|disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| +|ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| +|hostname|the hostname of the service| |null| +|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| +|prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| +|serviceName|service name for the wsdl| |null| +|soapPath|basepath of the soap services| |null| +|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| +|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| + +## IMPORT MAPPING + +| Type/Alias | Imports | +| ---------- | ------- | + + +## INSTANTIATION TYPES + +| Type/Alias | Instantiated By | +| ---------- | --------------- | + + +## LANGUAGE PRIMITIVES + +
      +
    + +## RESERVED WORDS + +
      +
    + +## FEATURE SET + + +### Client Modification Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasePath|✗|ToolingExtension +|Authorizations|✗|ToolingExtension +|UserAgent|✗|ToolingExtension +|MockServer|✗|ToolingExtension + +### Data Type Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Custom|✗|OAS2,OAS3 +|Int32|✓|OAS2,OAS3 +|Int64|✓|OAS2,OAS3 +|Float|✓|OAS2,OAS3 +|Double|✓|OAS2,OAS3 +|Decimal|✓|ToolingExtension +|String|✓|OAS2,OAS3 +|Byte|✓|OAS2,OAS3 +|Binary|✓|OAS2,OAS3 +|Boolean|✓|OAS2,OAS3 +|Date|✓|OAS2,OAS3 +|DateTime|✓|OAS2,OAS3 +|Password|✓|OAS2,OAS3 +|File|✓|OAS2 +|Array|✓|OAS2,OAS3 +|Maps|✓|ToolingExtension +|CollectionFormat|✓|OAS2 +|CollectionFormatMulti|✓|OAS2 +|Enum|✓|OAS2,OAS3 +|ArrayOfEnum|✓|ToolingExtension +|ArrayOfModel|✓|ToolingExtension +|ArrayOfCollectionOfPrimitives|✓|ToolingExtension +|ArrayOfCollectionOfModel|✓|ToolingExtension +|ArrayOfCollectionOfEnum|✓|ToolingExtension +|MapOfEnum|✓|ToolingExtension +|MapOfModel|✓|ToolingExtension +|MapOfCollectionOfPrimitives|✓|ToolingExtension +|MapOfCollectionOfModel|✓|ToolingExtension +|MapOfCollectionOfEnum|✓|ToolingExtension + +### Documentation Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Readme|✗|ToolingExtension +|Model|✓|ToolingExtension +|Api|✓|ToolingExtension + +### Global Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Host|✓|OAS2,OAS3 +|BasePath|✓|OAS2,OAS3 +|Info|✓|OAS2,OAS3 +|Schemes|✗|OAS2,OAS3 +|PartialSchemes|✓|OAS2,OAS3 +|Consumes|✓|OAS2 +|Produces|✓|OAS2 +|ExternalDocumentation|✓|OAS2,OAS3 +|Examples|✓|OAS2,OAS3 +|XMLStructureDefinitions|✗|OAS2,OAS3 +|MultiServer|✗|OAS3 +|ParameterizedServer|✗|OAS3 +|ParameterStyling|✗|OAS3 +|Callbacks|✓|OAS3 +|LinkObjects|✗|OAS3 + +### Parameter Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Path|✓|OAS2,OAS3 +|Query|✓|OAS2,OAS3 +|Header|✓|OAS2,OAS3 +|Body|✓|OAS2 +|FormUnencoded|✓|OAS2 +|FormMultipart|✓|OAS2 +|Cookie|✓|OAS3 + +### Schema Support Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Simple|✓|OAS2,OAS3 +|Composite|✓|OAS2,OAS3 +|Polymorphism|✓|OAS2,OAS3 +|Union|✗|OAS3 + +### Security Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasicAuth|✓|OAS2,OAS3 +|ApiKey|✓|OAS2,OAS3 +|OpenIDConnect|✗|OAS3 +|BearerToken|✓|OAS3 +|OAuth2_Implicit|✓|OAS2,OAS3 +|OAuth2_Password|✓|OAS2,OAS3 +|OAuth2_ClientCredentials|✓|OAS2,OAS3 +|OAuth2_AuthorizationCode|✓|OAS2,OAS3 + +### Wire Format Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|JSON|✓|OAS2,OAS3 +|XML|✓|OAS2,OAS3 +|PROTOBUF|✗|ToolingExtension +|Custom|✗|OAS2,OAS3 diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlGeneratorCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlGeneratorCodegen.java new file mode 100644 index 000000000000..d6493b524cc4 --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlGeneratorCodegen.java @@ -0,0 +1,264 @@ +package org.openapitools.codegen.languages; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; + +import java.io.File; +import java.text.Normalizer; +import java.util.List; +import java.util.ArrayList; +import java.util.Locale; +import java.util.Map; + +import org.openapitools.codegen.CliOption; +import org.openapitools.codegen.CodegenConfig; +import org.openapitools.codegen.CodegenModel; +import org.openapitools.codegen.CodegenOperation; +import org.openapitools.codegen.CodegenParameter; +import org.openapitools.codegen.CodegenProperty; +import org.openapitools.codegen.CodegenType; +import org.openapitools.codegen.DefaultCodegen; +import org.openapitools.codegen.SupportingFile; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WsdlGeneratorCodegen extends DefaultCodegen implements CodegenConfig { + public static final String PROJECT_NAME = "projectName"; + + static final Logger LOGGER = LoggerFactory.getLogger(WsdlGeneratorCodegen.class); + + public CodegenType getTag() { + return CodegenType.DOCUMENTATION; + } + + public String getName() { + return "wsdl"; + } + + public String getHelp() { + return "Generates a wsdl-spec documentation."; + } + + public WsdlGeneratorCodegen() { + super(); + + outputFolder = "generated-code" + File.separator + "wsdl-spec"; + embeddedTemplateDir = templateDir = "wsdl"; + apiPackage = "Apis"; + modelPackage = "Models"; + + cliOptions.add(new CliOption("hostname", "the hostname of the service")); + cliOptions.add(new CliOption("soapPath", "basepath of the soap services")); + cliOptions.add(new CliOption("serviceName", "service name for the wsdl")); + + additionalProperties.put("hostname", "localhost"); + additionalProperties.put("soapPath", "soap"); + additionalProperties.put("serviceName", "ServiceV1"); + + supportingFiles.add(new SupportingFile("wsdl-converter.mustache", "", "service.wsdl")); + supportingFiles.add(new SupportingFile("jaxb-customization.mustache", "", + "jaxb-customization.xml")); + } + + public void preprocessOpenAPI(OpenAPI openAPI) { + Info info = openAPI.getInfo(); + + String title = info.getTitle(); + String description = info.getDescription(); + + info.setDescription(this.processOpenapiSpecDescription(description)); + info.setTitle(this.escapeTitle(title)); + } + + private String escapeTitle(String title) { + // strip umlauts etc. + final String normalizedTitle = Normalizer.normalize(title, Normalizer.Form.NFD) + .replaceAll("[^\\p{ASCII}]", ""); + return super.escapeUnsafeCharacters(normalizedTitle); + } + + public String processOpenapiSpecDescription(String description) { + if (description != null) { + return description.replaceAll("\\s+", " "); + } else { + return "No description provided"; + } + } + + @Override + public Map postProcessOperationsWithModels(Map objs, + List allModels) { + + Map operations = (Map) objs.get("operations"); + List operationList = (List) operations.get("operation"); + for (CodegenOperation op : operationList) { + op.operationId = this.generateOperationId(op); + + // for xml compliant primitives, lowercase dataType of openapi + for (CodegenParameter param : op.allParams) { + Map paramVendorExtensions = param.vendorExtensions; + + normalizeDataType(param); + + // prevent default="null" in wsdl-tag if no default was specified for a param + if ("null".equals(param.defaultValue) || param.defaultValue == null) { + paramVendorExtensions.put("x-param-has-defaultvalue", false); + } else { + paramVendorExtensions.put("x-param-has-defaultvalue", true); + } + + // check if param has a minimum or maximum number or lenght + if (param.minimum != null + || param.maximum != null + || param.minLength != null + || param.maxLength != null) { + paramVendorExtensions.put("x-param-has-minormax", true); + } else { + paramVendorExtensions.put("x-param-has-minormax", false); + } + + // if param is enum, uppercase 'baseName' to have a reference to wsdl simpletype + if (param.isEnum) { + char[] c = param.baseName.toCharArray(); + c[0] = Character.toUpperCase(c[0]); + param.baseName = new String(c); + } + } + + for (CodegenParameter param : op.bodyParams) { + normalizeDataType(param); + } + for (CodegenParameter param : op.pathParams) { + normalizeDataType(param); + } + for (CodegenParameter param : op.queryParams) { + normalizeDataType(param); + } + for (CodegenParameter param : op.formParams) { + normalizeDataType(param); + } + } + + return objs; + } + + private void normalizeDataType(CodegenParameter param) { + if (param.isPrimitiveType) { + param.dataType = param.dataType.toLowerCase(Locale.getDefault()); + } + if (param.dataFormat != null && param.dataFormat.equalsIgnoreCase("date")) { + param.dataType = "date"; + } + if (param.dataFormat != null && param.dataFormat.equalsIgnoreCase("date-time")) { + param.dataType = "dateTime"; + } + if (param.dataFormat != null && param.dataFormat.equalsIgnoreCase("uuid")) { + param.dataType = "string"; + } + } + + @Override + public Map postProcessModels(Map objs) { + List models = (List) objs.get("models"); + + for (Object mo : models) { + Map mod = (Map) mo; + CodegenModel model = (CodegenModel) mod.get("model"); + Map modelVendorExtensions = model.getVendorExtensions(); + + /* check if model is a model with no properties + * Used in the mustache template to ensure that no complextype is created + * if model is just a schema with an enum defined in the openapi specification + */ + if (model.allowableValues != null) { + modelVendorExtensions.put("x-is-openapimodel-enum", true); + } else { + modelVendorExtensions.put("x-is-openapimodel-enum", false); + } + + for (CodegenProperty var : model.vars) { + Map propertyVendorExtensions = var.getVendorExtensions(); + + // lowercase basetypes if openapitype is string + if (var.openApiType == "string") { + char[] c = var.baseType.toCharArray(); + c[0] = Character.toLowerCase(c[0]); + var.baseType = new String(c); + } + // if string enum, uppercase 'name' to have a reference to wsdl simpletype + if (var.isEnum) { + char[] c = var.name.toCharArray(); + c[0] = Character.toUpperCase(c[0]); + var.name = new String(c); + } + + // prevent default="null" in wsdl-tag if no default was specified for a property + if ("null".equals(var.defaultValue) || var.defaultValue == null) { + propertyVendorExtensions.put("x-prop-has-defaultvalue", false); + } else { + propertyVendorExtensions.put("x-prop-has-defaultvalue", true); + } + + // check if model property has a minimum or maximum number or lenght + if (var.minimum != null + || var.maximum != null + || var.minLength != null + || var.maxLength != null) { + propertyVendorExtensions.put("x-prop-has-minormax", true); + } else { + propertyVendorExtensions.put("x-prop-has-minormax", false); + } + } + } + return super.postProcessModelsEnum(objs); + } + + public String generateOperationId(CodegenOperation op) { + String newOperationid = this.lowerCaseStringExceptFirstLetter(op.httpMethod); + String[] pathElements = op.path.split("/"); + List pathParameters = new ArrayList(); + + for (int i = 0; i < pathElements.length; i++) { + if (pathElements[i].contains("{")) { + pathParameters.add(pathElements[i]); + pathElements[i] = ""; + } + if (pathElements[i].length() > 0) { + newOperationid = newOperationid + this.lowerCaseStringExceptFirstLetter(pathElements[i]); + } + } + + if (pathParameters.size() > 0) { + for (int i = 0; i < pathParameters.size(); i++) { + String pathParameter = pathParameters.get(i); + pathParameter = this.lowerCaseStringExceptFirstLetter(pathParameter + .substring(1, pathParameter.length() - 1)); + if (i == 0) { + newOperationid = newOperationid + "By" + pathParameter; + } else { + newOperationid = newOperationid + "And" + pathParameter; + } + } + } + return newOperationid; + } + + public String lowerCaseStringExceptFirstLetter(String value) { + String newOperationid = value.toLowerCase(Locale.getDefault()); + return newOperationid.substring(0, 1).toUpperCase(Locale.getDefault()) + + newOperationid.substring(1); + } + + @Override + public String escapeQuotationMark(String input) { + // just return the original string + return input; + } + + @Override + public String escapeUnsafeCharacters(String input) { + // just return the original string + return input; + } +} diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig index dcc8eacbc8ab..6a0ecf94cba7 100644 --- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig +++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig @@ -134,3 +134,4 @@ org.openapitools.codegen.languages.TypeScriptNodeClientCodegen org.openapitools.codegen.languages.TypeScriptReduxQueryClientCodegen org.openapitools.codegen.languages.TypeScriptRxjsClientCodegen org.openapitools.codegen.languages.GoEchoServerCodegen +org.openapitools.codegen.languages.WsdlGeneratorCodegen diff --git a/modules/openapi-generator/src/main/resources/wsdl/jaxb-customization.mustache b/modules/openapi-generator/src/main/resources/wsdl/jaxb-customization.mustache new file mode 100644 index 000000000000..cfdd31b1b58a --- /dev/null +++ b/modules/openapi-generator/src/main/resources/wsdl/jaxb-customization.mustache @@ -0,0 +1,50 @@ + + + + true + false + + {{#models}} + {{#model}} + {{^allOf}} + {{#vars}} + {{#isEnum}} + {{#baseType}} + + + {{#allowableValues}} + {{#enumVars}} + + {{/enumVars}} + {{/allowableValues}} + + + {{/baseType}} + {{/isEnum}} + {{/vars}} + {{/allOf}} + {{/model}} + {{/models}} + + {{#models}} + {{#model}} + {{^vars}} + + + {{#allowableValues}} + {{#enumVars}} + + {{/enumVars}} + {{/allowableValues}} + + + {{/vars}} + {{/model}} + {{/models}} + + diff --git a/modules/openapi-generator/src/main/resources/wsdl/wsdl-converter.mustache b/modules/openapi-generator/src/main/resources/wsdl/wsdl-converter.mustache new file mode 100644 index 000000000000..c136126eb5a1 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/wsdl/wsdl-converter.mustache @@ -0,0 +1,348 @@ + + + + + {{#apiInfo}} + {{#apis}} + {{#operations}} + {{#operation}} + + + {{#responses}} + {{#is4xx}} + + + {{message}} + + + {{/is4xx}} + {{#is5xx}} + + + {{message}} + + + {{/is5xx}} + {{/responses}} + {{/operation}} + {{/operations}} + {{/apis}} + {{/apiInfo}} + {{#models}} + {{#model}} + {{^vendorExtensions.x-is-openapimodel-enum}} + + {{#description}} + + {{description}} + + {{/description}} + + {{#vars}} + {{#vendorExtensions.x-prop-has-minormax}} + + + {{#description}} + + {{description}} + + {{/description}} + + {{#maximum}} + + {{/maximum}} + {{#minimum}} + + {{/minimum}} + {{#maxLength}} + + {{/maxLength}} + {{#minLength}} + + {{/minLength}} + + + + {{/vendorExtensions.x-prop-has-minormax}} + {{^vendorExtensions.x-prop-has-minormax}} + {{#isContainer}} + + {{/isContainer}} + {{^isContainer}} + + {{/isContainer}} + {{#description}} + + {{description}} + + + {{/description}} + {{/vendorExtensions.x-prop-has-minormax}} + {{/vars}} + + + {{/vendorExtensions.x-is-openapimodel-enum}} + {{/model}} + {{/models}} + {{#models}} + {{#model}} + {{^allOf}} + {{#vars}} + {{#isEnum}} + {{#baseType}} + + {{#description}} + + {{description}} + + {{/description}} + + {{#allowableValues}} + {{#enumVars}} + + {{/enumVars}} + {{/allowableValues}} + + + {{/baseType}} + {{/isEnum}} + {{/vars}} + {{/allOf}} + {{/model}} + {{/models}} + {{#models}} + {{#model}} + {{^vars}} + + {{#description}} + + {{description}} + + {{/description}} + + {{#allowableValues}} + {{#enumVars}} + + {{/enumVars}} + {{/allowableValues}} + + + {{/vars}} + {{/model}} + {{/models}} + {{#apiInfo}} + {{#apis}} + {{#operations}} + {{#operation}} + {{#allParams}} + {{#isEnum}} + + + {{#allowableValues}} + {{#enumVars}} + + {{/enumVars}} + {{/allowableValues}} + + + {{/isEnum}} + {{/allParams}} + {{/operation}} + {{/operations}} + {{/apis}} + {{/apiInfo}} + {{#apiInfo}} + {{#apis}} + {{#operations}} + {{#operation}} + {{#hasParams}} + + + {{#allParams}} + {{#vendorExtensions.x-param-has-minormax}} + + + {{#description}} + + {{description}} + + {{/description}} + + {{#maximum}} + + {{/maximum}} + {{#minimum}} + + {{/minimum}} + {{#maxLength}} + + {{/maxLength}} + {{#minLength}} + + {{/minLength}} + + + + {{/vendorExtensions.x-param-has-minormax}} + {{^vendorExtensions.x-param-has-minormax}} + + {{#description}} + + {{description}} + + + {{/description}} + {{/vendorExtensions.x-param-has-minormax}} + {{/allParams}} + + + {{/hasParams}} + {{^hasParams}} + + {{/hasParams}} + {{#responses}} + {{^is4xx}} + {{^is5xx}} + + + {{#message}} + + + {{message}} + + + {{/message}} + {{^message}} + + {{/message}} + + + {{/is5xx}} + {{/is4xx}} + {{/responses}} + {{/operation}} + {{/operations}} + {{/apis}} + {{/apiInfo}} + + + {{#apiInfo}} + {{#apis}} + {{#operations}} + {{#operation}} + + + + {{#responses}} + {{#is2xx}} + + + + {{/is2xx}} + {{#isDefault}} + + + + {{/isDefault}} + {{#is4xx}} + + + + {{/is4xx}} + {{#is5xx}} + + + + {{/is5xx}} + {{/responses}} + {{/operation}} + {{/operations}} + {{/apis}} + {{/apiInfo}} + + {{#apiInfo}} + {{#apis}} + {{#operations}} + {{#operation}} + + {{#notes}} + {{notes}} + {{/notes}} + {{^notes}} + {{#summary}} + {{summary}} + {{/summary}} + {{/notes}} + + {{#responses}} + {{^is4xx}} + {{^is5xx}} + + {{#message}} + {{message}} + + {{/message}} + {{/is5xx}} + {{/is4xx}} + {{#is4xx}} + + {{#message}} + {{message}} + + {{/message}} + {{/is4xx}} + {{#is5xx}} + + {{#message}} + {{message}} + + {{/message}} + {{/is5xx}} + {{/responses}} + + {{/operation}} + {{/operations}} + {{/apis}} + {{/apiInfo}} + + + + {{#apiInfo}} + {{#apis}} + {{#operations}} + {{#operation}} + + + + + + {{#responses}} + {{#is2xx}} + + + + {{/is2xx}} + {{#is4xx}} + + + + {{/is4xx}} + {{#is5xx}} + + + + {{/is5xx}} + {{/responses}} + + {{/operation}} + {{/operations}} + {{/apis}} + {{/apiInfo}} + + + {{appDescription}} + + + + + \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlGeneratorTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlGeneratorTest.java new file mode 100644 index 000000000000..439165ac4c4a --- /dev/null +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlGeneratorTest.java @@ -0,0 +1,269 @@ +package org.openapitools.codegen.wsdl; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.Operation; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +import org.apache.commons.io.FileUtils; + +import org.openapitools.codegen.ClientOptInput; +import org.openapitools.codegen.CodegenOperation; +import org.openapitools.codegen.DefaultGenerator; +import org.openapitools.codegen.TestUtils; +import org.openapitools.codegen.languages.WsdlGeneratorCodegen; + +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import static org.openapitools.codegen.TestUtils.assertFileContains; +import static org.openapitools.codegen.TestUtils.ensureContainsFile; + +public class WsdlGeneratorTest { + private OpenAPI openAPI; + private File outputDirectory; + private String outputPath; + private List listOfFiles; + + @BeforeClass + public void setUp() throws IOException { + this.openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/wsdl/petstore.yaml"); + this.outputDirectory = Files.createTempDirectory("test").toFile().getCanonicalFile(); + this.outputPath = this.outputDirectory.getAbsolutePath().replace('\\', '/'); + + WsdlGeneratorCodegen codegen = new WsdlGeneratorCodegen(); + codegen.setOutputDir(this.outputDirectory.getAbsolutePath()); + + ClientOptInput input = new ClientOptInput() + .openAPI(this.openAPI) + .config(codegen); + + DefaultGenerator generator = new DefaultGenerator(); + this.listOfFiles = generator.opts(input).generate(); + } + + @Test(description = "ensure that the operationid has been generated correctly") + public void testOperationIdGeneration() { + final OpenAPI openAPI = this.openAPI; + WsdlGeneratorCodegen codegen = new WsdlGeneratorCodegen(); + codegen.setOpenAPI(openAPI); + + String requestPathWithId = "/store/order/{orderId}"; + Operation textOperationGet = openAPI.getPaths().get(requestPathWithId).getGet(); + CodegenOperation opGet = codegen.fromOperation(requestPathWithId, "get", textOperationGet, null); + String newOperationIdWithId = codegen.generateOperationId(opGet); + + String requestPathWithoutId = "/store/order"; + Operation textOperationPost = openAPI.getPaths().get(requestPathWithoutId).getPost(); + CodegenOperation opPost = codegen.fromOperation(requestPathWithoutId, "post", textOperationPost, null); + String newOperationIdWithoutId = codegen.generateOperationId(opPost); + + Assert.assertEquals(newOperationIdWithId, "GetStoreOrderByOrderid"); + Assert.assertEquals(newOperationIdWithoutId, "PostStoreOrder"); + } + + @Test(description = "Ensure that passed strings are processed correcly by this method") + public void testLowerCaseStringExceptFirstLetter() { + WsdlGeneratorCodegen codegen = new WsdlGeneratorCodegen(); + String value = codegen.lowerCaseStringExceptFirstLetter("uploadPetByPathId"); + + Assert.assertEquals(value, "Uploadpetbypathid"); + } + + @Test(description = "Check if element tags has been created for an operation ") + public void testIfElementTagsExist() { + String xsElementRequestMessage = + ""; + String xsElementResponseMessage = + ""; + String xsElementErrorResponse = + " \n" + + " \n" + + " Invalid input\n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), xsElementRequestMessage); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), xsElementResponseMessage); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), xsElementErrorResponse); + } + + @Test(description = "Check if complexType input- and output-message has been created for an operation ") + public void testIfInputAndResponseMessageExist() { + String complexTypeRequestMessage = + " \n" + + " \n" + + " \n" + + " \n" + + " ID of pet to return\n" + + " \n" + + " \n" + + " \n" + + " \n"; + + String complexTypeResponseMessage = + " \n" + + " \n" + + " \n" + + " \n" + + " successful operation\n" + + " \n" + + " \n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeRequestMessage); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeResponseMessage); + } + + @Test(description = + "Check if complexType RequestMessage with minimum and maximum restriction has been created for an operation ") + public void testIfRequestMessageMinimumExists() { + String complexTypeRequestMessageMinimum = + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " ID of pet that needs to be fetched\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeRequestMessageMinimum); + } + + @Test(description = "Check if complexType model has been created for an openapi model schema") + public void testIfComplexTypeModelExists() { + String complexTypeModel = + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " pet status in the store\n" + + " \n" + + " \n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeModel); + } + + @Test(description = "Check if message and part tags has been created for an operation ") + public void testIfMessageTagsAndContentExist() { + String messageRequestMessage = + " \n" + + " \n" + + " "; + + String messageError = + " \n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), messageRequestMessage); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), messageError); + } + + @Test(description = "Check if portType tag and portType operation has been generated") + public void testIfPorttypeOperationExists() { + String portType = ""; + + String portTypeOperation = + " \n" + + " Returns a single pet\n" + + " \n" + + " \n" + + " successful operation\n" + + " \n" + + " \n" + + " Invalid ID supplied\n" + + " \n" + + " \n" + + " Pet not found\n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), portType); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), portTypeOperation); + } + + @Test(description = "Check if portType tag and portType operation has been generated") + public void testIfBindingOperationExists() { + String binding = ""; + + String bindingOperation = + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), binding); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), bindingOperation); + } + + @Test(description = "Ensure that all files have been correctly generated") + public void testFileGeneration() throws Exception { + Assert.assertEquals(this.listOfFiles.size(), 5); + ensureContainsFile(this.listOfFiles, this.outputDirectory, ".openapi-generator-ignore"); + ensureContainsFile(this.listOfFiles, this.outputDirectory, ".openapi-generator/FILES"); + ensureContainsFile(this.listOfFiles, this.outputDirectory, ".openapi-generator/VERSION"); + ensureContainsFile(this.listOfFiles, this.outputDirectory, "service.wsdl"); + ensureContainsFile(this.listOfFiles, this.outputDirectory, "jaxb-customization.xml"); + } + + @Test(description = "Ensure that default description is set if it doesn't exist") + public void testOpenapiDescriptionWasNotProvided() throws IOException { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/ping.yaml"); + File outputDirectory = Files.createTempDirectory("test").toFile().getCanonicalFile(); + String outputPath = this.outputDirectory.getAbsolutePath().replace('\\', '/'); + + WsdlGeneratorCodegen codegen = new WsdlGeneratorCodegen(); + codegen.setOutputDir(this.outputDirectory.getAbsolutePath()); + + ClientOptInput input = new ClientOptInput().openAPI(openAPI).config(codegen); + + DefaultGenerator generator = new DefaultGenerator(); + generator.opts(input).generate(); + + String value = "No description provided"; + assertFileContains(Paths.get(outputPath + "/service.wsdl"), value); + + FileUtils.deleteDirectory(outputDirectory); + } + + + @AfterClass + public void cleanUp() throws Exception { + // Delete temp folder + FileUtils.deleteDirectory(this.outputDirectory); + } +} diff --git a/modules/openapi-generator/src/test/resources/3_0/wsdl/petstore.yaml b/modules/openapi-generator/src/test/resources/3_0/wsdl/petstore.yaml new file mode 100644 index 000000000000..83ccdf1c6112 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/wsdl/petstore.yaml @@ -0,0 +1,728 @@ +openapi: 3.0.1 +info: + title: Swagger Petstore + description: 'This is a sample server Petstore server. You can find out more about Swagger + at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For + this sample, you can use the api key `special-key` to test the authorization filters.' + termsOfService: http://swagger.io/terms/ + contact: + email: apiteam@swagger.io + license: + name: Apache 2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html + version: 1.0.0 +externalDocs: + description: Find out more about Swagger + url: http://swagger.io +servers: +- url: https://petstore.swagger.io/v2 +- url: http://petstore.swagger.io/v2 +tags: +- name: pet + description: Everything about your Pets + externalDocs: + description: Find out more + url: http://swagger.io +- name: store + description: Access to Petstore orders +- name: user + description: Operations about user + externalDocs: + description: Find out more about our store + url: http://swagger.io +paths: + /pet: + put: + tags: + - pet + summary: Update an existing pet + operationId: updatePet + requestBody: + description: Pet object that needs to be added to the store + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + required: true + responses: + 400: + description: Invalid ID supplied + content: {} + 404: + description: Pet not found + content: {} + 405: + description: Validation exception + content: {} + security: + - petstore_auth: + - write:pets + - read:pets + x-codegen-request-body-name: body + post: + tags: + - pet + summary: Add a new pet to the store + operationId: addPet + requestBody: + description: Pet object that needs to be added to the store + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + required: true + responses: + 405: + description: Invalid input + content: {} + security: + - petstore_auth: + - write:pets + - read:pets + x-codegen-request-body-name: body + /pet/findByStatus: + get: + tags: + - pet + summary: Finds Pets by status + description: Multiple status values can be provided with comma separated strings + operationId: findPetsByStatus + parameters: + - name: status + in: query + description: Status values that need to be considered for filter + required: true + style: form + explode: true + schema: + type: array + items: + type: string + default: available + enum: + - available + - pending + - sold + responses: + 200: + description: successful operation + content: + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + 400: + description: Invalid status value + content: {} + security: + - petstore_auth: + - write:pets + - read:pets + /pet/findByTags: + get: + tags: + - pet + summary: Finds Pets by tags + description: Muliple tags can be provided with comma separated strings. Use tag1, + tag2, tag3 for testing. + operationId: findPetsByTags + parameters: + - name: tags + in: query + description: Tags to filter by + required: true + style: form + explode: true + schema: + type: array + items: + type: string + responses: + 200: + description: successful operation + content: + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + 400: + description: Invalid tag value + content: {} + deprecated: true + security: + - petstore_auth: + - write:pets + - read:pets + /pet/{petId}: + get: + tags: + - pet + summary: Find pet by ID + description: Returns a single pet + operationId: getPetById + parameters: + - name: petId + in: path + description: ID of pet to return + required: true + schema: + type: integer + format: int64 + responses: + 200: + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + 400: + description: Invalid ID supplied + content: {} + 404: + description: Pet not found + content: {} + security: + - api_key: [] + post: + tags: + - pet + summary: Updates a pet in the store with form data + operationId: updatePetWithForm + parameters: + - name: petId + in: path + description: ID of pet that needs to be updated + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/x-www-form-urlencoded: + schema: + properties: + name: + type: string + description: Updated name of the pet + status: + type: string + description: Updated status of the pet + responses: + 405: + description: Invalid input + content: {} + security: + - petstore_auth: + - write:pets + - read:pets + delete: + tags: + - pet + summary: Deletes a pet + operationId: deletePet + parameters: + - name: api_key + in: header + schema: + type: string + - name: petId + in: path + description: Pet id to delete + required: true + schema: + type: integer + format: int64 + responses: + 400: + description: Invalid ID supplied + content: {} + 404: + description: Pet not found + content: {} + security: + - petstore_auth: + - write:pets + - read:pets + /pet/{petId}/uploadImage: + post: + tags: + - pet + summary: uploads an image + operationId: uploadFile + parameters: + - name: petId + in: path + description: ID of pet to update + required: true + schema: + type: integer + format: int64 + requestBody: + content: + multipart/form-data: + schema: + properties: + additionalMetadata: + type: string + description: Additional data to pass to server + file: + type: string + description: file to upload + format: binary + responses: + 200: + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' + security: + - petstore_auth: + - write:pets + - read:pets + /store/inventory: + get: + tags: + - store + summary: Returns pet inventories by status + description: Returns a map of status codes to quantities + operationId: getInventory + responses: + 200: + description: successful operation + content: + application/json: + schema: + type: object + additionalProperties: + type: integer + format: int32 + security: + - api_key: [] + /store/order: + post: + tags: + - store + summary: Place an order for a pet + operationId: placeOrder + requestBody: + description: order placed for purchasing the pet + content: + '*/*': + schema: + $ref: '#/components/schemas/Order' + required: true + responses: + 200: + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + 400: + description: Invalid Order + content: {} + x-codegen-request-body-name: body + /store/order/{orderId}: + get: + tags: + - store + summary: Find purchase order by ID + description: For valid response try integer IDs with value >= 1 and <= 10. Other + values will generated exceptions + operationId: getOrderById + parameters: + - name: orderId + in: path + description: ID of pet that needs to be fetched + required: true + schema: + maximum: 10.0 + minimum: 1.0 + type: integer + format: int64 + responses: + 200: + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + 400: + description: Invalid ID supplied + content: {} + 404: + description: Order not found + content: {} + delete: + tags: + - store + summary: Delete purchase order by ID + description: For valid response try integer IDs with positive integer value. Negative + or non-integer values will generate API errors + operationId: deleteOrder + parameters: + - name: orderId + in: path + description: ID of the order that needs to be deleted + required: true + schema: + minimum: 1.0 + type: integer + format: int64 + responses: + 400: + description: Invalid ID supplied + content: {} + 404: + description: Order not found + content: {} + /user: + post: + tags: + - user + summary: Create user + description: This can only be done by the logged in user. + operationId: createUser + requestBody: + description: Created user object + content: + '*/*': + schema: + $ref: '#/components/schemas/User' + required: true + responses: + default: + description: successful operation + content: {} + x-codegen-request-body-name: body + /user/createWithArray: + post: + tags: + - user + summary: Creates list of users with given input array + operationId: createUsersWithArrayInput + requestBody: + description: List of user object + content: + '*/*': + schema: + type: array + items: + $ref: '#/components/schemas/User' + required: true + responses: + default: + description: successful operation + content: {} + x-codegen-request-body-name: body + /user/createWithList: + post: + tags: + - user + summary: Creates list of users with given input array + operationId: createUsersWithListInput + requestBody: + description: List of user object + content: + '*/*': + schema: + type: array + items: + $ref: '#/components/schemas/User' + required: true + responses: + default: + description: successful operation + content: {} + x-codegen-request-body-name: body + /user/login: + get: + tags: + - user + summary: Logs user into the system + operationId: loginUser + parameters: + - name: username + in: query + description: The user name for login + required: true + schema: + type: string + - name: password + in: query + description: The password for login in clear text + required: true + schema: + type: string + responses: + 200: + description: successful operation + headers: + X-Rate-Limit: + description: calls per hour allowed by the user + schema: + type: integer + format: int32 + X-Expires-After: + description: date in UTC when token expires + schema: + type: string + format: date-time + content: + application/xml: + schema: + type: string + application/json: + schema: + type: string + 400: + description: Invalid username/password supplied + content: {} + /user/logout: + get: + tags: + - user + summary: Logs out current logged in user session + operationId: logoutUser + responses: + default: + description: successful operation + content: {} + /user/{username}: + get: + tags: + - user + summary: Get user by user name + operationId: getUserByName + parameters: + - name: username + in: path + description: 'The name that needs to be fetched. Use user1 for testing. ' + required: true + schema: + type: string + responses: + 200: + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/User' + application/json: + schema: + $ref: '#/components/schemas/User' + 400: + description: Invalid username supplied + content: {} + 404: + description: User not found + content: {} + put: + tags: + - user + summary: Updated user + description: This can only be done by the logged in user. + operationId: updateUser + parameters: + - name: username + in: path + description: name that need to be updated + required: true + schema: + type: string + requestBody: + description: Updated user object + content: + '*/*': + schema: + $ref: '#/components/schemas/User' + required: true + responses: + 400: + description: Invalid user supplied + content: {} + 404: + description: User not found + content: {} + x-codegen-request-body-name: body + delete: + tags: + - user + summary: Delete user + description: This can only be done by the logged in user. + operationId: deleteUser + parameters: + - name: username + in: path + description: The name that needs to be deleted + required: true + schema: + type: string + responses: + 400: + description: Invalid username supplied + content: {} + 404: + description: User not found + content: {} +components: + schemas: + Order: + type: object + properties: + id: + type: integer + format: int64 + petId: + type: integer + format: int64 + quantity: + type: integer + format: int32 + shipDate: + type: string + format: date-time + status: + type: string + description: Order Status + enum: + - placed + - approved + - delivered + complete: + type: boolean + default: false + xml: + name: Order + Category: + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + xml: + name: Category + User: + type: object + properties: + id: + type: integer + format: int64 + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + type: integer + description: User Status + format: int32 + xml: + name: User + Tag: + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + xml: + name: Tag + Pet: + required: + - name + - photoUrls + type: object + properties: + id: + type: integer + format: int64 + category: + $ref: '#/components/schemas/Category' + name: + type: string + example: doggie + photoUrls: + type: array + xml: + name: photoUrl + wrapped: true + items: + type: string + tags: + type: array + xml: + name: tag + wrapped: true + items: + $ref: '#/components/schemas/Tag' + status: + type: string + description: pet status in the store + enum: + - available + - pending + - sold + xml: + name: Pet + ApiResponse: + type: object + properties: + code: + type: integer + format: int32 + type: + type: string + message: + type: string + securitySchemes: + petstore_auth: + type: oauth2 + flows: + implicit: + authorizationUrl: http://petstore.swagger.io/oauth/dialog + scopes: + write:pets: modify pets in your account + read:pets: read your pets + api_key: + type: apiKey + name: api_key + in: header diff --git a/samples/client/petstore/R/.openapi-generator/FILES b/samples/client/petstore/R/.openapi-generator/FILES index 9385728f0103..5ec829dd19d5 100644 --- a/samples/client/petstore/R/.openapi-generator/FILES +++ b/samples/client/petstore/R/.openapi-generator/FILES @@ -3,6 +3,7 @@ .travis.yml DESCRIPTION NAMESPACE +README.md R/api_client.R R/api_response.R R/category.R @@ -14,7 +15,6 @@ R/store_api.R R/tag.R R/user.R R/user_api.R -README.md docs/Category.md docs/ModelApiResponse.md docs/Order.md diff --git a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES index fda1dc9138c5..dcbafb2b3197 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES +++ b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES @@ -55,6 +55,7 @@ docs/Model/SpecialModelName.md docs/Model/Tag.md docs/Model/User.md git_push.sh +lib/ApiException.php lib/Api/AnotherFakeApi.php lib/Api/DefaultApi.php lib/Api/FakeApi.php @@ -62,7 +63,6 @@ lib/Api/FakeClassnameTags123Api.php lib/Api/PetApi.php lib/Api/StoreApi.php lib/Api/UserApi.php -lib/ApiException.php lib/Configuration.php lib/HeaderSelector.php lib/Model/AdditionalPropertiesClass.php diff --git a/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist b/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist index 3dd90bbe32c9..afbe167922d2 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist +++ b/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist @@ -13,8 +13,8 @@ - ./lib/Api - ./lib/Model + ./lib\/Api + ./lib\/Model diff --git a/samples/client/petstore/powershell/README.md b/samples/client/petstore/powershell/README.md index d394a82a0e91..45adbebb0967 100644 --- a/samples/client/petstore/powershell/README.md +++ b/samples/client/petstore/powershell/README.md @@ -79,12 +79,12 @@ Class | Method | HTTP request | Description ## Documentation for Models - - [PSPetstore/Model.ApiResponse](docs/ApiResponse.md) - - [PSPetstore/Model.Category](docs/Category.md) - - [PSPetstore/Model.Order](docs/Order.md) - - [PSPetstore/Model.Pet](docs/Pet.md) - - [PSPetstore/Model.Tag](docs/Tag.md) - - [PSPetstore/Model.User](docs/User.md) + - [PSPetstore\Model.ApiResponse](docs/ApiResponse.md) + - [PSPetstore\Model.Category](docs/Category.md) + - [PSPetstore\Model.Order](docs/Order.md) + - [PSPetstore\Model.Pet](docs/Pet.md) + - [PSPetstore\Model.Tag](docs/Tag.md) + - [PSPetstore\Model.User](docs/User.md) ## Documentation for Authorization diff --git a/samples/client/petstore/powershell/docs/PSPetApi.md b/samples/client/petstore/powershell/docs/PSPetApi.md index 5b8c2a0f2e3e..af5ef7d0dede 100644 --- a/samples/client/petstore/powershell/docs/PSPetApi.md +++ b/samples/client/petstore/powershell/docs/PSPetApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore/Api.PSPetApi +# PSPetstore.PSPetstore\Api.PSPetApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/powershell/docs/PSStoreApi.md b/samples/client/petstore/powershell/docs/PSStoreApi.md index 33b3541ced6c..2ae1104846c5 100644 --- a/samples/client/petstore/powershell/docs/PSStoreApi.md +++ b/samples/client/petstore/powershell/docs/PSStoreApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore/Api.PSStoreApi +# PSPetstore.PSPetstore\Api.PSStoreApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/powershell/docs/PSUserApi.md b/samples/client/petstore/powershell/docs/PSUserApi.md index f008e292f2cf..0288084bf1f4 100644 --- a/samples/client/petstore/powershell/docs/PSUserApi.md +++ b/samples/client/petstore/powershell/docs/PSUserApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore/Api.PSUserApi +# PSPetstore.PSPetstore\Api.PSUserApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts index 72152fe04620..dbb703aad5ee 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts @@ -51,6 +51,7 @@ export interface Capitalization { sCAETHFlowPoints?: string; /** * Name of the pet + * @type {string} * @memberof Capitalization */ diff --git a/samples/documentation/wsdl/.openapi-generator-ignore b/samples/documentation/wsdl/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/documentation/wsdl/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/documentation/wsdl/.openapi-generator/FILES b/samples/documentation/wsdl/.openapi-generator/FILES new file mode 100644 index 000000000000..94285c6e2aae --- /dev/null +++ b/samples/documentation/wsdl/.openapi-generator/FILES @@ -0,0 +1,2 @@ +jaxb-customization.xml +service.wsdl diff --git a/samples/documentation/wsdl/.openapi-generator/VERSION b/samples/documentation/wsdl/.openapi-generator/VERSION new file mode 100644 index 000000000000..6555596f9311 --- /dev/null +++ b/samples/documentation/wsdl/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/documentation/wsdl/jaxb-customization.xml b/samples/documentation/wsdl/jaxb-customization.xml new file mode 100644 index 000000000000..0ae533ccb5f4 --- /dev/null +++ b/samples/documentation/wsdl/jaxb-customization.xml @@ -0,0 +1,28 @@ + + + + true + false + + + + + + + + + + + + + + + + + + diff --git a/samples/documentation/wsdl/service.wsdl b/samples/documentation/wsdl/service.wsdl new file mode 100644 index 000000000000..68ce9752d724 --- /dev/null +++ b/samples/documentation/wsdl/service.wsdl @@ -0,0 +1,1158 @@ + + + + + + + + + Invalid input + + + + + + + Invalid ID supplied + + + + + Pet not found + + + + + + + Invalid status value + + + + + + + Invalid tag value + + + + + + + Invalid ID supplied + + + + + Pet not found + + + + + + + Invalid ID supplied + + + + + Pet not found + + + + + Validation exception + + + + + + + Invalid input + + + + + + + + + Invalid ID supplied + + + + + Order not found + + + + + + + + + Invalid ID supplied + + + + + Order not found + + + + + + + Invalid Order + + + + + + + + + + + + + Invalid username supplied + + + + + User not found + + + + + + + Invalid username supplied + + + + + User not found + + + + + + + Invalid username/password supplied + + + + + + + + + Invalid user supplied + + + + + User not found + + + + + + + + + + + + + + + + + + + + + + + + Order Status + + + + + + + + + + + + + + + pet status in the store + + + + + + + + + + + + + + + + + + + + + + User Status + + + + + + + Order Status + + + + + + + + + + pet status in the store + + + + + + + + + + + + + + + + + + + Pet object that needs to be added to the store + + + + + + + + + Pet id to delete + + + + + + + + + + Status values that need to be considered for filter + + + + + + + + + successful operation + + + + + + + + + Tags to filter by + + + + + + + + + successful operation + + + + + + + + + ID of pet to return + + + + + + + + + successful operation + + + + + + + + + Pet object that needs to be added to the store + + + + + + + + + ID of pet that needs to be updated + + + + + Updated name of the pet + + + + + Updated status of the pet + + + + + + + + + ID of pet to update + + + + + Additional data to pass to server + + + + + file to upload + + + + + + + + + successful operation + + + + + + + + + + ID of the order that needs to be deleted + + + + + + + + + + + + + + successful operation + + + + + + + + + + ID of pet that needs to be fetched + + + + + + + + + + + + + + successful operation + + + + + + + + + order placed for purchasing the pet + + + + + + + + + successful operation + + + + + + + + + Created user object + + + + + + + + + successful operation + + + + + + + + + List of user object + + + + + + + + + successful operation + + + + + + + + + List of user object + + + + + + + + + successful operation + + + + + + + + + The name that needs to be deleted + + + + + + + + + The name that needs to be fetched. Use user1 for testing. + + + + + + + + + successful operation + + + + + + + + + The user name for login + + + + + The password for login in clear text + + + + + + + + + successful operation + + + + + + + + + + successful operation + + + + + + + + + name that need to be updated + + + + + Updated user object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Add a new pet to the store + + + Invalid input + + + + Deletes a pet + + + Invalid ID supplied + + + Pet not found + + + + Multiple status values can be provided with comma separated strings + + + successful operation + + + Invalid status value + + + + Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + + + successful operation + + + Invalid tag value + + + + Returns a single pet + + + successful operation + + + Invalid ID supplied + + + Pet not found + + + + Update an existing pet + + + Invalid ID supplied + + + Pet not found + + + Validation exception + + + + Updates a pet in the store with form data + + + Invalid input + + + + uploads an image + + + successful operation + + + + For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors + + + Invalid ID supplied + + + Order not found + + + + Returns a map of status codes to quantities + + + successful operation + + + + For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions + + + successful operation + + + Invalid ID supplied + + + Order not found + + + + Place an order for a pet + + + successful operation + + + Invalid Order + + + + This can only be done by the logged in user. + + + successful operation + + + + Creates list of users with given input array + + + successful operation + + + + Creates list of users with given input array + + + successful operation + + + + This can only be done by the logged in user. + + + Invalid username supplied + + + User not found + + + + Get user by user name + + + successful operation + + + Invalid username supplied + + + User not found + + + + Logs user into the system + + + successful operation + + + Invalid username/password supplied + + + + Logs out current logged in user session + + + successful operation + + + + This can only be done by the logged in user. + + + Invalid user supplied + + + User not found + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. + + + + + \ No newline at end of file diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md index 48f3b73ec03c..fe559da5098f 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md @@ -105,53 +105,52 @@ Class | Method | HTTP request | Description [*UserApi*](doc/UserApi.md) | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session [*UserApi*](doc/UserApi.md) | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user - ## Documentation For Models - - [AdditionalPropertiesClass](doc/AdditionalPropertiesClass.md) - - [Animal](doc/Animal.md) - - [ApiResponse](doc/ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc/ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc/ArrayOfNumberOnly.md) - - [ArrayTest](doc/ArrayTest.md) - - [Capitalization](doc/Capitalization.md) - - [Cat](doc/Cat.md) - - [CatAllOf](doc/CatAllOf.md) - - [Category](doc/Category.md) - - [ClassModel](doc/ClassModel.md) - - [Dog](doc/Dog.md) - - [DogAllOf](doc/DogAllOf.md) - - [EnumArrays](doc/EnumArrays.md) - - [EnumTest](doc/EnumTest.md) - - [FileSchemaTestClass](doc/FileSchemaTestClass.md) - - [Foo](doc/Foo.md) - - [FormatTest](doc/FormatTest.md) - - [HasOnlyReadOnly](doc/HasOnlyReadOnly.md) - - [HealthCheckResult](doc/HealthCheckResult.md) - - [InlineResponseDefault](doc/InlineResponseDefault.md) - - [MapTest](doc/MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc/MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc/Model200Response.md) - - [ModelClient](doc/ModelClient.md) - - [ModelEnumClass](doc/ModelEnumClass.md) - - [ModelFile](doc/ModelFile.md) - - [ModelList](doc/ModelList.md) - - [ModelReturn](doc/ModelReturn.md) - - [Name](doc/Name.md) - - [NullableClass](doc/NullableClass.md) - - [NumberOnly](doc/NumberOnly.md) - - [Order](doc/Order.md) - - [OuterComposite](doc/OuterComposite.md) - - [OuterEnum](doc/OuterEnum.md) - - [OuterEnumDefaultValue](doc/OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc/OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc/OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc/OuterObjectWithEnumProperty.md) - - [Pet](doc/Pet.md) - - [ReadOnlyFirst](doc/ReadOnlyFirst.md) - - [SpecialModelName](doc/SpecialModelName.md) - - [Tag](doc/Tag.md) - - [User](doc/User.md) + - [AdditionalPropertiesClass](doc\AdditionalPropertiesClass.md) + - [Animal](doc\Animal.md) + - [ApiResponse](doc\ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc\ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc\ArrayOfNumberOnly.md) + - [ArrayTest](doc\ArrayTest.md) + - [Capitalization](doc\Capitalization.md) + - [Cat](doc\Cat.md) + - [CatAllOf](doc\CatAllOf.md) + - [Category](doc\Category.md) + - [ClassModel](doc\ClassModel.md) + - [Dog](doc\Dog.md) + - [DogAllOf](doc\DogAllOf.md) + - [EnumArrays](doc\EnumArrays.md) + - [EnumTest](doc\EnumTest.md) + - [FileSchemaTestClass](doc\FileSchemaTestClass.md) + - [Foo](doc\Foo.md) + - [FormatTest](doc\FormatTest.md) + - [HasOnlyReadOnly](doc\HasOnlyReadOnly.md) + - [HealthCheckResult](doc\HealthCheckResult.md) + - [InlineResponseDefault](doc\InlineResponseDefault.md) + - [MapTest](doc\MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc\MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc\Model200Response.md) + - [ModelClient](doc\ModelClient.md) + - [ModelEnumClass](doc\ModelEnumClass.md) + - [ModelFile](doc\ModelFile.md) + - [ModelList](doc\ModelList.md) + - [ModelReturn](doc\ModelReturn.md) + - [Name](doc\Name.md) + - [NullableClass](doc\NullableClass.md) + - [NumberOnly](doc\NumberOnly.md) + - [Order](doc\Order.md) + - [OuterComposite](doc\OuterComposite.md) + - [OuterEnum](doc\OuterEnum.md) + - [OuterEnumDefaultValue](doc\OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc\OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc\OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc\OuterObjectWithEnumProperty.md) + - [Pet](doc\Pet.md) + - [ReadOnlyFirst](doc\ReadOnlyFirst.md) + - [SpecialModelName](doc\SpecialModelName.md) + - [Tag](doc\Tag.md) + - [User](doc\User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md index ac04fa9f72b0..cd35141505e8 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md @@ -82,12 +82,12 @@ Class | Method | HTTP request | Description ## Documentation For Models - - [ApiResponse](doc/ApiResponse.md) - - [Category](doc/Category.md) - - [Order](doc/Order.md) - - [Pet](doc/Pet.md) - - [Tag](doc/Tag.md) - - [User](doc/User.md) + - [ApiResponse](doc\ApiResponse.md) + - [Category](doc\Category.md) + - [Order](doc\Order.md) + - [Pet](doc\Pet.md) + - [Tag](doc\Tag.md) + - [User](doc\User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md index 22789ae77619..36738b4ade8f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md @@ -102,50 +102,50 @@ Class | Method | HTTP request | Description ## Documentation For Models - - [AdditionalPropertiesClass](doc/AdditionalPropertiesClass.md) - - [Animal](doc/Animal.md) - - [ApiResponse](doc/ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc/ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc/ArrayOfNumberOnly.md) - - [ArrayTest](doc/ArrayTest.md) - - [Capitalization](doc/Capitalization.md) - - [Cat](doc/Cat.md) - - [CatAllOf](doc/CatAllOf.md) - - [Category](doc/Category.md) - - [ClassModel](doc/ClassModel.md) - - [Dog](doc/Dog.md) - - [DogAllOf](doc/DogAllOf.md) - - [EnumArrays](doc/EnumArrays.md) - - [EnumTest](doc/EnumTest.md) - - [FileSchemaTestClass](doc/FileSchemaTestClass.md) - - [Foo](doc/Foo.md) - - [FormatTest](doc/FormatTest.md) - - [HasOnlyReadOnly](doc/HasOnlyReadOnly.md) - - [HealthCheckResult](doc/HealthCheckResult.md) - - [InlineResponseDefault](doc/InlineResponseDefault.md) - - [MapTest](doc/MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc/MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc/Model200Response.md) - - [ModelClient](doc/ModelClient.md) - - [ModelEnumClass](doc/ModelEnumClass.md) - - [ModelFile](doc/ModelFile.md) - - [ModelList](doc/ModelList.md) - - [ModelReturn](doc/ModelReturn.md) - - [Name](doc/Name.md) - - [NullableClass](doc/NullableClass.md) - - [NumberOnly](doc/NumberOnly.md) - - [Order](doc/Order.md) - - [OuterComposite](doc/OuterComposite.md) - - [OuterEnum](doc/OuterEnum.md) - - [OuterEnumDefaultValue](doc/OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc/OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc/OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc/OuterObjectWithEnumProperty.md) - - [Pet](doc/Pet.md) - - [ReadOnlyFirst](doc/ReadOnlyFirst.md) - - [SpecialModelName](doc/SpecialModelName.md) - - [Tag](doc/Tag.md) - - [User](doc/User.md) + - [AdditionalPropertiesClass](doc\AdditionalPropertiesClass.md) + - [Animal](doc\Animal.md) + - [ApiResponse](doc\ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc\ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc\ArrayOfNumberOnly.md) + - [ArrayTest](doc\ArrayTest.md) + - [Capitalization](doc\Capitalization.md) + - [Cat](doc\Cat.md) + - [CatAllOf](doc\CatAllOf.md) + - [Category](doc\Category.md) + - [ClassModel](doc\ClassModel.md) + - [Dog](doc\Dog.md) + - [DogAllOf](doc\DogAllOf.md) + - [EnumArrays](doc\EnumArrays.md) + - [EnumTest](doc\EnumTest.md) + - [FileSchemaTestClass](doc\FileSchemaTestClass.md) + - [Foo](doc\Foo.md) + - [FormatTest](doc\FormatTest.md) + - [HasOnlyReadOnly](doc\HasOnlyReadOnly.md) + - [HealthCheckResult](doc\HealthCheckResult.md) + - [InlineResponseDefault](doc\InlineResponseDefault.md) + - [MapTest](doc\MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc\MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc\Model200Response.md) + - [ModelClient](doc\ModelClient.md) + - [ModelEnumClass](doc\ModelEnumClass.md) + - [ModelFile](doc\ModelFile.md) + - [ModelList](doc\ModelList.md) + - [ModelReturn](doc\ModelReturn.md) + - [Name](doc\Name.md) + - [NullableClass](doc\NullableClass.md) + - [NumberOnly](doc\NumberOnly.md) + - [Order](doc\Order.md) + - [OuterComposite](doc\OuterComposite.md) + - [OuterEnum](doc\OuterEnum.md) + - [OuterEnumDefaultValue](doc\OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc\OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc\OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc\OuterObjectWithEnumProperty.md) + - [Pet](doc\Pet.md) + - [ReadOnlyFirst](doc\ReadOnlyFirst.md) + - [SpecialModelName](doc\SpecialModelName.md) + - [Tag](doc\Tag.md) + - [User](doc\User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md b/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md index 99bd229f3c50..18de35ccec0d 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md @@ -60,36 +60,36 @@ All URIs are relative to *http://petstore.swagger.io/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [ApiResponse](doc//ApiResponse.md) - - [Category](doc//Category.md) - - [Order](doc//Order.md) - - [Pet](doc//Pet.md) - - [Tag](doc//Tag.md) - - [User](doc//User.md) + - [ApiResponse](doc\/ApiResponse.md) + - [Category](doc\/Category.md) + - [Order](doc\/Order.md) + - [Pet](doc\/Pet.md) + - [Tag](doc\/Tag.md) + - [User](doc\/User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md index fe39c2f21264..9b39a96c6b70 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md @@ -58,94 +58,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc//AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc//DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc//FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc//FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc//FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc//FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc//FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc//FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc//FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc//FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc//FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc//FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc//FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc//FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc//FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc//FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc//FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc//FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc//FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc//PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc\/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc\/DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc\/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc\/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc\/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc\/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc\/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc\/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc\/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc\/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc\/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc\/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc\/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc\/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc\/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc\/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc\/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc\/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc\/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc//AdditionalPropertiesClass.md) - - [Animal](doc//Animal.md) - - [ApiResponse](doc//ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc//ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc//ArrayOfNumberOnly.md) - - [ArrayTest](doc//ArrayTest.md) - - [Capitalization](doc//Capitalization.md) - - [Cat](doc//Cat.md) - - [CatAllOf](doc//CatAllOf.md) - - [Category](doc//Category.md) - - [ClassModel](doc//ClassModel.md) - - [Dog](doc//Dog.md) - - [DogAllOf](doc//DogAllOf.md) - - [EnumArrays](doc//EnumArrays.md) - - [EnumClass](doc//EnumClass.md) - - [EnumTest](doc//EnumTest.md) - - [FileSchemaTestClass](doc//FileSchemaTestClass.md) - - [Foo](doc//Foo.md) - - [FormatTest](doc//FormatTest.md) - - [HasOnlyReadOnly](doc//HasOnlyReadOnly.md) - - [HealthCheckResult](doc//HealthCheckResult.md) - - [InlineResponseDefault](doc//InlineResponseDefault.md) - - [MapTest](doc//MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc//MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc//Model200Response.md) - - [ModelClient](doc//ModelClient.md) - - [ModelFile](doc//ModelFile.md) - - [ModelList](doc//ModelList.md) - - [ModelReturn](doc//ModelReturn.md) - - [Name](doc//Name.md) - - [NullableClass](doc//NullableClass.md) - - [NumberOnly](doc//NumberOnly.md) - - [Order](doc//Order.md) - - [OuterComposite](doc//OuterComposite.md) - - [OuterEnum](doc//OuterEnum.md) - - [OuterEnumDefaultValue](doc//OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc//OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc//OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc//OuterObjectWithEnumProperty.md) - - [Pet](doc//Pet.md) - - [ReadOnlyFirst](doc//ReadOnlyFirst.md) - - [SpecialModelName](doc//SpecialModelName.md) - - [Tag](doc//Tag.md) - - [User](doc//User.md) + - [AdditionalPropertiesClass](doc\/AdditionalPropertiesClass.md) + - [Animal](doc\/Animal.md) + - [ApiResponse](doc\/ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc\/ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc\/ArrayOfNumberOnly.md) + - [ArrayTest](doc\/ArrayTest.md) + - [Capitalization](doc\/Capitalization.md) + - [Cat](doc\/Cat.md) + - [CatAllOf](doc\/CatAllOf.md) + - [Category](doc\/Category.md) + - [ClassModel](doc\/ClassModel.md) + - [Dog](doc\/Dog.md) + - [DogAllOf](doc\/DogAllOf.md) + - [EnumArrays](doc\/EnumArrays.md) + - [EnumClass](doc\/EnumClass.md) + - [EnumTest](doc\/EnumTest.md) + - [FileSchemaTestClass](doc\/FileSchemaTestClass.md) + - [Foo](doc\/Foo.md) + - [FormatTest](doc\/FormatTest.md) + - [HasOnlyReadOnly](doc\/HasOnlyReadOnly.md) + - [HealthCheckResult](doc\/HealthCheckResult.md) + - [InlineResponseDefault](doc\/InlineResponseDefault.md) + - [MapTest](doc\/MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc\/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc\/Model200Response.md) + - [ModelClient](doc\/ModelClient.md) + - [ModelFile](doc\/ModelFile.md) + - [ModelList](doc\/ModelList.md) + - [ModelReturn](doc\/ModelReturn.md) + - [Name](doc\/Name.md) + - [NullableClass](doc\/NullableClass.md) + - [NumberOnly](doc\/NumberOnly.md) + - [Order](doc\/Order.md) + - [OuterComposite](doc\/OuterComposite.md) + - [OuterEnum](doc\/OuterEnum.md) + - [OuterEnumDefaultValue](doc\/OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc\/OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc\/OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc\/OuterObjectWithEnumProperty.md) + - [Pet](doc\/Pet.md) + - [ReadOnlyFirst](doc\/ReadOnlyFirst.md) + - [SpecialModelName](doc\/SpecialModelName.md) + - [Tag](doc\/Tag.md) + - [User](doc\/User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md index fe39c2f21264..9b39a96c6b70 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md @@ -58,94 +58,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc//AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc//DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc//FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc//FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc//FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc//FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc//FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc//FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc//FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc//FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc//FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc//FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc//FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc//FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc//FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc//FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc//FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc//FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc//FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc//PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc\/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc\/DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc\/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc\/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc\/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc\/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc\/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc\/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc\/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc\/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc\/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc\/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc\/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc\/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc\/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc\/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc\/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc\/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc\/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc//AdditionalPropertiesClass.md) - - [Animal](doc//Animal.md) - - [ApiResponse](doc//ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc//ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc//ArrayOfNumberOnly.md) - - [ArrayTest](doc//ArrayTest.md) - - [Capitalization](doc//Capitalization.md) - - [Cat](doc//Cat.md) - - [CatAllOf](doc//CatAllOf.md) - - [Category](doc//Category.md) - - [ClassModel](doc//ClassModel.md) - - [Dog](doc//Dog.md) - - [DogAllOf](doc//DogAllOf.md) - - [EnumArrays](doc//EnumArrays.md) - - [EnumClass](doc//EnumClass.md) - - [EnumTest](doc//EnumTest.md) - - [FileSchemaTestClass](doc//FileSchemaTestClass.md) - - [Foo](doc//Foo.md) - - [FormatTest](doc//FormatTest.md) - - [HasOnlyReadOnly](doc//HasOnlyReadOnly.md) - - [HealthCheckResult](doc//HealthCheckResult.md) - - [InlineResponseDefault](doc//InlineResponseDefault.md) - - [MapTest](doc//MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc//MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc//Model200Response.md) - - [ModelClient](doc//ModelClient.md) - - [ModelFile](doc//ModelFile.md) - - [ModelList](doc//ModelList.md) - - [ModelReturn](doc//ModelReturn.md) - - [Name](doc//Name.md) - - [NullableClass](doc//NullableClass.md) - - [NumberOnly](doc//NumberOnly.md) - - [Order](doc//Order.md) - - [OuterComposite](doc//OuterComposite.md) - - [OuterEnum](doc//OuterEnum.md) - - [OuterEnumDefaultValue](doc//OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc//OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc//OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc//OuterObjectWithEnumProperty.md) - - [Pet](doc//Pet.md) - - [ReadOnlyFirst](doc//ReadOnlyFirst.md) - - [SpecialModelName](doc//SpecialModelName.md) - - [Tag](doc//Tag.md) - - [User](doc//User.md) + - [AdditionalPropertiesClass](doc\/AdditionalPropertiesClass.md) + - [Animal](doc\/Animal.md) + - [ApiResponse](doc\/ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc\/ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc\/ArrayOfNumberOnly.md) + - [ArrayTest](doc\/ArrayTest.md) + - [Capitalization](doc\/Capitalization.md) + - [Cat](doc\/Cat.md) + - [CatAllOf](doc\/CatAllOf.md) + - [Category](doc\/Category.md) + - [ClassModel](doc\/ClassModel.md) + - [Dog](doc\/Dog.md) + - [DogAllOf](doc\/DogAllOf.md) + - [EnumArrays](doc\/EnumArrays.md) + - [EnumClass](doc\/EnumClass.md) + - [EnumTest](doc\/EnumTest.md) + - [FileSchemaTestClass](doc\/FileSchemaTestClass.md) + - [Foo](doc\/Foo.md) + - [FormatTest](doc\/FormatTest.md) + - [HasOnlyReadOnly](doc\/HasOnlyReadOnly.md) + - [HealthCheckResult](doc\/HealthCheckResult.md) + - [InlineResponseDefault](doc\/InlineResponseDefault.md) + - [MapTest](doc\/MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc\/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc\/Model200Response.md) + - [ModelClient](doc\/ModelClient.md) + - [ModelFile](doc\/ModelFile.md) + - [ModelList](doc\/ModelList.md) + - [ModelReturn](doc\/ModelReturn.md) + - [Name](doc\/Name.md) + - [NullableClass](doc\/NullableClass.md) + - [NumberOnly](doc\/NumberOnly.md) + - [Order](doc\/Order.md) + - [OuterComposite](doc\/OuterComposite.md) + - [OuterEnum](doc\/OuterEnum.md) + - [OuterEnumDefaultValue](doc\/OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc\/OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc\/OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc\/OuterObjectWithEnumProperty.md) + - [Pet](doc\/Pet.md) + - [ReadOnlyFirst](doc\/ReadOnlyFirst.md) + - [SpecialModelName](doc\/SpecialModelName.md) + - [Tag](doc\/Tag.md) + - [User](doc\/User.md) ## Documentation For Authorization diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs index d58ff968d3c5..04aa969cb957 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; + exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs index 79c62f5c672d..cb4da58b6105 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs index 17fdac817ad8..c4f77f108acb 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; + exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs index d58ff968d3c5..04aa969cb957 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; + exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs index 79c62f5c672d..cb4da58b6105 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs index 17fdac817ad8..c4f77f108acb 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; + exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs index 3162f82261ba..c99e55e5f2d4 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -48,7 +48,7 @@ public virtual IActionResult AddPet([FromBody]Pet pet) //TODO: Uncomment the next line to return response 405 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(405); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -97,7 +97,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -161,7 +161,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -197,7 +197,7 @@ public virtual IActionResult UpdatePet([FromBody]Pet pet) //TODO: Uncomment the next line to return response 405 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(405); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -247,7 +247,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; + exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs index 431fccf19057..881cd5107a94 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -128,7 +128,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order order) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs index 406c969ffb24..327c18b86878 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -134,7 +134,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; + exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs index 68722c6b4cb0..6f7fae5e120b 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; + exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; + exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs index 4503e177b9c9..213f6a8479e4 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; + exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs index 06ca8107d072..b4752ae73d15 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; + exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/php-slim4/README.md b/samples/server/petstore/php-slim4/README.md index 3f5c820198c5..78d2322ebb72 100644 --- a/samples/server/petstore/php-slim4/README.md +++ b/samples/server/petstore/php-slim4/README.md @@ -168,10 +168,10 @@ Class | Method | HTTP request | Description ## Authentication ### Security schema `api_key` -> Important! To make ApiKey authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class. +> Important! To make ApiKey authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib\/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class. ### Security schema `petstore_auth` -> Important! To make OAuth authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\OAuthAuthenticator](./src/Auth/OAuthAuthenticator.php) class. +> Important! To make OAuth authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib\/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\OAuthAuthenticator](./src/Auth/OAuthAuthenticator.php) class. Scope list: * `write:pets` - modify pets in your account diff --git a/samples/server/petstore/php-slim4/phpunit.xml.dist b/samples/server/petstore/php-slim4/phpunit.xml.dist index 3efb4b45f4aa..10eaa6529577 100644 --- a/samples/server/petstore/php-slim4/phpunit.xml.dist +++ b/samples/server/petstore/php-slim4/phpunit.xml.dist @@ -21,9 +21,9 @@ - ./lib/Api + ./lib\/Api ./lib/BaseModel.php - ./lib/Model + ./lib\/Model diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist b/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist index e754829e6283..40d39d2f5a8c 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist @@ -14,9 +14,9 @@ - ././Api - ././Model - ././Controller + ./.\/Api + ./.\/Model + ./.\/Controller diff --git a/samples/server/petstore/python-aiohttp-srclayout/setup.py b/samples/server/petstore/python-aiohttp-srclayout/setup.py index 6f62aec44149..600b620958c6 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/setup.py +++ b/samples/server/petstore/python-aiohttp-srclayout/setup.py @@ -27,9 +27,9 @@ url="", keywords=["OpenAPI", "OpenAPI Petstore"], install_requires=REQUIRES, - packages=find_packages("src/"), - package_dir={"": "src/"}, - package_data={'': ['src//openapi/openapi.yaml']}, + packages=find_packages("src\"), + package_dir={"": "src\"}, + package_data={'': ['src\/openapi/openapi.yaml']}, include_package_data=True, entry_points={ 'console_scripts': ['openapi_server=openapi_server.__main__:main']}, diff --git a/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py b/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py index 578bf18e982c..63ba2f413d1b 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py +++ b/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py @@ -12,7 +12,7 @@ def client(loop, aiohttp_client): "swagger_ui": True } specification_dir = os.path.join(os.path.dirname(__file__), '..', - "src/", + "src\", 'openapi_server', 'openapi') app = connexion.AioHttpApp(__name__, specification_dir=specification_dir, diff --git a/samples/server/petstore/python-aiohttp-srclayout/tox.ini b/samples/server/petstore/python-aiohttp-srclayout/tox.ini index 25d12bb84c0b..3d847999b3c9 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tox.ini +++ b/samples/server/petstore/python-aiohttp-srclayout/tox.ini @@ -8,4 +8,4 @@ deps=-r{toxinidir}/requirements.txt {toxinidir} commands= - pytest --cov=src/openapi_server + pytest --cov=src\openapi_server From 28c3e1d544d22feb55b91781040e33988bcb5b4f Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 28 May 2021 10:26:48 +0800 Subject: [PATCH 168/186] update samples, docs --- docs/generators.md | 1 + docs/generators/fsharp-functions.md | 2 +- docs/generators/fsharp-giraffe-server.md | 2 +- docs/generators/java-inflector.md | 2 +- docs/generators/jaxrs-cxf-client.md | 2 +- docs/generators/swift5.md | 4 +- .../petstore/R/.openapi-generator/FILES | 2 +- .../.openapi-generator/FILES | 2 +- .../php/OpenAPIClient-php/phpunit.xml.dist | 4 +- samples/client/petstore/powershell/README.md | 12 +- .../petstore/powershell/docs/PSPetApi.md | 2 +- .../petstore/powershell/docs/PSStoreApi.md | 2 +- .../petstore/powershell/docs/PSUserApi.md | 2 +- .../default-v3.0/models/Capitalization.ts | 1 - .../petstore_client_lib_fake/README.md | 89 +++++----- .../dart-dio/petstore_client_lib/README.md | 12 +- .../petstore_client_lib_fake/README.md | 88 ++++----- .../dart2/petstore_client_lib/README.md | 52 +++--- .../dart2/petstore_client_lib_fake/README.md | 168 +++++++++--------- .../README.md | 168 +++++++++--------- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 12 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 +- .../Org.OpenAPITools/Controllers/UserApi.cs | 2 +- samples/server/petstore/php-slim4/README.md | 4 +- .../petstore/php-slim4/phpunit.xml.dist | 4 +- .../SymfonyBundle-php/phpunit.xml.dist | 6 +- .../python-aiohttp-srclayout/setup.py | 6 +- .../tests/conftest.py | 2 +- .../petstore/python-aiohttp-srclayout/tox.ini | 2 +- 38 files changed, 351 insertions(+), 350 deletions(-) diff --git a/docs/generators.md b/docs/generators.md index e667c369f366..59b26392bc01 100644 --- a/docs/generators.md +++ b/docs/generators.md @@ -142,6 +142,7 @@ The following generators are available: * [openapi](generators/openapi.md) * [openapi-yaml](generators/openapi-yaml.md) * [plantuml (beta)](generators/plantuml.md) +* [wsdl](generators/wsdl.md) ## SCHEMA generators diff --git a/docs/generators/fsharp-functions.md b/docs/generators/fsharp-functions.md index 2a81000a7fb0..bb16f39fa776 100644 --- a/docs/generators/fsharp-functions.md +++ b/docs/generators/fsharp-functions.md @@ -22,7 +22,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |OpenAPI\src| +|sourceFolder|source folder for generated code| |OpenAPI/src| ## IMPORT MAPPING diff --git a/docs/generators/fsharp-giraffe-server.md b/docs/generators/fsharp-giraffe-server.md index 66150dbec0de..f374168aa71f 100644 --- a/docs/generators/fsharp-giraffe-server.md +++ b/docs/generators/fsharp-giraffe-server.md @@ -19,7 +19,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |packageVersion|F# package version.| |1.0.0| |returnICollection|Return ICollection<T> instead of the concrete type.| |false| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |OpenAPI\src| +|sourceFolder|source folder for generated code| |OpenAPI/src| |useCollection|Deserialize array types to Collection<T> instead of List<T>.| |false| |useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false| |useSwashbuckle|Uses the Swashbuckle.AspNetCore NuGet package for documentation.| |false| diff --git a/docs/generators/java-inflector.md b/docs/generators/java-inflector.md index 131b09f3f90e..373bc61861b2 100644 --- a/docs/generators/java-inflector.md +++ b/docs/generators/java-inflector.md @@ -48,7 +48,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |snapshotVersion|Uses a SNAPSHOT version.|
    **true**
    Use a SnapShot Version
    **false**
    Use a Release Version
    |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |src\gen\java| +|sourceFolder|source folder for generated code| |src/gen/java| |withXml|whether to include support for application/xml content type and include XML annotations in the model (works with libraries that provide support for JSON and XML)| |false| ## IMPORT MAPPING diff --git a/docs/generators/jaxrs-cxf-client.md b/docs/generators/jaxrs-cxf-client.md index 25d03ea104b9..fb3547c920d8 100644 --- a/docs/generators/jaxrs-cxf-client.md +++ b/docs/generators/jaxrs-cxf-client.md @@ -48,7 +48,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |snapshotVersion|Uses a SNAPSHOT version.|
    **true**
    Use a SnapShot Version
    **false**
    Use a Release Version
    |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|sourceFolder|source folder for generated code| |src\gen\java| +|sourceFolder|source folder for generated code| |src/gen/java| |useBeanValidation|Use BeanValidation API annotations| |false| |useGenericResponse|Use generic response| |false| |useGzipFeatureForTests|Use Gzip Feature for tests| |false| diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index 2846d6de2b95..bace7f1f0492 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -36,10 +36,10 @@ These options may be applied as additional-properties (cli) or configOptions (pl |responseAs|Optionally use libraries to manage response. Currently PromiseKit, RxSwift, Result, Combine are available.| |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| -|swiftPackagePath|Set a custom source path instead of OpenAPIClient\Classes\OpenAPIs.| |null| +|swiftPackagePath|Set a custom source path instead of OpenAPIClient/Classes/OpenAPIs.| |null| |swiftUseApiNamespace|Flag to make all the API classes inner-class of {{projectName}}API| |null| |useBacktickEscapes|Escape reserved words using backticks (default: false)| |false| -|useSPMFileStructure|Use SPM file structure and set the source path to Sources\{{projectName}} (default: false).| |null| +|useSPMFileStructure|Use SPM file structure and set the source path to Sources/{{projectName}} (default: false).| |null| ## IMPORT MAPPING diff --git a/samples/client/petstore/R/.openapi-generator/FILES b/samples/client/petstore/R/.openapi-generator/FILES index 5ec829dd19d5..9385728f0103 100644 --- a/samples/client/petstore/R/.openapi-generator/FILES +++ b/samples/client/petstore/R/.openapi-generator/FILES @@ -3,7 +3,6 @@ .travis.yml DESCRIPTION NAMESPACE -README.md R/api_client.R R/api_response.R R/category.R @@ -15,6 +14,7 @@ R/store_api.R R/tag.R R/user.R R/user_api.R +README.md docs/Category.md docs/ModelApiResponse.md docs/Order.md diff --git a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES index dcbafb2b3197..fda1dc9138c5 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES +++ b/samples/client/petstore/php/OpenAPIClient-php/.openapi-generator/FILES @@ -55,7 +55,6 @@ docs/Model/SpecialModelName.md docs/Model/Tag.md docs/Model/User.md git_push.sh -lib/ApiException.php lib/Api/AnotherFakeApi.php lib/Api/DefaultApi.php lib/Api/FakeApi.php @@ -63,6 +62,7 @@ lib/Api/FakeClassnameTags123Api.php lib/Api/PetApi.php lib/Api/StoreApi.php lib/Api/UserApi.php +lib/ApiException.php lib/Configuration.php lib/HeaderSelector.php lib/Model/AdditionalPropertiesClass.php diff --git a/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist b/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist index afbe167922d2..3dd90bbe32c9 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist +++ b/samples/client/petstore/php/OpenAPIClient-php/phpunit.xml.dist @@ -13,8 +13,8 @@ - ./lib\/Api - ./lib\/Model + ./lib/Api + ./lib/Model diff --git a/samples/client/petstore/powershell/README.md b/samples/client/petstore/powershell/README.md index 45adbebb0967..d394a82a0e91 100644 --- a/samples/client/petstore/powershell/README.md +++ b/samples/client/petstore/powershell/README.md @@ -79,12 +79,12 @@ Class | Method | HTTP request | Description ## Documentation for Models - - [PSPetstore\Model.ApiResponse](docs/ApiResponse.md) - - [PSPetstore\Model.Category](docs/Category.md) - - [PSPetstore\Model.Order](docs/Order.md) - - [PSPetstore\Model.Pet](docs/Pet.md) - - [PSPetstore\Model.Tag](docs/Tag.md) - - [PSPetstore\Model.User](docs/User.md) + - [PSPetstore/Model.ApiResponse](docs/ApiResponse.md) + - [PSPetstore/Model.Category](docs/Category.md) + - [PSPetstore/Model.Order](docs/Order.md) + - [PSPetstore/Model.Pet](docs/Pet.md) + - [PSPetstore/Model.Tag](docs/Tag.md) + - [PSPetstore/Model.User](docs/User.md) ## Documentation for Authorization diff --git a/samples/client/petstore/powershell/docs/PSPetApi.md b/samples/client/petstore/powershell/docs/PSPetApi.md index af5ef7d0dede..5b8c2a0f2e3e 100644 --- a/samples/client/petstore/powershell/docs/PSPetApi.md +++ b/samples/client/petstore/powershell/docs/PSPetApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore\Api.PSPetApi +# PSPetstore.PSPetstore/Api.PSPetApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/powershell/docs/PSStoreApi.md b/samples/client/petstore/powershell/docs/PSStoreApi.md index 2ae1104846c5..33b3541ced6c 100644 --- a/samples/client/petstore/powershell/docs/PSStoreApi.md +++ b/samples/client/petstore/powershell/docs/PSStoreApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore\Api.PSStoreApi +# PSPetstore.PSPetstore/Api.PSStoreApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/powershell/docs/PSUserApi.md b/samples/client/petstore/powershell/docs/PSUserApi.md index 0288084bf1f4..f008e292f2cf 100644 --- a/samples/client/petstore/powershell/docs/PSUserApi.md +++ b/samples/client/petstore/powershell/docs/PSUserApi.md @@ -1,4 +1,4 @@ -# PSPetstore.PSPetstore\Api.PSUserApi +# PSPetstore.PSPetstore/Api.PSUserApi All URIs are relative to *http://petstore.swagger.io:80/v2* diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts index dbb703aad5ee..72152fe04620 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Capitalization.ts @@ -51,7 +51,6 @@ export interface Capitalization { sCAETHFlowPoints?: string; /** * Name of the pet - * @type {string} * @memberof Capitalization */ diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md index fe559da5098f..48f3b73ec03c 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md @@ -105,52 +105,53 @@ Class | Method | HTTP request | Description [*UserApi*](doc/UserApi.md) | [**logoutUser**](doc/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session [*UserApi*](doc/UserApi.md) | [**updateUser**](doc/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user + ## Documentation For Models - - [AdditionalPropertiesClass](doc\AdditionalPropertiesClass.md) - - [Animal](doc\Animal.md) - - [ApiResponse](doc\ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc\ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc\ArrayOfNumberOnly.md) - - [ArrayTest](doc\ArrayTest.md) - - [Capitalization](doc\Capitalization.md) - - [Cat](doc\Cat.md) - - [CatAllOf](doc\CatAllOf.md) - - [Category](doc\Category.md) - - [ClassModel](doc\ClassModel.md) - - [Dog](doc\Dog.md) - - [DogAllOf](doc\DogAllOf.md) - - [EnumArrays](doc\EnumArrays.md) - - [EnumTest](doc\EnumTest.md) - - [FileSchemaTestClass](doc\FileSchemaTestClass.md) - - [Foo](doc\Foo.md) - - [FormatTest](doc\FormatTest.md) - - [HasOnlyReadOnly](doc\HasOnlyReadOnly.md) - - [HealthCheckResult](doc\HealthCheckResult.md) - - [InlineResponseDefault](doc\InlineResponseDefault.md) - - [MapTest](doc\MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc\MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc\Model200Response.md) - - [ModelClient](doc\ModelClient.md) - - [ModelEnumClass](doc\ModelEnumClass.md) - - [ModelFile](doc\ModelFile.md) - - [ModelList](doc\ModelList.md) - - [ModelReturn](doc\ModelReturn.md) - - [Name](doc\Name.md) - - [NullableClass](doc\NullableClass.md) - - [NumberOnly](doc\NumberOnly.md) - - [Order](doc\Order.md) - - [OuterComposite](doc\OuterComposite.md) - - [OuterEnum](doc\OuterEnum.md) - - [OuterEnumDefaultValue](doc\OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc\OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc\OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc\OuterObjectWithEnumProperty.md) - - [Pet](doc\Pet.md) - - [ReadOnlyFirst](doc\ReadOnlyFirst.md) - - [SpecialModelName](doc\SpecialModelName.md) - - [Tag](doc\Tag.md) - - [User](doc\User.md) + - [AdditionalPropertiesClass](doc/AdditionalPropertiesClass.md) + - [Animal](doc/Animal.md) + - [ApiResponse](doc/ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc/ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc/ArrayOfNumberOnly.md) + - [ArrayTest](doc/ArrayTest.md) + - [Capitalization](doc/Capitalization.md) + - [Cat](doc/Cat.md) + - [CatAllOf](doc/CatAllOf.md) + - [Category](doc/Category.md) + - [ClassModel](doc/ClassModel.md) + - [Dog](doc/Dog.md) + - [DogAllOf](doc/DogAllOf.md) + - [EnumArrays](doc/EnumArrays.md) + - [EnumTest](doc/EnumTest.md) + - [FileSchemaTestClass](doc/FileSchemaTestClass.md) + - [Foo](doc/Foo.md) + - [FormatTest](doc/FormatTest.md) + - [HasOnlyReadOnly](doc/HasOnlyReadOnly.md) + - [HealthCheckResult](doc/HealthCheckResult.md) + - [InlineResponseDefault](doc/InlineResponseDefault.md) + - [MapTest](doc/MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc/Model200Response.md) + - [ModelClient](doc/ModelClient.md) + - [ModelEnumClass](doc/ModelEnumClass.md) + - [ModelFile](doc/ModelFile.md) + - [ModelList](doc/ModelList.md) + - [ModelReturn](doc/ModelReturn.md) + - [Name](doc/Name.md) + - [NullableClass](doc/NullableClass.md) + - [NumberOnly](doc/NumberOnly.md) + - [Order](doc/Order.md) + - [OuterComposite](doc/OuterComposite.md) + - [OuterEnum](doc/OuterEnum.md) + - [OuterEnumDefaultValue](doc/OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc/OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc/OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc/OuterObjectWithEnumProperty.md) + - [Pet](doc/Pet.md) + - [ReadOnlyFirst](doc/ReadOnlyFirst.md) + - [SpecialModelName](doc/SpecialModelName.md) + - [Tag](doc/Tag.md) + - [User](doc/User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md index cd35141505e8..ac04fa9f72b0 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/README.md @@ -82,12 +82,12 @@ Class | Method | HTTP request | Description ## Documentation For Models - - [ApiResponse](doc\ApiResponse.md) - - [Category](doc\Category.md) - - [Order](doc\Order.md) - - [Pet](doc\Pet.md) - - [Tag](doc\Tag.md) - - [User](doc\User.md) + - [ApiResponse](doc/ApiResponse.md) + - [Category](doc/Category.md) + - [Order](doc/Order.md) + - [Pet](doc/Pet.md) + - [Tag](doc/Tag.md) + - [User](doc/User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md index 36738b4ade8f..22789ae77619 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md @@ -102,50 +102,50 @@ Class | Method | HTTP request | Description ## Documentation For Models - - [AdditionalPropertiesClass](doc\AdditionalPropertiesClass.md) - - [Animal](doc\Animal.md) - - [ApiResponse](doc\ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc\ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc\ArrayOfNumberOnly.md) - - [ArrayTest](doc\ArrayTest.md) - - [Capitalization](doc\Capitalization.md) - - [Cat](doc\Cat.md) - - [CatAllOf](doc\CatAllOf.md) - - [Category](doc\Category.md) - - [ClassModel](doc\ClassModel.md) - - [Dog](doc\Dog.md) - - [DogAllOf](doc\DogAllOf.md) - - [EnumArrays](doc\EnumArrays.md) - - [EnumTest](doc\EnumTest.md) - - [FileSchemaTestClass](doc\FileSchemaTestClass.md) - - [Foo](doc\Foo.md) - - [FormatTest](doc\FormatTest.md) - - [HasOnlyReadOnly](doc\HasOnlyReadOnly.md) - - [HealthCheckResult](doc\HealthCheckResult.md) - - [InlineResponseDefault](doc\InlineResponseDefault.md) - - [MapTest](doc\MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc\MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc\Model200Response.md) - - [ModelClient](doc\ModelClient.md) - - [ModelEnumClass](doc\ModelEnumClass.md) - - [ModelFile](doc\ModelFile.md) - - [ModelList](doc\ModelList.md) - - [ModelReturn](doc\ModelReturn.md) - - [Name](doc\Name.md) - - [NullableClass](doc\NullableClass.md) - - [NumberOnly](doc\NumberOnly.md) - - [Order](doc\Order.md) - - [OuterComposite](doc\OuterComposite.md) - - [OuterEnum](doc\OuterEnum.md) - - [OuterEnumDefaultValue](doc\OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc\OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc\OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc\OuterObjectWithEnumProperty.md) - - [Pet](doc\Pet.md) - - [ReadOnlyFirst](doc\ReadOnlyFirst.md) - - [SpecialModelName](doc\SpecialModelName.md) - - [Tag](doc\Tag.md) - - [User](doc\User.md) + - [AdditionalPropertiesClass](doc/AdditionalPropertiesClass.md) + - [Animal](doc/Animal.md) + - [ApiResponse](doc/ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc/ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc/ArrayOfNumberOnly.md) + - [ArrayTest](doc/ArrayTest.md) + - [Capitalization](doc/Capitalization.md) + - [Cat](doc/Cat.md) + - [CatAllOf](doc/CatAllOf.md) + - [Category](doc/Category.md) + - [ClassModel](doc/ClassModel.md) + - [Dog](doc/Dog.md) + - [DogAllOf](doc/DogAllOf.md) + - [EnumArrays](doc/EnumArrays.md) + - [EnumTest](doc/EnumTest.md) + - [FileSchemaTestClass](doc/FileSchemaTestClass.md) + - [Foo](doc/Foo.md) + - [FormatTest](doc/FormatTest.md) + - [HasOnlyReadOnly](doc/HasOnlyReadOnly.md) + - [HealthCheckResult](doc/HealthCheckResult.md) + - [InlineResponseDefault](doc/InlineResponseDefault.md) + - [MapTest](doc/MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc/MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc/Model200Response.md) + - [ModelClient](doc/ModelClient.md) + - [ModelEnumClass](doc/ModelEnumClass.md) + - [ModelFile](doc/ModelFile.md) + - [ModelList](doc/ModelList.md) + - [ModelReturn](doc/ModelReturn.md) + - [Name](doc/Name.md) + - [NullableClass](doc/NullableClass.md) + - [NumberOnly](doc/NumberOnly.md) + - [Order](doc/Order.md) + - [OuterComposite](doc/OuterComposite.md) + - [OuterEnum](doc/OuterEnum.md) + - [OuterEnumDefaultValue](doc/OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc/OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc/OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc/OuterObjectWithEnumProperty.md) + - [Pet](doc/Pet.md) + - [ReadOnlyFirst](doc/ReadOnlyFirst.md) + - [SpecialModelName](doc/SpecialModelName.md) + - [Tag](doc/Tag.md) + - [User](doc/User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md b/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md index 18de35ccec0d..99bd229f3c50 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib/README.md @@ -60,36 +60,36 @@ All URIs are relative to *http://petstore.swagger.io/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{orderId} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [ApiResponse](doc\/ApiResponse.md) - - [Category](doc\/Category.md) - - [Order](doc\/Order.md) - - [Pet](doc\/Pet.md) - - [Tag](doc\/Tag.md) - - [User](doc\/User.md) + - [ApiResponse](doc//ApiResponse.md) + - [Category](doc//Category.md) + - [Order](doc//Order.md) + - [Pet](doc//Pet.md) + - [Tag](doc//Tag.md) + - [User](doc//User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md index 9b39a96c6b70..fe39c2f21264 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md @@ -58,94 +58,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc\/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc\/DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc\/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc\/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc\/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc\/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc\/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc\/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc\/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc\/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc\/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc\/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc\/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc\/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc\/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc\/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc\/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc\/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc\/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc//AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc//DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc//FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc//FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc//FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc//FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc//FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc//FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc//FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc//FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc//FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc//FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc//FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc//FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc//FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc//FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc//FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc//FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc//FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc//PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc\/AdditionalPropertiesClass.md) - - [Animal](doc\/Animal.md) - - [ApiResponse](doc\/ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc\/ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc\/ArrayOfNumberOnly.md) - - [ArrayTest](doc\/ArrayTest.md) - - [Capitalization](doc\/Capitalization.md) - - [Cat](doc\/Cat.md) - - [CatAllOf](doc\/CatAllOf.md) - - [Category](doc\/Category.md) - - [ClassModel](doc\/ClassModel.md) - - [Dog](doc\/Dog.md) - - [DogAllOf](doc\/DogAllOf.md) - - [EnumArrays](doc\/EnumArrays.md) - - [EnumClass](doc\/EnumClass.md) - - [EnumTest](doc\/EnumTest.md) - - [FileSchemaTestClass](doc\/FileSchemaTestClass.md) - - [Foo](doc\/Foo.md) - - [FormatTest](doc\/FormatTest.md) - - [HasOnlyReadOnly](doc\/HasOnlyReadOnly.md) - - [HealthCheckResult](doc\/HealthCheckResult.md) - - [InlineResponseDefault](doc\/InlineResponseDefault.md) - - [MapTest](doc\/MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc\/MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc\/Model200Response.md) - - [ModelClient](doc\/ModelClient.md) - - [ModelFile](doc\/ModelFile.md) - - [ModelList](doc\/ModelList.md) - - [ModelReturn](doc\/ModelReturn.md) - - [Name](doc\/Name.md) - - [NullableClass](doc\/NullableClass.md) - - [NumberOnly](doc\/NumberOnly.md) - - [Order](doc\/Order.md) - - [OuterComposite](doc\/OuterComposite.md) - - [OuterEnum](doc\/OuterEnum.md) - - [OuterEnumDefaultValue](doc\/OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc\/OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc\/OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc\/OuterObjectWithEnumProperty.md) - - [Pet](doc\/Pet.md) - - [ReadOnlyFirst](doc\/ReadOnlyFirst.md) - - [SpecialModelName](doc\/SpecialModelName.md) - - [Tag](doc\/Tag.md) - - [User](doc\/User.md) + - [AdditionalPropertiesClass](doc//AdditionalPropertiesClass.md) + - [Animal](doc//Animal.md) + - [ApiResponse](doc//ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc//ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc//ArrayOfNumberOnly.md) + - [ArrayTest](doc//ArrayTest.md) + - [Capitalization](doc//Capitalization.md) + - [Cat](doc//Cat.md) + - [CatAllOf](doc//CatAllOf.md) + - [Category](doc//Category.md) + - [ClassModel](doc//ClassModel.md) + - [Dog](doc//Dog.md) + - [DogAllOf](doc//DogAllOf.md) + - [EnumArrays](doc//EnumArrays.md) + - [EnumClass](doc//EnumClass.md) + - [EnumTest](doc//EnumTest.md) + - [FileSchemaTestClass](doc//FileSchemaTestClass.md) + - [Foo](doc//Foo.md) + - [FormatTest](doc//FormatTest.md) + - [HasOnlyReadOnly](doc//HasOnlyReadOnly.md) + - [HealthCheckResult](doc//HealthCheckResult.md) + - [InlineResponseDefault](doc//InlineResponseDefault.md) + - [MapTest](doc//MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc//MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc//Model200Response.md) + - [ModelClient](doc//ModelClient.md) + - [ModelFile](doc//ModelFile.md) + - [ModelList](doc//ModelList.md) + - [ModelReturn](doc//ModelReturn.md) + - [Name](doc//Name.md) + - [NullableClass](doc//NullableClass.md) + - [NumberOnly](doc//NumberOnly.md) + - [Order](doc//Order.md) + - [OuterComposite](doc//OuterComposite.md) + - [OuterEnum](doc//OuterEnum.md) + - [OuterEnumDefaultValue](doc//OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc//OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc//OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc//OuterObjectWithEnumProperty.md) + - [Pet](doc//Pet.md) + - [ReadOnlyFirst](doc//ReadOnlyFirst.md) + - [SpecialModelName](doc//SpecialModelName.md) + - [Tag](doc//Tag.md) + - [User](doc//User.md) ## Documentation For Authorization diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md index 9b39a96c6b70..fe39c2f21264 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md @@ -58,94 +58,94 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AnotherFakeApi* | [**call123testSpecialTags**](doc\/AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags -*DefaultApi* | [**fooGet**](doc\/DefaultApi.md#fooget) | **GET** /foo | -*FakeApi* | [**fakeHealthGet**](doc\/FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint -*FakeApi* | [**fakeHttpSignatureTest**](doc\/FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication -*FakeApi* | [**fakeOuterBooleanSerialize**](doc\/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | -*FakeApi* | [**fakeOuterCompositeSerialize**](doc\/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | -*FakeApi* | [**fakeOuterNumberSerialize**](doc\/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | -*FakeApi* | [**fakeOuterStringSerialize**](doc\/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | -*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc\/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | -*FakeApi* | [**testBodyWithFileSchema**](doc\/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | -*FakeApi* | [**testBodyWithQueryParams**](doc\/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | -*FakeApi* | [**testClientModel**](doc\/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model -*FakeApi* | [**testEndpointParameters**](doc\/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 -*FakeApi* | [**testEnumParameters**](doc\/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters -*FakeApi* | [**testGroupParameters**](doc\/FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) -*FakeApi* | [**testInlineAdditionalProperties**](doc\/FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties -*FakeApi* | [**testJsonFormData**](doc\/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data -*FakeApi* | [**testQueryParameterCollectionFormat**](doc\/FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | -*FakeClassnameTags123Api* | [**testClassname**](doc\/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case -*PetApi* | [**addPet**](doc\/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store -*PetApi* | [**deletePet**](doc\/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet -*PetApi* | [**findPetsByStatus**](doc\/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status -*PetApi* | [**findPetsByTags**](doc\/PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags -*PetApi* | [**getPetById**](doc\/PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID -*PetApi* | [**updatePet**](doc\/PetApi.md#updatepet) | **PUT** /pet | Update an existing pet -*PetApi* | [**updatePetWithForm**](doc\/PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data -*PetApi* | [**uploadFile**](doc\/PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image -*PetApi* | [**uploadFileWithRequiredFile**](doc\/PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) -*StoreApi* | [**deleteOrder**](doc\/StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID -*StoreApi* | [**getInventory**](doc\/StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status -*StoreApi* | [**getOrderById**](doc\/StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID -*StoreApi* | [**placeOrder**](doc\/StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet -*UserApi* | [**createUser**](doc\/UserApi.md#createuser) | **POST** /user | Create user -*UserApi* | [**createUsersWithArrayInput**](doc\/UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array -*UserApi* | [**createUsersWithListInput**](doc\/UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array -*UserApi* | [**deleteUser**](doc\/UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user -*UserApi* | [**getUserByName**](doc\/UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name -*UserApi* | [**loginUser**](doc\/UserApi.md#loginuser) | **GET** /user/login | Logs user into the system -*UserApi* | [**logoutUser**](doc\/UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session -*UserApi* | [**updateUser**](doc\/UserApi.md#updateuser) | **PUT** /user/{username} | Updated user +*AnotherFakeApi* | [**call123testSpecialTags**](doc//AnotherFakeApi.md#call123testspecialtags) | **PATCH** /another-fake/dummy | To test special tags +*DefaultApi* | [**fooGet**](doc//DefaultApi.md#fooget) | **GET** /foo | +*FakeApi* | [**fakeHealthGet**](doc//FakeApi.md#fakehealthget) | **GET** /fake/health | Health check endpoint +*FakeApi* | [**fakeHttpSignatureTest**](doc//FakeApi.md#fakehttpsignaturetest) | **GET** /fake/http-signature-test | test http signature authentication +*FakeApi* | [**fakeOuterBooleanSerialize**](doc//FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean | +*FakeApi* | [**fakeOuterCompositeSerialize**](doc//FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite | +*FakeApi* | [**fakeOuterNumberSerialize**](doc//FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | +*FakeApi* | [**fakeOuterStringSerialize**](doc//FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | +*FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc//FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithFileSchema**](doc//FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | +*FakeApi* | [**testBodyWithQueryParams**](doc//FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | +*FakeApi* | [**testClientModel**](doc//FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model +*FakeApi* | [**testEndpointParameters**](doc//FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 +*FakeApi* | [**testEnumParameters**](doc//FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters +*FakeApi* | [**testGroupParameters**](doc//FakeApi.md#testgroupparameters) | **DELETE** /fake | Fake endpoint to test group parameters (optional) +*FakeApi* | [**testInlineAdditionalProperties**](doc//FakeApi.md#testinlineadditionalproperties) | **POST** /fake/inline-additionalProperties | test inline additionalProperties +*FakeApi* | [**testJsonFormData**](doc//FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data +*FakeApi* | [**testQueryParameterCollectionFormat**](doc//FakeApi.md#testqueryparametercollectionformat) | **PUT** /fake/test-query-paramters | +*FakeClassnameTags123Api* | [**testClassname**](doc//FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case +*PetApi* | [**addPet**](doc//PetApi.md#addpet) | **POST** /pet | Add a new pet to the store +*PetApi* | [**deletePet**](doc//PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet +*PetApi* | [**findPetsByStatus**](doc//PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status +*PetApi* | [**findPetsByTags**](doc//PetApi.md#findpetsbytags) | **GET** /pet/findByTags | Finds Pets by tags +*PetApi* | [**getPetById**](doc//PetApi.md#getpetbyid) | **GET** /pet/{petId} | Find pet by ID +*PetApi* | [**updatePet**](doc//PetApi.md#updatepet) | **PUT** /pet | Update an existing pet +*PetApi* | [**updatePetWithForm**](doc//PetApi.md#updatepetwithform) | **POST** /pet/{petId} | Updates a pet in the store with form data +*PetApi* | [**uploadFile**](doc//PetApi.md#uploadfile) | **POST** /pet/{petId}/uploadImage | uploads an image +*PetApi* | [**uploadFileWithRequiredFile**](doc//PetApi.md#uploadfilewithrequiredfile) | **POST** /fake/{petId}/uploadImageWithRequiredFile | uploads an image (required) +*StoreApi* | [**deleteOrder**](doc//StoreApi.md#deleteorder) | **DELETE** /store/order/{order_id} | Delete purchase order by ID +*StoreApi* | [**getInventory**](doc//StoreApi.md#getinventory) | **GET** /store/inventory | Returns pet inventories by status +*StoreApi* | [**getOrderById**](doc//StoreApi.md#getorderbyid) | **GET** /store/order/{order_id} | Find purchase order by ID +*StoreApi* | [**placeOrder**](doc//StoreApi.md#placeorder) | **POST** /store/order | Place an order for a pet +*UserApi* | [**createUser**](doc//UserApi.md#createuser) | **POST** /user | Create user +*UserApi* | [**createUsersWithArrayInput**](doc//UserApi.md#createuserswitharrayinput) | **POST** /user/createWithArray | Creates list of users with given input array +*UserApi* | [**createUsersWithListInput**](doc//UserApi.md#createuserswithlistinput) | **POST** /user/createWithList | Creates list of users with given input array +*UserApi* | [**deleteUser**](doc//UserApi.md#deleteuser) | **DELETE** /user/{username} | Delete user +*UserApi* | [**getUserByName**](doc//UserApi.md#getuserbyname) | **GET** /user/{username} | Get user by user name +*UserApi* | [**loginUser**](doc//UserApi.md#loginuser) | **GET** /user/login | Logs user into the system +*UserApi* | [**logoutUser**](doc//UserApi.md#logoutuser) | **GET** /user/logout | Logs out current logged in user session +*UserApi* | [**updateUser**](doc//UserApi.md#updateuser) | **PUT** /user/{username} | Updated user ## Documentation For Models - - [AdditionalPropertiesClass](doc\/AdditionalPropertiesClass.md) - - [Animal](doc\/Animal.md) - - [ApiResponse](doc\/ApiResponse.md) - - [ArrayOfArrayOfNumberOnly](doc\/ArrayOfArrayOfNumberOnly.md) - - [ArrayOfNumberOnly](doc\/ArrayOfNumberOnly.md) - - [ArrayTest](doc\/ArrayTest.md) - - [Capitalization](doc\/Capitalization.md) - - [Cat](doc\/Cat.md) - - [CatAllOf](doc\/CatAllOf.md) - - [Category](doc\/Category.md) - - [ClassModel](doc\/ClassModel.md) - - [Dog](doc\/Dog.md) - - [DogAllOf](doc\/DogAllOf.md) - - [EnumArrays](doc\/EnumArrays.md) - - [EnumClass](doc\/EnumClass.md) - - [EnumTest](doc\/EnumTest.md) - - [FileSchemaTestClass](doc\/FileSchemaTestClass.md) - - [Foo](doc\/Foo.md) - - [FormatTest](doc\/FormatTest.md) - - [HasOnlyReadOnly](doc\/HasOnlyReadOnly.md) - - [HealthCheckResult](doc\/HealthCheckResult.md) - - [InlineResponseDefault](doc\/InlineResponseDefault.md) - - [MapTest](doc\/MapTest.md) - - [MixedPropertiesAndAdditionalPropertiesClass](doc\/MixedPropertiesAndAdditionalPropertiesClass.md) - - [Model200Response](doc\/Model200Response.md) - - [ModelClient](doc\/ModelClient.md) - - [ModelFile](doc\/ModelFile.md) - - [ModelList](doc\/ModelList.md) - - [ModelReturn](doc\/ModelReturn.md) - - [Name](doc\/Name.md) - - [NullableClass](doc\/NullableClass.md) - - [NumberOnly](doc\/NumberOnly.md) - - [Order](doc\/Order.md) - - [OuterComposite](doc\/OuterComposite.md) - - [OuterEnum](doc\/OuterEnum.md) - - [OuterEnumDefaultValue](doc\/OuterEnumDefaultValue.md) - - [OuterEnumInteger](doc\/OuterEnumInteger.md) - - [OuterEnumIntegerDefaultValue](doc\/OuterEnumIntegerDefaultValue.md) - - [OuterObjectWithEnumProperty](doc\/OuterObjectWithEnumProperty.md) - - [Pet](doc\/Pet.md) - - [ReadOnlyFirst](doc\/ReadOnlyFirst.md) - - [SpecialModelName](doc\/SpecialModelName.md) - - [Tag](doc\/Tag.md) - - [User](doc\/User.md) + - [AdditionalPropertiesClass](doc//AdditionalPropertiesClass.md) + - [Animal](doc//Animal.md) + - [ApiResponse](doc//ApiResponse.md) + - [ArrayOfArrayOfNumberOnly](doc//ArrayOfArrayOfNumberOnly.md) + - [ArrayOfNumberOnly](doc//ArrayOfNumberOnly.md) + - [ArrayTest](doc//ArrayTest.md) + - [Capitalization](doc//Capitalization.md) + - [Cat](doc//Cat.md) + - [CatAllOf](doc//CatAllOf.md) + - [Category](doc//Category.md) + - [ClassModel](doc//ClassModel.md) + - [Dog](doc//Dog.md) + - [DogAllOf](doc//DogAllOf.md) + - [EnumArrays](doc//EnumArrays.md) + - [EnumClass](doc//EnumClass.md) + - [EnumTest](doc//EnumTest.md) + - [FileSchemaTestClass](doc//FileSchemaTestClass.md) + - [Foo](doc//Foo.md) + - [FormatTest](doc//FormatTest.md) + - [HasOnlyReadOnly](doc//HasOnlyReadOnly.md) + - [HealthCheckResult](doc//HealthCheckResult.md) + - [InlineResponseDefault](doc//InlineResponseDefault.md) + - [MapTest](doc//MapTest.md) + - [MixedPropertiesAndAdditionalPropertiesClass](doc//MixedPropertiesAndAdditionalPropertiesClass.md) + - [Model200Response](doc//Model200Response.md) + - [ModelClient](doc//ModelClient.md) + - [ModelFile](doc//ModelFile.md) + - [ModelList](doc//ModelList.md) + - [ModelReturn](doc//ModelReturn.md) + - [Name](doc//Name.md) + - [NullableClass](doc//NullableClass.md) + - [NumberOnly](doc//NumberOnly.md) + - [Order](doc//Order.md) + - [OuterComposite](doc//OuterComposite.md) + - [OuterEnum](doc//OuterEnum.md) + - [OuterEnumDefaultValue](doc//OuterEnumDefaultValue.md) + - [OuterEnumInteger](doc//OuterEnumInteger.md) + - [OuterEnumIntegerDefaultValue](doc//OuterEnumIntegerDefaultValue.md) + - [OuterObjectWithEnumProperty](doc//OuterObjectWithEnumProperty.md) + - [Pet](doc//Pet.md) + - [ReadOnlyFirst](doc//ReadOnlyFirst.md) + - [SpecialModelName](doc//SpecialModelName.md) + - [Tag](doc//Tag.md) + - [User](doc//User.md) ## Documentation For Authorization diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs index 04aa969cb957..d58ff968d3c5 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; + exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs index cb4da58b6105..79c62f5c672d 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs index c4f77f108acb..17fdac817ad8 100644 --- a/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-3.0/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; + exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs index 04aa969cb957..d58ff968d3c5 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; + exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs index cb4da58b6105..79c62f5c672d 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs index c4f77f108acb..17fdac817ad8 100644 --- a/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-3.1/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; + exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs index c99e55e5f2d4..3162f82261ba 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -48,7 +48,7 @@ public virtual IActionResult AddPet([FromBody]Pet pet) //TODO: Uncomment the next line to return response 405 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(405); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -97,7 +97,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -161,7 +161,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -197,7 +197,7 @@ public virtual IActionResult UpdatePet([FromBody]Pet pet) //TODO: Uncomment the next line to return response 405 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(405); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -247,7 +247,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; + exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs index 881cd5107a94..431fccf19057 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -128,7 +128,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order order) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs index 327c18b86878..406c969ffb24 100644 --- a/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore-5.0/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -134,7 +134,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; + exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs index 6f7fae5e120b..68722c6b4cb0 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -86,7 +86,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery (Name = "status")][Requ //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -116,7 +116,7 @@ public virtual IActionResult FindPetsByTags([FromQuery (Name = "tags")][Required //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -150,7 +150,7 @@ public virtual IActionResult GetPetById([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\r\n \"name\" : \"doggie\",\r\n \"id\" : 0,\r\n \"category\" : {\r\n \"name\" : \"name\",\r\n \"id\" : 6\r\n },\r\n \"tags\" : [ {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n }, {\r\n \"name\" : \"name\",\r\n \"id\" : 1\r\n } ],\r\n \"status\" : \"available\"\r\n}"; + exampleJson = "{\n \"photoUrls\" : [ \"photoUrls\", \"photoUrls\" ],\n \"name\" : \"doggie\",\n \"id\" : 0,\n \"category\" : {\n \"name\" : \"name\",\n \"id\" : 6\n },\n \"tags\" : [ {\n \"name\" : \"name\",\n \"id\" : 1\n }, {\n \"name\" : \"name\",\n \"id\" : 1\n } ],\n \"status\" : \"available\"\n}"; exampleJson = "\n 123456789\n doggie\n \n aeiou\n \n \n \n aeiou\n"; var example = exampleJson != null @@ -225,7 +225,7 @@ public virtual IActionResult UploadFile([FromRoute (Name = "petId")][Required]lo //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(ApiResponse)); string exampleJson = null; - exampleJson = "{\r\n \"code\" : 0,\r\n \"type\" : \"type\",\r\n \"message\" : \"message\"\r\n}"; + exampleJson = "{\n \"code\" : 0,\n \"type\" : \"type\",\n \"message\" : \"message\"\n}"; var example = exampleJson != null ? JsonConvert.DeserializeObject(exampleJson) diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs index 213f6a8479e4..4503e177b9c9 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -98,7 +98,7 @@ public virtual IActionResult GetOrderById([FromRoute (Name = "orderId")][Require //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null @@ -127,7 +127,7 @@ public virtual IActionResult PlaceOrder([FromBody]Order body) //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); string exampleJson = null; - exampleJson = "{\r\n \"petId\" : 6,\r\n \"quantity\" : 1,\r\n \"id\" : 0,\r\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\r\n \"complete\" : false,\r\n \"status\" : \"placed\"\r\n}"; + exampleJson = "{\n \"petId\" : 6,\n \"quantity\" : 1,\n \"id\" : 0,\n \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\",\n \"complete\" : false,\n \"status\" : \"placed\"\n}"; exampleJson = "\n 123456789\n 123456789\n 123\n 2000-01-23T04:56:07.000Z\n aeiou\n true\n"; var example = exampleJson != null diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs index b4752ae73d15..06ca8107d072 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -127,7 +127,7 @@ public virtual IActionResult GetUserByName([FromRoute (Name = "username")][Requi //TODO: Uncomment the next line to return response 404 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(404); string exampleJson = null; - exampleJson = "{\r\n \"firstName\" : \"firstName\",\r\n \"lastName\" : \"lastName\",\r\n \"password\" : \"password\",\r\n \"userStatus\" : 6,\r\n \"phone\" : \"phone\",\r\n \"id\" : 0,\r\n \"email\" : \"email\",\r\n \"username\" : \"username\"\r\n}"; + exampleJson = "{\n \"firstName\" : \"firstName\",\n \"lastName\" : \"lastName\",\n \"password\" : \"password\",\n \"userStatus\" : 6,\n \"phone\" : \"phone\",\n \"id\" : 0,\n \"email\" : \"email\",\n \"username\" : \"username\"\n}"; exampleJson = "\n 123456789\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n aeiou\n 123\n"; var example = exampleJson != null diff --git a/samples/server/petstore/php-slim4/README.md b/samples/server/petstore/php-slim4/README.md index 78d2322ebb72..3f5c820198c5 100644 --- a/samples/server/petstore/php-slim4/README.md +++ b/samples/server/petstore/php-slim4/README.md @@ -168,10 +168,10 @@ Class | Method | HTTP request | Description ## Authentication ### Security schema `api_key` -> Important! To make ApiKey authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib\/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class. +> Important! To make ApiKey authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\ApiKeyAuthenticator](./src/Auth/ApiKeyAuthenticator.php) class. ### Security schema `petstore_auth` -> Important! To make OAuth authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib\/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\OAuthAuthenticator](./src/Auth/OAuthAuthenticator.php) class. +> Important! To make OAuth authentication work you need to extend [\OpenAPIServer\Auth\AbstractAuthenticator](./lib/Auth/AbstractAuthenticator.php) class by [\OpenAPIServer\Auth\OAuthAuthenticator](./src/Auth/OAuthAuthenticator.php) class. Scope list: * `write:pets` - modify pets in your account diff --git a/samples/server/petstore/php-slim4/phpunit.xml.dist b/samples/server/petstore/php-slim4/phpunit.xml.dist index 10eaa6529577..3efb4b45f4aa 100644 --- a/samples/server/petstore/php-slim4/phpunit.xml.dist +++ b/samples/server/petstore/php-slim4/phpunit.xml.dist @@ -21,9 +21,9 @@ - ./lib\/Api + ./lib/Api ./lib/BaseModel.php - ./lib\/Model + ./lib/Model diff --git a/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist b/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist index 40d39d2f5a8c..e754829e6283 100644 --- a/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist +++ b/samples/server/petstore/php-symfony/SymfonyBundle-php/phpunit.xml.dist @@ -14,9 +14,9 @@ - ./.\/Api - ./.\/Model - ./.\/Controller + ././Api + ././Model + ././Controller diff --git a/samples/server/petstore/python-aiohttp-srclayout/setup.py b/samples/server/petstore/python-aiohttp-srclayout/setup.py index 600b620958c6..6f62aec44149 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/setup.py +++ b/samples/server/petstore/python-aiohttp-srclayout/setup.py @@ -27,9 +27,9 @@ url="", keywords=["OpenAPI", "OpenAPI Petstore"], install_requires=REQUIRES, - packages=find_packages("src\"), - package_dir={"": "src\"}, - package_data={'': ['src\/openapi/openapi.yaml']}, + packages=find_packages("src/"), + package_dir={"": "src/"}, + package_data={'': ['src//openapi/openapi.yaml']}, include_package_data=True, entry_points={ 'console_scripts': ['openapi_server=openapi_server.__main__:main']}, diff --git a/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py b/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py index 63ba2f413d1b..578bf18e982c 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py +++ b/samples/server/petstore/python-aiohttp-srclayout/tests/conftest.py @@ -12,7 +12,7 @@ def client(loop, aiohttp_client): "swagger_ui": True } specification_dir = os.path.join(os.path.dirname(__file__), '..', - "src\", + "src/", 'openapi_server', 'openapi') app = connexion.AioHttpApp(__name__, specification_dir=specification_dir, diff --git a/samples/server/petstore/python-aiohttp-srclayout/tox.ini b/samples/server/petstore/python-aiohttp-srclayout/tox.ini index 3d847999b3c9..25d12bb84c0b 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tox.ini +++ b/samples/server/petstore/python-aiohttp-srclayout/tox.ini @@ -8,4 +8,4 @@ deps=-r{toxinidir}/requirements.txt {toxinidir} commands= - pytest --cov=src\openapi_server + pytest --cov=src/openapi_server From 763f65f2934b7d152c41c0a7a3c9e386fc09f9ad Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 28 May 2021 21:38:36 +0800 Subject: [PATCH 169/186] [Wsdl] minor improvements, bug fixes (#9613) * minor improvements to wsdl-schema gen * better code format * update readme --- README.md | 3 +- bin/configs/wsdl-schema.yaml | 6 + bin/configs/wsdl-spec.yaml | 6 - docs/generators.md | 2 +- docs/generators/{wsdl.md => wsdl-schema.md} | 4 +- .../languages/WsdlGeneratorCodegen.java | 264 ---------------- .../codegen/languages/WsdlSchemaCodegen.java | 287 ++++++++++++++++++ .../org.openapitools.codegen.CodegenConfig | 4 +- .../jaxb-customization.mustache | 0 .../wsdl-converter.mustache | 0 .../codegen/wsdl/WsdlGeneratorTest.java | 269 ---------------- .../codegen/wsdl/WsdlSchemaCodegenTest.java | 266 ++++++++++++++++ .../wsdl-schema}/.openapi-generator-ignore | 0 .../wsdl-schema}/.openapi-generator/FILES | 0 .../wsdl-schema}/.openapi-generator/VERSION | 0 .../wsdl-schema}/jaxb-customization.xml | 0 .../petstore/wsdl-schema}/service.wsdl | 0 17 files changed, 566 insertions(+), 545 deletions(-) create mode 100644 bin/configs/wsdl-schema.yaml delete mode 100644 bin/configs/wsdl-spec.yaml rename docs/generators/{wsdl.md => wsdl-schema.md} (98%) delete mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlGeneratorCodegen.java create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlSchemaCodegen.java rename modules/openapi-generator/src/main/resources/{wsdl => wsdl-schema}/jaxb-customization.mustache (100%) rename modules/openapi-generator/src/main/resources/{wsdl => wsdl-schema}/wsdl-converter.mustache (100%) delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlGeneratorTest.java create mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlSchemaCodegenTest.java rename samples/{documentation/wsdl => schema/petstore/wsdl-schema}/.openapi-generator-ignore (100%) rename samples/{documentation/wsdl => schema/petstore/wsdl-schema}/.openapi-generator/FILES (100%) rename samples/{documentation/wsdl => schema/petstore/wsdl-schema}/.openapi-generator/VERSION (100%) rename samples/{documentation/wsdl => schema/petstore/wsdl-schema}/jaxb-customization.xml (100%) rename samples/{documentation/wsdl => schema/petstore/wsdl-schema}/service.wsdl (100%) diff --git a/README.md b/README.md index c034ec83e612..ff47c88ff231 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ OpenAPI Generator allows generation of API client libraries (SDK generation), se | **Server stubs** | **Ada**, **C#** (ASP.NET Core, NancyFx), **C++** (Pistache, Restbed, Qt5 QHTTPEngine), **Erlang**, **F#** (Giraffe), **Go** (net/http, Gin, Echo), **Haskell** (Servant), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, Jersey, RestEasy, Play Framework, [PKMST](https://github.com/ProKarma-Inc/pkmst-getting-started-examples), [Vert.x](https://vertx.io/)), **Kotlin** (Spring Boot, Ktor, Vertx), **PHP** (Laravel, Lumen, Slim, Silex, [Symfony](https://symfony.com/), [Zend Expressive](https://github.com/zendframework/zend-expressive)), **Python** (Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Rust** (rust-server), **Scala** (Akka, [Finch](https://github.com/finagle/finch), [Lagom](https://github.com/lagom/lagom), [Play](https://www.playframework.com/), Scalatra) | | **API documentation generators** | **HTML**, **Confluence Wiki**, **Asciidoc**, **Markdown**, **PlantUML** | | **Configuration files** | [**Apache2**](https://httpd.apache.org/) | -| **Others** | **GraphQL**, **JMeter**, **Ktorm**, **MySQL Schema**, **Protocol Buffer** | +| **Others** | **GraphQL**, **JMeter**, **Ktorm**, **MySQL Schema**, **Protocol Buffer**, **WSDL** | ## Table of contents @@ -972,6 +972,7 @@ Here is a list of template creators: * Ktorm: @Luiz-Monad * MySQL: @ybelenko * Protocol Buffer: @wing328 + * WSDL @adessoDpd :heart: = Link to support the contributor directly diff --git a/bin/configs/wsdl-schema.yaml b/bin/configs/wsdl-schema.yaml new file mode 100644 index 000000000000..29484b39dfe4 --- /dev/null +++ b/bin/configs/wsdl-schema.yaml @@ -0,0 +1,6 @@ +generatorName: wsdl-schema +outputDir: samples/schema/petstore/wsdl-schema +inputSpec: modules/openapi-generator/src/test/resources/3_0/wsdl/petstore.yaml +templateDir: modules/openapi-generator/src/main/resources/wsdl-schema +additionalProperties: + hideGenerationTimestamp: "true" diff --git a/bin/configs/wsdl-spec.yaml b/bin/configs/wsdl-spec.yaml deleted file mode 100644 index 2674412251dd..000000000000 --- a/bin/configs/wsdl-spec.yaml +++ /dev/null @@ -1,6 +0,0 @@ -generatorName: wsdl -outputDir: samples/documentation/wsdl -inputSpec: modules/openapi-generator/src/test/resources/3_0/wsdl/petstore.yaml -templateDir: modules/openapi-generator/src/main/resources/wsdl -additionalProperties: - hideGenerationTimestamp: "true" diff --git a/docs/generators.md b/docs/generators.md index 59b26392bc01..f1cec8c66870 100644 --- a/docs/generators.md +++ b/docs/generators.md @@ -142,7 +142,6 @@ The following generators are available: * [openapi](generators/openapi.md) * [openapi-yaml](generators/openapi-yaml.md) * [plantuml (beta)](generators/plantuml.md) -* [wsdl](generators/wsdl.md) ## SCHEMA generators @@ -151,6 +150,7 @@ The following generators are available: * [ktorm-schema (beta)](generators/ktorm-schema.md) * [mysql-schema](generators/mysql-schema.md) * [protobuf-schema (beta)](generators/protobuf-schema.md) +* [wsdl-schema (beta)](generators/wsdl-schema.md) ## CONFIG generators diff --git a/docs/generators/wsdl.md b/docs/generators/wsdl-schema.md similarity index 98% rename from docs/generators/wsdl.md rename to docs/generators/wsdl-schema.md index 46d30e123937..7842f8567492 100644 --- a/docs/generators/wsdl.md +++ b/docs/generators/wsdl-schema.md @@ -1,6 +1,6 @@ --- -title: Config Options for wsdl -sidebar_label: wsdl +title: Config Options for wsdl-schema +sidebar_label: wsdl-schema --- These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlGeneratorCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlGeneratorCodegen.java deleted file mode 100644 index d6493b524cc4..000000000000 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlGeneratorCodegen.java +++ /dev/null @@ -1,264 +0,0 @@ -package org.openapitools.codegen.languages; - -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Info; - -import java.io.File; -import java.text.Normalizer; -import java.util.List; -import java.util.ArrayList; -import java.util.Locale; -import java.util.Map; - -import org.openapitools.codegen.CliOption; -import org.openapitools.codegen.CodegenConfig; -import org.openapitools.codegen.CodegenModel; -import org.openapitools.codegen.CodegenOperation; -import org.openapitools.codegen.CodegenParameter; -import org.openapitools.codegen.CodegenProperty; -import org.openapitools.codegen.CodegenType; -import org.openapitools.codegen.DefaultCodegen; -import org.openapitools.codegen.SupportingFile; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class WsdlGeneratorCodegen extends DefaultCodegen implements CodegenConfig { - public static final String PROJECT_NAME = "projectName"; - - static final Logger LOGGER = LoggerFactory.getLogger(WsdlGeneratorCodegen.class); - - public CodegenType getTag() { - return CodegenType.DOCUMENTATION; - } - - public String getName() { - return "wsdl"; - } - - public String getHelp() { - return "Generates a wsdl-spec documentation."; - } - - public WsdlGeneratorCodegen() { - super(); - - outputFolder = "generated-code" + File.separator + "wsdl-spec"; - embeddedTemplateDir = templateDir = "wsdl"; - apiPackage = "Apis"; - modelPackage = "Models"; - - cliOptions.add(new CliOption("hostname", "the hostname of the service")); - cliOptions.add(new CliOption("soapPath", "basepath of the soap services")); - cliOptions.add(new CliOption("serviceName", "service name for the wsdl")); - - additionalProperties.put("hostname", "localhost"); - additionalProperties.put("soapPath", "soap"); - additionalProperties.put("serviceName", "ServiceV1"); - - supportingFiles.add(new SupportingFile("wsdl-converter.mustache", "", "service.wsdl")); - supportingFiles.add(new SupportingFile("jaxb-customization.mustache", "", - "jaxb-customization.xml")); - } - - public void preprocessOpenAPI(OpenAPI openAPI) { - Info info = openAPI.getInfo(); - - String title = info.getTitle(); - String description = info.getDescription(); - - info.setDescription(this.processOpenapiSpecDescription(description)); - info.setTitle(this.escapeTitle(title)); - } - - private String escapeTitle(String title) { - // strip umlauts etc. - final String normalizedTitle = Normalizer.normalize(title, Normalizer.Form.NFD) - .replaceAll("[^\\p{ASCII}]", ""); - return super.escapeUnsafeCharacters(normalizedTitle); - } - - public String processOpenapiSpecDescription(String description) { - if (description != null) { - return description.replaceAll("\\s+", " "); - } else { - return "No description provided"; - } - } - - @Override - public Map postProcessOperationsWithModels(Map objs, - List allModels) { - - Map operations = (Map) objs.get("operations"); - List operationList = (List) operations.get("operation"); - for (CodegenOperation op : operationList) { - op.operationId = this.generateOperationId(op); - - // for xml compliant primitives, lowercase dataType of openapi - for (CodegenParameter param : op.allParams) { - Map paramVendorExtensions = param.vendorExtensions; - - normalizeDataType(param); - - // prevent default="null" in wsdl-tag if no default was specified for a param - if ("null".equals(param.defaultValue) || param.defaultValue == null) { - paramVendorExtensions.put("x-param-has-defaultvalue", false); - } else { - paramVendorExtensions.put("x-param-has-defaultvalue", true); - } - - // check if param has a minimum or maximum number or lenght - if (param.minimum != null - || param.maximum != null - || param.minLength != null - || param.maxLength != null) { - paramVendorExtensions.put("x-param-has-minormax", true); - } else { - paramVendorExtensions.put("x-param-has-minormax", false); - } - - // if param is enum, uppercase 'baseName' to have a reference to wsdl simpletype - if (param.isEnum) { - char[] c = param.baseName.toCharArray(); - c[0] = Character.toUpperCase(c[0]); - param.baseName = new String(c); - } - } - - for (CodegenParameter param : op.bodyParams) { - normalizeDataType(param); - } - for (CodegenParameter param : op.pathParams) { - normalizeDataType(param); - } - for (CodegenParameter param : op.queryParams) { - normalizeDataType(param); - } - for (CodegenParameter param : op.formParams) { - normalizeDataType(param); - } - } - - return objs; - } - - private void normalizeDataType(CodegenParameter param) { - if (param.isPrimitiveType) { - param.dataType = param.dataType.toLowerCase(Locale.getDefault()); - } - if (param.dataFormat != null && param.dataFormat.equalsIgnoreCase("date")) { - param.dataType = "date"; - } - if (param.dataFormat != null && param.dataFormat.equalsIgnoreCase("date-time")) { - param.dataType = "dateTime"; - } - if (param.dataFormat != null && param.dataFormat.equalsIgnoreCase("uuid")) { - param.dataType = "string"; - } - } - - @Override - public Map postProcessModels(Map objs) { - List models = (List) objs.get("models"); - - for (Object mo : models) { - Map mod = (Map) mo; - CodegenModel model = (CodegenModel) mod.get("model"); - Map modelVendorExtensions = model.getVendorExtensions(); - - /* check if model is a model with no properties - * Used in the mustache template to ensure that no complextype is created - * if model is just a schema with an enum defined in the openapi specification - */ - if (model.allowableValues != null) { - modelVendorExtensions.put("x-is-openapimodel-enum", true); - } else { - modelVendorExtensions.put("x-is-openapimodel-enum", false); - } - - for (CodegenProperty var : model.vars) { - Map propertyVendorExtensions = var.getVendorExtensions(); - - // lowercase basetypes if openapitype is string - if (var.openApiType == "string") { - char[] c = var.baseType.toCharArray(); - c[0] = Character.toLowerCase(c[0]); - var.baseType = new String(c); - } - // if string enum, uppercase 'name' to have a reference to wsdl simpletype - if (var.isEnum) { - char[] c = var.name.toCharArray(); - c[0] = Character.toUpperCase(c[0]); - var.name = new String(c); - } - - // prevent default="null" in wsdl-tag if no default was specified for a property - if ("null".equals(var.defaultValue) || var.defaultValue == null) { - propertyVendorExtensions.put("x-prop-has-defaultvalue", false); - } else { - propertyVendorExtensions.put("x-prop-has-defaultvalue", true); - } - - // check if model property has a minimum or maximum number or lenght - if (var.minimum != null - || var.maximum != null - || var.minLength != null - || var.maxLength != null) { - propertyVendorExtensions.put("x-prop-has-minormax", true); - } else { - propertyVendorExtensions.put("x-prop-has-minormax", false); - } - } - } - return super.postProcessModelsEnum(objs); - } - - public String generateOperationId(CodegenOperation op) { - String newOperationid = this.lowerCaseStringExceptFirstLetter(op.httpMethod); - String[] pathElements = op.path.split("/"); - List pathParameters = new ArrayList(); - - for (int i = 0; i < pathElements.length; i++) { - if (pathElements[i].contains("{")) { - pathParameters.add(pathElements[i]); - pathElements[i] = ""; - } - if (pathElements[i].length() > 0) { - newOperationid = newOperationid + this.lowerCaseStringExceptFirstLetter(pathElements[i]); - } - } - - if (pathParameters.size() > 0) { - for (int i = 0; i < pathParameters.size(); i++) { - String pathParameter = pathParameters.get(i); - pathParameter = this.lowerCaseStringExceptFirstLetter(pathParameter - .substring(1, pathParameter.length() - 1)); - if (i == 0) { - newOperationid = newOperationid + "By" + pathParameter; - } else { - newOperationid = newOperationid + "And" + pathParameter; - } - } - } - return newOperationid; - } - - public String lowerCaseStringExceptFirstLetter(String value) { - String newOperationid = value.toLowerCase(Locale.getDefault()); - return newOperationid.substring(0, 1).toUpperCase(Locale.getDefault()) - + newOperationid.substring(1); - } - - @Override - public String escapeQuotationMark(String input) { - // just return the original string - return input; - } - - @Override - public String escapeUnsafeCharacters(String input) { - // just return the original string - return input; - } -} diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlSchemaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlSchemaCodegen.java new file mode 100644 index 000000000000..7bee8aee42ae --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/WsdlSchemaCodegen.java @@ -0,0 +1,287 @@ +/* + * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openapitools.codegen.languages; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; + +import java.io.File; +import java.text.Normalizer; +import java.util.List; +import java.util.ArrayList; +import java.util.Locale; +import java.util.Map; + +import org.openapitools.codegen.CliOption; +import org.openapitools.codegen.CodegenConfig; +import org.openapitools.codegen.CodegenModel; +import org.openapitools.codegen.CodegenOperation; +import org.openapitools.codegen.CodegenParameter; +import org.openapitools.codegen.CodegenProperty; +import org.openapitools.codegen.CodegenType; +import org.openapitools.codegen.DefaultCodegen; +import org.openapitools.codegen.meta.GeneratorMetadata; +import org.openapitools.codegen.meta.Stability; +import org.openapitools.codegen.meta.features.*; +import org.openapitools.codegen.SupportingFile; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WsdlSchemaCodegen extends DefaultCodegen implements CodegenConfig { + public static final String PROJECT_NAME = "projectName"; + + static final Logger LOGGER = LoggerFactory.getLogger(WsdlSchemaCodegen.class); + + public CodegenType getTag() { + return CodegenType.SCHEMA; + } + + public String getName() { + return "wsdl-schema"; + } + + public String getHelp() { + return "Generates WSDL files."; + } + + public WsdlSchemaCodegen() { + super(); + + generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata) + .stability(Stability.BETA) + .build(); + + outputFolder = "generated-code" + File.separator + "wsdl-schema"; + embeddedTemplateDir = templateDir = "wsdl-schema"; + apiPackage = "Apis"; + modelPackage = "Models"; + + cliOptions.add(new CliOption("hostname", "the hostname of the service")); + cliOptions.add(new CliOption("soapPath", "basepath of the soap services")); + cliOptions.add(new CliOption("serviceName", "service name for the wsdl")); + + additionalProperties.put("hostname", "localhost"); + additionalProperties.put("soapPath", "soap"); + additionalProperties.put("serviceName", "ServiceV1"); + + supportingFiles.add(new SupportingFile("wsdl-converter.mustache", "", "service.wsdl")); + supportingFiles.add(new SupportingFile("jaxb-customization.mustache", "", + "jaxb-customization.xml")); + } + + public void preprocessOpenAPI(OpenAPI openAPI) { + Info info = openAPI.getInfo(); + + String title = info.getTitle(); + String description = info.getDescription(); + + info.setDescription(this.processOpenapiSpecDescription(description)); + info.setTitle(this.escapeTitle(title)); + } + + private String escapeTitle(String title) { + // strip umlauts etc. + final String normalizedTitle = Normalizer.normalize(title, Normalizer.Form.NFD) + .replaceAll("[^\\p{ASCII}]", ""); + return super.escapeUnsafeCharacters(normalizedTitle); + } + + public String processOpenapiSpecDescription(String description) { + if (description != null) { + return description.replaceAll("\\s+", " "); + } else { + return "No description provided"; + } + } + + @Override + public Map postProcessOperationsWithModels(Map objs, + List allModels) { + + Map operations = (Map) objs.get("operations"); + List operationList = (List) operations.get("operation"); + for (CodegenOperation op : operationList) { + op.operationId = this.generateOperationId(op); + + // for xml compliant primitives, lowercase dataType of openapi + for (CodegenParameter param : op.allParams) { + Map paramVendorExtensions = param.vendorExtensions; + + normalizeDataType(param); + + // prevent default="null" in wsdl-tag if no default was specified for a param + if ("null".equals(param.defaultValue) || param.defaultValue == null) { + paramVendorExtensions.put("x-param-has-defaultvalue", false); + } else { + paramVendorExtensions.put("x-param-has-defaultvalue", true); + } + + // check if param has a minimum or maximum number or lenght + if (param.minimum != null + || param.maximum != null + || param.minLength != null + || param.maxLength != null) { + paramVendorExtensions.put("x-param-has-minormax", true); + } else { + paramVendorExtensions.put("x-param-has-minormax", false); + } + + // if param is enum, uppercase 'baseName' to have a reference to wsdl simpletype + if (param.isEnum) { + char[] c = param.baseName.toCharArray(); + c[0] = Character.toUpperCase(c[0]); + param.baseName = new String(c); + } + } + + for (CodegenParameter param : op.bodyParams) { + normalizeDataType(param); + } + for (CodegenParameter param : op.pathParams) { + normalizeDataType(param); + } + for (CodegenParameter param : op.queryParams) { + normalizeDataType(param); + } + for (CodegenParameter param : op.formParams) { + normalizeDataType(param); + } + } + + return objs; + } + + private void normalizeDataType(CodegenParameter param) { + if (param.isPrimitiveType) { + param.dataType = param.dataType.toLowerCase(Locale.getDefault()); + } + if (param.dataFormat != null && param.dataFormat.equalsIgnoreCase("date")) { + param.dataType = "date"; + } + if (param.dataFormat != null && param.dataFormat.equalsIgnoreCase("date-time")) { + param.dataType = "dateTime"; + } + if (param.dataFormat != null && param.dataFormat.equalsIgnoreCase("uuid")) { + param.dataType = "string"; + } + } + + @Override + public Map postProcessModels(Map objs) { + List models = (List) objs.get("models"); + + for (Object mo : models) { + Map mod = (Map) mo; + CodegenModel model = (CodegenModel) mod.get("model"); + Map modelVendorExtensions = model.getVendorExtensions(); + + /* check if model is a model with no properties + * Used in the mustache template to ensure that no complextype is created + * if model is just a schema with an enum defined in the openapi specification + */ + if (model.allowableValues != null) { + modelVendorExtensions.put("x-is-openapimodel-enum", true); + } else { + modelVendorExtensions.put("x-is-openapimodel-enum", false); + } + + for (CodegenProperty var : model.vars) { + Map propertyVendorExtensions = var.getVendorExtensions(); + + // lowercase basetypes if openapitype is string + if ("string".equals(var.openApiType)) { + char[] c = var.baseType.toCharArray(); + c[0] = Character.toLowerCase(c[0]); + var.baseType = new String(c); + } + // if string enum, uppercase 'name' to have a reference to wsdl simpletype + if (var.isEnum) { + char[] c = var.name.toCharArray(); + c[0] = Character.toUpperCase(c[0]); + var.name = new String(c); + } + + // prevent default="null" in wsdl-tag if no default was specified for a property + if ("null".equals(var.defaultValue) || var.defaultValue == null) { + propertyVendorExtensions.put("x-prop-has-defaultvalue", false); + } else { + propertyVendorExtensions.put("x-prop-has-defaultvalue", true); + } + + // check if model property has a minimum or maximum number or lenght + if (var.minimum != null + || var.maximum != null + || var.minLength != null + || var.maxLength != null) { + propertyVendorExtensions.put("x-prop-has-minormax", true); + } else { + propertyVendorExtensions.put("x-prop-has-minormax", false); + } + } + } + return super.postProcessModelsEnum(objs); + } + + public String generateOperationId(CodegenOperation op) { + String newOperationid = this.lowerCaseStringExceptFirstLetter(op.httpMethod); + String[] pathElements = op.path.split("/"); + List pathParameters = new ArrayList(); + + for (int i = 0; i < pathElements.length; i++) { + if (pathElements[i].contains("{")) { + pathParameters.add(pathElements[i]); + pathElements[i] = ""; + } + if (pathElements[i].length() > 0) { + newOperationid = newOperationid + this.lowerCaseStringExceptFirstLetter(pathElements[i]); + } + } + + if (pathParameters.size() > 0) { + for (int i = 0; i < pathParameters.size(); i++) { + String pathParameter = pathParameters.get(i); + pathParameter = this.lowerCaseStringExceptFirstLetter(pathParameter + .substring(1, pathParameter.length() - 1)); + if (i == 0) { + newOperationid = newOperationid + "By" + pathParameter; + } else { + newOperationid = newOperationid + "And" + pathParameter; + } + } + } + return newOperationid; + } + + public String lowerCaseStringExceptFirstLetter(String value) { + String newOperationid = value.toLowerCase(Locale.getDefault()); + return newOperationid.substring(0, 1).toUpperCase(Locale.getDefault()) + + newOperationid.substring(1); + } + + @Override + public String escapeQuotationMark(String input) { + // just return the original string + return input; + } + + @Override + public String escapeUnsafeCharacters(String input) { + // just return the original string + return input; + } +} diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig index 6a0ecf94cba7..9d6b52d6fc30 100644 --- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig +++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig @@ -38,6 +38,7 @@ org.openapitools.codegen.languages.FsharpFunctionsServerCodegen org.openapitools.codegen.languages.FsharpGiraffeServerCodegen org.openapitools.codegen.languages.GoClientCodegen org.openapitools.codegen.languages.GoDeprecatedClientCodegen +org.openapitools.codegen.languages.GoEchoServerCodegen org.openapitools.codegen.languages.GoServerCodegen org.openapitools.codegen.languages.GoGinServerCodegen org.openapitools.codegen.languages.GraphQLSchemaCodegen @@ -133,5 +134,4 @@ org.openapitools.codegen.languages.TypeScriptNestjsClientCodegen org.openapitools.codegen.languages.TypeScriptNodeClientCodegen org.openapitools.codegen.languages.TypeScriptReduxQueryClientCodegen org.openapitools.codegen.languages.TypeScriptRxjsClientCodegen -org.openapitools.codegen.languages.GoEchoServerCodegen -org.openapitools.codegen.languages.WsdlGeneratorCodegen +org.openapitools.codegen.languages.WsdlSchemaCodegen diff --git a/modules/openapi-generator/src/main/resources/wsdl/jaxb-customization.mustache b/modules/openapi-generator/src/main/resources/wsdl-schema/jaxb-customization.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/wsdl/jaxb-customization.mustache rename to modules/openapi-generator/src/main/resources/wsdl-schema/jaxb-customization.mustache diff --git a/modules/openapi-generator/src/main/resources/wsdl/wsdl-converter.mustache b/modules/openapi-generator/src/main/resources/wsdl-schema/wsdl-converter.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/wsdl/wsdl-converter.mustache rename to modules/openapi-generator/src/main/resources/wsdl-schema/wsdl-converter.mustache diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlGeneratorTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlGeneratorTest.java deleted file mode 100644 index 439165ac4c4a..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlGeneratorTest.java +++ /dev/null @@ -1,269 +0,0 @@ -package org.openapitools.codegen.wsdl; - -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.Operation; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.List; - -import org.apache.commons.io.FileUtils; - -import org.openapitools.codegen.ClientOptInput; -import org.openapitools.codegen.CodegenOperation; -import org.openapitools.codegen.DefaultGenerator; -import org.openapitools.codegen.TestUtils; -import org.openapitools.codegen.languages.WsdlGeneratorCodegen; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import static org.openapitools.codegen.TestUtils.assertFileContains; -import static org.openapitools.codegen.TestUtils.ensureContainsFile; - -public class WsdlGeneratorTest { - private OpenAPI openAPI; - private File outputDirectory; - private String outputPath; - private List listOfFiles; - - @BeforeClass - public void setUp() throws IOException { - this.openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/wsdl/petstore.yaml"); - this.outputDirectory = Files.createTempDirectory("test").toFile().getCanonicalFile(); - this.outputPath = this.outputDirectory.getAbsolutePath().replace('\\', '/'); - - WsdlGeneratorCodegen codegen = new WsdlGeneratorCodegen(); - codegen.setOutputDir(this.outputDirectory.getAbsolutePath()); - - ClientOptInput input = new ClientOptInput() - .openAPI(this.openAPI) - .config(codegen); - - DefaultGenerator generator = new DefaultGenerator(); - this.listOfFiles = generator.opts(input).generate(); - } - - @Test(description = "ensure that the operationid has been generated correctly") - public void testOperationIdGeneration() { - final OpenAPI openAPI = this.openAPI; - WsdlGeneratorCodegen codegen = new WsdlGeneratorCodegen(); - codegen.setOpenAPI(openAPI); - - String requestPathWithId = "/store/order/{orderId}"; - Operation textOperationGet = openAPI.getPaths().get(requestPathWithId).getGet(); - CodegenOperation opGet = codegen.fromOperation(requestPathWithId, "get", textOperationGet, null); - String newOperationIdWithId = codegen.generateOperationId(opGet); - - String requestPathWithoutId = "/store/order"; - Operation textOperationPost = openAPI.getPaths().get(requestPathWithoutId).getPost(); - CodegenOperation opPost = codegen.fromOperation(requestPathWithoutId, "post", textOperationPost, null); - String newOperationIdWithoutId = codegen.generateOperationId(opPost); - - Assert.assertEquals(newOperationIdWithId, "GetStoreOrderByOrderid"); - Assert.assertEquals(newOperationIdWithoutId, "PostStoreOrder"); - } - - @Test(description = "Ensure that passed strings are processed correcly by this method") - public void testLowerCaseStringExceptFirstLetter() { - WsdlGeneratorCodegen codegen = new WsdlGeneratorCodegen(); - String value = codegen.lowerCaseStringExceptFirstLetter("uploadPetByPathId"); - - Assert.assertEquals(value, "Uploadpetbypathid"); - } - - @Test(description = "Check if element tags has been created for an operation ") - public void testIfElementTagsExist() { - String xsElementRequestMessage = - ""; - String xsElementResponseMessage = - ""; - String xsElementErrorResponse = - " \n" - + " \n" - + " Invalid input\n" - + " \n" - + " \n"; - - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), xsElementRequestMessage); - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), xsElementResponseMessage); - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), xsElementErrorResponse); - } - - @Test(description = "Check if complexType input- and output-message has been created for an operation ") - public void testIfInputAndResponseMessageExist() { - String complexTypeRequestMessage = - " \n" - + " \n" - + " \n" - + " \n" - + " ID of pet to return\n" - + " \n" - + " \n" - + " \n" - + " \n"; - - String complexTypeResponseMessage = - " \n" - + " \n" - + " \n" - + " \n" - + " successful operation\n" - + " \n" - + " \n" - + " \n" - + " \n"; - - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeRequestMessage); - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeResponseMessage); - } - - @Test(description = - "Check if complexType RequestMessage with minimum and maximum restriction has been created for an operation ") - public void testIfRequestMessageMinimumExists() { - String complexTypeRequestMessageMinimum = - " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " ID of pet that needs to be fetched\n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n"; - - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeRequestMessageMinimum); - } - - @Test(description = "Check if complexType model has been created for an openapi model schema") - public void testIfComplexTypeModelExists() { - String complexTypeModel = - " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " pet status in the store\n" - + " \n" - + " \n" - + " \n" - + " \n"; - - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeModel); - } - - @Test(description = "Check if message and part tags has been created for an operation ") - public void testIfMessageTagsAndContentExist() { - String messageRequestMessage = - " \n" - + " \n" - + " "; - - String messageError = - " \n" - + " \n" - + " \n"; - - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), messageRequestMessage); - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), messageError); - } - - @Test(description = "Check if portType tag and portType operation has been generated") - public void testIfPorttypeOperationExists() { - String portType = ""; - - String portTypeOperation = - " \n" - + " Returns a single pet\n" - + " \n" - + " \n" - + " successful operation\n" - + " \n" - + " \n" - + " Invalid ID supplied\n" - + " \n" - + " \n" - + " Pet not found\n" - + " \n" - + " \n"; - - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), portType); - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), portTypeOperation); - } - - @Test(description = "Check if portType tag and portType operation has been generated") - public void testIfBindingOperationExists() { - String binding = ""; - - String bindingOperation = - " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n" - + " \n"; - - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), binding); - assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), bindingOperation); - } - - @Test(description = "Ensure that all files have been correctly generated") - public void testFileGeneration() throws Exception { - Assert.assertEquals(this.listOfFiles.size(), 5); - ensureContainsFile(this.listOfFiles, this.outputDirectory, ".openapi-generator-ignore"); - ensureContainsFile(this.listOfFiles, this.outputDirectory, ".openapi-generator/FILES"); - ensureContainsFile(this.listOfFiles, this.outputDirectory, ".openapi-generator/VERSION"); - ensureContainsFile(this.listOfFiles, this.outputDirectory, "service.wsdl"); - ensureContainsFile(this.listOfFiles, this.outputDirectory, "jaxb-customization.xml"); - } - - @Test(description = "Ensure that default description is set if it doesn't exist") - public void testOpenapiDescriptionWasNotProvided() throws IOException { - final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/ping.yaml"); - File outputDirectory = Files.createTempDirectory("test").toFile().getCanonicalFile(); - String outputPath = this.outputDirectory.getAbsolutePath().replace('\\', '/'); - - WsdlGeneratorCodegen codegen = new WsdlGeneratorCodegen(); - codegen.setOutputDir(this.outputDirectory.getAbsolutePath()); - - ClientOptInput input = new ClientOptInput().openAPI(openAPI).config(codegen); - - DefaultGenerator generator = new DefaultGenerator(); - generator.opts(input).generate(); - - String value = "No description provided"; - assertFileContains(Paths.get(outputPath + "/service.wsdl"), value); - - FileUtils.deleteDirectory(outputDirectory); - } - - - @AfterClass - public void cleanUp() throws Exception { - // Delete temp folder - FileUtils.deleteDirectory(this.outputDirectory); - } -} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlSchemaCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlSchemaCodegenTest.java new file mode 100644 index 000000000000..6cb452dae1c2 --- /dev/null +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/wsdl/WsdlSchemaCodegenTest.java @@ -0,0 +1,266 @@ +package org.openapitools.codegen.wsdl; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.Operation; +import org.apache.commons.io.FileUtils; +import org.openapitools.codegen.ClientOptInput; +import org.openapitools.codegen.CodegenOperation; +import org.openapitools.codegen.DefaultGenerator; +import org.openapitools.codegen.TestUtils; +import org.openapitools.codegen.languages.WsdlSchemaCodegen; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +import static org.openapitools.codegen.TestUtils.assertFileContains; +import static org.openapitools.codegen.TestUtils.ensureContainsFile; + +public class WsdlSchemaCodegenTest { + private OpenAPI openAPI; + private File outputDirectory; + private String outputPath; + private List listOfFiles; + + @BeforeClass + public void setUp() throws IOException { + this.openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/wsdl/petstore.yaml"); + this.outputDirectory = Files.createTempDirectory("test").toFile().getCanonicalFile(); + this.outputPath = this.outputDirectory.getAbsolutePath().replace('\\', '/'); + + WsdlSchemaCodegen codegen = new WsdlSchemaCodegen(); + codegen.setOutputDir(this.outputDirectory.getAbsolutePath()); + + ClientOptInput input = new ClientOptInput() + .openAPI(this.openAPI) + .config(codegen); + + DefaultGenerator generator = new DefaultGenerator(); + this.listOfFiles = generator.opts(input).generate(); + } + + @Test(description = "ensure that the operationid has been generated correctly") + public void testOperationIdGeneration() { + final OpenAPI openAPI = this.openAPI; + WsdlSchemaCodegen codegen = new WsdlSchemaCodegen(); + codegen.setOpenAPI(openAPI); + + String requestPathWithId = "/store/order/{orderId}"; + Operation textOperationGet = openAPI.getPaths().get(requestPathWithId).getGet(); + CodegenOperation opGet = codegen.fromOperation(requestPathWithId, "get", textOperationGet, null); + String newOperationIdWithId = codegen.generateOperationId(opGet); + + String requestPathWithoutId = "/store/order"; + Operation textOperationPost = openAPI.getPaths().get(requestPathWithoutId).getPost(); + CodegenOperation opPost = codegen.fromOperation(requestPathWithoutId, "post", textOperationPost, null); + String newOperationIdWithoutId = codegen.generateOperationId(opPost); + + Assert.assertEquals(newOperationIdWithId, "GetStoreOrderByOrderid"); + Assert.assertEquals(newOperationIdWithoutId, "PostStoreOrder"); + } + + @Test(description = "Ensure that passed strings are processed correcly by this method") + public void testLowerCaseStringExceptFirstLetter() { + WsdlSchemaCodegen codegen = new WsdlSchemaCodegen(); + String value = codegen.lowerCaseStringExceptFirstLetter("uploadPetByPathId"); + + Assert.assertEquals(value, "Uploadpetbypathid"); + } + + @Test(description = "Check if element tags has been created for an operation ") + public void testIfElementTagsExist() { + String xsElementRequestMessage = + ""; + String xsElementResponseMessage = + ""; + String xsElementErrorResponse = + " \n" + + " \n" + + " Invalid input\n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), xsElementRequestMessage); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), xsElementResponseMessage); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), xsElementErrorResponse); + } + + @Test(description = "Check if complexType input- and output-message has been created for an operation ") + public void testIfInputAndResponseMessageExist() { + String complexTypeRequestMessage = + " \n" + + " \n" + + " \n" + + " \n" + + " ID of pet to return\n" + + " \n" + + " \n" + + " \n" + + " \n"; + + String complexTypeResponseMessage = + " \n" + + " \n" + + " \n" + + " \n" + + " successful operation\n" + + " \n" + + " \n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeRequestMessage); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeResponseMessage); + } + + @Test(description = + "Check if complexType RequestMessage with minimum and maximum restriction has been created for an operation ") + public void testIfRequestMessageMinimumExists() { + String complexTypeRequestMessageMinimum = + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " ID of pet that needs to be fetched\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeRequestMessageMinimum); + } + + @Test(description = "Check if complexType model has been created for an openapi model schema") + public void testIfComplexTypeModelExists() { + String complexTypeModel = + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " pet status in the store\n" + + " \n" + + " \n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), complexTypeModel); + } + + @Test(description = "Check if message and part tags has been created for an operation ") + public void testIfMessageTagsAndContentExist() { + String messageRequestMessage = + " \n" + + " \n" + + " "; + + String messageError = + " \n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), messageRequestMessage); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), messageError); + } + + @Test(description = "Check if portType tag and portType operation has been generated") + public void testIfPorttypeOperationExists() { + String portType = ""; + + String portTypeOperation = + " \n" + + " Returns a single pet\n" + + " \n" + + " \n" + + " successful operation\n" + + " \n" + + " \n" + + " Invalid ID supplied\n" + + " \n" + + " \n" + + " Pet not found\n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), portType); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), portTypeOperation); + } + + @Test(description = "Check if portType tag and portType operation has been generated") + public void testIfBindingOperationExists() { + String binding = ""; + + String bindingOperation = + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n"; + + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), binding); + assertFileContains(Paths.get(this.outputPath + "/service.wsdl"), bindingOperation); + } + + @Test(description = "Ensure that all files have been correctly generated") + public void testFileGeneration() throws Exception { + Assert.assertEquals(this.listOfFiles.size(), 5); + ensureContainsFile(this.listOfFiles, this.outputDirectory, ".openapi-generator-ignore"); + ensureContainsFile(this.listOfFiles, this.outputDirectory, ".openapi-generator/FILES"); + ensureContainsFile(this.listOfFiles, this.outputDirectory, ".openapi-generator/VERSION"); + ensureContainsFile(this.listOfFiles, this.outputDirectory, "service.wsdl"); + ensureContainsFile(this.listOfFiles, this.outputDirectory, "jaxb-customization.xml"); + } + + @Test(description = "Ensure that default description is set if it doesn't exist") + public void testOpenapiDescriptionWasNotProvided() throws IOException { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/ping.yaml"); + File outputDirectory = Files.createTempDirectory("test").toFile().getCanonicalFile(); + String outputPath = this.outputDirectory.getAbsolutePath().replace('\\', '/'); + + WsdlSchemaCodegen codegen = new WsdlSchemaCodegen(); + codegen.setOutputDir(this.outputDirectory.getAbsolutePath()); + + ClientOptInput input = new ClientOptInput().openAPI(openAPI).config(codegen); + + DefaultGenerator generator = new DefaultGenerator(); + generator.opts(input).generate(); + + String value = "No description provided"; + assertFileContains(Paths.get(outputPath + "/service.wsdl"), value); + + FileUtils.deleteDirectory(outputDirectory); + } + + + @AfterClass + public void cleanUp() throws Exception { + // Delete temp folder + FileUtils.deleteDirectory(this.outputDirectory); + } +} diff --git a/samples/documentation/wsdl/.openapi-generator-ignore b/samples/schema/petstore/wsdl-schema/.openapi-generator-ignore similarity index 100% rename from samples/documentation/wsdl/.openapi-generator-ignore rename to samples/schema/petstore/wsdl-schema/.openapi-generator-ignore diff --git a/samples/documentation/wsdl/.openapi-generator/FILES b/samples/schema/petstore/wsdl-schema/.openapi-generator/FILES similarity index 100% rename from samples/documentation/wsdl/.openapi-generator/FILES rename to samples/schema/petstore/wsdl-schema/.openapi-generator/FILES diff --git a/samples/documentation/wsdl/.openapi-generator/VERSION b/samples/schema/petstore/wsdl-schema/.openapi-generator/VERSION similarity index 100% rename from samples/documentation/wsdl/.openapi-generator/VERSION rename to samples/schema/petstore/wsdl-schema/.openapi-generator/VERSION diff --git a/samples/documentation/wsdl/jaxb-customization.xml b/samples/schema/petstore/wsdl-schema/jaxb-customization.xml similarity index 100% rename from samples/documentation/wsdl/jaxb-customization.xml rename to samples/schema/petstore/wsdl-schema/jaxb-customization.xml diff --git a/samples/documentation/wsdl/service.wsdl b/samples/schema/petstore/wsdl-schema/service.wsdl similarity index 100% rename from samples/documentation/wsdl/service.wsdl rename to samples/schema/petstore/wsdl-schema/service.wsdl From 1b6fd2dd7a000bf2489bdb2223a010c9de4fbd25 Mon Sep 17 00:00:00 2001 From: Stefan Hanselmann <69970522+shanselm-ergon@users.noreply.github.com> Date: Fri, 28 May 2021 15:50:28 +0200 Subject: [PATCH 170/186] [Kotlin][retrofit2] replace okhttpclient with callfactory (#9451) * [Kotlin][Retrofit][#9448] Replace OkHttpClient parameter with Call.Factory. * [Kotlin][Retrofit][#9448] Update sample project. --- .../jvm-retrofit2/infrastructure/ApiClient.kt.mustache | 7 ++++--- .../org/openapitools/client/infrastructure/ApiClient.kt | 7 ++++--- .../org/openapitools/client/infrastructure/ApiClient.kt | 7 ++++--- .../org/openapitools/client/infrastructure/ApiClient.kt | 7 ++++--- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/infrastructure/ApiClient.kt.mustache index ea19748fbfbc..2d64978b0c2a 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/infrastructure/ApiClient.kt.mustache @@ -21,6 +21,7 @@ import {{packageName}}.auth.HttpBearerAuth {{/authMethods}} {{/hasAuthMethods}} +import okhttp3.Call import okhttp3.Interceptor import okhttp3.OkHttpClient import retrofit2.Retrofit @@ -56,7 +57,7 @@ import okhttp3.MediaType.Companion.toMediaType private var baseUrl: String = defaultBasePath, private val okHttpClientBuilder: OkHttpClient.Builder? = null{{^kotlinx_serialization}}, private val serializerBuilder: {{#gson}}Gson{{/gson}}{{#moshi}}Moshi.{{/moshi}}Builder = Serializer.{{#gson}}gson{{/gson}}{{#moshi}}moshi{{/moshi}}Builder{{/kotlinx_serialization}}, - private val okHttpClient : OkHttpClient? = null, + private val callFactory : Call.Factory? = null, private val converterFactory: Converter.Factory? = null, ) { private val apiAuthorizations = mutableMapOf() @@ -303,8 +304,8 @@ import okhttp3.MediaType.Companion.toMediaType } fun createService(serviceClass: Class): S { - val usedClient = this.okHttpClient ?: clientBuilder.build() - return retrofitBuilder.client(usedClient).build().create(serviceClass) + val usedCallFactory = this.callFactory ?: clientBuilder.build() + return retrofitBuilder.callFactory(usedCallFactory).build().create(serviceClass) } private fun normalizeBaseUrl() { diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index a5aaa332be80..3bb7d9c4d663 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -7,6 +7,7 @@ import org.openapitools.client.auth.OAuth import org.openapitools.client.auth.OAuth.AccessTokenListener import org.openapitools.client.auth.OAuthFlow +import okhttp3.Call import okhttp3.Interceptor import okhttp3.OkHttpClient import retrofit2.Retrofit @@ -21,7 +22,7 @@ import okhttp3.MediaType.Companion.toMediaType class ApiClient( private var baseUrl: String = defaultBasePath, private val okHttpClientBuilder: OkHttpClient.Builder? = null, - private val okHttpClient : OkHttpClient? = null, + private val callFactory : Call.Factory? = null, private val converterFactory: Converter.Factory? = null, ) { private val apiAuthorizations = mutableMapOf() @@ -180,8 +181,8 @@ class ApiClient( } fun createService(serviceClass: Class): S { - val usedClient = this.okHttpClient ?: clientBuilder.build() - return retrofitBuilder.client(usedClient).build().create(serviceClass) + val usedCallFactory = this.callFactory ?: clientBuilder.build() + return retrofitBuilder.callFactory(usedCallFactory).build().create(serviceClass) } private fun normalizeBaseUrl() { diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index cc63b570177a..51a186e48faa 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -7,6 +7,7 @@ import org.openapitools.client.auth.OAuth import org.openapitools.client.auth.OAuth.AccessTokenListener import org.openapitools.client.auth.OAuthFlow +import okhttp3.Call import okhttp3.Interceptor import okhttp3.OkHttpClient import retrofit2.Retrofit @@ -22,7 +23,7 @@ class ApiClient( private var baseUrl: String = defaultBasePath, private val okHttpClientBuilder: OkHttpClient.Builder? = null, private val serializerBuilder: Moshi.Builder = Serializer.moshiBuilder, - private val okHttpClient : OkHttpClient? = null, + private val callFactory : Call.Factory? = null, private val converterFactory: Converter.Factory? = null, ) { private val apiAuthorizations = mutableMapOf() @@ -183,8 +184,8 @@ class ApiClient( } fun createService(serviceClass: Class): S { - val usedClient = this.okHttpClient ?: clientBuilder.build() - return retrofitBuilder.client(usedClient).build().create(serviceClass) + val usedCallFactory = this.callFactory ?: clientBuilder.build() + return retrofitBuilder.callFactory(usedCallFactory).build().create(serviceClass) } private fun normalizeBaseUrl() { diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index bee954129e6b..4aa4323fc5b2 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -7,6 +7,7 @@ import org.openapitools.client.auth.OAuth import org.openapitools.client.auth.OAuth.AccessTokenListener import org.openapitools.client.auth.OAuthFlow +import okhttp3.Call import okhttp3.Interceptor import okhttp3.OkHttpClient import retrofit2.Retrofit @@ -21,7 +22,7 @@ class ApiClient( private var baseUrl: String = defaultBasePath, private val okHttpClientBuilder: OkHttpClient.Builder? = null, private val serializerBuilder: Moshi.Builder = Serializer.moshiBuilder, - private val okHttpClient : OkHttpClient? = null, + private val callFactory : Call.Factory? = null, private val converterFactory: Converter.Factory? = null, ) { private val apiAuthorizations = mutableMapOf() @@ -180,8 +181,8 @@ class ApiClient( } fun createService(serviceClass: Class): S { - val usedClient = this.okHttpClient ?: clientBuilder.build() - return retrofitBuilder.client(usedClient).build().create(serviceClass) + val usedCallFactory = this.callFactory ?: clientBuilder.build() + return retrofitBuilder.callFactory(usedCallFactory).build().create(serviceClass) } private fun normalizeBaseUrl() { From f7b93ebdf2063c853b6e9438e560c5a81a78bc98 Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Sat, 29 May 2021 04:26:01 +0200 Subject: [PATCH 171/186] Update fake API to contain sample with binary body (#9610) --- ...ith-fake-endpoints-models-for-testing.yaml | 21 +- .../petstore/csharp/OpenAPIClient/README.md | 1 + .../csharp/OpenAPIClient/docs/FakeApi.md | 77 ++++++- .../src/Org.OpenAPITools/Api/FakeApi.cs | 207 ++++++++++++++++- .../elixir/lib/openapi_petstore/api/fake.ex | 28 ++- .../client/petstore/javascript-es6/README.md | 1 + .../petstore/javascript-es6/docs/FakeApi.md | 48 +++- .../javascript-es6/src/api/FakeApi.js | 42 +++- .../petstore/javascript-promise-es6/README.md | 1 + .../javascript-promise-es6/docs/FakeApi.md | 47 +++- .../javascript-promise-es6/src/api/FakeApi.js | 49 +++- samples/client/petstore/perl/README.md | 1 + samples/client/petstore/perl/docs/FakeApi.md | 48 +++- .../perl/lib/WWW/OpenAPIClient/FakeApi.pm | 56 +++++ .../petstore/php/OpenAPIClient-php/README.md | 1 + .../php/OpenAPIClient-php/docs/Api/FakeApi.md | 58 ++++- .../php/OpenAPIClient-php/lib/Api/FakeApi.php | 209 ++++++++++++++++++ .../client/petstore/ruby-faraday/README.md | 1 + .../petstore/ruby-faraday/docs/FakeApi.md | 66 +++++- .../ruby-faraday/lib/petstore/api/fake_api.rb | 61 ++++- samples/client/petstore/ruby/README.md | 1 + samples/client/petstore/ruby/docs/FakeApi.md | 66 +++++- .../ruby/lib/petstore/api/fake_api.rb | 61 ++++- .../builds/default-v3.0/apis/FakeApi.ts | 40 +++- .../petstore_client_lib_fake/README.md | 1 + .../petstore_client_lib_fake/doc/FakeApi.md | 45 +++- .../lib/src/api/fake_api.dart | 72 +++++- .../petstore_client_lib_fake/README.md | 1 + .../petstore_client_lib_fake/doc/FakeApi.md | 45 +++- .../lib/api/fake_api.dart | 44 +++- .../dart2/petstore_client_lib_fake/README.md | 1 + .../petstore_client_lib_fake/doc/FakeApi.md | 45 +++- .../lib/api/fake_api.dart | 56 ++++- .../README.md | 1 + .../doc/FakeApi.md | 45 +++- .../lib/api/fake_api.dart | 56 ++++- .../client/petstore/python-legacy/README.md | 1 + .../petstore/python-legacy/docs/FakeApi.md | 63 +++++- .../petstore_api/api/fake_api.py | 133 ++++++++++- .../java/org/openapitools/api/FakeApi.java | 14 +- .../org/openapitools/api/FakeApiService.java | 1 + .../api/impl/FakeApiServiceImpl.java | 5 + .../app/Http/Controllers/FakeController.php | 24 ++ .../petstore/php-laravel/lib/routes/api.php | 9 +- .../lib/app/Http/Controllers/FakeApi.php | 24 ++ .../petstore/php-lumen/lib/routes/web.php | 9 +- 46 files changed, 1844 insertions(+), 42 deletions(-) diff --git a/modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml b/modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml index 431dd54b0310..05b9fd5f5424 100644 --- a/modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml @@ -1008,7 +1008,7 @@ paths: tags: - fake description: >- - For this test, the body for this request much reference a schema named + For this test, the body for this request must reference a schema named `File`. operationId: testBodyWithFileSchema responses: @@ -1020,6 +1020,25 @@ paths: schema: $ref: '#/components/schemas/FileSchemaTestClass' required: true + /fake/body-with-binary: + put: + tags: + - fake + description: >- + For this test, the body has to be a binary file. + operationId: testBodyWithBinary + responses: + '200': + description: Success + requestBody: + content: + image/png: + schema: + type: string + nullable: true + format: binary + description: image to upload + required: true /fake/test-query-paramters: put: tags: diff --git a/samples/client/petstore/csharp/OpenAPIClient/README.md b/samples/client/petstore/csharp/OpenAPIClient/README.md index f33c01b2a43d..0174c279b8d5 100644 --- a/samples/client/petstore/csharp/OpenAPIClient/README.md +++ b/samples/client/petstore/csharp/OpenAPIClient/README.md @@ -114,6 +114,7 @@ Class | Method | HTTP request | Description *FakeApi* | [**FakeOuterNumberSerialize**](docs/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | *FakeApi* | [**FakeOuterStringSerialize**](docs/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | *FakeApi* | [**FakePropertyEnumIntegerSerialize**](docs/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**TestBodyWithBinary**](docs/FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | *FakeApi* | [**TestBodyWithFileSchema**](docs/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | *FakeApi* | [**TestBodyWithQueryParams**](docs/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | *FakeApi* | [**TestClientModel**](docs/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model diff --git a/samples/client/petstore/csharp/OpenAPIClient/docs/FakeApi.md b/samples/client/petstore/csharp/OpenAPIClient/docs/FakeApi.md index 64474672ca8f..b821e3f31c12 100644 --- a/samples/client/petstore/csharp/OpenAPIClient/docs/FakeApi.md +++ b/samples/client/petstore/csharp/OpenAPIClient/docs/FakeApi.md @@ -11,6 +11,7 @@ Method | HTTP request | Description [**FakeOuterNumberSerialize**](FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | [**FakeOuterStringSerialize**](FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | [**FakePropertyEnumIntegerSerialize**](FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +[**TestBodyWithBinary**](FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | [**TestBodyWithFileSchema**](FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | [**TestBodyWithQueryParams**](FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | [**TestClientModel**](FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model @@ -546,13 +547,87 @@ No authorization required [[Back to README]](../README.md) +## TestBodyWithBinary + +> void TestBodyWithBinary (System.IO.Stream body) + + + +For this test, the body has to be a binary file. + +### Example + +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using Org.OpenAPITools.Api; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; + +namespace Example +{ + public class TestBodyWithBinaryExample + { + public static void Main() + { + Configuration.Default.BasePath = "http://petstore.swagger.io:80/v2"; + var apiInstance = new FakeApi(Configuration.Default); + var body = BINARY_DATA_HERE; // System.IO.Stream | image to upload + + try + { + apiInstance.TestBodyWithBinary(body); + } + catch (ApiException e) + { + Debug.Print("Exception when calling FakeApi.TestBodyWithBinary: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **System.IO.Stream**| image to upload | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: image/png +- **Accept**: Not defined + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Success | - | + +[[Back to top]](#) +[[Back to API list]](../README.md#documentation-for-api-endpoints) +[[Back to Model list]](../README.md#documentation-for-models) +[[Back to README]](../README.md) + + ## TestBodyWithFileSchema > void TestBodyWithFileSchema (FileSchemaTestClass fileSchemaTestClass) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Example diff --git a/samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs index 6161aa33d32d..c01c18e2f8cf 100644 --- a/samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs @@ -178,7 +178,28 @@ public interface IFakeApi : IApiAccessor /// /// /// - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body has to be a binary file. + /// + /// Thrown when fails to make API call + /// image to upload + /// + void TestBodyWithBinary (System.IO.Stream body); + + /// + /// + /// + /// + /// For this test, the body has to be a binary file. + /// + /// Thrown when fails to make API call + /// image to upload + /// ApiResponse of Object(void) + ApiResponse TestBodyWithBinaryWithHttpInfo (System.IO.Stream body); + /// + /// + /// + /// + /// For this test, the body for this request must reference a schema named `File`. /// /// Thrown when fails to make API call /// @@ -189,7 +210,7 @@ public interface IFakeApi : IApiAccessor /// /// /// - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body for this request must reference a schema named `File`. /// /// Thrown when fails to make API call /// @@ -594,7 +615,30 @@ public interface IFakeApi : IApiAccessor /// /// /// - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body has to be a binary file. + /// + /// Thrown when fails to make API call + /// image to upload + /// Cancellation Token to cancel request (optional) + /// Task of void + System.Threading.Tasks.Task TestBodyWithBinaryAsync (System.IO.Stream body, CancellationToken cancellationToken = default(CancellationToken)); + + /// + /// + /// + /// + /// For this test, the body has to be a binary file. + /// + /// Thrown when fails to make API call + /// image to upload + /// Cancellation Token to cancel request (optional) + /// Task of ApiResponse + System.Threading.Tasks.Task> TestBodyWithBinaryWithHttpInfoAsync (System.IO.Stream body, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// + /// + /// + /// For this test, the body for this request must reference a schema named `File`. /// /// Thrown when fails to make API call /// @@ -606,7 +650,7 @@ public interface IFakeApi : IApiAccessor /// /// /// - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body for this request must reference a schema named `File`. /// /// Thrown when fails to make API call /// @@ -1988,7 +2032,154 @@ public async System.Threading.Tasks.Task - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body has to be a binary file. + /// + /// Thrown when fails to make API call + /// image to upload + /// + public void TestBodyWithBinary (System.IO.Stream body) + { + TestBodyWithBinaryWithHttpInfo(body); + } + + /// + /// For this test, the body has to be a binary file. + /// + /// Thrown when fails to make API call + /// image to upload + /// ApiResponse of Object(void) + public ApiResponse TestBodyWithBinaryWithHttpInfo (System.IO.Stream body) + { + // verify the required parameter 'body' is set + if (body == null) + throw new ApiException(400, "Missing required parameter 'body' when calling FakeApi->TestBodyWithBinary"); + + var localVarPath = "/fake/body-with-binary"; + var localVarPathParams = new Dictionary(); + var localVarQueryParams = new List>(); + var localVarHeaderParams = new Dictionary(this.Configuration.DefaultHeader); + var localVarFormParams = new Dictionary(); + var localVarFileParams = new Dictionary(); + Object localVarPostBody = null; + + // to determine the Content-Type header + String[] localVarHttpContentTypes = new String[] { + "image/png" + }; + String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); + + // to determine the Accept header + String[] localVarHttpHeaderAccepts = new String[] { + }; + String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); + if (localVarHttpHeaderAccept != null) + localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); + + if (body != null && body.GetType() != typeof(byte[])) + { + localVarPostBody = this.Configuration.ApiClient.Serialize(body); // http body (model) parameter + } + else + { + localVarPostBody = body; // byte array + } + + + // make the HTTP request + IRestResponse localVarResponse = (IRestResponse) this.Configuration.ApiClient.CallApi(localVarPath, + Method.PUT, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, + localVarPathParams, localVarHttpContentType); + + int localVarStatusCode = (int) localVarResponse.StatusCode; + + if (ExceptionFactory != null) + { + Exception exception = ExceptionFactory("TestBodyWithBinary", localVarResponse); + if (exception != null) throw exception; + } + + return new ApiResponse(localVarStatusCode, + localVarResponse.Headers.ToDictionary(x => x.Name, x => string.Join(",", x.Value)), + null); + } + + /// + /// For this test, the body has to be a binary file. + /// + /// Thrown when fails to make API call + /// image to upload + /// Cancellation Token to cancel request (optional) + /// Task of void + public async System.Threading.Tasks.Task TestBodyWithBinaryAsync (System.IO.Stream body, CancellationToken cancellationToken = default(CancellationToken)) + { + await TestBodyWithBinaryWithHttpInfoAsync(body, cancellationToken); + + } + + /// + /// For this test, the body has to be a binary file. + /// + /// Thrown when fails to make API call + /// image to upload + /// Cancellation Token to cancel request (optional) + /// Task of ApiResponse + public async System.Threading.Tasks.Task> TestBodyWithBinaryWithHttpInfoAsync (System.IO.Stream body, CancellationToken cancellationToken = default(CancellationToken)) + { + // verify the required parameter 'body' is set + if (body == null) + throw new ApiException(400, "Missing required parameter 'body' when calling FakeApi->TestBodyWithBinary"); + + var localVarPath = "/fake/body-with-binary"; + var localVarPathParams = new Dictionary(); + var localVarQueryParams = new List>(); + var localVarHeaderParams = new Dictionary(this.Configuration.DefaultHeader); + var localVarFormParams = new Dictionary(); + var localVarFileParams = new Dictionary(); + Object localVarPostBody = null; + + // to determine the Content-Type header + String[] localVarHttpContentTypes = new String[] { + "image/png" + }; + String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); + + // to determine the Accept header + String[] localVarHttpHeaderAccepts = new String[] { + }; + String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); + if (localVarHttpHeaderAccept != null) + localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); + + if (body != null && body.GetType() != typeof(byte[])) + { + localVarPostBody = this.Configuration.ApiClient.Serialize(body); // http body (model) parameter + } + else + { + localVarPostBody = body; // byte array + } + + + // make the HTTP request + IRestResponse localVarResponse = (IRestResponse) await this.Configuration.ApiClient.CallApiAsync(localVarPath, + Method.PUT, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, + localVarPathParams, localVarHttpContentType, cancellationToken); + + int localVarStatusCode = (int) localVarResponse.StatusCode; + + if (ExceptionFactory != null) + { + Exception exception = ExceptionFactory("TestBodyWithBinary", localVarResponse); + if (exception != null) throw exception; + } + + return new ApiResponse(localVarStatusCode, + localVarResponse.Headers.ToDictionary(x => x.Name, x => string.Join(",", x.Value)), + null); + } + + /// + /// For this test, the body for this request must reference a schema named `File`. /// /// Thrown when fails to make API call /// @@ -1999,7 +2190,7 @@ public void TestBodyWithFileSchema (FileSchemaTestClass fileSchemaTestClass) } /// - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body for this request must reference a schema named `File`. /// /// Thrown when fails to make API call /// @@ -2060,7 +2251,7 @@ public ApiResponse TestBodyWithFileSchemaWithHttpInfo (FileSchemaTestCla } /// - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body for this request must reference a schema named `File`. /// /// Thrown when fails to make API call /// @@ -2073,7 +2264,7 @@ public async System.Threading.Tasks.Task TestBodyWithFileSchemaAsync (FileSchema } /// - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body for this request must reference a schema named `File`. /// /// Thrown when fails to make API call /// diff --git a/samples/client/petstore/elixir/lib/openapi_petstore/api/fake.ex b/samples/client/petstore/elixir/lib/openapi_petstore/api/fake.ex index 7d05057b3a62..407ff92dbbd2 100644 --- a/samples/client/petstore/elixir/lib/openapi_petstore/api/fake.ex +++ b/samples/client/petstore/elixir/lib/openapi_petstore/api/fake.ex @@ -215,7 +215,33 @@ defmodule OpenapiPetstore.Api.Fake do end @doc """ - For this test, the body for this request much reference a schema named `File`. + For this test, the body has to be a binary file. + + ## Parameters + + - connection (OpenapiPetstore.Connection): Connection to server + - body (String.t): image to upload + - opts (KeywordList): [optional] Optional parameters + ## Returns + + {:ok, nil} on success + {:error, Tesla.Env.t} on failure + """ + @spec test_body_with_binary(Tesla.Env.client, String.t, keyword()) :: {:ok, nil} | {:error, Tesla.Env.t} + def test_body_with_binary(connection, body, _opts \\ []) do + %{} + |> method(:put) + |> url("/fake/body-with-binary") + |> add_param(:body, :body, body) + |> Enum.into([]) + |> (&Connection.request(connection, &1)).() + |> evaluate_response([ + { 200, false} + ]) + end + + @doc """ + For this test, the body for this request must reference a schema named `File`. ## Parameters diff --git a/samples/client/petstore/javascript-es6/README.md b/samples/client/petstore/javascript-es6/README.md index 7484625b457e..736594bda699 100644 --- a/samples/client/petstore/javascript-es6/README.md +++ b/samples/client/petstore/javascript-es6/README.md @@ -129,6 +129,7 @@ Class | Method | HTTP request | Description *OpenApiPetstore.FakeApi* | [**fakeOuterNumberSerialize**](docs/FakeApi.md#fakeOuterNumberSerialize) | **POST** /fake/outer/number | *OpenApiPetstore.FakeApi* | [**fakeOuterStringSerialize**](docs/FakeApi.md#fakeOuterStringSerialize) | **POST** /fake/outer/string | *OpenApiPetstore.FakeApi* | [**fakePropertyEnumIntegerSerialize**](docs/FakeApi.md#fakePropertyEnumIntegerSerialize) | **POST** /fake/property/enum-int | +*OpenApiPetstore.FakeApi* | [**testBodyWithBinary**](docs/FakeApi.md#testBodyWithBinary) | **PUT** /fake/body-with-binary | *OpenApiPetstore.FakeApi* | [**testBodyWithFileSchema**](docs/FakeApi.md#testBodyWithFileSchema) | **PUT** /fake/body-with-file-schema | *OpenApiPetstore.FakeApi* | [**testBodyWithQueryParams**](docs/FakeApi.md#testBodyWithQueryParams) | **PUT** /fake/body-with-query-params | *OpenApiPetstore.FakeApi* | [**testClientModel**](docs/FakeApi.md#testClientModel) | **PATCH** /fake | To test \"client\" model diff --git a/samples/client/petstore/javascript-es6/docs/FakeApi.md b/samples/client/petstore/javascript-es6/docs/FakeApi.md index 95446d77d5e0..9ba9d28131bb 100644 --- a/samples/client/petstore/javascript-es6/docs/FakeApi.md +++ b/samples/client/petstore/javascript-es6/docs/FakeApi.md @@ -11,6 +11,7 @@ Method | HTTP request | Description [**fakeOuterNumberSerialize**](FakeApi.md#fakeOuterNumberSerialize) | **POST** /fake/outer/number | [**fakeOuterStringSerialize**](FakeApi.md#fakeOuterStringSerialize) | **POST** /fake/outer/string | [**fakePropertyEnumIntegerSerialize**](FakeApi.md#fakePropertyEnumIntegerSerialize) | **POST** /fake/property/enum-int | +[**testBodyWithBinary**](FakeApi.md#testBodyWithBinary) | **PUT** /fake/body-with-binary | [**testBodyWithFileSchema**](FakeApi.md#testBodyWithFileSchema) | **PUT** /fake/body-with-file-schema | [**testBodyWithQueryParams**](FakeApi.md#testBodyWithQueryParams) | **PUT** /fake/body-with-query-params | [**testClientModel**](FakeApi.md#testClientModel) | **PATCH** /fake | To test \"client\" model @@ -345,13 +346,58 @@ No authorization required - **Accept**: */* +## testBodyWithBinary + +> testBodyWithBinary(body) + + + +For this test, the body has to be a binary file. + +### Example + +```javascript +import OpenApiPetstore from 'open_api_petstore'; + +let apiInstance = new OpenApiPetstore.FakeApi(); +let body = "/path/to/file"; // File | image to upload +apiInstance.testBodyWithBinary(body, (error, data, response) => { + if (error) { + console.error(error); + } else { + console.log('API called successfully.'); + } +}); +``` + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **File**| image to upload | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: image/png +- **Accept**: Not defined + + ## testBodyWithFileSchema > testBodyWithFileSchema(fileSchemaTestClass) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Example diff --git a/samples/client/petstore/javascript-es6/src/api/FakeApi.js b/samples/client/petstore/javascript-es6/src/api/FakeApi.js index 33f85635f091..df52f7e836c3 100644 --- a/samples/client/petstore/javascript-es6/src/api/FakeApi.js +++ b/samples/client/petstore/javascript-es6/src/api/FakeApi.js @@ -319,6 +319,46 @@ export default class FakeApi { ); } + /** + * Callback function to receive the result of the testBodyWithBinary operation. + * @callback module:api/FakeApi~testBodyWithBinaryCallback + * @param {String} error Error message, if any. + * @param data This operation does not return a value. + * @param {String} response The complete HTTP response. + */ + + /** + * For this test, the body has to be a binary file. + * @param {File} body image to upload + * @param {module:api/FakeApi~testBodyWithBinaryCallback} callback The callback function, accepting three arguments: error, data, response + */ + testBodyWithBinary(body, callback) { + let postBody = body; + // verify the required parameter 'body' is set + if (body === undefined || body === null) { + throw new Error("Missing the required parameter 'body' when calling testBodyWithBinary"); + } + + let pathParams = { + }; + let queryParams = { + }; + let headerParams = { + }; + let formParams = { + }; + + let authNames = []; + let contentTypes = ['image/png']; + let accepts = []; + let returnType = null; + return this.apiClient.callApi( + '/fake/body-with-binary', 'PUT', + pathParams, queryParams, headerParams, formParams, postBody, + authNames, contentTypes, accepts, returnType, null, callback + ); + } + /** * Callback function to receive the result of the testBodyWithFileSchema operation. * @callback module:api/FakeApi~testBodyWithFileSchemaCallback @@ -328,7 +368,7 @@ export default class FakeApi { */ /** - * For this test, the body for this request much reference a schema named `File`. + * For this test, the body for this request must reference a schema named `File`. * @param {module:model/FileSchemaTestClass} fileSchemaTestClass * @param {module:api/FakeApi~testBodyWithFileSchemaCallback} callback The callback function, accepting three arguments: error, data, response */ diff --git a/samples/client/petstore/javascript-promise-es6/README.md b/samples/client/petstore/javascript-promise-es6/README.md index ef092423575e..b13f89f2daca 100644 --- a/samples/client/petstore/javascript-promise-es6/README.md +++ b/samples/client/petstore/javascript-promise-es6/README.md @@ -127,6 +127,7 @@ Class | Method | HTTP request | Description *OpenApiPetstore.FakeApi* | [**fakeOuterNumberSerialize**](docs/FakeApi.md#fakeOuterNumberSerialize) | **POST** /fake/outer/number | *OpenApiPetstore.FakeApi* | [**fakeOuterStringSerialize**](docs/FakeApi.md#fakeOuterStringSerialize) | **POST** /fake/outer/string | *OpenApiPetstore.FakeApi* | [**fakePropertyEnumIntegerSerialize**](docs/FakeApi.md#fakePropertyEnumIntegerSerialize) | **POST** /fake/property/enum-int | +*OpenApiPetstore.FakeApi* | [**testBodyWithBinary**](docs/FakeApi.md#testBodyWithBinary) | **PUT** /fake/body-with-binary | *OpenApiPetstore.FakeApi* | [**testBodyWithFileSchema**](docs/FakeApi.md#testBodyWithFileSchema) | **PUT** /fake/body-with-file-schema | *OpenApiPetstore.FakeApi* | [**testBodyWithQueryParams**](docs/FakeApi.md#testBodyWithQueryParams) | **PUT** /fake/body-with-query-params | *OpenApiPetstore.FakeApi* | [**testClientModel**](docs/FakeApi.md#testClientModel) | **PATCH** /fake | To test \"client\" model diff --git a/samples/client/petstore/javascript-promise-es6/docs/FakeApi.md b/samples/client/petstore/javascript-promise-es6/docs/FakeApi.md index b6c5594e0ba1..a0cd0aefb424 100644 --- a/samples/client/petstore/javascript-promise-es6/docs/FakeApi.md +++ b/samples/client/petstore/javascript-promise-es6/docs/FakeApi.md @@ -11,6 +11,7 @@ Method | HTTP request | Description [**fakeOuterNumberSerialize**](FakeApi.md#fakeOuterNumberSerialize) | **POST** /fake/outer/number | [**fakeOuterStringSerialize**](FakeApi.md#fakeOuterStringSerialize) | **POST** /fake/outer/string | [**fakePropertyEnumIntegerSerialize**](FakeApi.md#fakePropertyEnumIntegerSerialize) | **POST** /fake/property/enum-int | +[**testBodyWithBinary**](FakeApi.md#testBodyWithBinary) | **PUT** /fake/body-with-binary | [**testBodyWithFileSchema**](FakeApi.md#testBodyWithFileSchema) | **PUT** /fake/body-with-file-schema | [**testBodyWithQueryParams**](FakeApi.md#testBodyWithQueryParams) | **PUT** /fake/body-with-query-params | [**testClientModel**](FakeApi.md#testClientModel) | **PATCH** /fake | To test \"client\" model @@ -338,13 +339,57 @@ No authorization required - **Accept**: */* +## testBodyWithBinary + +> testBodyWithBinary(body) + + + +For this test, the body has to be a binary file. + +### Example + +```javascript +import OpenApiPetstore from 'open_api_petstore'; + +let apiInstance = new OpenApiPetstore.FakeApi(); +let body = "/path/to/file"; // File | image to upload +apiInstance.testBodyWithBinary(body).then(() => { + console.log('API called successfully.'); +}, (error) => { + console.error(error); +}); + +``` + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **File**| image to upload | + +### Return type + +null (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: image/png +- **Accept**: Not defined + + ## testBodyWithFileSchema > testBodyWithFileSchema(fileSchemaTestClass) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Example diff --git a/samples/client/petstore/javascript-promise-es6/src/api/FakeApi.js b/samples/client/petstore/javascript-promise-es6/src/api/FakeApi.js index 0902c816dc4b..dc949777c5b9 100644 --- a/samples/client/petstore/javascript-promise-es6/src/api/FakeApi.js +++ b/samples/client/petstore/javascript-promise-es6/src/api/FakeApi.js @@ -356,7 +356,52 @@ export default class FakeApi { /** - * For this test, the body for this request much reference a schema named `File`. + * For this test, the body has to be a binary file. + * @param {File} body image to upload + * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing HTTP response + */ + testBodyWithBinaryWithHttpInfo(body) { + let postBody = body; + // verify the required parameter 'body' is set + if (body === undefined || body === null) { + throw new Error("Missing the required parameter 'body' when calling testBodyWithBinary"); + } + + let pathParams = { + }; + let queryParams = { + }; + let headerParams = { + }; + let formParams = { + }; + + let authNames = []; + let contentTypes = ['image/png']; + let accepts = []; + let returnType = null; + return this.apiClient.callApi( + '/fake/body-with-binary', 'PUT', + pathParams, queryParams, headerParams, formParams, postBody, + authNames, contentTypes, accepts, returnType, null + ); + } + + /** + * For this test, the body has to be a binary file. + * @param {File} body image to upload + * @return {Promise} a {@link https://www.promisejs.org/|Promise} + */ + testBodyWithBinary(body) { + return this.testBodyWithBinaryWithHttpInfo(body) + .then(function(response_and_data) { + return response_and_data.data; + }); + } + + + /** + * For this test, the body for this request must reference a schema named `File`. * @param {module:model/FileSchemaTestClass} fileSchemaTestClass * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing HTTP response */ @@ -388,7 +433,7 @@ export default class FakeApi { } /** - * For this test, the body for this request much reference a schema named `File`. + * For this test, the body for this request must reference a schema named `File`. * @param {module:model/FileSchemaTestClass} fileSchemaTestClass * @return {Promise} a {@link https://www.promisejs.org/|Promise} */ diff --git a/samples/client/petstore/perl/README.md b/samples/client/petstore/perl/README.md index 9dd81b461b1c..2a469ee47b72 100644 --- a/samples/client/petstore/perl/README.md +++ b/samples/client/petstore/perl/README.md @@ -385,6 +385,7 @@ Class | Method | HTTP request | Description *FakeApi* | [**fake_outer_number_serialize**](docs/FakeApi.md#fake_outer_number_serialize) | **POST** /fake/outer/number | *FakeApi* | [**fake_outer_string_serialize**](docs/FakeApi.md#fake_outer_string_serialize) | **POST** /fake/outer/string | *FakeApi* | [**fake_property_enum_integer_serialize**](docs/FakeApi.md#fake_property_enum_integer_serialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**test_body_with_binary**](docs/FakeApi.md#test_body_with_binary) | **PUT** /fake/body-with-binary | *FakeApi* | [**test_body_with_file_schema**](docs/FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | *FakeApi* | [**test_body_with_query_params**](docs/FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params | *FakeApi* | [**test_client_model**](docs/FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model diff --git a/samples/client/petstore/perl/docs/FakeApi.md b/samples/client/petstore/perl/docs/FakeApi.md index d1696217c594..9db900a571aa 100644 --- a/samples/client/petstore/perl/docs/FakeApi.md +++ b/samples/client/petstore/perl/docs/FakeApi.md @@ -16,6 +16,7 @@ Method | HTTP request | Description [**fake_outer_number_serialize**](FakeApi.md#fake_outer_number_serialize) | **POST** /fake/outer/number | [**fake_outer_string_serialize**](FakeApi.md#fake_outer_string_serialize) | **POST** /fake/outer/string | [**fake_property_enum_integer_serialize**](FakeApi.md#fake_property_enum_integer_serialize) | **POST** /fake/property/enum-int | +[**test_body_with_binary**](FakeApi.md#test_body_with_binary) | **PUT** /fake/body-with-binary | [**test_body_with_file_schema**](FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | [**test_body_with_query_params**](FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params | [**test_client_model**](FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model @@ -347,12 +348,57 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **test_body_with_binary** +> test_body_with_binary(body => $body) + + + +For this test, the body has to be a binary file. + +### Example +```perl +use Data::Dumper; +use WWW::OpenAPIClient::FakeApi; +my $api_instance = WWW::OpenAPIClient::FakeApi->new( +); + +my $body = WWW::OpenAPIClient::Object::string->new(); # string | image to upload + +eval { + $api_instance->test_body_with_binary(body => $body); +}; +if ($@) { + warn "Exception when calling FakeApi->test_body_with_binary: $@\n"; +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **string****string**| image to upload | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: image/png + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **test_body_with_file_schema** > test_body_with_file_schema(file_schema_test_class => $file_schema_test_class) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Example ```perl diff --git a/samples/client/petstore/perl/lib/WWW/OpenAPIClient/FakeApi.pm b/samples/client/petstore/perl/lib/WWW/OpenAPIClient/FakeApi.pm index 8646aa3cc078..d3879045deea 100644 --- a/samples/client/petstore/perl/lib/WWW/OpenAPIClient/FakeApi.pm +++ b/samples/client/petstore/perl/lib/WWW/OpenAPIClient/FakeApi.pm @@ -485,6 +485,62 @@ sub fake_property_enum_integer_serialize { return $_response_object; } +# +# test_body_with_binary +# +# +# +# @param string $body image to upload (required) +{ + my $params = { + 'body' => { + data_type => 'string', + description => 'image to upload', + required => '1', + }, + }; + __PACKAGE__->method_documentation->{ 'test_body_with_binary' } = { + summary => '', + params => $params, + returns => undef, + }; +} +# @return void +# +sub test_body_with_binary { + my ($self, %args) = @_; + + # parse inputs + my $_resource_path = '/fake/body-with-binary'; + + my $_method = 'PUT'; + my $query_params = {}; + my $header_params = {}; + my $form_params = {}; + + # 'Accept' and 'Content-Type' header + my $_header_accept = $self->{api_client}->select_header_accept(); + if ($_header_accept) { + $header_params->{'Accept'} = $_header_accept; + } + $header_params->{'Content-Type'} = $self->{api_client}->select_header_content_type('image/png'); + + my $_body_data; + # body params + if ( exists $args{'body'}) { + $_body_data = $args{'body'}; + } + + # authentication setting, if any + my $auth_settings = [qw()]; + + # make the API Call + $self->{api_client}->call_api($_resource_path, $_method, + $query_params, $form_params, + $header_params, $_body_data, $auth_settings); + return; +} + # # test_body_with_file_schema # diff --git a/samples/client/petstore/php/OpenAPIClient-php/README.md b/samples/client/petstore/php/OpenAPIClient-php/README.md index 2f4807ddee0b..6540cb639a54 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/README.md +++ b/samples/client/petstore/php/OpenAPIClient-php/README.md @@ -80,6 +80,7 @@ Class | Method | HTTP request | Description *FakeApi* | [**fakeOuterNumberSerialize**](docs/Api/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | *FakeApi* | [**fakeOuterStringSerialize**](docs/Api/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | *FakeApi* | [**fakePropertyEnumIntegerSerialize**](docs/Api/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithBinary**](docs/Api/FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | *FakeApi* | [**testBodyWithFileSchema**](docs/Api/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | *FakeApi* | [**testBodyWithQueryParams**](docs/Api/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | *FakeApi* | [**testClientModel**](docs/Api/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model diff --git a/samples/client/petstore/php/OpenAPIClient-php/docs/Api/FakeApi.md b/samples/client/petstore/php/OpenAPIClient-php/docs/Api/FakeApi.md index 4319d48a4083..ce8d2050136e 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/docs/Api/FakeApi.md +++ b/samples/client/petstore/php/OpenAPIClient-php/docs/Api/FakeApi.md @@ -11,6 +11,7 @@ Method | HTTP request | Description [**fakeOuterNumberSerialize()**](FakeApi.md#fakeOuterNumberSerialize) | **POST** /fake/outer/number | [**fakeOuterStringSerialize()**](FakeApi.md#fakeOuterStringSerialize) | **POST** /fake/outer/string | [**fakePropertyEnumIntegerSerialize()**](FakeApi.md#fakePropertyEnumIntegerSerialize) | **POST** /fake/property/enum-int | +[**testBodyWithBinary()**](FakeApi.md#testBodyWithBinary) | **PUT** /fake/body-with-binary | [**testBodyWithFileSchema()**](FakeApi.md#testBodyWithFileSchema) | **PUT** /fake/body-with-file-schema | [**testBodyWithQueryParams()**](FakeApi.md#testBodyWithQueryParams) | **PUT** /fake/body-with-query-params | [**testClientModel()**](FakeApi.md#testClientModel) | **PATCH** /fake | To test \"client\" model @@ -412,6 +413,61 @@ No authorization required [[Back to Model list]](../../README.md#models) [[Back to README]](../../README.md) +## `testBodyWithBinary()` + +```php +testBodyWithBinary($body) +``` + + + +For this test, the body has to be a binary file. + +### Example + +```php +testBodyWithBinary($body); +} catch (Exception $e) { + echo 'Exception when calling FakeApi->testBodyWithBinary: ', $e->getMessage(), PHP_EOL; +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **\SplFileObject****\SplFileObject**| image to upload | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: `image/png` +- **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../../README.md#endpoints) +[[Back to Model list]](../../README.md#models) +[[Back to README]](../../README.md) + ## `testBodyWithFileSchema()` ```php @@ -420,7 +476,7 @@ testBodyWithFileSchema($file_schema_test_class) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Example diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php index 69ea9500cde8..93aeaacf9c93 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php @@ -1847,6 +1847,215 @@ public function fakePropertyEnumIntegerSerializeRequest($outer_object_with_enum_ ); } + /** + * Operation testBodyWithBinary + * + * @param \SplFileObject $body image to upload (required) + * + * @throws \OpenAPI\Client\ApiException on non-2xx response + * @throws \InvalidArgumentException + * @return void + */ + public function testBodyWithBinary($body) + { + $this->testBodyWithBinaryWithHttpInfo($body); + } + + /** + * Operation testBodyWithBinaryWithHttpInfo + * + * @param \SplFileObject $body image to upload (required) + * + * @throws \OpenAPI\Client\ApiException on non-2xx response + * @throws \InvalidArgumentException + * @return array of null, HTTP status code, HTTP response headers (array of strings) + */ + public function testBodyWithBinaryWithHttpInfo($body) + { + $request = $this->testBodyWithBinaryRequest($body); + + try { + $options = $this->createHttpClientOption(); + try { + $response = $this->client->send($request, $options); + } catch (RequestException $e) { + throw new ApiException( + "[{$e->getCode()}] {$e->getMessage()}", + (int) $e->getCode(), + $e->getResponse() ? $e->getResponse()->getHeaders() : null, + $e->getResponse() ? (string) $e->getResponse()->getBody() : null + ); + } + + $statusCode = $response->getStatusCode(); + + if ($statusCode < 200 || $statusCode > 299) { + throw new ApiException( + sprintf( + '[%d] Error connecting to the API (%s)', + $statusCode, + (string) $request->getUri() + ), + $statusCode, + $response->getHeaders(), + (string) $response->getBody() + ); + } + + return [null, $statusCode, $response->getHeaders()]; + + } catch (ApiException $e) { + switch ($e->getCode()) { + } + throw $e; + } + } + + /** + * Operation testBodyWithBinaryAsync + * + * @param \SplFileObject $body image to upload (required) + * + * @throws \InvalidArgumentException + * @return \GuzzleHttp\Promise\PromiseInterface + */ + public function testBodyWithBinaryAsync($body) + { + return $this->testBodyWithBinaryAsyncWithHttpInfo($body) + ->then( + function ($response) { + return $response[0]; + } + ); + } + + /** + * Operation testBodyWithBinaryAsyncWithHttpInfo + * + * @param \SplFileObject $body image to upload (required) + * + * @throws \InvalidArgumentException + * @return \GuzzleHttp\Promise\PromiseInterface + */ + public function testBodyWithBinaryAsyncWithHttpInfo($body) + { + $returnType = ''; + $request = $this->testBodyWithBinaryRequest($body); + + return $this->client + ->sendAsync($request, $this->createHttpClientOption()) + ->then( + function ($response) use ($returnType) { + return [null, $response->getStatusCode(), $response->getHeaders()]; + }, + function ($exception) { + $response = $exception->getResponse(); + $statusCode = $response->getStatusCode(); + throw new ApiException( + sprintf( + '[%d] Error connecting to the API (%s)', + $statusCode, + $exception->getRequest()->getUri() + ), + $statusCode, + $response->getHeaders(), + (string) $response->getBody() + ); + } + ); + } + + /** + * Create request for operation 'testBodyWithBinary' + * + * @param \SplFileObject $body image to upload (required) + * + * @throws \InvalidArgumentException + * @return \GuzzleHttp\Psr7\Request + */ + public function testBodyWithBinaryRequest($body) + { + // verify the required parameter 'body' is set + if ($body === null || (is_array($body) && count($body) === 0)) { + throw new \InvalidArgumentException( + 'Missing the required parameter $body when calling testBodyWithBinary' + ); + } + + $resourcePath = '/fake/body-with-binary'; + $formParams = []; + $queryParams = []; + $headerParams = []; + $httpBody = ''; + $multipart = false; + + + + + + if ($multipart) { + $headers = $this->headerSelector->selectHeadersForMultipart( + [] + ); + } else { + $headers = $this->headerSelector->selectHeaders( + [], + ['image/png'] + ); + } + + // for model (json/xml) + if (isset($body)) { + if ($headers['Content-Type'] === 'application/json') { + $httpBody = \GuzzleHttp\json_encode(ObjectSerializer::sanitizeForSerialization($body)); + } else { + $httpBody = $body; + } + } elseif (count($formParams) > 0) { + if ($multipart) { + $multipartContents = []; + foreach ($formParams as $formParamName => $formParamValue) { + $formParamValueItems = is_array($formParamValue) ? $formParamValue : [$formParamValue]; + foreach ($formParamValueItems as $formParamValueItem) { + $multipartContents[] = [ + 'name' => $formParamName, + 'contents' => $formParamValueItem + ]; + } + } + // for HTTP post (form) + $httpBody = new MultipartStream($multipartContents); + + } elseif ($headers['Content-Type'] === 'application/json') { + $httpBody = \GuzzleHttp\json_encode($formParams); + + } else { + // for HTTP post (form) + $httpBody = \GuzzleHttp\Psr7\build_query($formParams); + } + } + + + $defaultHeaders = []; + if ($this->config->getUserAgent()) { + $defaultHeaders['User-Agent'] = $this->config->getUserAgent(); + } + + $headers = array_merge( + $defaultHeaders, + $headerParams, + $headers + ); + + $query = \GuzzleHttp\Psr7\build_query($queryParams); + return new Request( + 'PUT', + $this->config->getHost() . $resourcePath . ($query ? "?{$query}" : ''), + $headers, + $httpBody + ); + } + /** * Operation testBodyWithFileSchema * diff --git a/samples/client/petstore/ruby-faraday/README.md b/samples/client/petstore/ruby-faraday/README.md index f7d8816e8ca8..e4cc57adb514 100644 --- a/samples/client/petstore/ruby-faraday/README.md +++ b/samples/client/petstore/ruby-faraday/README.md @@ -84,6 +84,7 @@ Class | Method | HTTP request | Description *Petstore::FakeApi* | [**fake_outer_number_serialize**](docs/FakeApi.md#fake_outer_number_serialize) | **POST** /fake/outer/number | *Petstore::FakeApi* | [**fake_outer_string_serialize**](docs/FakeApi.md#fake_outer_string_serialize) | **POST** /fake/outer/string | *Petstore::FakeApi* | [**fake_property_enum_integer_serialize**](docs/FakeApi.md#fake_property_enum_integer_serialize) | **POST** /fake/property/enum-int | +*Petstore::FakeApi* | [**test_body_with_binary**](docs/FakeApi.md#test_body_with_binary) | **PUT** /fake/body-with-binary | *Petstore::FakeApi* | [**test_body_with_file_schema**](docs/FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | *Petstore::FakeApi* | [**test_body_with_query_params**](docs/FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params | *Petstore::FakeApi* | [**test_client_model**](docs/FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model diff --git a/samples/client/petstore/ruby-faraday/docs/FakeApi.md b/samples/client/petstore/ruby-faraday/docs/FakeApi.md index ce74242565c9..696f5ff48203 100644 --- a/samples/client/petstore/ruby-faraday/docs/FakeApi.md +++ b/samples/client/petstore/ruby-faraday/docs/FakeApi.md @@ -11,6 +11,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**fake_outer_number_serialize**](FakeApi.md#fake_outer_number_serialize) | **POST** /fake/outer/number | | | [**fake_outer_string_serialize**](FakeApi.md#fake_outer_string_serialize) | **POST** /fake/outer/string | | | [**fake_property_enum_integer_serialize**](FakeApi.md#fake_property_enum_integer_serialize) | **POST** /fake/property/enum-int | | +| [**test_body_with_binary**](FakeApi.md#test_body_with_binary) | **PUT** /fake/body-with-binary | | | [**test_body_with_file_schema**](FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | | | [**test_body_with_query_params**](FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params | | | [**test_client_model**](FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model | @@ -479,13 +480,76 @@ No authorization required - **Accept**: */* +## test_body_with_binary + +> test_body_with_binary(body) + + + +For this test, the body has to be a binary file. + +### Examples + +```ruby +require 'time' +require 'petstore' + +api_instance = Petstore::FakeApi.new +body = File.new('/path/to/some/file') # File | image to upload + +begin + + api_instance.test_body_with_binary(body) +rescue Petstore::ApiError => e + puts "Error when calling FakeApi->test_body_with_binary: #{e}" +end +``` + +#### Using the test_body_with_binary_with_http_info variant + +This returns an Array which contains the response data (`nil` in this case), status code and headers. + +> test_body_with_binary_with_http_info(body) + +```ruby +begin + + data, status_code, headers = api_instance.test_body_with_binary_with_http_info(body) + p status_code # => 2xx + p headers # => { ... } + p data # => nil +rescue Petstore::ApiError => e + puts "Error when calling FakeApi->test_body_with_binary_with_http_info: #{e}" +end +``` + +### Parameters + +| Name | Type | Description | Notes | +| ---- | ---- | ----------- | ----- | +| **body** | **File** | image to upload | | + +### Return type + +nil (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: image/png +- **Accept**: Not defined + + ## test_body_with_file_schema > test_body_with_file_schema(file_schema_test_class) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Examples diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb index 2155182abf54..eed4d7da4294 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb @@ -440,7 +440,64 @@ def fake_property_enum_integer_serialize_with_http_info(outer_object_with_enum_p return data, status_code, headers end - # For this test, the body for this request much reference a schema named `File`. + # For this test, the body has to be a binary file. + # @param body [File] image to upload + # @param [Hash] opts the optional parameters + # @return [nil] + def test_body_with_binary(body, opts = {}) + test_body_with_binary_with_http_info(body, opts) + nil + end + + # For this test, the body has to be a binary file. + # @param body [File] image to upload + # @param [Hash] opts the optional parameters + # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers + def test_body_with_binary_with_http_info(body, opts = {}) + if @api_client.config.debugging + @api_client.config.logger.debug 'Calling API: FakeApi.test_body_with_binary ...' + end + # resource path + local_var_path = '/fake/body-with-binary' + + # query parameters + query_params = opts[:query_params] || {} + + # header parameters + header_params = opts[:header_params] || {} + # HTTP header 'Content-Type' + header_params['Content-Type'] = @api_client.select_header_content_type(['image/png']) + + # form parameters + form_params = opts[:form_params] || {} + + # http body (model) + post_body = opts[:debug_body] || @api_client.object_to_http_body(body) + + # return_type + return_type = opts[:debug_return_type] + + # auth_names + auth_names = opts[:debug_auth_names] || [] + + new_options = opts.merge( + :operation => :"FakeApi.test_body_with_binary", + :header_params => header_params, + :query_params => query_params, + :form_params => form_params, + :body => post_body, + :auth_names => auth_names, + :return_type => return_type + ) + + data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options) + if @api_client.config.debugging + @api_client.config.logger.debug "API called: FakeApi#test_body_with_binary\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" + end + return data, status_code, headers + end + + # For this test, the body for this request must reference a schema named `File`. # @param file_schema_test_class [FileSchemaTestClass] # @param [Hash] opts the optional parameters # @return [nil] @@ -449,7 +506,7 @@ def test_body_with_file_schema(file_schema_test_class, opts = {}) nil end - # For this test, the body for this request much reference a schema named `File`. + # For this test, the body for this request must reference a schema named `File`. # @param file_schema_test_class [FileSchemaTestClass] # @param [Hash] opts the optional parameters # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers diff --git a/samples/client/petstore/ruby/README.md b/samples/client/petstore/ruby/README.md index f7d8816e8ca8..e4cc57adb514 100644 --- a/samples/client/petstore/ruby/README.md +++ b/samples/client/petstore/ruby/README.md @@ -84,6 +84,7 @@ Class | Method | HTTP request | Description *Petstore::FakeApi* | [**fake_outer_number_serialize**](docs/FakeApi.md#fake_outer_number_serialize) | **POST** /fake/outer/number | *Petstore::FakeApi* | [**fake_outer_string_serialize**](docs/FakeApi.md#fake_outer_string_serialize) | **POST** /fake/outer/string | *Petstore::FakeApi* | [**fake_property_enum_integer_serialize**](docs/FakeApi.md#fake_property_enum_integer_serialize) | **POST** /fake/property/enum-int | +*Petstore::FakeApi* | [**test_body_with_binary**](docs/FakeApi.md#test_body_with_binary) | **PUT** /fake/body-with-binary | *Petstore::FakeApi* | [**test_body_with_file_schema**](docs/FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | *Petstore::FakeApi* | [**test_body_with_query_params**](docs/FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params | *Petstore::FakeApi* | [**test_client_model**](docs/FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model diff --git a/samples/client/petstore/ruby/docs/FakeApi.md b/samples/client/petstore/ruby/docs/FakeApi.md index ce74242565c9..696f5ff48203 100644 --- a/samples/client/petstore/ruby/docs/FakeApi.md +++ b/samples/client/petstore/ruby/docs/FakeApi.md @@ -11,6 +11,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2* | [**fake_outer_number_serialize**](FakeApi.md#fake_outer_number_serialize) | **POST** /fake/outer/number | | | [**fake_outer_string_serialize**](FakeApi.md#fake_outer_string_serialize) | **POST** /fake/outer/string | | | [**fake_property_enum_integer_serialize**](FakeApi.md#fake_property_enum_integer_serialize) | **POST** /fake/property/enum-int | | +| [**test_body_with_binary**](FakeApi.md#test_body_with_binary) | **PUT** /fake/body-with-binary | | | [**test_body_with_file_schema**](FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | | | [**test_body_with_query_params**](FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params | | | [**test_client_model**](FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model | @@ -479,13 +480,76 @@ No authorization required - **Accept**: */* +## test_body_with_binary + +> test_body_with_binary(body) + + + +For this test, the body has to be a binary file. + +### Examples + +```ruby +require 'time' +require 'petstore' + +api_instance = Petstore::FakeApi.new +body = File.new('/path/to/some/file') # File | image to upload + +begin + + api_instance.test_body_with_binary(body) +rescue Petstore::ApiError => e + puts "Error when calling FakeApi->test_body_with_binary: #{e}" +end +``` + +#### Using the test_body_with_binary_with_http_info variant + +This returns an Array which contains the response data (`nil` in this case), status code and headers. + +> test_body_with_binary_with_http_info(body) + +```ruby +begin + + data, status_code, headers = api_instance.test_body_with_binary_with_http_info(body) + p status_code # => 2xx + p headers # => { ... } + p data # => nil +rescue Petstore::ApiError => e + puts "Error when calling FakeApi->test_body_with_binary_with_http_info: #{e}" +end +``` + +### Parameters + +| Name | Type | Description | Notes | +| ---- | ---- | ----------- | ----- | +| **body** | **File** | image to upload | | + +### Return type + +nil (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: image/png +- **Accept**: Not defined + + ## test_body_with_file_schema > test_body_with_file_schema(file_schema_test_class) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Examples diff --git a/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb b/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb index 2155182abf54..eed4d7da4294 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb @@ -440,7 +440,64 @@ def fake_property_enum_integer_serialize_with_http_info(outer_object_with_enum_p return data, status_code, headers end - # For this test, the body for this request much reference a schema named `File`. + # For this test, the body has to be a binary file. + # @param body [File] image to upload + # @param [Hash] opts the optional parameters + # @return [nil] + def test_body_with_binary(body, opts = {}) + test_body_with_binary_with_http_info(body, opts) + nil + end + + # For this test, the body has to be a binary file. + # @param body [File] image to upload + # @param [Hash] opts the optional parameters + # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers + def test_body_with_binary_with_http_info(body, opts = {}) + if @api_client.config.debugging + @api_client.config.logger.debug 'Calling API: FakeApi.test_body_with_binary ...' + end + # resource path + local_var_path = '/fake/body-with-binary' + + # query parameters + query_params = opts[:query_params] || {} + + # header parameters + header_params = opts[:header_params] || {} + # HTTP header 'Content-Type' + header_params['Content-Type'] = @api_client.select_header_content_type(['image/png']) + + # form parameters + form_params = opts[:form_params] || {} + + # http body (model) + post_body = opts[:debug_body] || @api_client.object_to_http_body(body) + + # return_type + return_type = opts[:debug_return_type] + + # auth_names + auth_names = opts[:debug_auth_names] || [] + + new_options = opts.merge( + :operation => :"FakeApi.test_body_with_binary", + :header_params => header_params, + :query_params => query_params, + :form_params => form_params, + :body => post_body, + :auth_names => auth_names, + :return_type => return_type + ) + + data, status_code, headers = @api_client.call_api(:PUT, local_var_path, new_options) + if @api_client.config.debugging + @api_client.config.logger.debug "API called: FakeApi#test_body_with_binary\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" + end + return data, status_code, headers + end + + # For this test, the body for this request must reference a schema named `File`. # @param file_schema_test_class [FileSchemaTestClass] # @param [Hash] opts the optional parameters # @return [nil] @@ -449,7 +506,7 @@ def test_body_with_file_schema(file_schema_test_class, opts = {}) nil end - # For this test, the body for this request much reference a schema named `File`. + # For this test, the body for this request must reference a schema named `File`. # @param file_schema_test_class [FileSchemaTestClass] # @param [Hash] opts the optional parameters # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/apis/FakeApi.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/apis/FakeApi.ts index 358d9a5b09bb..a1f992e866c7 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/apis/FakeApi.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/apis/FakeApi.ts @@ -64,6 +64,10 @@ export interface FakePropertyEnumIntegerSerializeRequest { outerObjectWithEnumProperty: OuterObjectWithEnumProperty; } +export interface TestBodyWithBinaryRequest { + body: Blob | null; +} + export interface TestBodyWithFileSchemaRequest { fileSchemaTestClass: FileSchemaTestClass; } @@ -352,7 +356,39 @@ export class FakeApi extends runtime.BaseAPI { } /** - * For this test, the body for this request much reference a schema named `File`. + * For this test, the body has to be a binary file. + */ + async testBodyWithBinaryRaw(requestParameters: TestBodyWithBinaryRequest): Promise> { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new runtime.RequiredError('body','Required parameter requestParameters.body was null or undefined when calling testBodyWithBinary.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'image/png'; + + const response = await this.request({ + path: `/fake/body-with-binary`, + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body as any, + }); + + return new runtime.VoidApiResponse(response); + } + + /** + * For this test, the body has to be a binary file. + */ + async testBodyWithBinary(requestParameters: TestBodyWithBinaryRequest): Promise { + await this.testBodyWithBinaryRaw(requestParameters); + } + + /** + * For this test, the body for this request must reference a schema named `File`. */ async testBodyWithFileSchemaRaw(requestParameters: TestBodyWithFileSchemaRequest): Promise> { if (requestParameters.fileSchemaTestClass === null || requestParameters.fileSchemaTestClass === undefined) { @@ -377,7 +413,7 @@ export class FakeApi extends runtime.BaseAPI { } /** - * For this test, the body for this request much reference a schema named `File`. + * For this test, the body for this request must reference a schema named `File`. */ async testBodyWithFileSchema(requestParameters: TestBodyWithFileSchemaRequest): Promise { await this.testBodyWithFileSchemaRaw(requestParameters); diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md index 48f3b73ec03c..0e312d4370dd 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/README.md @@ -73,6 +73,7 @@ Class | Method | HTTP request | Description [*FakeApi*](doc/FakeApi.md) | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | [*FakeApi*](doc/FakeApi.md) | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | [*FakeApi*](doc/FakeApi.md) | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +[*FakeApi*](doc/FakeApi.md) | [**testBodyWithBinary**](doc/FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | [*FakeApi*](doc/FakeApi.md) | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | [*FakeApi*](doc/FakeApi.md) | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | [*FakeApi*](doc/FakeApi.md) | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md index 00d1bde3e34d..b8e90ea60748 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/doc/FakeApi.md @@ -16,6 +16,7 @@ Method | HTTP request | Description [**fakeOuterNumberSerialize**](FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | [**fakeOuterStringSerialize**](FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | [**fakePropertyEnumIntegerSerialize**](FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +[**testBodyWithBinary**](FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | [**testBodyWithFileSchema**](FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | [**testBodyWithQueryParams**](FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | [**testClientModel**](FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model @@ -326,12 +327,54 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **testBodyWithBinary** +> testBodyWithBinary(body) + + + +For this test, the body has to be a binary file. + +### Example +```dart +import 'package:openapi/api.dart'; + +final api = Openapi().getFakeApi(); +final MultipartFile body = BINARY_DATA_HERE; // MultipartFile | image to upload + +try { + api.testBodyWithBinary(body); +} catch on DioError (e) { + print('Exception when calling FakeApi->testBodyWithBinary: $e\n'); +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **MultipartFile**| image to upload | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: image/png + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **testBodyWithFileSchema** > testBodyWithFileSchema(fileSchemaTestClass) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Example ```dart diff --git a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart index 583f89de933b..20e4483e544b 100644 --- a/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio-next/petstore_client_lib_fake/lib/src/api/fake_api.dart @@ -660,8 +660,78 @@ class FakeApi { ); } + /// testBodyWithBinary + /// For this test, the body has to be a binary file. + /// + /// Parameters: + /// * [body] - image to upload + /// * [cancelToken] - A [CancelToken] that can be used to cancel the operation + /// * [headers] - Can be used to add additional headers to the request + /// * [extras] - Can be used to add flags to the request + /// * [validateStatus] - A [ValidateStatus] callback that can be used to determine request success based on the HTTP status of the response + /// * [onSendProgress] - A [ProgressCallback] that can be used to get the send progress + /// * [onReceiveProgress] - A [ProgressCallback] that can be used to get the receive progress + /// + /// Returns a [Future] + /// Throws [DioError] if API call or serialization fails + Future> testBodyWithBinary({ + required MultipartFile body, + CancelToken? cancelToken, + Map? headers, + Map? extra, + ValidateStatus? validateStatus, + ProgressCallback? onSendProgress, + ProgressCallback? onReceiveProgress, + }) async { + final _path = r'/fake/body-with-binary'; + final _options = Options( + method: r'PUT', + headers: { + ...?headers, + }, + extra: { + 'secure': >[], + ...?extra, + }, + contentType: 'image/png', + validateStatus: validateStatus, + ); + + final _queryParameters = { + }; + + dynamic _bodyData; + + try { + _bodyData = body.finalize(); + + } catch(error, stackTrace) { + throw DioError( + requestOptions: _options.compose( + _dio.options, + _path, + queryParameters: _queryParameters, + ), + type: DioErrorType.other, + error: error, + )..stackTrace = stackTrace; + } + + final _response = await _dio.request( + _path, + data: _bodyData, + options: _options, + queryParameters: _queryParameters, + cancelToken: cancelToken, + onSendProgress: onSendProgress, + onReceiveProgress: onReceiveProgress, + ); + + return _response; + } + /// testBodyWithFileSchema - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body for this request must reference a schema named `File`. /// /// Parameters: /// * [fileSchemaTestClass] diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md index 22789ae77619..b1d9fbe962c8 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/README.md @@ -67,6 +67,7 @@ Class | Method | HTTP request | Description *FakeApi* | [**fakeOuterNumberSerialize**](doc/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | *FakeApi* | [**fakeOuterStringSerialize**](doc/FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | *FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc/FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithBinary**](doc/FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | *FakeApi* | [**testBodyWithFileSchema**](doc/FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | *FakeApi* | [**testBodyWithQueryParams**](doc/FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | *FakeApi* | [**testClientModel**](doc/FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeApi.md b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeApi.md index b28fe4abbe33..da4601dbec5f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeApi.md +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/doc/FakeApi.md @@ -16,6 +16,7 @@ Method | HTTP request | Description [**fakeOuterNumberSerialize**](FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | [**fakeOuterStringSerialize**](FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | [**fakePropertyEnumIntegerSerialize**](FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +[**testBodyWithBinary**](FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | [**testBodyWithFileSchema**](FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | [**testBodyWithQueryParams**](FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | [**testClientModel**](FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model @@ -326,12 +327,54 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **testBodyWithBinary** +> testBodyWithBinary(body) + + + +For this test, the body has to be a binary file. + +### Example +```dart +import 'package:openapi/api.dart'; + +var api_instance = new FakeApi(); +var body = new Uint8List(); // Uint8List | image to upload + +try { + api_instance.testBodyWithBinary(body); +} catch (e) { + print('Exception when calling FakeApi->testBodyWithBinary: $e\n'); +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **Uint8List**| image to upload | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: image/png + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **testBodyWithFileSchema** > testBodyWithFileSchema(fileSchemaTestClass) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Example ```dart diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_api.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_api.dart index a8310d5f4a21..9dadc9c19880 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/api/fake_api.dart @@ -413,7 +413,49 @@ class FakeApi { /// /// - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body has to be a binary file. + Future> testBodyWithBinary( + Uint8List body, { + CancelToken cancelToken, + Map headers, + Map extra, + ValidateStatus validateStatus, + ProgressCallback onSendProgress, + ProgressCallback onReceiveProgress, + }) async { + final _request = RequestOptions( + path: r'/fake/body-with-binary', + method: 'PUT', + headers: { + ...?headers, + }, + extra: { + 'secure': >[], + ...?extra, + }, + validateStatus: validateStatus, + contentType: 'image/png', + cancelToken: cancelToken, + onSendProgress: onSendProgress, + onReceiveProgress: onReceiveProgress, + ); + + dynamic _bodyData; + + _bodyData = body; + + final _response = await _dio.request( + _request.path, + data: _bodyData, + options: _request, + ); + + return _response; + } + + /// + /// + /// For this test, the body for this request must reference a schema named `File`. Future> testBodyWithFileSchema( FileSchemaTestClass fileSchemaTestClass, { CancelToken cancelToken, diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md index fe39c2f21264..ec001c87cea3 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/README.md @@ -67,6 +67,7 @@ Class | Method | HTTP request | Description *FakeApi* | [**fakeOuterNumberSerialize**](doc//FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | *FakeApi* | [**fakeOuterStringSerialize**](doc//FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | *FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc//FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithBinary**](doc//FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | *FakeApi* | [**testBodyWithFileSchema**](doc//FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | *FakeApi* | [**testBodyWithQueryParams**](doc//FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | *FakeApi* | [**testClientModel**](doc//FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/doc/FakeApi.md b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/doc/FakeApi.md index 8b7f63bf8bde..6d613003880f 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/doc/FakeApi.md +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/doc/FakeApi.md @@ -16,6 +16,7 @@ Method | HTTP request | Description [**fakeOuterNumberSerialize**](FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | [**fakeOuterStringSerialize**](FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | [**fakePropertyEnumIntegerSerialize**](FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +[**testBodyWithBinary**](FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | [**testBodyWithFileSchema**](FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | [**testBodyWithQueryParams**](FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | [**testClientModel**](FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model @@ -323,12 +324,54 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **testBodyWithBinary** +> testBodyWithBinary(body) + + + +For this test, the body has to be a binary file. + +### Example +```dart +import 'package:openapi/api.dart'; + +final api_instance = FakeApi(); +final body = MultipartFile(); // MultipartFile | image to upload + +try { + api_instance.testBodyWithBinary(body); +} catch (e) { + print('Exception when calling FakeApi->testBodyWithBinary: $e\n'); +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **MultipartFile**| image to upload | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: image/png + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **testBodyWithFileSchema** > testBodyWithFileSchema(fileSchemaTestClass) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Example ```dart diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart index 95eb36aacdf6..03731c1bf00b 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart @@ -414,7 +414,59 @@ class FakeApi { return Future.value(null); } - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body has to be a binary file. + /// + /// Note: This method returns the HTTP [Response]. + /// + /// Parameters: + /// + /// * [MultipartFile] body (required): + /// image to upload + Future testBodyWithBinaryWithHttpInfo(MultipartFile body) async { + // Verify required params are set. + if (body == null) { + throw ApiException(HttpStatus.badRequest, 'Missing required param: body'); + } + + final path = r'/fake/body-with-binary'; + + Object postBody = body; + + final queryParams = []; + final headerParams = {}; + final formParams = {}; + + final contentTypes = ['image/png']; + final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; + final authNames = []; + + + return await apiClient.invokeAPI( + path, + 'PUT', + queryParams, + postBody, + headerParams, + formParams, + nullableContentType, + authNames, + ); + } + + /// For this test, the body has to be a binary file. + /// + /// Parameters: + /// + /// * [MultipartFile] body (required): + /// image to upload + Future testBodyWithBinary(MultipartFile body) async { + final response = await testBodyWithBinaryWithHttpInfo(body); + if (response.statusCode >= HttpStatus.badRequest) { + throw ApiException(response.statusCode, await _decodeBodyBytes(response)); + } + } + + /// For this test, the body for this request must reference a schema named `File`. /// /// Note: This method returns the HTTP [Response]. /// @@ -452,7 +504,7 @@ class FakeApi { ); } - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body for this request must reference a schema named `File`. /// /// Parameters: /// diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md index fe39c2f21264..ec001c87cea3 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/README.md @@ -67,6 +67,7 @@ Class | Method | HTTP request | Description *FakeApi* | [**fakeOuterNumberSerialize**](doc//FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | *FakeApi* | [**fakeOuterStringSerialize**](doc//FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | *FakeApi* | [**fakePropertyEnumIntegerSerialize**](doc//FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**testBodyWithBinary**](doc//FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | *FakeApi* | [**testBodyWithFileSchema**](doc//FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | *FakeApi* | [**testBodyWithQueryParams**](doc//FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | *FakeApi* | [**testClientModel**](doc//FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/doc/FakeApi.md b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/doc/FakeApi.md index 8b7f63bf8bde..6d613003880f 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/doc/FakeApi.md +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/doc/FakeApi.md @@ -16,6 +16,7 @@ Method | HTTP request | Description [**fakeOuterNumberSerialize**](FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number | [**fakeOuterStringSerialize**](FakeApi.md#fakeouterstringserialize) | **POST** /fake/outer/string | [**fakePropertyEnumIntegerSerialize**](FakeApi.md#fakepropertyenumintegerserialize) | **POST** /fake/property/enum-int | +[**testBodyWithBinary**](FakeApi.md#testbodywithbinary) | **PUT** /fake/body-with-binary | [**testBodyWithFileSchema**](FakeApi.md#testbodywithfileschema) | **PUT** /fake/body-with-file-schema | [**testBodyWithQueryParams**](FakeApi.md#testbodywithqueryparams) | **PUT** /fake/body-with-query-params | [**testClientModel**](FakeApi.md#testclientmodel) | **PATCH** /fake | To test \"client\" model @@ -323,12 +324,54 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **testBodyWithBinary** +> testBodyWithBinary(body) + + + +For this test, the body has to be a binary file. + +### Example +```dart +import 'package:openapi/api.dart'; + +final api_instance = FakeApi(); +final body = MultipartFile(); // MultipartFile | image to upload + +try { + api_instance.testBodyWithBinary(body); +} catch (e) { + print('Exception when calling FakeApi->testBodyWithBinary: $e\n'); +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **MultipartFile**| image to upload | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: image/png + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **testBodyWithFileSchema** > testBodyWithFileSchema(fileSchemaTestClass) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Example ```dart diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart index 2386fdfe4d57..9790ef7222c4 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart @@ -420,7 +420,59 @@ class FakeApi { return Future.value(null); } - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body has to be a binary file. + /// + /// Note: This method returns the HTTP [Response]. + /// + /// Parameters: + /// + /// * [MultipartFile] body (required): + /// image to upload + Future testBodyWithBinaryWithHttpInfo(MultipartFile body) async { + // Verify required params are set. + if (body == null) { + throw ApiException(HttpStatus.badRequest, 'Missing required param: body'); + } + + final path = r'/fake/body-with-binary'; + + Object postBody = body; + + final queryParams = []; + final headerParams = {}; + final formParams = {}; + + final contentTypes = ['image/png']; + final nullableContentType = contentTypes.isNotEmpty ? contentTypes[0] : null; + final authNames = []; + + + return await apiClient.invokeAPI( + path, + 'PUT', + queryParams, + postBody, + headerParams, + formParams, + nullableContentType, + authNames, + ); + } + + /// For this test, the body has to be a binary file. + /// + /// Parameters: + /// + /// * [MultipartFile] body (required): + /// image to upload + Future testBodyWithBinary(MultipartFile body) async { + final response = await testBodyWithBinaryWithHttpInfo(body); + if (response.statusCode >= HttpStatus.badRequest) { + throw ApiException(response.statusCode, await _decodeBodyBytes(response)); + } + } + + /// For this test, the body for this request must reference a schema named `File`. /// /// Note: This method returns the HTTP [Response]. /// @@ -458,7 +510,7 @@ class FakeApi { ); } - /// For this test, the body for this request much reference a schema named `File`. + /// For this test, the body for this request must reference a schema named `File`. /// /// Parameters: /// diff --git a/samples/openapi3/client/petstore/python-legacy/README.md b/samples/openapi3/client/petstore/python-legacy/README.md index 65ce00102b4c..507b849f5b23 100755 --- a/samples/openapi3/client/petstore/python-legacy/README.md +++ b/samples/openapi3/client/petstore/python-legacy/README.md @@ -90,6 +90,7 @@ Class | Method | HTTP request | Description *FakeApi* | [**fake_outer_number_serialize**](docs/FakeApi.md#fake_outer_number_serialize) | **POST** /fake/outer/number | *FakeApi* | [**fake_outer_string_serialize**](docs/FakeApi.md#fake_outer_string_serialize) | **POST** /fake/outer/string | *FakeApi* | [**fake_property_enum_integer_serialize**](docs/FakeApi.md#fake_property_enum_integer_serialize) | **POST** /fake/property/enum-int | +*FakeApi* | [**test_body_with_binary**](docs/FakeApi.md#test_body_with_binary) | **PUT** /fake/body-with-binary | *FakeApi* | [**test_body_with_file_schema**](docs/FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | *FakeApi* | [**test_body_with_query_params**](docs/FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params | *FakeApi* | [**test_client_model**](docs/FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model diff --git a/samples/openapi3/client/petstore/python-legacy/docs/FakeApi.md b/samples/openapi3/client/petstore/python-legacy/docs/FakeApi.md index f7bbbecdce6c..f958d8f71a00 100755 --- a/samples/openapi3/client/petstore/python-legacy/docs/FakeApi.md +++ b/samples/openapi3/client/petstore/python-legacy/docs/FakeApi.md @@ -11,6 +11,7 @@ Method | HTTP request | Description [**fake_outer_number_serialize**](FakeApi.md#fake_outer_number_serialize) | **POST** /fake/outer/number | [**fake_outer_string_serialize**](FakeApi.md#fake_outer_string_serialize) | **POST** /fake/outer/string | [**fake_property_enum_integer_serialize**](FakeApi.md#fake_property_enum_integer_serialize) | **POST** /fake/property/enum-int | +[**test_body_with_binary**](FakeApi.md#test_body_with_binary) | **PUT** /fake/body-with-binary | [**test_body_with_file_schema**](FakeApi.md#test_body_with_file_schema) | **PUT** /fake/body-with-file-schema | [**test_body_with_query_params**](FakeApi.md#test_body_with_query_params) | **PUT** /fake/body-with-query-params | [**test_client_model**](FakeApi.md#test_client_model) | **PATCH** /fake | To test \"client\" model @@ -510,12 +511,72 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **test_body_with_binary** +> test_body_with_binary(body) + + + +For this test, the body has to be a binary file. + +### Example + +```python +from __future__ import print_function +import time +import petstore_api +from petstore_api.rest import ApiException +from pprint import pprint +# Defining the host is optional and defaults to http://petstore.swagger.io:80/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = petstore_api.Configuration( + host = "http://petstore.swagger.io:80/v2" +) + + +# Enter a context with an instance of the API client +with petstore_api.ApiClient() as api_client: + # Create an instance of the API class + api_instance = petstore_api.FakeApi(api_client) + body = '/path/to/file' # file | image to upload + + try: + api_instance.test_body_with_binary(body) + except ApiException as e: + print("Exception when calling FakeApi->test_body_with_binary: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **file**| image to upload | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: image/png + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Success | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **test_body_with_file_schema** > test_body_with_file_schema(file_schema_test_class) -For this test, the body for this request much reference a schema named `File`. +For this test, the body for this request must reference a schema named `File`. ### Example diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/api/fake_api.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/api/fake_api.py index d5dd027679ea..d81dc4866d9c 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/api/fake_api.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/api/fake_api.py @@ -982,10 +982,139 @@ def fake_property_enum_integer_serialize_with_http_info(self, outer_object_with_ collection_formats=collection_formats, _request_auth=local_var_params.get('_request_auth')) + def test_body_with_binary(self, body, **kwargs): # noqa: E501 + """test_body_with_binary # noqa: E501 + + For this test, the body has to be a binary file. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_body_with_binary(body, async_req=True) + >>> result = thread.get() + + :param body: image to upload (required) + :type body: file + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :type _preload_content: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + return self.test_body_with_binary_with_http_info(body, **kwargs) # noqa: E501 + + def test_body_with_binary_with_http_info(self, body, **kwargs): # noqa: E501 + """test_body_with_binary # noqa: E501 + + For this test, the body has to be a binary file. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.test_body_with_binary_with_http_info(body, async_req=True) + >>> result = thread.get() + + :param body: image to upload (required) + :type body: file + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _return_http_data_only: response data without head status code + and headers + :type _return_http_data_only: bool, optional + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :type _preload_content: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + local_var_params = locals() + + all_params = [ + 'body' + ] + all_params.extend( + [ + 'async_req', + '_return_http_data_only', + '_preload_content', + '_request_timeout', + '_request_auth' + ] + ) + + for key, val in six.iteritems(local_var_params['kwargs']): + if key not in all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method test_body_with_binary" % key + ) + local_var_params[key] = val + del local_var_params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in local_var_params: + body_params = local_var_params['body'] + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['image/png']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + response_types_map = {} + + return self.api_client.call_api( + '/fake/body-with-binary', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_types_map=response_types_map, + auth_settings=auth_settings, + async_req=local_var_params.get('async_req'), + _return_http_data_only=local_var_params.get('_return_http_data_only'), # noqa: E501 + _preload_content=local_var_params.get('_preload_content', True), + _request_timeout=local_var_params.get('_request_timeout'), + collection_formats=collection_formats, + _request_auth=local_var_params.get('_request_auth')) + def test_body_with_file_schema(self, file_schema_test_class, **kwargs): # noqa: E501 """test_body_with_file_schema # noqa: E501 - For this test, the body for this request much reference a schema named `File`. # noqa: E501 + For this test, the body for this request must reference a schema named `File`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True @@ -1015,7 +1144,7 @@ def test_body_with_file_schema(self, file_schema_test_class, **kwargs): # noqa: def test_body_with_file_schema_with_http_info(self, file_schema_test_class, **kwargs): # noqa: E501 """test_body_with_file_schema # noqa: E501 - For this test, the body for this request much reference a schema named `File`. # noqa: E501 + For this test, the body for this request must reference a schema named `File`. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/api/FakeApi.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/api/FakeApi.java index 43796a701ef1..9cfd7cd8869e 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/api/FakeApi.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/api/FakeApi.java @@ -153,10 +153,22 @@ public Response fakePropertyEnumIntegerSerialize(@ApiParam(value = "Input enum ( return delegate.fakePropertyEnumIntegerSerialize(outerObjectWithEnumProperty, securityContext); } @PUT + @Path("/body-with-binary") + @Consumes({ "image/png" }) + + @io.swagger.annotations.ApiOperation(value = "", notes = "For this test, the body has to be a binary file.", response = Void.class, tags={ "fake", }) + @io.swagger.annotations.ApiResponses(value = { + @io.swagger.annotations.ApiResponse(code = 200, message = "Success", response = Void.class) + }) + public Response testBodyWithBinary(@ApiParam(value = "image to upload", required = true) @NotNull File body,@Context SecurityContext securityContext) + throws NotFoundException { + return delegate.testBodyWithBinary(body, securityContext); + } + @PUT @Path("/body-with-file-schema") @Consumes({ "application/json" }) - @io.swagger.annotations.ApiOperation(value = "", notes = "For this test, the body for this request much reference a schema named `File`.", response = Void.class, tags={ "fake", }) + @io.swagger.annotations.ApiOperation(value = "", notes = "For this test, the body for this request must reference a schema named `File`.", response = Void.class, tags={ "fake", }) @io.swagger.annotations.ApiResponses(value = { @io.swagger.annotations.ApiResponse(code = 200, message = "Success", response = Void.class) }) diff --git a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/api/FakeApiService.java b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/api/FakeApiService.java index 60685a8f5ff4..e5c1a063e882 100644 --- a/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/api/FakeApiService.java +++ b/samples/server/petstore/jaxrs-jersey/src/gen/java/org/openapitools/api/FakeApiService.java @@ -35,6 +35,7 @@ public abstract class FakeApiService { public abstract Response fakeOuterNumberSerialize(BigDecimal body,SecurityContext securityContext) throws NotFoundException; public abstract Response fakeOuterStringSerialize(String body,SecurityContext securityContext) throws NotFoundException; public abstract Response fakePropertyEnumIntegerSerialize(OuterObjectWithEnumProperty outerObjectWithEnumProperty,SecurityContext securityContext) throws NotFoundException; + public abstract Response testBodyWithBinary(File body,SecurityContext securityContext) throws NotFoundException; public abstract Response testBodyWithFileSchema(FileSchemaTestClass fileSchemaTestClass,SecurityContext securityContext) throws NotFoundException; public abstract Response testBodyWithQueryParams( @NotNull String query,User user,SecurityContext securityContext) throws NotFoundException; public abstract Response testClientModel(Client client,SecurityContext securityContext) throws NotFoundException; diff --git a/samples/server/petstore/jaxrs-jersey/src/main/java/org/openapitools/api/impl/FakeApiServiceImpl.java b/samples/server/petstore/jaxrs-jersey/src/main/java/org/openapitools/api/impl/FakeApiServiceImpl.java index 10c9235fe628..b9b569853635 100644 --- a/samples/server/petstore/jaxrs-jersey/src/main/java/org/openapitools/api/impl/FakeApiServiceImpl.java +++ b/samples/server/petstore/jaxrs-jersey/src/main/java/org/openapitools/api/impl/FakeApiServiceImpl.java @@ -64,6 +64,11 @@ public Response fakePropertyEnumIntegerSerialize(OuterObjectWithEnumProperty out return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); } @Override + public Response testBodyWithBinary(File body, SecurityContext securityContext) throws NotFoundException { + // do some magic! + return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); + } + @Override public Response testBodyWithFileSchema(FileSchemaTestClass fileSchemaTestClass, SecurityContext securityContext) throws NotFoundException { // do some magic! return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build(); diff --git a/samples/server/petstore/php-laravel/lib/app/Http/Controllers/FakeController.php b/samples/server/petstore/php-laravel/lib/app/Http/Controllers/FakeController.php index cb3da629aaa5..a0b1238d92ef 100644 --- a/samples/server/petstore/php-laravel/lib/app/Http/Controllers/FakeController.php +++ b/samples/server/petstore/php-laravel/lib/app/Http/Controllers/FakeController.php @@ -228,6 +228,30 @@ public function testGroupParameters() return response('How about implementing testGroupParameters as a delete method ?'); } + /** + * Operation testBodyWithBinary + * + * . + * + * + * @return Http response + */ + public function testBodyWithBinary() + { + $input = Request::all(); + + //path params validation + + + //not path params validation + if (!isset($input['body'])) { + throw new \InvalidArgumentException('Missing the required parameter $body when calling testBodyWithBinary'); + } + $body = $input['body']; + + + return response('How about implementing testBodyWithBinary as a put method ?'); + } /** * Operation testBodyWithFileSchema * diff --git a/samples/server/petstore/php-laravel/lib/routes/api.php b/samples/server/petstore/php-laravel/lib/routes/api.php index 856cc66810a1..fec2cea4a3c1 100644 --- a/samples/server/petstore/php-laravel/lib/routes/api.php +++ b/samples/server/petstore/php-laravel/lib/routes/api.php @@ -63,10 +63,17 @@ */ Route::delete('/v2/fake', 'FakeController@testGroupParameters'); +/** + * put testBodyWithBinary + * Summary: + * Notes: For this test, the body has to be a binary file. + + */ +Route::put('/v2/fake/body-with-binary', 'FakeController@testBodyWithBinary'); /** * put testBodyWithFileSchema * Summary: - * Notes: For this test, the body for this request much reference a schema named `File`. + * Notes: For this test, the body for this request must reference a schema named `File`. */ Route::put('/v2/fake/body-with-file-schema', 'FakeController@testBodyWithFileSchema'); diff --git a/samples/server/petstore/php-lumen/lib/app/Http/Controllers/FakeApi.php b/samples/server/petstore/php-lumen/lib/app/Http/Controllers/FakeApi.php index 86e5ae7356fe..e3b631dd0979 100644 --- a/samples/server/petstore/php-lumen/lib/app/Http/Controllers/FakeApi.php +++ b/samples/server/petstore/php-lumen/lib/app/Http/Controllers/FakeApi.php @@ -224,6 +224,30 @@ public function testGroupParameters() return response('How about implementing testGroupParameters as a delete method ?'); } + /** + * Operation testBodyWithBinary + * + * . + * + * + * @return Http response + */ + public function testBodyWithBinary() + { + $input = Request::all(); + + //path params validation + + + //not path params validation + if (!isset($input['body'])) { + throw new \InvalidArgumentException('Missing the required parameter $body when calling testBodyWithBinary'); + } + $body = $input['body']; + + + return response('How about implementing testBodyWithBinary as a put method ?'); + } /** * Operation testBodyWithFileSchema * diff --git a/samples/server/petstore/php-lumen/lib/routes/web.php b/samples/server/petstore/php-lumen/lib/routes/web.php index f159b8da780b..9831967079fc 100644 --- a/samples/server/petstore/php-lumen/lib/routes/web.php +++ b/samples/server/petstore/php-lumen/lib/routes/web.php @@ -79,10 +79,17 @@ */ $router->delete('/v2/fake', 'FakeApi@testGroupParameters'); +/** + * put testBodyWithBinary + * Summary: + * Notes: For this test, the body has to be a binary file. + */ +$router->put('/v2/fake/body-with-binary', 'FakeApi@testBodyWithBinary'); + /** * put testBodyWithFileSchema * Summary: - * Notes: For this test, the body for this request much reference a schema named `File`. + * Notes: For this test, the body for this request must reference a schema named `File`. */ $router->put('/v2/fake/body-with-file-schema', 'FakeApi@testBodyWithFileSchema'); From dee2840b20d469627769e5fc7f4cf4af814e3e1d Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Sun, 30 May 2021 10:40:09 +0100 Subject: [PATCH 172/186] [swift5][client] improve docs for Data (#9605) --- .../org/openapitools/codegen/languages/Swift5ClientCodegen.java | 2 ++ samples/client/petstore/swift5/alamofireLibrary/docs/FakeAPI.md | 2 +- samples/client/petstore/swift5/combineLibrary/docs/FakeAPI.md | 2 +- samples/client/petstore/swift5/default/docs/FakeAPI.md | 2 +- samples/client/petstore/swift5/nonPublicApi/docs/FakeAPI.md | 2 +- samples/client/petstore/swift5/objcCompatible/docs/FakeAPI.md | 2 +- .../client/petstore/swift5/promisekitLibrary/docs/FakeAPI.md | 2 +- .../client/petstore/swift5/readonlyProperties/docs/FakeAPI.md | 2 +- samples/client/petstore/swift5/resultLibrary/docs/FakeAPI.md | 2 +- samples/client/petstore/swift5/rxswiftLibrary/docs/FakeAPI.md | 2 +- .../client/petstore/swift5/urlsessionLibrary/docs/FakeAPI.md | 2 +- samples/client/petstore/swift5/x-swift-hashable/docs/FakeAPI.md | 2 +- 12 files changed, 13 insertions(+), 11 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index c810c01a891c..273762e830dd 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -1137,6 +1137,8 @@ public String constructExampleCode(CodegenParameter codegenParameter, HashMap Date: Sun, 30 May 2021 11:43:31 +0200 Subject: [PATCH 173/186] New python-fastapi generator (#9611) * [python-fastapi] Added new generator See https://fastapi.tiangolo.com/ for more details about FastAPI Signed-off-by: Nikita Vakula * [python-fastapi] Added samples Signed-off-by: Nikita Vakula --- bin/configs/python-fastapi.yaml | 6 + docs/generators/python-fastapi.md | 211 +++++ .../languages/PythonFastAPIServerCodegen.java | 254 ++++++ .../org.openapitools.codegen.CodegenConfig | 1 + .../python-fastapi/Dockerfile.mustache | 30 + .../resources/python-fastapi/README.mustache | 32 + .../python-fastapi/__init__.mustache | 0 .../resources/python-fastapi/api.mustache | 64 ++ .../python-fastapi/api_test.mustache | 53 ++ .../python-fastapi/conftest.mustache | 20 + .../python-fastapi/docker-compose.mustache | 9 + .../endpoint_argument_definition.mustache | 1 + .../python-fastapi/extra_models.mustache | 8 + .../python-fastapi/gitignore.mustache | 138 +++ .../resources/python-fastapi/main.mustache | 23 + .../resources/python-fastapi/model.mustache | 35 + .../resources/python-fastapi/openapi.mustache | 1 + .../python-fastapi/param_type.mustache | 1 + .../python-fastapi/partial_header.mustache | 17 + .../python-fastapi/pyproject_toml.mustache | 30 + .../python-fastapi/requirements.mustache | 36 + .../python-fastapi/security_api.mustache | 157 ++++ .../python-fastapi/setup_cfg.mustache | 23 + .../server/petstore/python-fastapi/.gitignore | 138 +++ .../python-fastapi/.openapi-generator-ignore | 23 + .../python-fastapi/.openapi-generator/FILES | 23 + .../python-fastapi/.openapi-generator/VERSION | 1 + .../server/petstore/python-fastapi/Dockerfile | 30 + .../server/petstore/python-fastapi/README.md | 29 + .../python-fastapi/docker-compose.yaml | 9 + .../petstore/python-fastapi/openapi.yaml | 843 ++++++++++++++++++ .../petstore/python-fastapi/pyproject.toml | 30 + .../petstore/python-fastapi/requirements.txt | 36 + .../server/petstore/python-fastapi/setup.cfg | 23 + .../src/openapi_server/apis/__init__.py | 0 .../src/openapi_server/apis/pet_api.py | 189 ++++ .../src/openapi_server/apis/store_api.py | 91 ++ .../src/openapi_server/apis/user_api.py | 171 ++++ .../python-fastapi/src/openapi_server/main.py | 27 + .../src/openapi_server/models/__init__.py | 0 .../src/openapi_server/models/api_response.py | 24 + .../src/openapi_server/models/category.py | 22 + .../src/openapi_server/models/extra_models.py | 8 + .../src/openapi_server/models/order.py | 30 + .../src/openapi_server/models/pet.py | 32 + .../src/openapi_server/models/tag.py | 22 + .../src/openapi_server/models/user.py | 34 + .../src/openapi_server/security_api.py | 83 ++ .../petstore/python-fastapi/tests/conftest.py | 20 + .../python-fastapi/tests/test_pet_api.py | 165 ++++ .../python-fastapi/tests/test_store_api.py | 76 ++ .../python-fastapi/tests/test_user_api.py | 154 ++++ 52 files changed, 3483 insertions(+) create mode 100644 bin/configs/python-fastapi.yaml create mode 100644 docs/generators/python-fastapi.md create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/Dockerfile.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/README.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/__init__.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/api.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/api_test.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/conftest.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/docker-compose.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/endpoint_argument_definition.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/extra_models.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/gitignore.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/main.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/model.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/openapi.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/param_type.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/partial_header.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/pyproject_toml.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/requirements.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/security_api.mustache create mode 100644 modules/openapi-generator/src/main/resources/python-fastapi/setup_cfg.mustache create mode 100644 samples/server/petstore/python-fastapi/.gitignore create mode 100644 samples/server/petstore/python-fastapi/.openapi-generator-ignore create mode 100644 samples/server/petstore/python-fastapi/.openapi-generator/FILES create mode 100644 samples/server/petstore/python-fastapi/.openapi-generator/VERSION create mode 100644 samples/server/petstore/python-fastapi/Dockerfile create mode 100644 samples/server/petstore/python-fastapi/README.md create mode 100644 samples/server/petstore/python-fastapi/docker-compose.yaml create mode 100644 samples/server/petstore/python-fastapi/openapi.yaml create mode 100644 samples/server/petstore/python-fastapi/pyproject.toml create mode 100644 samples/server/petstore/python-fastapi/requirements.txt create mode 100644 samples/server/petstore/python-fastapi/setup.cfg create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/apis/__init__.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/apis/pet_api.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/apis/store_api.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/apis/user_api.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/main.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/models/__init__.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/models/api_response.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/models/category.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/models/extra_models.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/models/order.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/models/pet.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/models/tag.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/models/user.py create mode 100644 samples/server/petstore/python-fastapi/src/openapi_server/security_api.py create mode 100644 samples/server/petstore/python-fastapi/tests/conftest.py create mode 100644 samples/server/petstore/python-fastapi/tests/test_pet_api.py create mode 100644 samples/server/petstore/python-fastapi/tests/test_store_api.py create mode 100644 samples/server/petstore/python-fastapi/tests/test_user_api.py diff --git a/bin/configs/python-fastapi.yaml b/bin/configs/python-fastapi.yaml new file mode 100644 index 000000000000..7bf7405c527e --- /dev/null +++ b/bin/configs/python-fastapi.yaml @@ -0,0 +1,6 @@ +generatorName: python-fastapi +outputDir: samples/server/petstore/python-fastapi +inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml +templateDir: modules/openapi-generator/src/main/resources/python-fastapi +additionalProperties: + hideGenerationTimestamp: "true" diff --git a/docs/generators/python-fastapi.md b/docs/generators/python-fastapi.md new file mode 100644 index 000000000000..2143321f2d7d --- /dev/null +++ b/docs/generators/python-fastapi.md @@ -0,0 +1,211 @@ +--- +title: Config Options for python-fastapi +sidebar_label: python-fastapi +--- + +These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. + +| Option | Description | Values | Default | +| ------ | ----------- | ------ | ------- | +|allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| +|disallowAdditionalPropertiesIfNotPresent|If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.|
    **false**
    The 'additionalProperties' implementation is compliant with the OAS and JSON schema specifications.
    **true**
    Keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.
    |true| +|ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |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| +|packageName|python package name (convention: snake_case).| |openapi_server| +|packageVersion|python package version.| |1.0.0| +|prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| +|serverPort|TCP port to listen to in app.run| |8080| +|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| +|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| + +## IMPORT MAPPING + +| Type/Alias | Imports | +| ---------- | ------- | + + +## INSTANTIATION TYPES + +| Type/Alias | Instantiated By | +| ---------- | --------------- | + + +## LANGUAGE PRIMITIVES + +
      +
    • Dict
    • +
    • List
    • +
    • bool
    • +
    • bytes
    • +
    • date
    • +
    • datetime
    • +
    • dict
    • +
    • file
    • +
    • float
    • +
    • int
    • +
    • list
    • +
    • object
    • +
    • str
    • +
    + +## RESERVED WORDS + +
      +
    • all_params
    • +
    • and
    • +
    • as
    • +
    • assert
    • +
    • async
    • +
    • auth_settings
    • +
    • await
    • +
    • body_params
    • +
    • break
    • +
    • class
    • +
    • continue
    • +
    • def
    • +
    • del
    • +
    • elif
    • +
    • else
    • +
    • except
    • +
    • exec
    • +
    • false
    • +
    • finally
    • +
    • for
    • +
    • form_params
    • +
    • from
    • +
    • global
    • +
    • header_params
    • +
    • if
    • +
    • import
    • +
    • in
    • +
    • is
    • +
    • lambda
    • +
    • local_var_files
    • +
    • none
    • +
    • nonlocal
    • +
    • not
    • +
    • or
    • +
    • pass
    • +
    • path_params
    • +
    • print
    • +
    • property
    • +
    • query_params
    • +
    • raise
    • +
    • resource_path
    • +
    • return
    • +
    • self
    • +
    • true
    • +
    • try
    • +
    • while
    • +
    • with
    • +
    • yield
    • +
    + +## FEATURE SET + + +### Client Modification Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasePath|✗|ToolingExtension +|Authorizations|✗|ToolingExtension +|UserAgent|✗|ToolingExtension +|MockServer|✗|ToolingExtension + +### Data Type Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Custom|✗|OAS2,OAS3 +|Int32|✓|OAS2,OAS3 +|Int64|✓|OAS2,OAS3 +|Float|✓|OAS2,OAS3 +|Double|✓|OAS2,OAS3 +|Decimal|✓|ToolingExtension +|String|✓|OAS2,OAS3 +|Byte|✓|OAS2,OAS3 +|Binary|✓|OAS2,OAS3 +|Boolean|✓|OAS2,OAS3 +|Date|✓|OAS2,OAS3 +|DateTime|✓|OAS2,OAS3 +|Password|✓|OAS2,OAS3 +|File|✓|OAS2 +|Array|✓|OAS2,OAS3 +|Maps|✓|ToolingExtension +|CollectionFormat|✓|OAS2 +|CollectionFormatMulti|✓|OAS2 +|Enum|✓|OAS2,OAS3 +|ArrayOfEnum|✓|ToolingExtension +|ArrayOfModel|✓|ToolingExtension +|ArrayOfCollectionOfPrimitives|✓|ToolingExtension +|ArrayOfCollectionOfModel|✓|ToolingExtension +|ArrayOfCollectionOfEnum|✓|ToolingExtension +|MapOfEnum|✓|ToolingExtension +|MapOfModel|✓|ToolingExtension +|MapOfCollectionOfPrimitives|✓|ToolingExtension +|MapOfCollectionOfModel|✓|ToolingExtension +|MapOfCollectionOfEnum|✓|ToolingExtension + +### Documentation Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Readme|✗|ToolingExtension +|Model|✓|ToolingExtension +|Api|✓|ToolingExtension + +### Global Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Host|✓|OAS2,OAS3 +|BasePath|✓|OAS2,OAS3 +|Info|✓|OAS2,OAS3 +|Schemes|✗|OAS2,OAS3 +|PartialSchemes|✓|OAS2,OAS3 +|Consumes|✓|OAS2 +|Produces|✓|OAS2 +|ExternalDocumentation|✓|OAS2,OAS3 +|Examples|✓|OAS2,OAS3 +|XMLStructureDefinitions|✗|OAS2,OAS3 +|MultiServer|✗|OAS3 +|ParameterizedServer|✗|OAS3 +|ParameterStyling|✗|OAS3 +|Callbacks|✓|OAS3 +|LinkObjects|✗|OAS3 + +### Parameter Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Path|✓|OAS2,OAS3 +|Query|✓|OAS2,OAS3 +|Header|✓|OAS2,OAS3 +|Body|✓|OAS2 +|FormUnencoded|✓|OAS2 +|FormMultipart|✓|OAS2 +|Cookie|✓|OAS3 + +### Schema Support Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|Simple|✓|OAS2,OAS3 +|Composite|✓|OAS2,OAS3 +|Polymorphism|✓|OAS2,OAS3 +|Union|✗|OAS3 + +### Security Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|BasicAuth|✓|OAS2,OAS3 +|ApiKey|✓|OAS2,OAS3 +|OpenIDConnect|✗|OAS3 +|BearerToken|✓|OAS3 +|OAuth2_Implicit|✓|OAS2,OAS3 +|OAuth2_Password|✓|OAS2,OAS3 +|OAuth2_ClientCredentials|✓|OAS2,OAS3 +|OAuth2_AuthorizationCode|✓|OAS2,OAS3 + +### Wire Format Feature +| Name | Supported | Defined By | +| ---- | --------- | ---------- | +|JSON|✓|OAS2,OAS3 +|XML|✓|OAS2,OAS3 +|PROTOBUF|✗|ToolingExtension +|Custom|✗|OAS2,OAS3 diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java new file mode 100644 index 000000000000..f4e69664724c --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java @@ -0,0 +1,254 @@ +package org.openapitools.codegen.languages; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.module.SimpleModule; +import io.swagger.v3.oas.models.media.ArraySchema; +import io.swagger.v3.oas.models.media.Schema; +import org.apache.commons.lang3.StringUtils; +import org.openapitools.codegen.*; +import org.openapitools.codegen.utils.ModelUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.util.*; + +import static org.openapitools.codegen.utils.StringUtils.underscore; + +public class PythonFastAPIServerCodegen extends AbstractPythonCodegen { + private static class SnakeCaseKeySerializer extends JsonSerializer { + @Override + public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeFieldName(underscore(value)); + } + } + + private static class PythonBooleanSerializer extends JsonSerializer { + @Override + public void serialize(Boolean value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeNumber(value ? 1 : 0); + } + } + + // An object mapper that is used to convert an example string to + // a "python-compliant" example string (keys in snake case, boolean as 1/0). + final ObjectMapper MAPPER = new ObjectMapper(); + + final Logger LOGGER = LoggerFactory.getLogger(PythonFastAPIServerCodegen.class); + + private static final String NAME = "python-fastapi"; + private static final int DEFAULT_SERVER_PORT = 8080; + private static final String DEFAULT_PACKAGE_NAME = "openapi_server"; + private static final String SRC_DIR = "src"; + + @Override + public CodegenType getTag() { + return CodegenType.SERVER; + } + + @Override + public String getHelp() { + return "Generates a python server (FastAPI)."; + } + + public PythonFastAPIServerCodegen() { + super(); + + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addKeySerializer(String.class, new SnakeCaseKeySerializer()); + simpleModule.addSerializer(Boolean.class, new PythonBooleanSerializer()); + MAPPER.registerModule(simpleModule); + + /* + * Additional Properties. These values can be passed to the templates and + * are available in models, apis, and supporting files + */ + additionalProperties.put("serverPort", DEFAULT_SERVER_PORT); + additionalProperties.put(CodegenConstants.PACKAGE_NAME, DEFAULT_PACKAGE_NAME); + + languageSpecificPrimitives.add("List"); + languageSpecificPrimitives.add("Dict"); + typeMapping.put("array", "List"); + typeMapping.put("map", "Dict"); + + outputFolder = "generated-code" + File.separator + NAME; + modelTemplateFiles.put("model.mustache", ".py"); + apiTemplateFiles.put("api.mustache", ".py"); + embeddedTemplateDir = templateDir = NAME; + apiPackage = "apis"; + modelPackage = "models"; + testPackage = "tests"; + apiTestTemplateFiles().put("api_test.mustache", ".py"); + + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_NAME, "python package name (convention: snake_case).") + .defaultValue(DEFAULT_PACKAGE_NAME)); + cliOptions.add(new CliOption(CodegenConstants.PACKAGE_VERSION, "python package version.") + .defaultValue("1.0.0")); + cliOptions.add(new CliOption("serverPort", "TCP port to listen to in app.run"). + defaultValue(String.valueOf(DEFAULT_SERVER_PORT))); + } + + @Override + public void processOpts() { + super.processOpts(); + + if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { + setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); + } + + modelPackage = packageName + "." + modelPackage; + apiPackage = packageName + "." + apiPackage; + + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + supportingFiles.add(new SupportingFile("openapi.mustache", "", "openapi.yaml")); + supportingFiles.add(new SupportingFile("main.mustache", SRC_DIR + File.separator + packageName.replace('.', File.separatorChar), "main.py")); + supportingFiles.add(new SupportingFile("docker-compose.mustache", "", "docker-compose.yaml")); + supportingFiles.add(new SupportingFile("Dockerfile.mustache", "", "Dockerfile")); + supportingFiles.add(new SupportingFile("requirements.mustache", "", "requirements.txt")); + supportingFiles.add(new SupportingFile("security_api.mustache", SRC_DIR + File.separator + packageName.replace('.', File.separatorChar), "security_api.py")); + supportingFiles.add(new SupportingFile("extra_models.mustache", StringUtils.substringAfter(modelFileFolder(), outputFolder), "extra_models.py")); + + // Add __init__.py to all sub-folders under namespace pkg + StringBuilder namespacePackagePath = new StringBuilder(SRC_DIR + File.separator + StringUtils.substringBefore(packageName, ".")); + for (String tmp: StringUtils.split(StringUtils.substringAfter(packageName, "."), '.')) { + namespacePackagePath.append(File.separator).append(tmp); + supportingFiles.add(new SupportingFile("__init__.mustache", namespacePackagePath.toString(), "__init__.py")); + } + supportingFiles.add(new SupportingFile("__init__.mustache", StringUtils.substringAfter(modelFileFolder(), outputFolder), "__init__.py")); + supportingFiles.add(new SupportingFile("__init__.mustache", StringUtils.substringAfter(apiFileFolder(), outputFolder), "__init__.py")); + + supportingFiles.add(new SupportingFile("conftest.mustache", testPackage.replace('.', File.separatorChar), "conftest.py")); + + supportingFiles.add(new SupportingFile("gitignore.mustache", "", ".gitignore")); + supportingFiles.add(new SupportingFile("pyproject_toml.mustache", "", "pyproject.toml")); + supportingFiles.add(new SupportingFile("setup_cfg.mustache", "", "setup.cfg")); + } + + @Override + public String getName() { + return NAME; + } + + @Override + public String toModelImport(String name) { + String modelImport; + if (StringUtils.startsWithAny(name, "import", "from")) { + modelImport = name; + } else { + modelImport = "from "; + if (!"".equals(modelPackage())) { + modelImport += modelPackage() + "."; + } + modelImport += toModelFilename(name) + " import " + name; + } + return modelImport; + } + + @Override + public String getTypeDeclaration(Schema p) { + if (ModelUtils.isArraySchema(p)) { + ArraySchema ap = (ArraySchema) p; + Schema inner = ap.getItems(); + return getSchemaType(p) + "[" + getTypeDeclaration(inner) + "]"; + } else if (ModelUtils.isMapSchema(p)) { + Schema inner = getAdditionalProperties(p); + return getSchemaType(p) + "[str, " + getTypeDeclaration(inner) + "]"; + } + return super.getTypeDeclaration(p); + } + + @Override + public Map postProcessOperationsWithModels(Map objs, List allModels) { + Map operations = (Map) objs.get("operations"); + // Set will make sure that no duplicated items are used. + Set securityImports = new HashSet<>(); + if (operations != null) { + List ops = (List) operations.get("operation"); + for (final CodegenOperation operation : ops) { + List responses = operation.responses; + if (responses != null) { + for (final CodegenResponse resp : responses) { + // Convert "default" value (0) to OK (200). + if ("0".equals(resp.code)) { + resp.code = "200"; + } + } + } + List securityMethods = operation.authMethods; + if (securityMethods != null) { + for (final CodegenSecurity securityMethod: securityMethods) { + securityImports.add(securityMethod.name); + } + } + + if (operation.requestBodyExamples != null) { + for (Map example : operation.requestBodyExamples) { + if (example.get("contentType") != null && example.get("contentType").equals("application/json")) { + // Make an example dictionary more python-like (snake-case, etc.). + // If fails, use the original string. + try { + Map result = MAPPER.readValue(example.get("example"), + new TypeReference>(){}); + operation.bodyParam.example = MAPPER.writeValueAsString(result); + } catch (IOException e) { + operation.bodyParam.example = example.get("example"); + } + } + } + } + } + } + + objs.put("securityImports", new ArrayList(securityImports)); + + return objs; + } + + @Override + public Map postProcessAllModels(Map objs) { + Map result = super.postProcessAllModels(objs); + for (Map.Entry entry : result.entrySet()) { + Map inner = (Map) entry.getValue(); + List> models = (List>) inner.get("models"); + for (Map mo : models) { + CodegenModel cm = (CodegenModel) mo.get("model"); + // Add additional filename information for imports + mo.put("pyImports", toPyImports(cm, cm.imports)); + } + } + return result; + } + + private List> toPyImports(CodegenModel cm, Set imports) { + List> pyImports = new ArrayList<>(); + for (String im : imports) { + if (!im.equals(cm.classname)) { + HashMap pyImport = new HashMap<>(); + pyImport.put("import", toModelImport(im)); + pyImports.add(pyImport); + } + } + return pyImports; + } + + @Override + public Map postProcessSupportingFileData(Map objs) { + generateYAMLSpecFile(objs); + return objs; + } + + @Override + public String apiFileFolder() { + return outputFolder + File.separator + SRC_DIR + File.separator + apiPackage().replace('.', File.separatorChar); + } + + @Override + public String modelFileFolder() { + return outputFolder + File.separator + SRC_DIR + File.separator + modelPackage().replace('.', File.separatorChar); + } +} diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig index 9d6b52d6fc30..a213327b3f7a 100644 --- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig +++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig @@ -97,6 +97,7 @@ org.openapitools.codegen.languages.PowerShellClientCodegen org.openapitools.codegen.languages.ProtobufSchemaCodegen org.openapitools.codegen.languages.PythonLegacyClientCodegen org.openapitools.codegen.languages.PythonClientCodegen +org.openapitools.codegen.languages.PythonFastAPIServerCodegen org.openapitools.codegen.languages.PythonFlaskConnexionServerCodegen org.openapitools.codegen.languages.PythonAiohttpConnexionServerCodegen org.openapitools.codegen.languages.PythonBluePlanetServerCodegen diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/Dockerfile.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/Dockerfile.mustache new file mode 100644 index 000000000000..395fed380e6c --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/Dockerfile.mustache @@ -0,0 +1,30 @@ +FROM python:3.6 AS builder + +WORKDIR /usr/src/app + +RUN python3 -m venv /venv +ENV PATH="/venv/bin:$PATH" + +RUN pip install --upgrade pip + +COPY . . +RUN pip install --no-cache-dir . + + +FROM python:3.6 AS test_runner +WORKDIR /tmp +COPY --from=builder /venv /venv +COPY --from=builder /usr/src/app/tests tests +ENV PATH=/venv/bin:$PATH + +# install test dependencies +RUN pip install pytest + +# run tests +RUN pytest tests + + +FROM python:3.6 AS service +WORKDIR /root/app/site-packages +COPY --from=test_runner /venv /venv +ENV PATH=/venv/bin:$PATH diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/README.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/README.mustache new file mode 100644 index 000000000000..6528c7920266 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/README.mustache @@ -0,0 +1,32 @@ +# OpenAPI generated FastAPI server + +This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: + +- API version: {{appVersion}} +{{^hideGenerationTimestamp}} +- Build date: {{generatedDate}} +{{/hideGenerationTimestamp}} +- Build package: {{generatorClass}} + +## Requirements. + +Python >= 3.6 + +## Installation & Usage + +To run the server, please execute the following from the root directory: + +``` + pip3 install -r requirements.txt + uvicorn main:app --host 0.0.0.0 --port {{serverPort}} +``` + +and open your browser at `http://localhost:{{serverPort}}/docs/` to see the docs. + +## Running with Docker + +To run the server on a Docker container, please execute the following from the root directory: + +```bash +docker-compose up --build +``` diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/__init__.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/__init__.mustache new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/api.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/api.mustache new file mode 100644 index 000000000000..21c091251ad8 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/api.mustache @@ -0,0 +1,64 @@ +# coding: utf-8 + +from typing import Dict, List + +from fastapi import ( + APIRouter, + Body, + Cookie, + Depends, + Form, + Header, + Path, + Query, + Response, + Security, + status, +) + +from {{modelPackage}}.extra_models import TokenModel +{{#imports}} +{{import}} +{{/imports}} +{{#securityImports.0}}from {{packageName}}.security_api import {{#securityImports}}get_token_{{.}}{{^-last}}, {{/-last}}{{/securityImports}}{{/securityImports.0}} + +router = APIRouter() + + +{{#operations}} +{{#operation}} +@router.{{#lambda.lowercase}}{{httpMethod}}{{/lambda.lowercase}}( + "{{path}}", + responses={ + {{#responses}} + {{code}}: {{=<% %>=}}{<%#dataType%>"model": <%dataType%>, "description": "<%message%>"<%/dataType%><%^dataType%>"description": "<%message%>"<%/dataType%>}<%={{ }}=%>, + {{/responses}} + }, + tags=[{{#tags}}"{{name}}"{{^-last}},{{/-last}}{{/tags}}], + {{#summary}} + summary="{{summary}}", + {{/summary}} + {{#description}} + description = "{{description}}", + {{/description}} +) +async def {{operationId}}( + {{#allParams}} + {{>endpoint_argument_definition}}, + {{/allParams}} + {{#hasAuthMethods}} + {{#authMethods}} + token_{{name}}: TokenModel = Security( + get_token_{{name}}{{#isOAuth}}, scopes=[{{#scopes}}"{{scope}}"{{^-last}}, {{/-last}}{{/scopes}}]{{/isOAuth}} + ), + {{/authMethods}} + {{/hasAuthMethods}} +) -> {{#returnType}}{{.}}{{/returnType}}{{^returnType}}None{{/returnType}}: # noqa: E501 + {{#notes}}"""{{.}}""" + ...{{/notes}}{{^notes}}...{{/notes}} +{{^-last}} + + +{{/-last}} +{{/operation}} +{{/operations}} diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/api_test.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/api_test.mustache new file mode 100644 index 000000000000..a3470a2323ee --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/api_test.mustache @@ -0,0 +1,53 @@ +# coding: utf-8 + +from fastapi.testclient import TestClient + +import json +import pytest + +{{#imports}}{{import}} +{{/imports}} + +{{#operations}} +{{#operation}} + +{{#vendorExtensions.x-skip-test}} +@pytest.mark.skip("{{reason}}") +{{/vendorExtensions.x-skip-test}} +def test_{{operationId}}(client: TestClient): + """Test case for {{{operationId}}} + + {{{summary}}} + """ + {{#bodyParam}} + {{paramName}} = {{#isContainer}}[{{/isContainer}}{{{example}}}{{#isContainer}}]{{/isContainer}} + {{/bodyParam}} + {{#queryParams}} + {{#-first}}params = [{{/-first}}{{^-first}} {{/-first}}("{{paramName}}", {{{example}}}){{^-last}},{{/-last}}{{#-last}}]{{/-last}} + {{/queryParams}} + headers = { {{#headerParams}} + '{{paramName}}': {{{example}}},{{/headerParams}}{{#authMethods}} + {{#isOAuth}}'Authorization': 'Bearer special-key',{{/isOAuth}}{{#isApiKey}}'{{name}}': 'special-key',{{/isApiKey}}{{#isBasicBasic}}'Authorization': 'BasicZm9vOmJhcg==',{{/isBasicBasic}}{{#isBasicBearer}}'Authorization': 'Bearer special-key',{{/isBasicBearer}}{{/authMethods}} + } + {{#formParams}} + {{#-first}} + data = { + {{/-first}} + '{{paramName}}': {{{example}}}{{^-last}},{{/-last}} + {{#-last}} + } + {{/-last}} + {{/formParams}} + response = client.request( + '{{httpMethod}}', + '{{{path}}}'{{#pathParams}}{{#-first}}.format({{/-first}}{{baseName}}={{{example}}}{{^-last}}, {{/-last}}{{#-last}}){{/-last}}{{/pathParams}}, + headers=headers,{{#bodyParam}} + json={{paramName}},{{/bodyParam}}{{#formParams}}{{#-first}} + data=data,{{/-first}}{{/formParams}}{{#queryParams}}{{#-first}} + params=params,{{/-first}}{{/queryParams}} + ) + + assert response.status_code == 200 + +{{/operation}} +{{/operations}} diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/conftest.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/conftest.mustache new file mode 100644 index 000000000000..357ea48c3ab8 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/conftest.mustache @@ -0,0 +1,20 @@ +import contextlib +from typing import Any + +import pytest +from fastapi import FastAPI +from fastapi.testclient import TestClient + +from {{packageName}}.main import app as application + + +@pytest.fixture +def app() -> FastAPI: + application.dependency_overrides = {} + + return application + + +@pytest.fixture +def client(app) -> TestClient: + return TestClient(app) diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/docker-compose.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/docker-compose.mustache new file mode 100644 index 000000000000..b4ffa0029173 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/docker-compose.mustache @@ -0,0 +1,9 @@ +version: '3.6' +services: + service: + build: + context: . + target: service + ports: + - "{{serverPort}}:{{serverPort}}" + command: uvicorn {{packageName}}.main:app --host 0.0.0.0 --port {{serverPort}} diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/endpoint_argument_definition.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/endpoint_argument_definition.mustache new file mode 100644 index 000000000000..939bfda10a6b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/endpoint_argument_definition.mustache @@ -0,0 +1 @@ +{{#isPathParam}}{{baseName}}{{/isPathParam}}{{^isPathParam}}{{paramName}}{{/isPathParam}}: {{>param_type}} = {{#isPathParam}}Path{{/isPathParam}}{{#isHeaderParam}}Header{{/isHeaderParam}}{{#isFormParam}}Form{{/isFormParam}}{{#isQueryParam}}Query{{/isQueryParam}}{{#isCookieParam}}Cookie{{/isCookieParam}}{{#isBodyParam}}Body{{/isBodyParam}}(None, description="{{description}}") diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/extra_models.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/extra_models.mustache new file mode 100644 index 000000000000..a3a283fb842b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/extra_models.mustache @@ -0,0 +1,8 @@ +# coding: utf-8 + +from pydantic import BaseModel + +class TokenModel(BaseModel): + """Defines a token model.""" + + sub: str diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/gitignore.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/gitignore.mustache new file mode 100644 index 000000000000..a81c8ee12195 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/gitignore.mustache @@ -0,0 +1,138 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/main.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/main.mustache new file mode 100644 index 000000000000..7112b2719784 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/main.mustache @@ -0,0 +1,23 @@ +# coding: utf-8 + +{{>partial_header}} + +from fastapi import FastAPI + +{{#apiInfo}} +{{#apis}} +from {{apiPackage}}.{{classFilename}} import router as {{classname}}Router +{{/apis}} +{{/apiInfo}} + +app = FastAPI( + title="{{appName}}", + description="{{appDescription}}", + version="{{appVersion}}", +) + +{{#apiInfo}} +{{#apis}} +app.include_router({{classname}}Router) +{{/apis}} +{{/apiInfo}} diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/model.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/model.mustache new file mode 100644 index 000000000000..f6a15877fa4f --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/model.mustache @@ -0,0 +1,35 @@ +# coding: utf-8 + +from datetime import date, datetime + +from typing import Dict, List, Optional + +from pydantic import BaseModel, EmailStr, validator +{{#models}} +{{#model}} +{{#pyImports}} +{{import}} +{{/pyImports}} +{{/model}} +{{/models}} + + +{{#models}} +{{#model}} +class {{classname}}(BaseModel): + """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + + Do not edit the class manually. + + {{classname}} - a model defined in OpenAPI + + {{#vars}} + {{name}}: The {{name}} of this {{classname}}{{^required}} [Optional]{{/required}}. + {{/vars}} + """ + +{{#vars}} + {{name}}: {{#required}}{{dataType}}{{/required}}{{^required}}Optional[{{dataType}}] = None{{/required}} +{{/vars}} +{{/model}} +{{/models}} diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/openapi.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/openapi.mustache new file mode 100644 index 000000000000..51ebafb0187d --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/openapi.mustache @@ -0,0 +1 @@ +{{{openapi-yaml}}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/param_type.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/param_type.mustache new file mode 100644 index 000000000000..d97c018015fa --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/param_type.mustache @@ -0,0 +1 @@ +{{#isString}}str{{/isString}}{{#isInteger}}int{{/isInteger}}{{#isLong}}int{{/isLong}}{{#isFloat}}float{{/isFloat}}{{#isDouble}}float{{/isDouble}}{{#isByteArray}}str{{/isByteArray}}{{#isBinary}}str{{/isBinary}}{{#isBoolean}}bool{{/isBoolean}}{{#isDate}}str{{/isDate}}{{#isDateTime}}str{{/isDateTime}}{{#isModel}}{{dataType}}{{/isModel}}{{#isContainer}}{{dataType}}{{/isContainer}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/partial_header.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/partial_header.mustache new file mode 100644 index 000000000000..62e28acde9b9 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/partial_header.mustache @@ -0,0 +1,17 @@ +""" +{{#appName}} + {{{appName}}} +{{/appName}} + +{{#appDescription}} + {{{appDescription}}} +{{/appDescription}} + + {{#version}} + The version of the OpenAPI document: {{{version}}} + {{/version}} + {{#infoEmail}} + Contact: {{{infoEmail}}} + {{/infoEmail}} + Generated by: https://openapi-generator.tech +""" diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/pyproject_toml.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/pyproject_toml.mustache new file mode 100644 index 000000000000..c2826df30203 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/pyproject_toml.mustache @@ -0,0 +1,30 @@ +[build-system] +requires = ["setuptools", "wheel"] +build-backend = "setuptools.build_meta" + +[tool.black] +line-length = 88 +exclude = ''' +( + /( + \.eggs # exclude a few common directories in the + | \.git # root of the project + | \.hg + | \.mypy_cache + | \.tox + | \.venv + | _build + | buck-out + | build + | dist + )/ +) +''' + +[tool.isort] +profile = "black" +skip = [ + '.eggs', '.git', '.hg', '.mypy_cache', '.nox', '.pants.d', '.tox', + '.venv', '_build', 'buck-out', 'build', 'dist', 'node_modules', 'venv', +] +skip_gitignore = true diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/requirements.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/requirements.mustache new file mode 100644 index 000000000000..ce66f96d42c9 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/requirements.mustache @@ -0,0 +1,36 @@ +aiofiles==0.5.0 +aniso8601==7.0.0 +async-exit-stack==1.0.1 +async-generator==1.10 +certifi==2020.12.5 +chardet==4.0.0 +click==7.1.2 +dnspython==2.1.0 +email-validator==1.1.2 +fastapi==0.65.1 +graphene==2.1.8 +graphql-core==2.3.2 +graphql-relay==2.0.1 +h11==0.12.0 +httptools==0.1.2 +idna==2.10 +itsdangerous==1.1.0 +Jinja2==2.11.3 +MarkupSafe==2.0.1 +orjson==3.5.2 +promise==2.3 +pydantic==1.8.2 +python-dotenv==0.17.1 +python-multipart==0.0.5 +PyYAML==5.4.1 +requests==2.25.1 +Rx==1.6.1 +six==1.16.0 +starlette==0.14.2 +typing-extensions==3.10.0.0 +ujson==4.0.2 +urllib3==1.26.4 +uvicorn==0.13.4 +uvloop==0.14.0 +watchgod==0.7 +websockets==8.1 diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/security_api.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/security_api.mustache new file mode 100644 index 000000000000..f925edad438f --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/security_api.mustache @@ -0,0 +1,157 @@ +# coding: utf-8 + +from typing import List + +from fastapi import APIRouter, Depends, Response, Security, status +from fastapi.openapi.models import OAuthFlowImplicit, OAuthFlows +from fastapi.security import ( + HTTPAuthorizationCredentials, + HTTPBasic, + HTTPBasicCredentials, + HTTPBearer, + OAuth2, + OAuth2AuthorizationCodeBearer, + OAuth2PasswordBearer, + SecurityScopes, +) +from fastapi.security.api_key import APIKey, APIKeyCookie, APIKeyHeader, APIKeyQuery + +from {{modelPackage}}.extra_models import TokenModel + +{{#authMethods}} +{{#isOAuth}} +{{#isPassword}} +oauth2_password = OAuth2PasswordBearer( + tokenUrl="{{tokenUrl}}", + scopes={ +{{#scopes}} + "{{scope}}": "{{description}}", +{{/scopes}} + } +) +{{/isPassword}} +{{#isCode}} +oauth2_code = OAuth2AuthorizationCodeBearer( + authorizationUrl="{{authorizationUrl}}", + tokenUrl="{{tokenUrl}}", + refreshUrlUrl="{{refreshUrl}}", + scopes={ +{{#scopes}} + "{{scope}}": "{{description}}", +{{/scopes}} + } +) +{{/isCode}} +{{#isImplicit}} +oauth2_implicit = OAuth2( + flows=OAuthFlows( + implicit=OAuthFlowImplicit( + authorizationUrl="{{authorizationUrl}}", + scopes={ +{{#scopes}} + "{{scope}}": "{{description}}", +{{/scopes}} + } + ) + ) +) +{{/isImplicit}} + + +def get_token_{{name}}( + security_scopes: SecurityScopes, token: str = Depends(oauth2_{{#isPassword}}password{{/isPassword}}{{#isCode}}code{{/isCode}}{{#isImplicit}}implicit{{/isImplicit}}) +) -> TokenModel: + """ + Validate and decode token. + + :param token Token provided by Authorization header + :type token: str + :return: Decoded token information or None if token is invalid + :rtype: TokenModel | None + """ + + ... + + +def validate_scope_{{name}}( + required_scopes: SecurityScopes, token_scopes: List[str] +) -> bool: + """ + Validate required scopes are included in token scope + + :param required_scopes Required scope to access called API + :type required_scopes: List[str] + :param token_scopes Scope present in token + :type token_scopes: List[str] + :return: True if access to called API is allowed + :rtype: bool + """ + + return False + +{{/isOAuth}} +{{#isApiKey}} + +def get_token_{{name}}( + {{#isKeyInHeader}}token_api_key_header: str = Security( + APIKeyHeader(name="{{keyParamName}}", auto_error=False) + ),{{/isKeyInHeader}}{{#isKeyInCookie}} + token_api_key_cookie: str = Security( + APIKeyCookie(name="{{keyParamName}}", auto_error=False) + ),{{/isKeyInCookie}}{{#isKeyInQuery}} + token_api_key_query: str = Security( + APIKeyQuery(name="{{keyParamName}}", auto_error=False) + ),{{/isKeyInQuery}} +) -> TokenModel: + """ + Check and retrieve authentication information from api_key. + + {{#isKeyInHeader}}:param token_api_key_header API key provided by Authorization[{{keyParamName}}] header{{/isKeyInHeader}} + {{#isKeyInCookie}}:param token_api_key_cookie API key provided by Authorization[{{keyParamName}}] cookie{{/isKeyInCookie}} + {{#isKeyInQuery}}:param token_api_key_query API key provided by [{{keyParamName}}] query{{/isKeyInQuery}} + :type token_api_key_{{#isKeyInHeader}}header{{/isKeyInHeader}}{{#isKeyInCookie}}cookie{{/isKeyInCookie}}{{#isKeyInQuery}}query{{/isKeyInQuery}}: str + :return: Information attached to provided api_key or None if api_key is invalid or does not allow access to called API + :rtype: TokenModel | None + """ + + ... + +{{/isApiKey}} +{{#isBasicBasic}} + +basic_auth = HTTPBasic() + + +def get_token_{{name}}( + credentials: HTTPBasicCredentials = Depends(basic_auth) +) -> TokenModel: + """ + Check and retrieve authentication information from basic auth. + + :param credentials Credentials provided by Authorization header + :type credentials: HTTPBasicCredentials + :rtype: TokenModel | None + """ + + ... + +{{/isBasicBasic}} +{{#isBasicBearer}} + +bearer_auth = HTTPBearer() + + +def get_token_{{name}}(credentials: HTTPAuthorizationCredentials = Depends(bearer_auth)) -> TokenModel: + """ + Check and retrieve authentication information from custom bearer token. + + :param credentials Credentials provided by Authorization header + :type credentials: HTTPAuthorizationCredentials + :return: Decoded token information or None if token is invalid + :rtype: TokenModel | None + """ + + ... + +{{/isBasicBearer}} +{{/authMethods}} diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/setup_cfg.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/setup_cfg.mustache new file mode 100644 index 000000000000..ff5cfe968e0b --- /dev/null +++ b/modules/openapi-generator/src/main/resources/python-fastapi/setup_cfg.mustache @@ -0,0 +1,23 @@ +[metadata] +name = {{packageName}} +version = {{appVersion}} +description = {{appDescription}} +long_description = file: README.md +keywords = OpenAPI {{appName}} +python_requires = >= 3.6.* +classifiers = + Operating System :: OS Independent + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.6 + +[options] +install_requires = + fastapi[all] +setup_requires = + setuptools +package_dir= + =src +packages=find_namespace: + +[options.packages.find] +where=src diff --git a/samples/server/petstore/python-fastapi/.gitignore b/samples/server/petstore/python-fastapi/.gitignore new file mode 100644 index 000000000000..a81c8ee12195 --- /dev/null +++ b/samples/server/petstore/python-fastapi/.gitignore @@ -0,0 +1,138 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ diff --git a/samples/server/petstore/python-fastapi/.openapi-generator-ignore b/samples/server/petstore/python-fastapi/.openapi-generator-ignore new file mode 100644 index 000000000000..7484ee590a38 --- /dev/null +++ b/samples/server/petstore/python-fastapi/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/server/petstore/python-fastapi/.openapi-generator/FILES b/samples/server/petstore/python-fastapi/.openapi-generator/FILES new file mode 100644 index 000000000000..247e0d50f673 --- /dev/null +++ b/samples/server/petstore/python-fastapi/.openapi-generator/FILES @@ -0,0 +1,23 @@ +.gitignore +Dockerfile +README.md +docker-compose.yaml +openapi.yaml +pyproject.toml +requirements.txt +setup.cfg +src/openapi_server/apis/__init__.py +src/openapi_server/apis/pet_api.py +src/openapi_server/apis/store_api.py +src/openapi_server/apis/user_api.py +src/openapi_server/main.py +src/openapi_server/models/__init__.py +src/openapi_server/models/api_response.py +src/openapi_server/models/category.py +src/openapi_server/models/extra_models.py +src/openapi_server/models/order.py +src/openapi_server/models/pet.py +src/openapi_server/models/tag.py +src/openapi_server/models/user.py +src/openapi_server/security_api.py +tests/conftest.py diff --git a/samples/server/petstore/python-fastapi/.openapi-generator/VERSION b/samples/server/petstore/python-fastapi/.openapi-generator/VERSION new file mode 100644 index 000000000000..6555596f9311 --- /dev/null +++ b/samples/server/petstore/python-fastapi/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.2.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/python-fastapi/Dockerfile b/samples/server/petstore/python-fastapi/Dockerfile new file mode 100644 index 000000000000..395fed380e6c --- /dev/null +++ b/samples/server/petstore/python-fastapi/Dockerfile @@ -0,0 +1,30 @@ +FROM python:3.6 AS builder + +WORKDIR /usr/src/app + +RUN python3 -m venv /venv +ENV PATH="/venv/bin:$PATH" + +RUN pip install --upgrade pip + +COPY . . +RUN pip install --no-cache-dir . + + +FROM python:3.6 AS test_runner +WORKDIR /tmp +COPY --from=builder /venv /venv +COPY --from=builder /usr/src/app/tests tests +ENV PATH=/venv/bin:$PATH + +# install test dependencies +RUN pip install pytest + +# run tests +RUN pytest tests + + +FROM python:3.6 AS service +WORKDIR /root/app/site-packages +COPY --from=test_runner /venv /venv +ENV PATH=/venv/bin:$PATH diff --git a/samples/server/petstore/python-fastapi/README.md b/samples/server/petstore/python-fastapi/README.md new file mode 100644 index 000000000000..3dacf6e790e6 --- /dev/null +++ b/samples/server/petstore/python-fastapi/README.md @@ -0,0 +1,29 @@ +# OpenAPI generated FastAPI server + +This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: + +- API version: 1.0.0 +- Build package: org.openapitools.codegen.languages.PythonFastAPIServerCodegen + +## Requirements. + +Python >= 3.6 + +## Installation & Usage + +To run the server, please execute the following from the root directory: + +``` + pip3 install -r requirements.txt + uvicorn main:app --host 0.0.0.0 --port 8080 +``` + +and open your browser at `http://localhost:8080/docs/` to see the docs. + +## Running with Docker + +To run the server on a Docker container, please execute the following from the root directory: + +```bash +docker-compose up --build +``` diff --git a/samples/server/petstore/python-fastapi/docker-compose.yaml b/samples/server/petstore/python-fastapi/docker-compose.yaml new file mode 100644 index 000000000000..638e4e00d347 --- /dev/null +++ b/samples/server/petstore/python-fastapi/docker-compose.yaml @@ -0,0 +1,9 @@ +version: '3.6' +services: + service: + build: + context: . + target: service + ports: + - "8080:8080" + command: uvicorn openapi_server.main:app --host 0.0.0.0 --port 8080 diff --git a/samples/server/petstore/python-fastapi/openapi.yaml b/samples/server/petstore/python-fastapi/openapi.yaml new file mode 100644 index 000000000000..e8e287f99914 --- /dev/null +++ b/samples/server/petstore/python-fastapi/openapi.yaml @@ -0,0 +1,843 @@ +openapi: 3.0.0 +info: + description: This is a sample server Petstore server. For this sample, you can use + the api key `special-key` to test the authorization filters. + license: + name: Apache-2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + title: OpenAPI Petstore + version: 1.0.0 +externalDocs: + description: Find out more about Swagger + url: http://swagger.io +servers: +- url: http://petstore.swagger.io/v2 +tags: +- description: Everything about your Pets + name: pet +- description: Access to Petstore orders + name: store +- description: Operations about user + name: user +paths: + /pet: + post: + operationId: addPet + requestBody: + $ref: '#/components/requestBodies/Pet' + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + description: successful operation + "405": + description: Invalid input + security: + - petstore_auth: + - write:pets + - read:pets + summary: Add a new pet to the store + tags: + - pet + put: + operationId: updatePet + requestBody: + $ref: '#/components/requestBodies/Pet' + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + description: successful operation + "400": + description: Invalid ID supplied + "404": + description: Pet not found + "405": + description: Validation exception + security: + - petstore_auth: + - write:pets + - read:pets + summary: Update an existing pet + tags: + - pet + /pet/findByStatus: + get: + description: Multiple status values can be provided with comma separated strings + operationId: findPetsByStatus + parameters: + - description: Status values that need to be considered for filter + explode: false + in: query + name: status + required: true + schema: + items: + default: available + enum: + - available + - pending + - sold + type: string + type: array + style: form + responses: + "200": + content: + application/xml: + schema: + items: + $ref: '#/components/schemas/Pet' + type: array + application/json: + schema: + items: + $ref: '#/components/schemas/Pet' + type: array + description: successful operation + "400": + description: Invalid status value + security: + - petstore_auth: + - read:pets + summary: Finds Pets by status + tags: + - pet + /pet/findByTags: + get: + deprecated: true + description: Multiple tags can be provided with comma separated strings. Use + tag1, tag2, tag3 for testing. + operationId: findPetsByTags + parameters: + - description: Tags to filter by + explode: false + in: query + name: tags + required: true + schema: + items: + type: string + type: array + style: form + responses: + "200": + content: + application/xml: + schema: + items: + $ref: '#/components/schemas/Pet' + type: array + application/json: + schema: + items: + $ref: '#/components/schemas/Pet' + type: array + description: successful operation + "400": + description: Invalid tag value + security: + - petstore_auth: + - read:pets + summary: Finds Pets by tags + tags: + - pet + /pet/{petId}: + delete: + operationId: deletePet + parameters: + - explode: false + in: header + name: api_key + required: false + schema: + type: string + style: simple + - description: Pet id to delete + explode: false + in: path + name: petId + required: true + schema: + format: int64 + type: integer + style: simple + responses: + "400": + description: Invalid pet value + security: + - petstore_auth: + - write:pets + - read:pets + summary: Deletes a pet + tags: + - pet + get: + description: Returns a single pet + operationId: getPetById + parameters: + - description: ID of pet to return + explode: false + in: path + name: petId + required: true + schema: + format: int64 + type: integer + style: simple + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + description: successful operation + "400": + description: Invalid ID supplied + "404": + description: Pet not found + security: + - api_key: [] + summary: Find pet by ID + tags: + - pet + post: + operationId: updatePetWithForm + parameters: + - description: ID of pet that needs to be updated + explode: false + in: path + name: petId + required: true + schema: + format: int64 + type: integer + style: simple + requestBody: + $ref: '#/components/requestBodies/inline_object' + content: + application/x-www-form-urlencoded: + schema: + properties: + name: + description: Updated name of the pet + type: string + status: + description: Updated status of the pet + type: string + type: object + responses: + "405": + description: Invalid input + security: + - petstore_auth: + - write:pets + - read:pets + summary: Updates a pet in the store with form data + tags: + - pet + /pet/{petId}/uploadImage: + post: + operationId: uploadFile + parameters: + - description: ID of pet to update + explode: false + in: path + name: petId + required: true + schema: + format: int64 + type: integer + style: simple + requestBody: + $ref: '#/components/requestBodies/inline_object_1' + content: + multipart/form-data: + schema: + properties: + additionalMetadata: + description: Additional data to pass to server + type: string + file: + description: file to upload + format: binary + type: string + type: object + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' + description: successful operation + security: + - petstore_auth: + - write:pets + - read:pets + summary: uploads an image + tags: + - pet + /store/inventory: + get: + description: Returns a map of status codes to quantities + operationId: getInventory + responses: + "200": + content: + application/json: + schema: + additionalProperties: + format: int32 + type: integer + type: object + description: successful operation + security: + - api_key: [] + summary: Returns pet inventories by status + tags: + - store + /store/order: + post: + operationId: placeOrder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Order' + description: order placed for purchasing the pet + required: true + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + description: successful operation + "400": + description: Invalid Order + summary: Place an order for a pet + tags: + - store + /store/order/{orderId}: + delete: + description: For valid response try integer IDs with value < 1000. Anything + above 1000 or nonintegers will generate API errors + operationId: deleteOrder + parameters: + - description: ID of the order that needs to be deleted + explode: false + in: path + name: orderId + required: true + schema: + type: string + style: simple + responses: + "400": + description: Invalid ID supplied + "404": + description: Order not found + summary: Delete purchase order by ID + tags: + - store + get: + description: For valid response try integer IDs with value <= 5 or > 10. Other + values will generated exceptions + operationId: getOrderById + parameters: + - description: ID of pet that needs to be fetched + explode: false + in: path + name: orderId + required: true + schema: + format: int64 + maximum: 5 + minimum: 1 + type: integer + style: simple + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + description: successful operation + "400": + description: Invalid ID supplied + "404": + description: Order not found + summary: Find purchase order by ID + tags: + - store + /user: + post: + description: This can only be done by the logged in user. + operationId: createUser + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: Created user object + required: true + responses: + default: + description: successful operation + security: + - api_key: [] + summary: Create user + tags: + - user + /user/createWithArray: + post: + operationId: createUsersWithArrayInput + requestBody: + $ref: '#/components/requestBodies/UserArray' + responses: + default: + description: successful operation + security: + - api_key: [] + summary: Creates list of users with given input array + tags: + - user + /user/createWithList: + post: + operationId: createUsersWithListInput + requestBody: + $ref: '#/components/requestBodies/UserArray' + responses: + default: + description: successful operation + security: + - api_key: [] + summary: Creates list of users with given input array + tags: + - user + /user/login: + get: + operationId: loginUser + parameters: + - description: The user name for login + explode: true + in: query + name: username + required: true + schema: + pattern: ^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$ + type: string + style: form + - description: The password for login in clear text + explode: true + in: query + name: password + required: true + schema: + type: string + style: form + responses: + "200": + content: + application/xml: + schema: + type: string + application/json: + schema: + type: string + description: successful operation + headers: + Set-Cookie: + description: Cookie authentication key for use with the `api_key` apiKey + authentication. + explode: false + schema: + example: AUTH_KEY=abcde12345; Path=/; HttpOnly + type: string + style: simple + X-Rate-Limit: + description: calls per hour allowed by the user + explode: false + schema: + format: int32 + type: integer + style: simple + X-Expires-After: + description: date in UTC when toekn expires + explode: false + schema: + format: date-time + type: string + style: simple + "400": + description: Invalid username/password supplied + summary: Logs user into the system + tags: + - user + /user/logout: + get: + operationId: logoutUser + responses: + default: + description: successful operation + security: + - api_key: [] + summary: Logs out current logged in user session + tags: + - user + /user/{username}: + delete: + description: This can only be done by the logged in user. + operationId: deleteUser + parameters: + - description: The name that needs to be deleted + explode: false + in: path + name: username + required: true + schema: + type: string + style: simple + responses: + "400": + description: Invalid username supplied + "404": + description: User not found + security: + - api_key: [] + summary: Delete user + tags: + - user + get: + operationId: getUserByName + parameters: + - description: The name that needs to be fetched. Use user1 for testing. + explode: false + in: path + name: username + required: true + schema: + type: string + style: simple + responses: + "200": + content: + application/xml: + schema: + $ref: '#/components/schemas/User' + application/json: + schema: + $ref: '#/components/schemas/User' + description: successful operation + "400": + description: Invalid username supplied + "404": + description: User not found + summary: Get user by user name + tags: + - user + put: + description: This can only be done by the logged in user. + operationId: updateUser + parameters: + - description: name that need to be deleted + explode: false + in: path + name: username + required: true + schema: + type: string + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/User' + description: Updated user object + required: true + responses: + "400": + description: Invalid user supplied + "404": + description: User not found + security: + - api_key: [] + summary: Updated user + tags: + - user +components: + requestBodies: + UserArray: + content: + application/json: + schema: + items: + $ref: '#/components/schemas/User' + type: array + description: List of user object + required: true + Pet: + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + description: Pet object that needs to be added to the store + required: true + inline_object: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/inline_object' + inline_object_1: + content: + multipart/form-data: + schema: + $ref: '#/components/schemas/inline_object_1' + schemas: + Order: + description: An order for a pets from the pet store + example: + petId: 6 + quantity: 1 + id: 0 + shipDate: 2000-01-23T04:56:07.000+00:00 + complete: false + status: placed + properties: + id: + format: int64 + title: id + type: integer + petId: + format: int64 + title: petId + type: integer + quantity: + format: int32 + title: quantity + type: integer + shipDate: + format: date-time + title: shipDate + type: string + status: + description: Order Status + enum: + - placed + - approved + - delivered + title: status + type: string + complete: + default: false + title: complete + type: boolean + title: Pet Order + type: object + xml: + name: Order + Category: + description: A category for a pet + example: + name: name + id: 6 + properties: + id: + format: int64 + title: id + type: integer + name: + pattern: ^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$ + title: name + type: string + title: Pet category + type: object + xml: + name: Category + User: + description: A User who is purchasing from the pet store + example: + firstName: firstName + lastName: lastName + password: password + userStatus: 6 + phone: phone + id: 0 + email: email + username: username + properties: + id: + format: int64 + type: integer + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + description: User Status + format: int32 + type: integer + title: a User + type: object + xml: + name: User + Tag: + description: A tag for a pet + example: + name: name + id: 1 + properties: + id: + format: int64 + title: id + type: integer + name: + title: name + type: string + title: Pet Tag + type: object + xml: + name: Tag + Pet: + description: A pet for sale in the pet store + example: + photoUrls: + - photoUrls + - photoUrls + name: doggie + id: 0 + category: + name: name + id: 6 + tags: + - name: name + id: 1 + - name: name + id: 1 + status: available + properties: + id: + format: int64 + title: id + type: integer + category: + $ref: '#/components/schemas/Category' + name: + example: doggie + title: name + type: string + photoUrls: + items: + type: string + title: photoUrls + type: array + xml: + name: photoUrl + wrapped: true + tags: + items: + $ref: '#/components/schemas/Tag' + title: tags + type: array + xml: + name: tag + wrapped: true + status: + description: pet status in the store + enum: + - available + - pending + - sold + title: status + type: string + required: + - name + - photoUrls + title: a Pet + type: object + xml: + name: Pet + ApiResponse: + description: Describes the result of uploading an image resource + example: + code: 0 + type: type + message: message + properties: + code: + format: int32 + title: code + type: integer + type: + title: type + type: string + message: + title: message + type: string + title: An uploaded response + type: object + inline_object: + properties: + name: + description: Updated name of the pet + type: string + status: + description: Updated status of the pet + type: string + type: object + inline_object_1: + properties: + additionalMetadata: + description: Additional data to pass to server + type: string + file: + description: file to upload + format: binary + type: string + type: object + securitySchemes: + petstore_auth: + flows: + implicit: + authorizationUrl: http://petstore.swagger.io/api/oauth/dialog + scopes: + write:pets: modify pets in your account + read:pets: read your pets + type: oauth2 + x-tokenInfoFunc: .security_controller_.info_from_petstore_auth + x-scopeValidateFunc: .security_controller_.validate_scope_petstore_auth + api_key: + in: header + name: api_key + type: apiKey + x-apikeyInfoFunc: .security_controller_.info_from_api_key diff --git a/samples/server/petstore/python-fastapi/pyproject.toml b/samples/server/petstore/python-fastapi/pyproject.toml new file mode 100644 index 000000000000..c2826df30203 --- /dev/null +++ b/samples/server/petstore/python-fastapi/pyproject.toml @@ -0,0 +1,30 @@ +[build-system] +requires = ["setuptools", "wheel"] +build-backend = "setuptools.build_meta" + +[tool.black] +line-length = 88 +exclude = ''' +( + /( + \.eggs # exclude a few common directories in the + | \.git # root of the project + | \.hg + | \.mypy_cache + | \.tox + | \.venv + | _build + | buck-out + | build + | dist + )/ +) +''' + +[tool.isort] +profile = "black" +skip = [ + '.eggs', '.git', '.hg', '.mypy_cache', '.nox', '.pants.d', '.tox', + '.venv', '_build', 'buck-out', 'build', 'dist', 'node_modules', 'venv', +] +skip_gitignore = true diff --git a/samples/server/petstore/python-fastapi/requirements.txt b/samples/server/petstore/python-fastapi/requirements.txt new file mode 100644 index 000000000000..ce66f96d42c9 --- /dev/null +++ b/samples/server/petstore/python-fastapi/requirements.txt @@ -0,0 +1,36 @@ +aiofiles==0.5.0 +aniso8601==7.0.0 +async-exit-stack==1.0.1 +async-generator==1.10 +certifi==2020.12.5 +chardet==4.0.0 +click==7.1.2 +dnspython==2.1.0 +email-validator==1.1.2 +fastapi==0.65.1 +graphene==2.1.8 +graphql-core==2.3.2 +graphql-relay==2.0.1 +h11==0.12.0 +httptools==0.1.2 +idna==2.10 +itsdangerous==1.1.0 +Jinja2==2.11.3 +MarkupSafe==2.0.1 +orjson==3.5.2 +promise==2.3 +pydantic==1.8.2 +python-dotenv==0.17.1 +python-multipart==0.0.5 +PyYAML==5.4.1 +requests==2.25.1 +Rx==1.6.1 +six==1.16.0 +starlette==0.14.2 +typing-extensions==3.10.0.0 +ujson==4.0.2 +urllib3==1.26.4 +uvicorn==0.13.4 +uvloop==0.14.0 +watchgod==0.7 +websockets==8.1 diff --git a/samples/server/petstore/python-fastapi/setup.cfg b/samples/server/petstore/python-fastapi/setup.cfg new file mode 100644 index 000000000000..bc0f0d452d92 --- /dev/null +++ b/samples/server/petstore/python-fastapi/setup.cfg @@ -0,0 +1,23 @@ +[metadata] +name = openapi_server +version = 1.0.0 +description = This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. +long_description = file: README.md +keywords = OpenAPI OpenAPI Petstore +python_requires = >= 3.6.* +classifiers = + Operating System :: OS Independent + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.6 + +[options] +install_requires = + fastapi[all] +setup_requires = + setuptools +package_dir= + =src +packages=find_namespace: + +[options.packages.find] +where=src diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/apis/__init__.py b/samples/server/petstore/python-fastapi/src/openapi_server/apis/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/apis/pet_api.py b/samples/server/petstore/python-fastapi/src/openapi_server/apis/pet_api.py new file mode 100644 index 000000000000..d4dfa357c303 --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/apis/pet_api.py @@ -0,0 +1,189 @@ +# coding: utf-8 + +from typing import Dict, List + +from fastapi import ( + APIRouter, + Body, + Cookie, + Depends, + Form, + Header, + Path, + Query, + Response, + Security, + status, +) + +from openapi_server.models.extra_models import TokenModel +from openapi_server.models.api_response import ApiResponse +from openapi_server.models.pet import Pet +from openapi_server.security_api import get_token_petstore_auth, get_token_api_key + +router = APIRouter() + + +@router.post( + "/pet", + responses={ + 200: {"model": Pet, "description": "successful operation"}, + 405: {"description": "Invalid input"}, + }, + tags=["pet"], + summary="Add a new pet to the store", +) +async def add_pet( + pet: Pet = Body(None, description="Pet object that needs to be added to the store") +, + token_petstore_auth: TokenModel = Security( + get_token_petstore_auth, scopes=["write:pets", "read:pets"] + ), +) -> Pet: # noqa: E501 + ... + + +@router.delete( + "/pet/{petId}", + responses={ + 400: {"description": "Invalid pet value"}, + }, + tags=["pet"], + summary="Deletes a pet", +) +async def delete_pet( + petId: int = Path(None, description="Pet id to delete") +, + api_key: str = Header(None, description="") +, + token_petstore_auth: TokenModel = Security( + get_token_petstore_auth, scopes=["write:pets", "read:pets"] + ), +) -> None: # noqa: E501 + ... + + +@router.get( + "/pet/findByStatus", + responses={ + 200: {"model": List[Pet], "description": "successful operation"}, + 400: {"description": "Invalid status value"}, + }, + tags=["pet"], + summary="Finds Pets by status", +) +async def find_pets_by_status( + status: List[str] = Query(None, description="Status values that need to be considered for filter") +, + token_petstore_auth: TokenModel = Security( + get_token_petstore_auth, scopes=["read:pets"] + ), +) -> List[Pet]: # noqa: E501 + """Multiple status values can be provided with comma separated strings""" + ... + + +@router.get( + "/pet/findByTags", + responses={ + 200: {"model": List[Pet], "description": "successful operation"}, + 400: {"description": "Invalid tag value"}, + }, + tags=["pet"], + summary="Finds Pets by tags", +) +async def find_pets_by_tags( + tags: List[str] = Query(None, description="Tags to filter by") +, + token_petstore_auth: TokenModel = Security( + get_token_petstore_auth, scopes=["read:pets"] + ), +) -> List[Pet]: # noqa: E501 + """Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.""" + ... + + +@router.get( + "/pet/{petId}", + responses={ + 200: {"model": Pet, "description": "successful operation"}, + 400: {"description": "Invalid ID supplied"}, + 404: {"description": "Pet not found"}, + }, + tags=["pet"], + summary="Find pet by ID", +) +async def get_pet_by_id( + petId: int = Path(None, description="ID of pet to return") +, + token_api_key: TokenModel = Security( + get_token_api_key + ), +) -> Pet: # noqa: E501 + """Returns a single pet""" + ... + + +@router.put( + "/pet", + responses={ + 200: {"model": Pet, "description": "successful operation"}, + 400: {"description": "Invalid ID supplied"}, + 404: {"description": "Pet not found"}, + 405: {"description": "Validation exception"}, + }, + tags=["pet"], + summary="Update an existing pet", +) +async def update_pet( + pet: Pet = Body(None, description="Pet object that needs to be added to the store") +, + token_petstore_auth: TokenModel = Security( + get_token_petstore_auth, scopes=["write:pets", "read:pets"] + ), +) -> Pet: # noqa: E501 + ... + + +@router.post( + "/pet/{petId}", + responses={ + 405: {"description": "Invalid input"}, + }, + tags=["pet"], + summary="Updates a pet in the store with form data", +) +async def update_pet_with_form( + petId: int = Path(None, description="ID of pet that needs to be updated") +, + name: str = Form(None, description="Updated name of the pet") +, + status: str = Form(None, description="Updated status of the pet") +, + token_petstore_auth: TokenModel = Security( + get_token_petstore_auth, scopes=["write:pets", "read:pets"] + ), +) -> None: # noqa: E501 + ... + + +@router.post( + "/pet/{petId}/uploadImage", + responses={ + 200: {"model": ApiResponse, "description": "successful operation"}, + }, + tags=["pet"], + summary="uploads an image", +) +async def upload_file( + petId: int = Path(None, description="ID of pet to update") +, + additional_metadata: str = Form(None, description="Additional data to pass to server") +, + file: str = Form(None, description="file to upload") +, + token_petstore_auth: TokenModel = Security( + get_token_petstore_auth, scopes=["write:pets", "read:pets"] + ), +) -> ApiResponse: # noqa: E501 + ... diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/apis/store_api.py b/samples/server/petstore/python-fastapi/src/openapi_server/apis/store_api.py new file mode 100644 index 000000000000..dd7a484d3dbd --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/apis/store_api.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +from typing import Dict, List + +from fastapi import ( + APIRouter, + Body, + Cookie, + Depends, + Form, + Header, + Path, + Query, + Response, + Security, + status, +) + +from openapi_server.models.extra_models import TokenModel +from openapi_server.models.order import Order +from openapi_server.security_api import get_token_api_key + +router = APIRouter() + + +@router.delete( + "/store/order/{orderId}", + responses={ + 400: {"description": "Invalid ID supplied"}, + 404: {"description": "Order not found"}, + }, + tags=["store"], + summary="Delete purchase order by ID", +) +async def delete_order( + orderId: str = Path(None, description="ID of the order that needs to be deleted") +, +) -> None: # noqa: E501 + """For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors""" + ... + + +@router.get( + "/store/inventory", + responses={ + 200: {"model": Dict[str, int], "description": "successful operation"}, + }, + tags=["store"], + summary="Returns pet inventories by status", +) +async def get_inventory( + token_api_key: TokenModel = Security( + get_token_api_key + ), +) -> Dict[str, int]: # noqa: E501 + """Returns a map of status codes to quantities""" + ... + + +@router.get( + "/store/order/{orderId}", + responses={ + 200: {"model": Order, "description": "successful operation"}, + 400: {"description": "Invalid ID supplied"}, + 404: {"description": "Order not found"}, + }, + tags=["store"], + summary="Find purchase order by ID", +) +async def get_order_by_id( + orderId: int = Path(None, description="ID of pet that needs to be fetched") +, +) -> Order: # noqa: E501 + """For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions""" + ... + + +@router.post( + "/store/order", + responses={ + 200: {"model": Order, "description": "successful operation"}, + 400: {"description": "Invalid Order"}, + }, + tags=["store"], + summary="Place an order for a pet", +) +async def place_order( + order: Order = Body(None, description="order placed for purchasing the pet") +, +) -> Order: # noqa: E501 + ... diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/apis/user_api.py b/samples/server/petstore/python-fastapi/src/openapi_server/apis/user_api.py new file mode 100644 index 000000000000..d6370178cd9e --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/apis/user_api.py @@ -0,0 +1,171 @@ +# coding: utf-8 + +from typing import Dict, List + +from fastapi import ( + APIRouter, + Body, + Cookie, + Depends, + Form, + Header, + Path, + Query, + Response, + Security, + status, +) + +from openapi_server.models.extra_models import TokenModel +from openapi_server.models.user import User +from openapi_server.security_api import get_token_api_key + +router = APIRouter() + + +@router.post( + "/user", + responses={ + 200: {"description": "successful operation"}, + }, + tags=["user"], + summary="Create user", +) +async def create_user( + user: User = Body(None, description="Created user object") +, + token_api_key: TokenModel = Security( + get_token_api_key + ), +) -> None: # noqa: E501 + """This can only be done by the logged in user.""" + ... + + +@router.post( + "/user/createWithArray", + responses={ + 200: {"description": "successful operation"}, + }, + tags=["user"], + summary="Creates list of users with given input array", +) +async def create_users_with_array_input( + user: List[User] = Body(None, description="List of user object") +, + token_api_key: TokenModel = Security( + get_token_api_key + ), +) -> None: # noqa: E501 + ... + + +@router.post( + "/user/createWithList", + responses={ + 200: {"description": "successful operation"}, + }, + tags=["user"], + summary="Creates list of users with given input array", +) +async def create_users_with_list_input( + user: List[User] = Body(None, description="List of user object") +, + token_api_key: TokenModel = Security( + get_token_api_key + ), +) -> None: # noqa: E501 + ... + + +@router.delete( + "/user/{username}", + responses={ + 400: {"description": "Invalid username supplied"}, + 404: {"description": "User not found"}, + }, + tags=["user"], + summary="Delete user", +) +async def delete_user( + username: str = Path(None, description="The name that needs to be deleted") +, + token_api_key: TokenModel = Security( + get_token_api_key + ), +) -> None: # noqa: E501 + """This can only be done by the logged in user.""" + ... + + +@router.get( + "/user/{username}", + responses={ + 200: {"model": User, "description": "successful operation"}, + 400: {"description": "Invalid username supplied"}, + 404: {"description": "User not found"}, + }, + tags=["user"], + summary="Get user by user name", +) +async def get_user_by_name( + username: str = Path(None, description="The name that needs to be fetched. Use user1 for testing.") +, +) -> User: # noqa: E501 + ... + + +@router.get( + "/user/login", + responses={ + 200: {"model": str, "description": "successful operation"}, + 400: {"description": "Invalid username/password supplied"}, + }, + tags=["user"], + summary="Logs user into the system", +) +async def login_user( + username: str = Query(None, description="The user name for login") +, + password: str = Query(None, description="The password for login in clear text") +, +) -> str: # noqa: E501 + ... + + +@router.get( + "/user/logout", + responses={ + 200: {"description": "successful operation"}, + }, + tags=["user"], + summary="Logs out current logged in user session", +) +async def logout_user( + token_api_key: TokenModel = Security( + get_token_api_key + ), +) -> None: # noqa: E501 + ... + + +@router.put( + "/user/{username}", + responses={ + 400: {"description": "Invalid user supplied"}, + 404: {"description": "User not found"}, + }, + tags=["user"], + summary="Updated user", +) +async def update_user( + username: str = Path(None, description="name that need to be deleted") +, + user: User = Body(None, description="Updated user object") +, + token_api_key: TokenModel = Security( + get_token_api_key + ), +) -> None: # noqa: E501 + """This can only be done by the logged in user.""" + ... diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/main.py b/samples/server/petstore/python-fastapi/src/openapi_server/main.py new file mode 100644 index 000000000000..eec13ca5eba9 --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/main.py @@ -0,0 +1,27 @@ +# coding: utf-8 + +""" + OpenAPI Petstore + + This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from fastapi import FastAPI + +from openapi_server.apis.pet_api import router as PetApiRouter +from openapi_server.apis.store_api import router as StoreApiRouter +from openapi_server.apis.user_api import router as UserApiRouter + +app = FastAPI( + title="OpenAPI Petstore", + description="This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.", + version="1.0.0", +) + +app.include_router(PetApiRouter) +app.include_router(StoreApiRouter) +app.include_router(UserApiRouter) diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/__init__.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/api_response.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/api_response.py new file mode 100644 index 000000000000..49926a6a14d8 --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/api_response.py @@ -0,0 +1,24 @@ +# coding: utf-8 + +from datetime import date, datetime + +from typing import Dict, List, Optional + +from pydantic import BaseModel, EmailStr, validator + + +class ApiResponse(BaseModel): + """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + + Do not edit the class manually. + + ApiResponse - a model defined in OpenAPI + + code: The code of this ApiResponse [Optional]. + type: The type of this ApiResponse [Optional]. + message: The message of this ApiResponse [Optional]. + """ + + code: Optional[int] = None + type: Optional[str] = None + message: Optional[str] = None diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/category.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/category.py new file mode 100644 index 000000000000..cba9aece542b --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/category.py @@ -0,0 +1,22 @@ +# coding: utf-8 + +from datetime import date, datetime + +from typing import Dict, List, Optional + +from pydantic import BaseModel, EmailStr, validator + + +class Category(BaseModel): + """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + + Do not edit the class manually. + + Category - a model defined in OpenAPI + + id: The id of this Category [Optional]. + name: The name of this Category [Optional]. + """ + + id: Optional[int] = None + name: Optional[str] = None diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/extra_models.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/extra_models.py new file mode 100644 index 000000000000..a3a283fb842b --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/extra_models.py @@ -0,0 +1,8 @@ +# coding: utf-8 + +from pydantic import BaseModel + +class TokenModel(BaseModel): + """Defines a token model.""" + + sub: str diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py new file mode 100644 index 000000000000..b129842ad2ca --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/order.py @@ -0,0 +1,30 @@ +# coding: utf-8 + +from datetime import date, datetime + +from typing import Dict, List, Optional + +from pydantic import BaseModel, EmailStr, validator + + +class Order(BaseModel): + """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + + Do not edit the class manually. + + Order - a model defined in OpenAPI + + id: The id of this Order [Optional]. + pet_id: The pet_id of this Order [Optional]. + quantity: The quantity of this Order [Optional]. + ship_date: The ship_date of this Order [Optional]. + status: The status of this Order [Optional]. + complete: The complete of this Order [Optional]. + """ + + id: Optional[int] = None + pet_id: Optional[int] = None + quantity: Optional[int] = None + ship_date: Optional[datetime] = None + status: Optional[str] = None + complete: Optional[bool] = None diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/pet.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/pet.py new file mode 100644 index 000000000000..c4e8c3fa4bfe --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/pet.py @@ -0,0 +1,32 @@ +# coding: utf-8 + +from datetime import date, datetime + +from typing import Dict, List, Optional + +from pydantic import BaseModel, EmailStr, validator +from openapi_server.models.category import Category +from openapi_server.models.tag import Tag + + +class Pet(BaseModel): + """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + + Do not edit the class manually. + + Pet - a model defined in OpenAPI + + id: The id of this Pet [Optional]. + category: The category of this Pet [Optional]. + name: The name of this Pet. + photo_urls: The photo_urls of this Pet. + tags: The tags of this Pet [Optional]. + status: The status of this Pet [Optional]. + """ + + id: Optional[int] = None + category: Optional[Category] = None + name: str + photo_urls: List[str] + tags: Optional[List[Tag]] = None + status: Optional[str] = None diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/tag.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/tag.py new file mode 100644 index 000000000000..6c2ab695415c --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/tag.py @@ -0,0 +1,22 @@ +# coding: utf-8 + +from datetime import date, datetime + +from typing import Dict, List, Optional + +from pydantic import BaseModel, EmailStr, validator + + +class Tag(BaseModel): + """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + + Do not edit the class manually. + + Tag - a model defined in OpenAPI + + id: The id of this Tag [Optional]. + name: The name of this Tag [Optional]. + """ + + id: Optional[int] = None + name: Optional[str] = None diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/models/user.py b/samples/server/petstore/python-fastapi/src/openapi_server/models/user.py new file mode 100644 index 000000000000..dd173677ce9f --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/models/user.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +from datetime import date, datetime + +from typing import Dict, List, Optional + +from pydantic import BaseModel, EmailStr, validator + + +class User(BaseModel): + """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + + Do not edit the class manually. + + User - a model defined in OpenAPI + + id: The id of this User [Optional]. + username: The username of this User [Optional]. + first_name: The first_name of this User [Optional]. + last_name: The last_name of this User [Optional]. + email: The email of this User [Optional]. + password: The password of this User [Optional]. + phone: The phone of this User [Optional]. + user_status: The user_status of this User [Optional]. + """ + + id: Optional[int] = None + username: Optional[str] = None + first_name: Optional[str] = None + last_name: Optional[str] = None + email: Optional[str] = None + password: Optional[str] = None + phone: Optional[str] = None + user_status: Optional[int] = None diff --git a/samples/server/petstore/python-fastapi/src/openapi_server/security_api.py b/samples/server/petstore/python-fastapi/src/openapi_server/security_api.py new file mode 100644 index 000000000000..1c2f51e30a52 --- /dev/null +++ b/samples/server/petstore/python-fastapi/src/openapi_server/security_api.py @@ -0,0 +1,83 @@ +# coding: utf-8 + +from typing import List + +from fastapi import APIRouter, Depends, Response, Security, status +from fastapi.openapi.models import OAuthFlowImplicit, OAuthFlows +from fastapi.security import ( + HTTPAuthorizationCredentials, + HTTPBasic, + HTTPBasicCredentials, + HTTPBearer, + OAuth2, + OAuth2AuthorizationCodeBearer, + OAuth2PasswordBearer, + SecurityScopes, +) +from fastapi.security.api_key import APIKey, APIKeyCookie, APIKeyHeader, APIKeyQuery + +from openapi_server.models.extra_models import TokenModel + + +def get_token_api_key( + token_api_key_header: str = Security( + APIKeyHeader(name="api_key", auto_error=False) + ), +) -> TokenModel: + """ + Check and retrieve authentication information from api_key. + + :param token_api_key_header API key provided by Authorization[api_key] header + + + :type token_api_key_header: str + :return: Information attached to provided api_key or None if api_key is invalid or does not allow access to called API + :rtype: TokenModel | None + """ + + ... + +oauth2_implicit = OAuth2( + flows=OAuthFlows( + implicit=OAuthFlowImplicit( + authorizationUrl="http://petstore.swagger.io/api/oauth/dialog", + scopes={ + "write:pets": "modify pets in your account", + "read:pets": "read your pets", + } + ) + ) +) + + +def get_token_petstore_auth( + security_scopes: SecurityScopes, token: str = Depends(oauth2_implicit) +) -> TokenModel: + """ + Validate and decode token. + + :param token Token provided by Authorization header + :type token: str + :return: Decoded token information or None if token is invalid + :rtype: TokenModel | None + """ + + ... + + +def validate_scope_petstore_auth( + required_scopes: SecurityScopes, token_scopes: List[str] +) -> bool: + """ + Validate required scopes are included in token scope + + :param required_scopes Required scope to access called API + :type required_scopes: List[str] + :param token_scopes Scope present in token + :type token_scopes: List[str] + :return: True if access to called API is allowed + :rtype: bool + """ + + return False + diff --git a/samples/server/petstore/python-fastapi/tests/conftest.py b/samples/server/petstore/python-fastapi/tests/conftest.py new file mode 100644 index 000000000000..0f1845c60412 --- /dev/null +++ b/samples/server/petstore/python-fastapi/tests/conftest.py @@ -0,0 +1,20 @@ +import contextlib +from typing import Any + +import pytest +from fastapi import FastAPI +from fastapi.testclient import TestClient + +from openapi_server.main import app as application + + +@pytest.fixture +def app() -> FastAPI: + application.dependency_overrides = {} + + return application + + +@pytest.fixture +def client(app) -> TestClient: + return TestClient(app) diff --git a/samples/server/petstore/python-fastapi/tests/test_pet_api.py b/samples/server/petstore/python-fastapi/tests/test_pet_api.py new file mode 100644 index 000000000000..5124a86bc915 --- /dev/null +++ b/samples/server/petstore/python-fastapi/tests/test_pet_api.py @@ -0,0 +1,165 @@ +# coding: utf-8 + +from fastapi.testclient import TestClient + +import json +import pytest + +from openapi_server.models.api_response import ApiResponse +from openapi_server.models.pet import Pet + + +def test_add_pet(client: TestClient): + """Test case for add_pet + + Add a new pet to the store + """ + pet = {"photo_urls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} + headers = { + 'Authorization': 'Bearer special-key', + } + response = client.request( + 'POST', + '/pet', + headers=headers, + json=pet, + ) + + assert response.status_code == 200 + + +def test_delete_pet(client: TestClient): + """Test case for delete_pet + + Deletes a pet + """ + headers = { + 'api_key': 'api_key_example', + 'Authorization': 'Bearer special-key', + } + response = client.request( + 'DELETE', + '/pet/{petId}'.format(petId=56), + headers=headers, + ) + + assert response.status_code == 200 + + +def test_find_pets_by_status(client: TestClient): + """Test case for find_pets_by_status + + Finds Pets by status + """ + params = [("status", ['status_example'])] + headers = { + 'Authorization': 'Bearer special-key', + } + response = client.request( + 'GET', + '/pet/findByStatus', + headers=headers, + params=params, + ) + + assert response.status_code == 200 + + +def test_find_pets_by_tags(client: TestClient): + """Test case for find_pets_by_tags + + Finds Pets by tags + """ + params = [("tags", ['tags_example'])] + headers = { + 'Authorization': 'Bearer special-key', + } + response = client.request( + 'GET', + '/pet/findByTags', + headers=headers, + params=params, + ) + + assert response.status_code == 200 + + +def test_get_pet_by_id(client: TestClient): + """Test case for get_pet_by_id + + Find pet by ID + """ + headers = { + 'api_key': 'special-key', + } + response = client.request( + 'GET', + '/pet/{petId}'.format(petId=56), + headers=headers, + ) + + assert response.status_code == 200 + + +def test_update_pet(client: TestClient): + """Test case for update_pet + + Update an existing pet + """ + pet = {"photo_urls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} + headers = { + 'Authorization': 'Bearer special-key', + } + response = client.request( + 'PUT', + '/pet', + headers=headers, + json=pet, + ) + + assert response.status_code == 200 + + +def test_update_pet_with_form(client: TestClient): + """Test case for update_pet_with_form + + Updates a pet in the store with form data + """ + headers = { + 'Authorization': 'Bearer special-key', + } + data = { + 'name': 'name_example', + 'status': 'status_example' + } + response = client.request( + 'POST', + '/pet/{petId}'.format(petId=56), + headers=headers, + data=data, + ) + + assert response.status_code == 200 + + +def test_upload_file(client: TestClient): + """Test case for upload_file + + uploads an image + """ + headers = { + 'Authorization': 'Bearer special-key', + } + data = { + 'additional_metadata': 'additional_metadata_example', + 'file': '/path/to/file' + } + response = client.request( + 'POST', + '/pet/{petId}/uploadImage'.format(petId=56), + headers=headers, + data=data, + ) + + assert response.status_code == 200 + diff --git a/samples/server/petstore/python-fastapi/tests/test_store_api.py b/samples/server/petstore/python-fastapi/tests/test_store_api.py new file mode 100644 index 000000000000..8cd5effb77ee --- /dev/null +++ b/samples/server/petstore/python-fastapi/tests/test_store_api.py @@ -0,0 +1,76 @@ +# coding: utf-8 + +from fastapi.testclient import TestClient + +import json +import pytest + +from openapi_server.models.order import Order + + +def test_delete_order(client: TestClient): + """Test case for delete_order + + Delete purchase order by ID + """ + headers = { + } + response = client.request( + 'DELETE', + '/store/order/{orderId}'.format(orderId='order_id_example'), + headers=headers, + ) + + assert response.status_code == 200 + + +def test_get_inventory(client: TestClient): + """Test case for get_inventory + + Returns pet inventories by status + """ + headers = { + 'api_key': 'special-key', + } + response = client.request( + 'GET', + '/store/inventory', + headers=headers, + ) + + assert response.status_code == 200 + + +def test_get_order_by_id(client: TestClient): + """Test case for get_order_by_id + + Find purchase order by ID + """ + headers = { + } + response = client.request( + 'GET', + '/store/order/{orderId}'.format(orderId=56), + headers=headers, + ) + + assert response.status_code == 200 + + +def test_place_order(client: TestClient): + """Test case for place_order + + Place an order for a pet + """ + order = {"pet_id":6,"quantity":1,"id":0,"ship_date":"2000-01-23T04:56:07.000+00:00","complete":0,"status":"placed"} + headers = { + } + response = client.request( + 'POST', + '/store/order', + headers=headers, + json=order, + ) + + assert response.status_code == 200 + diff --git a/samples/server/petstore/python-fastapi/tests/test_user_api.py b/samples/server/petstore/python-fastapi/tests/test_user_api.py new file mode 100644 index 000000000000..537696ef9750 --- /dev/null +++ b/samples/server/petstore/python-fastapi/tests/test_user_api.py @@ -0,0 +1,154 @@ +# coding: utf-8 + +from fastapi.testclient import TestClient + +import json +import pytest + +from openapi_server.models.user import User + + +def test_create_user(client: TestClient): + """Test case for create_user + + Create user + """ + user = {"first_name":"firstName","last_name":"lastName","password":"password","user_status":6,"phone":"phone","id":0,"email":"email","username":"username"} + headers = { + 'api_key': 'special-key', + } + response = client.request( + 'POST', + '/user', + headers=headers, + json=user, + ) + + assert response.status_code == 200 + + +def test_create_users_with_array_input(client: TestClient): + """Test case for create_users_with_array_input + + Creates list of users with given input array + """ + user = [{"first_name":"firstName","last_name":"lastName","password":"password","user_status":6,"phone":"phone","id":0,"email":"email","username":"username"}] + headers = { + 'api_key': 'special-key', + } + response = client.request( + 'POST', + '/user/createWithArray', + headers=headers, + json=user, + ) + + assert response.status_code == 200 + + +def test_create_users_with_list_input(client: TestClient): + """Test case for create_users_with_list_input + + Creates list of users with given input array + """ + user = [{"first_name":"firstName","last_name":"lastName","password":"password","user_status":6,"phone":"phone","id":0,"email":"email","username":"username"}] + headers = { + 'api_key': 'special-key', + } + response = client.request( + 'POST', + '/user/createWithList', + headers=headers, + json=user, + ) + + assert response.status_code == 200 + + +def test_delete_user(client: TestClient): + """Test case for delete_user + + Delete user + """ + headers = { + 'api_key': 'special-key', + } + response = client.request( + 'DELETE', + '/user/{username}'.format(username='username_example'), + headers=headers, + ) + + assert response.status_code == 200 + + +def test_get_user_by_name(client: TestClient): + """Test case for get_user_by_name + + Get user by user name + """ + headers = { + } + response = client.request( + 'GET', + '/user/{username}'.format(username='username_example'), + headers=headers, + ) + + assert response.status_code == 200 + + +def test_login_user(client: TestClient): + """Test case for login_user + + Logs user into the system + """ + params = [("username", 'username_example'), + ("password", 'password_example')] + headers = { + } + response = client.request( + 'GET', + '/user/login', + headers=headers, + params=params, + ) + + assert response.status_code == 200 + + +def test_logout_user(client: TestClient): + """Test case for logout_user + + Logs out current logged in user session + """ + headers = { + 'api_key': 'special-key', + } + response = client.request( + 'GET', + '/user/logout', + headers=headers, + ) + + assert response.status_code == 200 + + +def test_update_user(client: TestClient): + """Test case for update_user + + Updated user + """ + user = {"first_name":"firstName","last_name":"lastName","password":"password","user_status":6,"phone":"phone","id":0,"email":"email","username":"username"} + headers = { + 'api_key': 'special-key', + } + response = client.request( + 'PUT', + '/user/{username}'.format(username='username_example'), + headers=headers, + json=user, + ) + + assert response.status_code == 200 + From afd65b3cb0beb6890a876705ecdbeca8d9b0286d Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Sun, 30 May 2021 11:45:38 +0200 Subject: [PATCH 174/186] Update query parameter sample to include pipe delimiter (#9590) --- ...store-with-fake-endpoints-models-for-testing.yaml | 1 + .../src/Org.OpenAPITools/Api/FakeApi.cs | 4 ++-- .../petstore/javascript-es6/src/api/FakeApi.js | 2 +- .../javascript-promise-es6/src/api/FakeApi.js | 2 +- .../php/OpenAPIClient-php/lib/Api/FakeApi.php | 12 ++++-------- .../ruby-faraday/lib/petstore/api/fake_api.rb | 2 +- .../petstore/ruby/lib/petstore/api/fake_api.rb | 2 +- .../builds/default-v3.0/apis/FakeApi.ts | 2 +- .../petstore_client_lib_fake/lib/api/fake_api.dart | 2 +- .../lib/api/fake_api.dart | 2 +- .../python-legacy/petstore_api/api/fake_api.py | 2 +- 11 files changed, 15 insertions(+), 18 deletions(-) diff --git a/modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml b/modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml index 05b9fd5f5424..9dac77c2fa41 100644 --- a/modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml @@ -1049,6 +1049,7 @@ paths: - name: pipe in: query required: true + style: pipeDelimited schema: type: array items: diff --git a/samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs b/samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs index c01c18e2f8cf..f9f9e77ca7e8 100644 --- a/samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs +++ b/samples/client/petstore/csharp/OpenAPIClient/src/Org.OpenAPITools/Api/FakeApi.cs @@ -3585,7 +3585,7 @@ public ApiResponse TestQueryParameterCollectionFormatWithHttpInfo (List< if (localVarHttpHeaderAccept != null) localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - if (pipe != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("multi", "pipe", pipe)); // query parameter + if (pipe != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("pipes", "pipe", pipe)); // query parameter if (ioutil != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("csv", "ioutil", ioutil)); // query parameter if (http != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("ssv", "http", http)); // query parameter if (url != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("csv", "url", url)); // query parameter @@ -3676,7 +3676,7 @@ public async System.Threading.Tasks.Task> TestQueryParameter if (localVarHttpHeaderAccept != null) localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - if (pipe != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("multi", "pipe", pipe)); // query parameter + if (pipe != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("pipes", "pipe", pipe)); // query parameter if (ioutil != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("csv", "ioutil", ioutil)); // query parameter if (http != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("ssv", "http", http)); // query parameter if (url != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("csv", "url", url)); // query parameter diff --git a/samples/client/petstore/javascript-es6/src/api/FakeApi.js b/samples/client/petstore/javascript-es6/src/api/FakeApi.js index df52f7e836c3..3b9e1509ceff 100644 --- a/samples/client/petstore/javascript-es6/src/api/FakeApi.js +++ b/samples/client/petstore/javascript-es6/src/api/FakeApi.js @@ -814,7 +814,7 @@ export default class FakeApi { let pathParams = { }; let queryParams = { - 'pipe': this.apiClient.buildCollectionParam(pipe, 'multi'), + 'pipe': this.apiClient.buildCollectionParam(pipe, 'pipes'), 'ioutil': this.apiClient.buildCollectionParam(ioutil, 'csv'), 'http': this.apiClient.buildCollectionParam(http, 'ssv'), 'url': this.apiClient.buildCollectionParam(url, 'csv'), diff --git a/samples/client/petstore/javascript-promise-es6/src/api/FakeApi.js b/samples/client/petstore/javascript-promise-es6/src/api/FakeApi.js index dc949777c5b9..e635c42692ce 100644 --- a/samples/client/petstore/javascript-promise-es6/src/api/FakeApi.js +++ b/samples/client/petstore/javascript-promise-es6/src/api/FakeApi.js @@ -919,7 +919,7 @@ export default class FakeApi { let pathParams = { }; let queryParams = { - 'pipe': this.apiClient.buildCollectionParam(pipe, 'multi'), + 'pipe': this.apiClient.buildCollectionParam(pipe, 'pipes'), 'ioutil': this.apiClient.buildCollectionParam(ioutil, 'csv'), 'http': this.apiClient.buildCollectionParam(http, 'ssv'), 'url': this.apiClient.buildCollectionParam(url, 'csv'), diff --git a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php index 93aeaacf9c93..0fe7bd9aa07f 100644 --- a/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php +++ b/samples/client/petstore/php/OpenAPIClient-php/lib/Api/FakeApi.php @@ -4426,15 +4426,11 @@ public function testQueryParameterCollectionFormatRequest($pipe, $ioutil, $http, $multipart = false; // query params + if (is_array($pipe)) { + $pipe = ObjectSerializer::serializeCollection($pipe, 'pipeDelimited', true); + } if ($pipe !== null) { - if('form' === 'form' && is_array($pipe)) { - foreach($pipe as $key => $value) { - $queryParams[$key] = $value; - } - } - else { - $queryParams['pipe'] = $pipe; - } + $queryParams['pipe'] = $pipe; } // query params if (is_array($ioutil)) { diff --git a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb index eed4d7da4294..50a336275d71 100644 --- a/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb +++ b/samples/client/petstore/ruby-faraday/lib/petstore/api/fake_api.rb @@ -1236,7 +1236,7 @@ def test_query_parameter_collection_format_with_http_info(pipe, ioutil, http, ur # query parameters query_params = opts[:query_params] || {} - query_params[:'pipe'] = @api_client.build_collection_param(pipe, :multi) + query_params[:'pipe'] = @api_client.build_collection_param(pipe, :pipes) query_params[:'ioutil'] = @api_client.build_collection_param(ioutil, :csv) query_params[:'http'] = @api_client.build_collection_param(http, :ssv) query_params[:'url'] = @api_client.build_collection_param(url, :csv) diff --git a/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb b/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb index eed4d7da4294..50a336275d71 100644 --- a/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb +++ b/samples/client/petstore/ruby/lib/petstore/api/fake_api.rb @@ -1236,7 +1236,7 @@ def test_query_parameter_collection_format_with_http_info(pipe, ioutil, http, ur # query parameters query_params = opts[:query_params] || {} - query_params[:'pipe'] = @api_client.build_collection_param(pipe, :multi) + query_params[:'pipe'] = @api_client.build_collection_param(pipe, :pipes) query_params[:'ioutil'] = @api_client.build_collection_param(ioutil, :csv) query_params[:'http'] = @api_client.build_collection_param(http, :ssv) query_params[:'url'] = @api_client.build_collection_param(url, :csv) diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/apis/FakeApi.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/apis/FakeApi.ts index a1f992e866c7..5985139ab238 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/apis/FakeApi.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/apis/FakeApi.ts @@ -871,7 +871,7 @@ export class FakeApi extends runtime.BaseAPI { const queryParameters: any = {}; if (requestParameters.pipe) { - queryParameters['pipe'] = requestParameters.pipe; + queryParameters['pipe'] = requestParameters.pipe.join(runtime.COLLECTION_FORMATS["pipes"]); } if (requestParameters.ioutil) { diff --git a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart index 03731c1bf00b..07742e02082f 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_client_lib_fake/lib/api/fake_api.dart @@ -1202,7 +1202,7 @@ class FakeApi { final headerParams = {}; final formParams = {}; - queryParams.addAll(_convertParametersForCollectionFormat('multi', 'pipe', pipe)); + queryParams.addAll(_convertParametersForCollectionFormat('pipes', 'pipe', pipe)); queryParams.addAll(_convertParametersForCollectionFormat('csv', 'ioutil', ioutil)); queryParams.addAll(_convertParametersForCollectionFormat('ssv', 'http', http)); queryParams.addAll(_convertParametersForCollectionFormat('csv', 'url', url)); diff --git a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart index 9790ef7222c4..30111f17ac25 100644 --- a/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart +++ b/samples/openapi3/client/petstore/dart2/petstore_json_serializable_client_lib_fake/lib/api/fake_api.dart @@ -1209,7 +1209,7 @@ class FakeApi { final headerParams = {}; final formParams = {}; - queryParams.addAll(_convertParametersForCollectionFormat('multi', 'pipe', pipe)); + queryParams.addAll(_convertParametersForCollectionFormat('pipes', 'pipe', pipe)); queryParams.addAll(_convertParametersForCollectionFormat('csv', 'ioutil', ioutil)); queryParams.addAll(_convertParametersForCollectionFormat('ssv', 'http', http)); queryParams.addAll(_convertParametersForCollectionFormat('csv', 'url', url)); diff --git a/samples/openapi3/client/petstore/python-legacy/petstore_api/api/fake_api.py b/samples/openapi3/client/petstore/python-legacy/petstore_api/api/fake_api.py index d81dc4866d9c..f2bf00824f90 100755 --- a/samples/openapi3/client/petstore/python-legacy/petstore_api/api/fake_api.py +++ b/samples/openapi3/client/petstore/python-legacy/petstore_api/api/fake_api.py @@ -2551,7 +2551,7 @@ def test_query_parameter_collection_format_with_http_info(self, pipe, ioutil, ht query_params = [] if 'pipe' in local_var_params and local_var_params['pipe'] is not None: # noqa: E501 query_params.append(('pipe', local_var_params['pipe'])) # noqa: E501 - collection_formats['pipe'] = 'multi' # noqa: E501 + collection_formats['pipe'] = 'pipes' # noqa: E501 if 'ioutil' in local_var_params and local_var_params['ioutil'] is not None: # noqa: E501 query_params.append(('ioutil', local_var_params['ioutil'])) # noqa: E501 collection_formats['ioutil'] = 'csv' # noqa: E501 From 88f279ead3d3c9ae5e0edb2ccff67dda62831897 Mon Sep 17 00:00:00 2001 From: Peter Leibiger Date: Mon, 31 May 2021 03:56:05 +0200 Subject: [PATCH 175/186] [ci] Build kotlin samples via github (#9609) --- .github/workflows/samples-kotlin.yaml | 64 +++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 .github/workflows/samples-kotlin.yaml diff --git a/.github/workflows/samples-kotlin.yaml b/.github/workflows/samples-kotlin.yaml new file mode 100644 index 000000000000..faa5062c5530 --- /dev/null +++ b/.github/workflows/samples-kotlin.yaml @@ -0,0 +1,64 @@ +name: Samples Kotlin + +on: + push: + branches: + - master + - '[5-9]+.[0-9]+.x' + pull_request: + branches: + - master + - '[5-9]+.[0-9]+.x' + +env: + GRADLE_VERSION: 6.9 + +jobs: + build: + name: Build Kotlin + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + sample: + - samples/client/petstore/kotlin + - samples/client/petstore/kotlin-gson + - samples/client/petstore/kotlin-jackson + # needs Android configured + #- samples/client/petstore/kotlin-json-request-string + - samples/client/petstore/kotlin-jvm-okhttp4-coroutines + - samples/client/petstore/kotlin-moshi-codegen + # need some special setup + #- samples/client/petstore/kotlin-multiplatform + - samples/client/petstore/kotlin-nonpublic + - samples/client/petstore/kotlin-nullable + - samples/client/petstore/kotlin-okhttp3 + - samples/client/petstore/kotlin-retrofit2 + - samples/client/petstore/kotlin-retrofit2-kotlinx_serialization + - samples/client/petstore/kotlin-retrofit2-rx3 + - samples/client/petstore/kotlin-string + - samples/client/petstore/kotlin-threetenbp + - samples/client/petstore/kotlin-uppercase-enum + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v2 + with: + distribution: 'adopt' + java-version: 8 + - name: Cache maven dependencies + uses: actions/cache@v2 + env: + cache-name: maven-repository + with: + path: | + ~/.gradle + key: ${{ runner.os }}-${{ github.job }}-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} + - name: Install Gradle wrapper + uses: eskatos/gradle-command-action@v1 + with: + gradle-version: ${{ env.GRADLE_VERSION }} + build-root-directory: ${{ matrix.sample }} + arguments: wrapper + - name: Build + working-directory: ${{ matrix.sample }} + run: ./gradlew build -x test From c4df343052deb51d8856fde636be0b9e49e2fade Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Sun, 30 May 2021 22:37:14 -0400 Subject: [PATCH 176/186] [Swift5] Add useClasses cli option (#9608) * [swift5] Add useClasses cliOption * Update swift docs --- docs/generators/swift5.md | 1 + .../codegen/languages/Swift5ClientCodegen.java | 13 +++++++++++++ .../codegen/options/Swift5OptionsProvider.java | 1 + 3 files changed, 15 insertions(+) diff --git a/docs/generators/swift5.md b/docs/generators/swift5.md index bace7f1f0492..51dc7529358f 100644 --- a/docs/generators/swift5.md +++ b/docs/generators/swift5.md @@ -39,6 +39,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |swiftPackagePath|Set a custom source path instead of OpenAPIClient/Classes/OpenAPIs.| |null| |swiftUseApiNamespace|Flag to make all the API classes inner-class of {{projectName}}API| |null| |useBacktickEscapes|Escape reserved words using backticks (default: false)| |false| +|useClasses|Use final classes for models instead of structs (default: false)| |false| |useSPMFileStructure|Use SPM file structure and set the source path to Sources/{{projectName}} (default: false).| |null| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index 273762e830dd..d44d34ca0396 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -63,6 +63,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig public static final String LENIENT_TYPE_CAST = "lenientTypeCast"; public static final String USE_SPM_FILE_STRUCTURE = "useSPMFileStructure"; public static final String SWIFT_PACKAGE_PATH = "swiftPackagePath"; + public static final String USE_CLASSES = "useClasses"; public static final String USE_BACKTICK_ESCAPES = "useBacktickEscapes"; public static final String GENERATE_MODEL_ADDITIONAL_PROPERTIES = "generateModelAdditionalProperties"; public static final String HASHABLE_MODELS = "hashableModels"; @@ -82,6 +83,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig protected boolean swiftUseApiNamespace = false; protected boolean useSPMFileStructure = false; protected String swiftPackagePath = "Classes" + File.separator + "OpenAPIs"; + protected boolean useClasses = false; protected boolean useBacktickEscapes = false; protected boolean generateModelAdditionalProperties = true; protected boolean hashableModels = true; @@ -282,6 +284,8 @@ public Swift5ClientCodegen() { + " and set the source path to Sources" + File.separator + "{{projectName}} (default: false).")); cliOptions.add(new CliOption(SWIFT_PACKAGE_PATH, "Set a custom source path instead of " + projectName + File.separator + "Classes" + File.separator + "OpenAPIs" + ".")); + cliOptions.add(new CliOption(USE_CLASSES, "Use final classes for models instead of structs (default: false)") + .defaultValue(Boolean.FALSE.toString())); cliOptions.add(new CliOption(HASHABLE_MODELS, "Make hashable models (default: true)") @@ -484,6 +488,11 @@ public void processOpts() { typeMapping.put("binary", "Data"); } + if (additionalProperties.containsKey(USE_CLASSES)) { + setUseClasses(convertPropertyToBooleanAndWriteBack(USE_CLASSES)); + } + additionalProperties.put(USE_CLASSES, useClasses); + setLenientTypeCast(convertPropertyToBooleanAndWriteBack(LENIENT_TYPE_CAST)); // make api and model doc path available in mustache template @@ -904,6 +913,10 @@ public void setSwiftPackagePath(String swiftPackagePath) { this.swiftPackagePath = swiftPackagePath; } + public void setUseClasses(boolean useClasses) { + this.useClasses = useClasses; + } + public void setUseBacktickEscapes(boolean useBacktickEscapes) { this.useBacktickEscapes = useBacktickEscapes; } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java index 6e5f48ca3775..fa562df6d7f4 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/Swift5OptionsProvider.java @@ -96,6 +96,7 @@ public Map createOptions() { .put(Swift5ClientCodegen.GENERATE_MODEL_ADDITIONAL_PROPERTIES, GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE) .put(Swift5ClientCodegen.HASHABLE_MODELS, HASHABLE_MODELS_VALUE) .put(Swift5ClientCodegen.MAP_FILE_BINARY_TO_DATA, "false") + .put(Swift5ClientCodegen.USE_CLASSES, "false") .build(); } From 32a045060e3b243c06c9cbb0951321b58100c52f Mon Sep 17 00:00:00 2001 From: William Cheng Date: Mon, 31 May 2021 17:00:23 +0800 Subject: [PATCH 177/186] [ python-fastapi] minor improvements (#9622) * minor python-fastapi improvements * update doc * fix refreshUrl --- README.md | 3 +- docs/generators.md | 1 + .../languages/PythonFastAPIServerCodegen.java | 32 ++++++++++++++++--- .../python-fastapi/security_api.mustache | 2 +- .../petstore/python-fastapi/openapi.yaml | 3 -- 5 files changed, 32 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ff47c88ff231..f02a8ada352e 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ OpenAPI Generator allows generation of API client libraries (SDK generation), se | | Languages/Frameworks | | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **API clients** | **ActionScript**, **Ada**, **Apex**, **Bash**, **C**, **C#** (.net 2.0, 3.5 or later, .NET Standard 1.3 - 2.0, .NET Core 2.0, .NET 5.0. Libraries: RestSharp, HttpClient), **C++** (Arduino, cpp-restsdk, Qt5, Tizen, Unreal Engine 4), **Clojure**, **Crystal**, **Dart**, **Elixir**, **Elm**, **Eiffel**, **Erlang**, **Go**, **Groovy**, **Haskell** (http-client, Servant), **Java** (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx, Google API Client Library for Java, Rest-assured, Spring 5 Web Client, MicroProfile Rest Client), **k6**, **Kotlin**, **Lua**, **Nim**, **Node.js/JavaScript** (ES5, ES6, AngularJS with Google Closure Compiler annotations, Flow types, Apollo GraphQL DataStore), **Objective-C**, **OCaml**, **Perl**, **PHP**, **PowerShell**, **Python**, **R**, **Ruby**, **Rust** (hyper, reqwest, rust-server), **Scala** (akka, http4s, scalaz, sttp, swagger-async-httpclient), **Swift** (2.x, 3.x, 4.x, 5.x), **Typescript** (AngularJS, Angular (2.x - 11.x), Aurelia, Axios, Fetch, Inversify, jQuery, Nestjs, Node, redux-query, Rxjs) | -| **Server stubs** | **Ada**, **C#** (ASP.NET Core, NancyFx), **C++** (Pistache, Restbed, Qt5 QHTTPEngine), **Erlang**, **F#** (Giraffe), **Go** (net/http, Gin, Echo), **Haskell** (Servant), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, Jersey, RestEasy, Play Framework, [PKMST](https://github.com/ProKarma-Inc/pkmst-getting-started-examples), [Vert.x](https://vertx.io/)), **Kotlin** (Spring Boot, Ktor, Vertx), **PHP** (Laravel, Lumen, Slim, Silex, [Symfony](https://symfony.com/), [Zend Expressive](https://github.com/zendframework/zend-expressive)), **Python** (Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Rust** (rust-server), **Scala** (Akka, [Finch](https://github.com/finagle/finch), [Lagom](https://github.com/lagom/lagom), [Play](https://www.playframework.com/), Scalatra) | +| **Server stubs** | **Ada**, **C#** (ASP.NET Core, NancyFx), **C++** (Pistache, Restbed, Qt5 QHTTPEngine), **Erlang**, **F#** (Giraffe), **Go** (net/http, Gin, Echo), **Haskell** (Servant), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, Jersey, RestEasy, Play Framework, [PKMST](https://github.com/ProKarma-Inc/pkmst-getting-started-examples), [Vert.x](https://vertx.io/)), **Kotlin** (Spring Boot, Ktor, Vertx), **PHP** (Laravel, Lumen, Slim, Silex, [Symfony](https://symfony.com/), [Zend Expressive](https://github.com/zendframework/zend-expressive)), **Python** (FastAPI, Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Rust** (rust-server), **Scala** (Akka, [Finch](https://github.com/finagle/finch), [Lagom](https://github.com/lagom/lagom), [Play](https://www.playframework.com/), Scalatra) | | **API documentation generators** | **HTML**, **Confluence Wiki**, **Asciidoc**, **Markdown**, **PlantUML** | | **Configuration files** | [**Apache2**](https://httpd.apache.org/) | | **Others** | **GraphQL**, **JMeter**, **Ktorm**, **MySQL Schema**, **Protocol Buffer**, **WSDL** | @@ -951,6 +951,7 @@ Here is a list of template creators: * PHP Slim: @jfastnacht * PHP Symfony: @ksm2 * PHP Zend Expressive (with Path Handler): @Articus + * Python FastAPI: @krjakbrjak * Python AIOHTTP: @Jyhess * Ruby on Rails 5: @zlx * Rust (rust-server): @metaswitch diff --git a/docs/generators.md b/docs/generators.md index f1cec8c66870..2531acc9e670 100644 --- a/docs/generators.md +++ b/docs/generators.md @@ -120,6 +120,7 @@ The following generators are available: * [php-symfony](generators/php-symfony.md) * [python-aiohttp](generators/python-aiohttp.md) * [python-blueplanet](generators/python-blueplanet.md) +* [python-fastapi (beta)](generators/python-fastapi.md) * [python-flask](generators/python-flask.md) * [ruby-on-rails](generators/ruby-on-rails.md) * [ruby-sinatra](generators/ruby-sinatra.md) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java index f4e69664724c..f973a6f26098 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java @@ -1,3 +1,19 @@ +/* + * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.openapitools.codegen.languages; import com.fasterxml.jackson.core.JsonGenerator; @@ -10,6 +26,9 @@ import io.swagger.v3.oas.models.media.Schema; import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.*; +import org.openapitools.codegen.meta.GeneratorMetadata; +import org.openapitools.codegen.meta.Stability; +import org.openapitools.codegen.meta.features.*; import org.openapitools.codegen.utils.ModelUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,12 +72,16 @@ public CodegenType getTag() { @Override public String getHelp() { - return "Generates a python server (FastAPI)."; + return "Generates a Python FastAPI server (beta)."; } public PythonFastAPIServerCodegen() { super(); + generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata) + .stability(Stability.BETA) + .build(); + SimpleModule simpleModule = new SimpleModule(); simpleModule.addKeySerializer(String.class, new SnakeCaseKeySerializer()); simpleModule.addSerializer(Boolean.class, new PythonBooleanSerializer()); @@ -115,7 +138,7 @@ public void processOpts() { // Add __init__.py to all sub-folders under namespace pkg StringBuilder namespacePackagePath = new StringBuilder(SRC_DIR + File.separator + StringUtils.substringBefore(packageName, ".")); - for (String tmp: StringUtils.split(StringUtils.substringAfter(packageName, "."), '.')) { + for (String tmp : StringUtils.split(StringUtils.substringAfter(packageName, "."), '.')) { namespacePackagePath.append(File.separator).append(tmp); supportingFiles.add(new SupportingFile("__init__.mustache", namespacePackagePath.toString(), "__init__.py")); } @@ -181,7 +204,7 @@ public Map postProcessOperationsWithModels(Map o } List securityMethods = operation.authMethods; if (securityMethods != null) { - for (final CodegenSecurity securityMethod: securityMethods) { + for (final CodegenSecurity securityMethod : securityMethods) { securityImports.add(securityMethod.name); } } @@ -193,7 +216,8 @@ public Map postProcessOperationsWithModels(Map o // If fails, use the original string. try { Map result = MAPPER.readValue(example.get("example"), - new TypeReference>(){}); + new TypeReference>() { + }); operation.bodyParam.example = MAPPER.writeValueAsString(result); } catch (IOException e) { operation.bodyParam.example = example.get("example"); diff --git a/modules/openapi-generator/src/main/resources/python-fastapi/security_api.mustache b/modules/openapi-generator/src/main/resources/python-fastapi/security_api.mustache index f925edad438f..77bceb11cfa5 100644 --- a/modules/openapi-generator/src/main/resources/python-fastapi/security_api.mustache +++ b/modules/openapi-generator/src/main/resources/python-fastapi/security_api.mustache @@ -34,7 +34,7 @@ oauth2_password = OAuth2PasswordBearer( oauth2_code = OAuth2AuthorizationCodeBearer( authorizationUrl="{{authorizationUrl}}", tokenUrl="{{tokenUrl}}", - refreshUrlUrl="{{refreshUrl}}", + refreshUrl="{{refreshUrl}}", scopes={ {{#scopes}} "{{scope}}": "{{description}}", diff --git a/samples/server/petstore/python-fastapi/openapi.yaml b/samples/server/petstore/python-fastapi/openapi.yaml index e8e287f99914..477694ade007 100644 --- a/samples/server/petstore/python-fastapi/openapi.yaml +++ b/samples/server/petstore/python-fastapi/openapi.yaml @@ -834,10 +834,7 @@ components: write:pets: modify pets in your account read:pets: read your pets type: oauth2 - x-tokenInfoFunc: .security_controller_.info_from_petstore_auth - x-scopeValidateFunc: .security_controller_.validate_scope_petstore_auth api_key: in: header name: api_key type: apiKey - x-apikeyInfoFunc: .security_controller_.info_from_api_key From 173a349e04880b4fbf27224a9a8e6632f528d681 Mon Sep 17 00:00:00 2001 From: Sascha Peilicke Date: Mon, 31 May 2021 15:48:39 +0200 Subject: [PATCH 178/186] Kotlin: Fix kotlinx_serialization code generation (#9576) And update to Kotlin 1.5.0 and kotlinx.serialization 1.2.1. Fix nested enum annotation '@Serializable' instead of '@KSerializable' when 'kotlinx_serialization' is used. Fix missing JsonMediaType in ApiClient.kt (#9242). Add 'kotlinx_serialization' serialization library to documentation. Use explicity type in RequestConfig to keep type information for JSON serialization. Resolves #9242 --- .../kotlin-client/build.gradle.mustache | 4 +- .../kotlin-client/data_class.mustache | 2 +- .../kotlin-client/enum_class.mustache | 2 +- .../infrastructure/RequestConfig.kt.mustache | 4 +- .../libraries/jvm-okhttp/api.mustache | 12 +-- .../infrastructure/ApiClient.kt.mustache | 100 ++++++++---------- .../infrastructure/ApiClient.kt.mustache | 2 +- .../client/petstore/kotlin-gson/build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 86 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- .../petstore/kotlin-jackson/build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 86 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- .../kotlin-json-request-string/build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 86 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- .../build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 86 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- .../kotlin-moshi-codegen/build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 86 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- .../client/infrastructure/ApiClient.kt | 2 +- .../client/infrastructure/RequestConfig.kt | 4 +- .../petstore/kotlin-nonpublic/build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 86 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- .../petstore/kotlin-nullable/build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 86 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- .../petstore/kotlin-okhttp3/build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 86 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- .../build.gradle | 4 +- .../kotlin-retrofit2-rx3/build.gradle | 2 +- .../petstore/kotlin-retrofit2/build.gradle | 2 +- .../petstore/kotlin-string/build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 86 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- .../petstore/kotlin-threetenbp/build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 84 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- .../kotlin-uppercase-enum/build.gradle | 2 +- .../org/openapitools/client/apis/EnumApi.kt | 12 +-- .../client/infrastructure/ApiClient.kt | 84 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- samples/client/petstore/kotlin/build.gradle | 2 +- .../org/openapitools/client/apis/PetApi.kt | 96 +++++++---------- .../org/openapitools/client/apis/StoreApi.kt | 48 ++++----- .../org/openapitools/client/apis/UserApi.kt | 96 +++++++---------- .../client/infrastructure/ApiClient.kt | 86 +++++++-------- .../client/infrastructure/RequestConfig.kt | 4 +- 82 files changed, 1647 insertions(+), 2245 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache index 1f58112db538..18f64464c8e4 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' {{#jvm-retrofit2}} ext.retrofitVersion = '2.7.2' {{/jvm-retrofit2}} @@ -72,7 +72,7 @@ dependencies { compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.1" {{/jackson}} {{#kotlinx_serialization}} - compile "org.jetbrains.kotlinx:kotlinx-serialization-json:1.1.0" + compile "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.1" {{/kotlinx_serialization}} {{#jvm-okhttp3}} compile "com.squareup.okhttp3:okhttp:3.12.13" diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache index 216df66eeac0..f840db6e394e 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/data_class.mustache @@ -70,7 +70,7 @@ import java.io.Serializable * Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} */ {{#kotlinx_serialization}} - @KSerializable + {{#serializableModel}}@KSerializable{{/serializableModel}}{{^serializableModel}}@Serializable{{/serializableModel}} {{/kotlinx_serialization}} {{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{{nameInCamelCase}}}(val value: {{^isContainer}}{{dataType}}{{/isContainer}}{{#isContainer}}kotlin.String{{/isContainer}}) { {{#allowableValues}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache index 88d6c278ea2b..2071a6b537a2 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/enum_class.mustache @@ -22,7 +22,7 @@ import kotlinx.serialization.internal.CommonEnumSerializer * {{{description}}} * Values: {{#allowableValues}}{{#enumVars}}{{&name}}{{^-last}},{{/-last}}{{/enumVars}}{{/allowableValues}} */ -{{#multiplatform}}@Serializable(with = {{classname}}.Serializer::class){{/multiplatform}}{{#kotlinx_serialization}}@Serializable(with = {{classname}}.Serializer::class){{/kotlinx_serialization}} +{{#multiplatform}}@Serializable(with = {{classname}}.Serializer::class){{/multiplatform}}{{#kotlinx_serialization}}@Serializable{{/kotlinx_serialization}} {{#nonPublicApi}}internal {{/nonPublicApi}}enum class {{classname}}(val value: {{{dataType}}}) { {{#allowableValues}}{{#enumVars}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/RequestConfig.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/RequestConfig.kt.mustache index 61677c22afff..ef1b0517e78d 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/RequestConfig.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/infrastructure/RequestConfig.kt.mustache @@ -8,10 +8,10 @@ package {{packageName}}.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -{{#nonPublicApi}}internal {{/nonPublicApi}}data class RequestConfig( +{{#nonPublicApi}}internal {{/nonPublicApi}}data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/api.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/api.mustache index 7745b52249ab..c31f0c2211b8 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/api.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/api.mustache @@ -43,7 +43,7 @@ import {{packageName}}.infrastructure.toMultiValue {{^doNotUseRxAndCoroutines}}{{#useCoroutines}}suspend {{/useCoroutines}}{{/doNotUseRxAndCoroutines}}fun {{operationId}}({{#allParams}}{{{paramName}}}: {{{dataType}}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : {{#returnType}}{{{returnType}}}{{#nullableReturnType}}?{{/nullableReturnType}}{{/returnType}}{{^returnType}}Unit{{/returnType}} { val localVariableConfig = {{operationId}}RequestConfig({{#allParams}}{{{paramName}}} = {{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}) - val localVarResponse = request<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Any?{{/returnType}}>( + val localVarResponse = request<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map{{/hasFormParams}}{{/hasBodyParam}}, {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Unit{{/returnType}}>( localVariableConfig ) @@ -71,8 +71,8 @@ import {{packageName}}.infrastructure.toMultiValue {{#isDeprecated}} @Deprecated(message = "This operation is deprecated.") {{/isDeprecated}} - fun {{operationId}}RequestConfig({{#allParams}}{{{paramName}}}: {{{dataType}}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : RequestConfig { - val localVariableBody: kotlin.Any? = {{#hasBodyParam}}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}null{{/hasFormParams}}{{#hasFormParams}}mapOf({{#formParams}}"{{{baseName}}}" to {{{paramName}}}{{^-last}}, {{/-last}}{{/formParams}}){{/hasFormParams}}{{/hasBodyParam}} + fun {{operationId}}RequestConfig({{#allParams}}{{{paramName}}}: {{{dataType}}}{{^required}}?{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) : RequestConfig<{{#hasBodyParam}}{{#bodyParams}}{{{dataType}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}Unit{{/hasFormParams}}{{#hasFormParams}}Map{{/hasFormParams}}{{/hasBodyParam}}> { + val localVariableBody = {{#hasBodyParam}}{{#bodyParams}}{{{paramName}}}{{/bodyParams}}{{/hasBodyParam}}{{^hasBodyParam}}{{^hasFormParams}}null{{/hasFormParams}}{{#hasFormParams}}mapOf({{#formParams}}"{{{baseName}}}" to {{{paramName}}}{{^-last}}, {{/-last}}{{/formParams}}){{/hasFormParams}}{{/hasBodyParam}} val localVariableQuery: MultiValueMap = {{^hasQueryParams}}mutableMapOf() {{/hasQueryParams}}{{#hasQueryParams}}mutableMapOf>() .apply { @@ -99,16 +99,14 @@ import {{packageName}}.infrastructure.toMultiValue {{#headerParams}} {{{paramName}}}{{^required}}?{{/required}}.apply { localVariableHeaders["{{baseName}}"] = {{#isContainer}}this.joinToString(separator = collectionDelimiter("{{collectionFormat}}")){{/isContainer}}{{^isContainer}}this.toString(){{/isContainer}} } {{/headerParams}} - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.{{httpMethod}}, path = "{{path}}"{{#pathParams}}.replace("{"+"{{baseName}}"+"}", "${{{paramName}}}"){{/pathParams}}, query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } {{/operation}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache index b470beae2e5d..2c0c8d8930a3 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache @@ -27,11 +27,10 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date {{^threetenbp}} import java.time.LocalDate import java.time.LocalDateTime @@ -39,6 +38,12 @@ import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime {{/threetenbp}} +import java.util.Date +import java.util.Locale +{{#kotlinx_serialization}} +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.encodeToString +{{/kotlinx_serialization}} {{#threetenbp}} import org.threeten.bp.LocalDate import org.threeten.bp.LocalDateTime @@ -86,14 +91,10 @@ import org.threeten.bp.OffsetTime protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { {{#jvm-okhttp3}} - content is File -> RequestBody.create( - MediaType.parse(mediaType), content - ) + content is File -> RequestBody.create(MediaType.parse(mediaType), content) {{/jvm-okhttp3}} {{#jvm-okhttp4}} - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) {{/jvm-okhttp4}} mediaType == FormDataMediaType -> { MultipartBody.Builder() @@ -154,12 +155,12 @@ import org.threeten.bp.OffsetTime MediaType.parse(mediaType), Serializer.jacksonObjectMapper.writeValueAsString(content) {{/jackson}} {{#kotlinx_serialization}} - MediaType.parse(mediaType), Serializer.jvmJson.decodeFromString(content) + MediaType.parse(mediaType), Serializer.jvmJson.encodeToString(content) {{/kotlinx_serialization}} ) {{/jvm-okhttp3}} {{#jvm-okhttp4}} - mediaType == JsonMediaType -> {{#moshi}}Serializer.moshi.adapter(T::class.java).toJson(content){{/moshi}}{{#gson}}Serializer.gson.toJson(content, T::class.java){{/gson}}{{#jackson}}Serializer.jacksonObjectMapper.writeValueAsString(content){{/jackson}}{{#kotlinx_serialization}}Serializer.jvmJson.decodeFromString(content){{/kotlinx_serialization}}.toRequestBody( + mediaType == JsonMediaType -> {{#moshi}}Serializer.moshi.adapter(T::class.java).toJson(content){{/moshi}}{{#gson}}Serializer.gson.toJson(content, T::class.java){{/gson}}{{#jackson}}Serializer.jacksonObjectMapper.writeValueAsString(content){{/jackson}}{{#kotlinx_serialization}}Serializer.jvmJson.encodeToString(content){{/kotlinx_serialization}}.toRequestBody( mediaType.toMediaTypeOrNull() ) {{/jvm-okhttp4}} @@ -196,13 +197,13 @@ import org.threeten.bp.OffsetTime return f as T } return when(mediaType) { - JsonMediaType -> {{#moshi}}Serializer.moshi.adapter(T::class.java).fromJson(bodyContent){{/moshi}}{{#gson}}Serializer.gson.fromJson(bodyContent, T::class.java){{/gson}}{{#jackson}}Serializer.jacksonObjectMapper.readValue(bodyContent, T::class.java){{/jackson}} + JsonMediaType -> {{#moshi}}Serializer.moshi.adapter(T::class.java).fromJson(bodyContent){{/moshi}}{{#gson}}Serializer.gson.fromJson(bodyContent, T::class.java){{/gson}}{{#jackson}}Serializer.jacksonObjectMapper.readValue(bodyContent, T::class.java){{/jackson}}{{#kotlinx_serialization}}Serializer.jvmJson.decodeFromString(bodyContent){{/kotlinx_serialization}} else -> throw UnsupportedOperationException("responseBody currently only supports JSON body.") } } {{#hasAuthMethods}} - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { {{#authMethods}} {{#isApiKey}} {{#isKeyInHeader}} @@ -259,7 +260,7 @@ import org.threeten.bp.OffsetTime } {{/hasAuthMethods}} - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { {{#jvm-okhttp3}} val httpUrl = HttpUrl.parse(baseUrl) ?: throw IllegalStateException("baseUrl is invalid.") {{/jvm-okhttp3}} @@ -300,7 +301,7 @@ import org.threeten.bp.OffsetTime } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -315,57 +316,46 @@ import org.threeten.bp.OffsetTime }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, - response.headers{{#jvm-okhttp3}}(){{/jvm-okhttp3}}.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, + response.headers{{#jvm-okhttp3}}(){{/jvm-okhttp3}}.toMultimap() ) - response.isInformational -> return Informational( - response.message{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, - response.code{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, - response.headers{{#jvm-okhttp3}}(){{/jvm-okhttp3}}.toMultimap() + response.isInformational -> Informational( + response.message{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, + response.code{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, + response.headers{{#jvm-okhttp3}}(){{/jvm-okhttp3}}.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, accept), - response.code{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, - response.headers{{#jvm-okhttp3}}(){{/jvm-okhttp3}}.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, accept), + response.code{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, + response.headers{{#jvm-okhttp3}}(){{/jvm-okhttp3}}.toMultimap() ) - response.isClientError -> return ClientError( - response.message{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, - response.body{{#jvm-okhttp3}}(){{/jvm-okhttp3}}?.string(), - response.code{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, - response.headers{{#jvm-okhttp3}}(){{/jvm-okhttp3}}.toMultimap() + response.isClientError -> ClientError( + response.message{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, + response.body{{#jvm-okhttp3}}(){{/jvm-okhttp3}}?.string(), + response.code{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, + response.headers{{#jvm-okhttp3}}(){{/jvm-okhttp3}}.toMultimap() ) - else -> return ServerError( - response.message{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, - response.body{{#jvm-okhttp3}}(){{/jvm-okhttp3}}?.string(), - response.code{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, - response.headers{{#jvm-okhttp3}}(){{/jvm-okhttp3}}.toMultimap() + else -> ServerError( + response.message{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, + response.body{{#jvm-okhttp3}}(){{/jvm-okhttp3}}?.string(), + response.code{{#jvm-okhttp3}}(){{/jvm-okhttp3}}, + response.headers{{#jvm-okhttp3}}(){{/jvm-okhttp3}}.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache index 91185a97a565..b1cf9583bdbf 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/multiplatform/infrastructure/ApiClient.kt.mustache @@ -155,7 +155,7 @@ import {{packageName}}.auth.* else request(requestConfig, authNames = authNames) } - protected suspend fun request(requestConfig: RequestConfig, body: OutgoingContent = EmptyContent, authNames: kotlin.collections.List): HttpResponse { + protected suspend inline fun request(requestConfig: RequestConfig, body: OutgoingContent = EmptyContent, authNames: kotlin.collections.List): HttpResponse { requestConfig.updateForAuth(authNames) val headers = requestConfig.headers diff --git a/samples/client/petstore/kotlin-gson/build.gradle b/samples/client/petstore/kotlin-gson/build.gradle index ae150592cbb1..a99b1cf2af2f 100644 --- a/samples/client/petstore/kotlin-gson/build.gradle +++ b/samples/client/petstore/kotlin-gson/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index c8b93b33bf6f..28273cdf35d4 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?) : Unit { val localVariableConfig = deletePetRequestConfig(petId = petId, apiKey = apiKey) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param apiKey (optional) * @return RequestConfig */ - fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -159,7 +155,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByStatusRequestConfig(status = status) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -184,23 +180,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Status values that need to be considered for filter * @return RequestConfig */ - fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("status", toMultiValue(status.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByStatus", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -218,7 +212,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,23 +238,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -277,7 +269,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getPetById(petId: kotlin.Long) : Pet { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -302,20 +294,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -331,7 +321,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -356,20 +346,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -387,7 +375,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -414,20 +402,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -446,7 +432,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -473,20 +459,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 215ed63420c9..56a23202f82c 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getInventory() : kotlin.collections.Map { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getOrderById(orderId: kotlin.Long) : Order { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun placeOrder(body: Order) : Order { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 53748b934636..9f93e853a122 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getUserByName(username: kotlin.String) : User { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index a1c98200ac47..e8c4090e0679 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -12,16 +12,17 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale open class ApiClient(val baseUrl: String) { companion object { @@ -61,9 +62,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -131,7 +130,7 @@ open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -148,7 +147,7 @@ open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -182,7 +181,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -197,57 +196,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-jackson/build.gradle b/samples/client/petstore/kotlin-jackson/build.gradle index 49a346f1cf9c..0429e1f7c305 100644 --- a/samples/client/petstore/kotlin-jackson/build.gradle +++ b/samples/client/petstore/kotlin-jackson/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index c8b93b33bf6f..28273cdf35d4 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?) : Unit { val localVariableConfig = deletePetRequestConfig(petId = petId, apiKey = apiKey) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param apiKey (optional) * @return RequestConfig */ - fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -159,7 +155,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByStatusRequestConfig(status = status) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -184,23 +180,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Status values that need to be considered for filter * @return RequestConfig */ - fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("status", toMultiValue(status.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByStatus", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -218,7 +212,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,23 +238,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -277,7 +269,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getPetById(petId: kotlin.Long) : Pet { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -302,20 +294,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -331,7 +321,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -356,20 +346,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -387,7 +375,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -414,20 +402,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -446,7 +432,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -473,20 +459,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 215ed63420c9..56a23202f82c 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getInventory() : kotlin.collections.Map { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getOrderById(orderId: kotlin.Long) : Order { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun placeOrder(body: Order) : Order { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 53748b934636..9f93e853a122 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getUserByName(username: kotlin.String) : User { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index e9bcbc7981c3..0c29beb9558a 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -12,16 +12,17 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale open class ApiClient(val baseUrl: String) { companion object { @@ -61,9 +62,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -131,7 +130,7 @@ open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -148,7 +147,7 @@ open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -182,7 +181,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -197,57 +196,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-json-request-string/build.gradle b/samples/client/petstore/kotlin-json-request-string/build.gradle index 4e47e29cc51b..378951fb75a5 100644 --- a/samples/client/petstore/kotlin-json-request-string/build.gradle +++ b/samples/client/petstore/kotlin-json-request-string/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index d939e3d5a43e..5197d04b8dfe 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?) : Unit { val localVariableConfig = deletePetRequestConfig(petId = petId, apiKey = apiKey) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param apiKey (optional) * @return RequestConfig */ - fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -160,7 +156,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -186,23 +182,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -219,7 +213,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getAllPets(lastUpdated: java.time.OffsetDateTime?) : kotlin.collections.List { val localVariableConfig = getAllPetsRequestConfig(lastUpdated = lastUpdated) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,8 +238,8 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param lastUpdated When this endpoint was hit last to help indentify if the client already has the latest copy. (optional) * @return RequestConfig */ - fun getAllPetsRequestConfig(lastUpdated: java.time.OffsetDateTime?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getAllPetsRequestConfig(lastUpdated: java.time.OffsetDateTime?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { if (lastUpdated != null) { @@ -253,16 +247,14 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { } } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/getAll", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -279,7 +271,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getPetById(petId: kotlin.Long) : Pet { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -304,20 +296,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -333,7 +323,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -358,20 +348,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -389,7 +377,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -416,20 +404,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -448,7 +434,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -475,20 +461,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 215ed63420c9..56a23202f82c 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getInventory() : kotlin.collections.Map { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getOrderById(orderId: kotlin.Long) : Order { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun placeOrder(body: Order) : Order { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 53748b934636..9f93e853a122 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getUserByName(username: kotlin.String) : User { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index a9fe6b46d778..ea327d4b6a4a 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -13,16 +13,17 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale open class ApiClient(val baseUrl: String) { companion object { @@ -62,9 +63,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -137,7 +136,7 @@ open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -154,7 +153,7 @@ open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -188,7 +187,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -203,57 +202,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle index ae150592cbb1..a99b1cf2af2f 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 78223583f645..1e40497d817b 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?) : Unit { val localVariableConfig = deletePetRequestConfig(petId = petId, apiKey = apiKey) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param apiKey (optional) * @return RequestConfig */ - fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -159,7 +155,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByStatusRequestConfig(status = status) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -184,23 +180,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Status values that need to be considered for filter * @return RequestConfig */ - fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("status", toMultiValue(status.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByStatus", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -218,7 +212,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,23 +238,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -277,7 +269,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun getPetById(petId: kotlin.Long) : Pet { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -302,20 +294,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -331,7 +321,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -356,20 +346,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -387,7 +375,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -414,20 +402,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -446,7 +432,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -473,20 +459,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 4ab794d66081..e4ed2245f6f3 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) suspend fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) suspend fun getInventory() : kotlin.collections.Map { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) suspend fun getOrderById(orderId: kotlin.Long) : Order { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) suspend fun placeOrder(body: Order) : Order { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 911bbee5b6b3..44f24c941f8f 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun getUserByName(username: kotlin.String) : User { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { suspend fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index a1c98200ac47..e8c4090e0679 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -12,16 +12,17 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale open class ApiClient(val baseUrl: String) { companion object { @@ -61,9 +62,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -131,7 +130,7 @@ open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -148,7 +147,7 @@ open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -182,7 +181,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -197,57 +196,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-moshi-codegen/build.gradle b/samples/client/petstore/kotlin-moshi-codegen/build.gradle index 5e86b0b1a362..7fec302dc5aa 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/build.gradle +++ b/samples/client/petstore/kotlin-moshi-codegen/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index c8b93b33bf6f..28273cdf35d4 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?) : Unit { val localVariableConfig = deletePetRequestConfig(petId = petId, apiKey = apiKey) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param apiKey (optional) * @return RequestConfig */ - fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -159,7 +155,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByStatusRequestConfig(status = status) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -184,23 +180,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Status values that need to be considered for filter * @return RequestConfig */ - fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("status", toMultiValue(status.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByStatus", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -218,7 +212,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,23 +238,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -277,7 +269,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getPetById(petId: kotlin.Long) : Pet { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -302,20 +294,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -331,7 +321,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -356,20 +346,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -387,7 +375,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -414,20 +402,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -446,7 +432,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -473,20 +459,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 215ed63420c9..56a23202f82c 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getInventory() : kotlin.collections.Map { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getOrderById(orderId: kotlin.Long) : Order { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun placeOrder(body: Order) : Order { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 53748b934636..9f93e853a122 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getUserByName(username: kotlin.String) : User { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index c548762e28be..0961cf760c64 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -12,16 +12,17 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale open class ApiClient(val baseUrl: String) { companion object { @@ -61,9 +62,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -131,7 +130,7 @@ open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -148,7 +147,7 @@ open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -182,7 +181,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -197,57 +196,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index fe8434be2100..42d2a68d5b44 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -155,7 +155,7 @@ open class ApiClient( else request(requestConfig, authNames = authNames) } - protected suspend fun request(requestConfig: RequestConfig, body: OutgoingContent = EmptyContent, authNames: kotlin.collections.List): HttpResponse { + protected suspend inline fun request(requestConfig: RequestConfig, body: OutgoingContent = EmptyContent, authNames: kotlin.collections.List): HttpResponse { requestConfig.updateForAuth(authNames) val headers = requestConfig.headers diff --git a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-multiplatform/src/commonMain/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-nonpublic/build.gradle b/samples/client/petstore/kotlin-nonpublic/build.gradle index 60e5056e0316..260bd6bda6e2 100644 --- a/samples/client/petstore/kotlin-nonpublic/build.gradle +++ b/samples/client/petstore/kotlin-nonpublic/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index b6b38fa42f34..aa38ba8d6918 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?) : Unit { val localVariableConfig = deletePetRequestConfig(petId = petId, apiKey = apiKey) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas * @param apiKey (optional) * @return RequestConfig */ - fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -159,7 +155,7 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByStatusRequestConfig(status = status) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -184,23 +180,21 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas * @param status Status values that need to be considered for filter * @return RequestConfig */ - fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("status", toMultiValue(status.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByStatus", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -218,7 +212,7 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,23 +238,21 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -277,7 +269,7 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas fun getPetById(petId: kotlin.Long) : Pet { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -302,20 +294,18 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -331,7 +321,7 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -356,20 +346,18 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -387,7 +375,7 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -414,20 +402,18 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -446,7 +432,7 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -473,20 +459,18 @@ internal class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(bas * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 19b7acdbd31e..10e2b9460056 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ internal class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(b fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ internal class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(b * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ internal class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(b fun getInventory() : kotlin.collections.Map { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ internal class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(b * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ internal class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(b fun getOrderById(orderId: kotlin.Long) : Order { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ internal class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(b * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ internal class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(b fun placeOrder(body: Order) : Order { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ internal class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(b * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 979bb1b81f86..4983dc73feb7 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba fun getUserByName(username: kotlin.String) : User { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ internal class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(ba * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 98b12a971509..d4fccce2715b 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -12,16 +12,17 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale internal open class ApiClient(val baseUrl: String) { internal companion object { @@ -61,9 +62,7 @@ internal open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -131,7 +130,7 @@ internal open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -148,7 +147,7 @@ internal open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -182,7 +181,7 @@ internal open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -197,57 +196,46 @@ internal open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 68f41c5497dd..70cb0b046157 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -internal data class RequestConfig( +internal data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-nullable/build.gradle b/samples/client/petstore/kotlin-nullable/build.gradle index 60e5056e0316..260bd6bda6e2 100644 --- a/samples/client/petstore/kotlin-nullable/build.gradle +++ b/samples/client/petstore/kotlin-nullable/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 95f695cb9f48..5954c156bcd0 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?) : Unit { val localVariableConfig = deletePetRequestConfig(petId = petId, apiKey = apiKey) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param apiKey (optional) * @return RequestConfig */ - fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -159,7 +155,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List? { val localVariableConfig = findPetsByStatusRequestConfig(status = status) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -184,23 +180,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Status values that need to be considered for filter * @return RequestConfig */ - fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("status", toMultiValue(status.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByStatus", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -218,7 +212,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List? { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,23 +238,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -277,7 +269,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getPetById(petId: kotlin.Long) : Pet? { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -302,20 +294,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -331,7 +321,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -356,20 +346,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -387,7 +375,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -414,20 +402,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -446,7 +432,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse? { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -473,20 +459,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index c442f8661003..d8b1ad578f5f 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getInventory() : kotlin.collections.Map? { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getOrderById(orderId: kotlin.Long) : Order? { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun placeOrder(body: Order) : Order? { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 6e6c329144cc..a88481301162 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getUserByName(username: kotlin.String) : User? { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String? { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index c548762e28be..0961cf760c64 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -12,16 +12,17 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale open class ApiClient(val baseUrl: String) { companion object { @@ -61,9 +62,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -131,7 +130,7 @@ open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -148,7 +147,7 @@ open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -182,7 +181,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -197,57 +196,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-okhttp3/build.gradle b/samples/client/petstore/kotlin-okhttp3/build.gradle index 1da4409df35f..e872269b3fb5 100644 --- a/samples/client/petstore/kotlin-okhttp3/build.gradle +++ b/samples/client/petstore/kotlin-okhttp3/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index c8b93b33bf6f..28273cdf35d4 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?) : Unit { val localVariableConfig = deletePetRequestConfig(petId = petId, apiKey = apiKey) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param apiKey (optional) * @return RequestConfig */ - fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -159,7 +155,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByStatusRequestConfig(status = status) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -184,23 +180,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Status values that need to be considered for filter * @return RequestConfig */ - fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("status", toMultiValue(status.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByStatus", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -218,7 +212,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,23 +238,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -277,7 +269,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getPetById(petId: kotlin.Long) : Pet { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -302,20 +294,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -331,7 +321,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -356,20 +346,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -387,7 +375,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -414,20 +402,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -446,7 +432,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -473,20 +459,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 215ed63420c9..56a23202f82c 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getInventory() : kotlin.collections.Map { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getOrderById(orderId: kotlin.Long) : Order { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun placeOrder(body: Order) : Order { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 53748b934636..9f93e853a122 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getUserByName(username: kotlin.String) : User { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 72929a5dc0fc..49cf4c675b7e 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -10,16 +10,17 @@ import okhttp3.ResponseBody import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale open class ApiClient(val baseUrl: String) { companion object { @@ -59,9 +60,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> RequestBody.create( - MediaType.parse(mediaType), content - ) + content is File -> RequestBody.create(MediaType.parse(mediaType), content) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -129,7 +128,7 @@ open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -146,7 +145,7 @@ open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = HttpUrl.parse(baseUrl) ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -180,7 +179,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -195,57 +194,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code(), - response.headers().toMultimap() + return when { + response.isRedirect -> Redirection( + response.code(), + response.headers().toMultimap() ) - response.isInformational -> return Informational( - response.message(), - response.code(), - response.headers().toMultimap() + response.isInformational -> Informational( + response.message(), + response.code(), + response.headers().toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body(), accept), - response.code(), - response.headers().toMultimap() + response.isSuccessful -> Success( + responseBody(response.body(), accept), + response.code(), + response.headers().toMultimap() ) - response.isClientError -> return ClientError( - response.message(), - response.body()?.string(), - response.code(), - response.headers().toMultimap() + response.isClientError -> ClientError( + response.message(), + response.body()?.string(), + response.code(), + response.headers().toMultimap() ) - else -> return ServerError( - response.message(), - response.body()?.string(), - response.code(), - response.headers().toMultimap() + else -> ServerError( + response.message(), + response.body()?.string(), + response.code(), + response.headers().toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle index dce987e02010..f7a6d02171ed 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' ext.retrofitVersion = '2.7.2' repositories { @@ -32,7 +32,7 @@ test { dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlinx:kotlinx-serialization-json:1.1.0" + compile "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.1" compile "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0" compile "com.squareup.okhttp3:logging-interceptor:4.9.0" compile "com.squareup.retrofit2:retrofit:$retrofitVersion" diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle b/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle index b55dfb35245f..3ddd8d97e8fc 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle +++ b/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' ext.retrofitVersion = '2.7.2' ext.rxJava3Version = '3.0.10' diff --git a/samples/client/petstore/kotlin-retrofit2/build.gradle b/samples/client/petstore/kotlin-retrofit2/build.gradle index 109eb2ca069f..6674970e550b 100644 --- a/samples/client/petstore/kotlin-retrofit2/build.gradle +++ b/samples/client/petstore/kotlin-retrofit2/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' ext.retrofitVersion = '2.7.2' repositories { diff --git a/samples/client/petstore/kotlin-string/build.gradle b/samples/client/petstore/kotlin-string/build.gradle index 60e5056e0316..260bd6bda6e2 100644 --- a/samples/client/petstore/kotlin-string/build.gradle +++ b/samples/client/petstore/kotlin-string/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index 4fbeccdbc00a..de97218c9e8e 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deletePet(apiKey: kotlin.String?, petId: kotlin.Long) : Unit { val localVariableConfig = deletePetRequestConfig(apiKey = apiKey, petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId Pet id to delete * @return RequestConfig */ - fun deletePetRequestConfig(apiKey: kotlin.String?, petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(apiKey: kotlin.String?, petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -159,7 +155,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByStatusRequestConfig(status = status) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -184,23 +180,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Status values that need to be considered for filter * @return RequestConfig */ - fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("status", toMultiValue(status.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByStatus", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -218,7 +212,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,23 +238,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -277,7 +269,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getPetById(petId: kotlin.Long) : Pet { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -302,20 +294,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -331,7 +321,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -356,20 +346,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -387,7 +375,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -414,20 +402,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -446,7 +432,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -473,20 +459,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 215ed63420c9..56a23202f82c 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getInventory() : kotlin.collections.Map { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getOrderById(orderId: kotlin.Long) : Order { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun placeOrder(body: Order) : Order { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 53748b934636..9f93e853a122 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getUserByName(username: kotlin.String) : User { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index c548762e28be..0961cf760c64 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -12,16 +12,17 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale open class ApiClient(val baseUrl: String) { companion object { @@ -61,9 +62,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -131,7 +130,7 @@ open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -148,7 +147,7 @@ open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -182,7 +181,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -197,57 +196,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-threetenbp/build.gradle b/samples/client/petstore/kotlin-threetenbp/build.gradle index 87605daa9d22..1d9880723863 100644 --- a/samples/client/petstore/kotlin-threetenbp/build.gradle +++ b/samples/client/petstore/kotlin-threetenbp/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index c8b93b33bf6f..28273cdf35d4 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?) : Unit { val localVariableConfig = deletePetRequestConfig(petId = petId, apiKey = apiKey) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param apiKey (optional) * @return RequestConfig */ - fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -159,7 +155,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByStatusRequestConfig(status = status) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -184,23 +180,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Status values that need to be considered for filter * @return RequestConfig */ - fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("status", toMultiValue(status.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByStatus", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -218,7 +212,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,23 +238,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -277,7 +269,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getPetById(petId: kotlin.Long) : Pet { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -302,20 +294,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -331,7 +321,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -356,20 +346,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -387,7 +375,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -414,20 +402,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -446,7 +432,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -473,20 +459,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 215ed63420c9..56a23202f82c 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getInventory() : kotlin.collections.Map { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getOrderById(orderId: kotlin.Long) : Order { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun placeOrder(body: Order) : Order { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 53748b934636..9f93e853a122 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getUserByName(username: kotlin.String) : User { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 12ea3e7c065e..27297844d606 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -12,11 +12,12 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection import java.util.Date +import java.util.Locale import org.threeten.bp.LocalDate import org.threeten.bp.LocalDateTime import org.threeten.bp.LocalTime @@ -61,9 +62,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -131,7 +130,7 @@ open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -148,7 +147,7 @@ open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -182,7 +181,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -197,57 +196,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin-uppercase-enum/build.gradle b/samples/client/petstore/kotlin-uppercase-enum/build.gradle index 60e5056e0316..260bd6bda6e2 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/build.gradle +++ b/samples/client/petstore/kotlin-uppercase-enum/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/apis/EnumApi.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/apis/EnumApi.kt index e504c876ce65..59cebc5d4b98 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/apis/EnumApi.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/apis/EnumApi.kt @@ -46,7 +46,7 @@ class EnumApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getEnum() : PetEnum { val localVariableConfig = getEnumRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -70,20 +70,18 @@ class EnumApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun getEnumRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getEnumRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/enum", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 9da041200e1c..0dad05161fae 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -12,16 +12,17 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale open class ApiClient(val baseUrl: String) { companion object { @@ -61,9 +62,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -132,7 +131,7 @@ open class ApiClient(val baseUrl: String) { } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") val url = httpUrl.newBuilder() @@ -163,7 +162,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -178,57 +177,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file diff --git a/samples/client/petstore/kotlin/build.gradle b/samples/client/petstore/kotlin/build.gradle index 60e5056e0316..260bd6bda6e2 100644 --- a/samples/client/petstore/kotlin/build.gradle +++ b/samples/client/petstore/kotlin/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.5.0' repositories { maven { url "https://repo1.maven.org/maven2" } diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/PetApi.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/PetApi.kt index c8b93b33bf6f..28273cdf35d4 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/PetApi.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/PetApi.kt @@ -47,7 +47,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun addPet(body: Pet) : Unit { val localVariableConfig = addPetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -72,20 +72,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun addPetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun addPetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -102,7 +100,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deletePet(petId: kotlin.Long, apiKey: kotlin.String?) : Unit { val localVariableConfig = deletePetRequestConfig(petId = petId, apiKey = apiKey) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -128,21 +126,19 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param apiKey (optional) * @return RequestConfig */ - fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deletePetRequestConfig(petId: kotlin.Long, apiKey: kotlin.String?) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() apiKey?.apply { localVariableHeaders["api_key"] = this.toString() } - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -159,7 +155,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByStatus(status: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByStatusRequestConfig(status = status) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -184,23 +180,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Status values that need to be considered for filter * @return RequestConfig */ - fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByStatusRequestConfig(status: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("status", toMultiValue(status.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByStatus", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -218,7 +212,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun findPetsByTags(tags: kotlin.collections.List) : kotlin.collections.List { val localVariableConfig = findPetsByTagsRequestConfig(tags = tags) - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -244,23 +238,21 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @return RequestConfig */ @Deprecated(message = "This operation is deprecated.") - fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun findPetsByTagsRequestConfig(tags: kotlin.collections.List) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("tags", toMultiValue(tags.toList(), "csv")) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/findByTags", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -277,7 +269,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getPetById(petId: kotlin.Long) : Pet { val localVariableConfig = getPetByIdRequestConfig(petId = petId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -302,20 +294,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param petId ID of pet to return * @return RequestConfig */ - fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getPetByIdRequestConfig(petId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -331,7 +321,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePet(body: Pet) : Unit { val localVariableConfig = updatePetRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -356,20 +346,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Pet object that needs to be added to the store * @return RequestConfig */ - fun updatePetRequestConfig(body: Pet) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updatePetRequestConfig(body: Pet) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/pet", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -387,7 +375,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updatePetWithForm(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : Unit { val localVariableConfig = updatePetWithFormRequestConfig(petId = petId, name = name, status = status) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -414,20 +402,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param status Updated status of the pet (optional) * @return RequestConfig */ - fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("name" to name, "status" to status) + fun updatePetWithFormRequestConfig(petId: kotlin.Long, name: kotlin.String?, status: kotlin.String?) : RequestConfig> { + val localVariableBody = mapOf("name" to name, "status" to status) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "application/x-www-form-urlencoded") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -446,7 +432,7 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun uploadFile(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : ApiResponse { val localVariableConfig = uploadFileRequestConfig(petId = petId, additionalMetadata = additionalMetadata, file = file) - val localVarResponse = request( + val localVarResponse = request, ApiResponse>( localVariableConfig ) @@ -473,20 +459,18 @@ class PetApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param file file to upload (optional) * @return RequestConfig */ - fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig { - val localVariableBody: kotlin.Any? = mapOf("additionalMetadata" to additionalMetadata, "file" to file) + fun uploadFileRequestConfig(petId: kotlin.Long, additionalMetadata: kotlin.String?, file: java.io.File?) : RequestConfig> { + val localVariableBody = mapOf("additionalMetadata" to additionalMetadata, "file" to file) val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf("Content-Type" to "multipart/form-data") - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/pet/{petId}/uploadImage".replace("{"+"petId"+"}", "$petId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt index 215ed63420c9..56a23202f82c 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/StoreApi.kt @@ -46,7 +46,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun deleteOrder(orderId: kotlin.String) : Unit { val localVariableConfig = deleteOrderRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of the order that needs to be deleted * @return RequestConfig */ - fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteOrderRequestConfig(orderId: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getInventory() : kotlin.collections.Map { val localVariableConfig = getInventoryRequestConfig() - val localVarResponse = request>( + val localVarResponse = request>( localVariableConfig ) @@ -124,20 +122,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * * @return RequestConfig */ - fun getInventoryRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getInventoryRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/inventory", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun getOrderById(orderId: kotlin.Long) : Order { val localVariableConfig = getOrderByIdRequestConfig(orderId = orderId) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -179,20 +175,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param orderId ID of pet that needs to be fetched * @return RequestConfig */ - fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getOrderByIdRequestConfig(orderId: kotlin.Long) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/store/order/{orderId}".replace("{"+"orderId"+"}", "$orderId"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -209,7 +203,7 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) fun placeOrder(body: Order) : Order { val localVariableConfig = placeOrderRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -234,20 +228,18 @@ class StoreApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) * @param body order placed for purchasing the pet * @return RequestConfig */ - fun placeOrderRequestConfig(body: Order) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun placeOrderRequestConfig(body: Order) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/store/order", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/UserApi.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/UserApi.kt index 53748b934636..9f93e853a122 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/UserApi.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/apis/UserApi.kt @@ -46,7 +46,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUser(body: User) : Unit { val localVariableConfig = createUserRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -71,20 +71,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Created user object * @return RequestConfig */ - fun createUserRequestConfig(body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUserRequestConfig(body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -100,7 +98,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithArrayInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithArrayInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -125,20 +123,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithArrayInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithArray", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -154,7 +150,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun createUsersWithListInput(body: kotlin.collections.List) : Unit { val localVariableConfig = createUsersWithListInputRequestConfig(body = body) - val localVarResponse = request( + val localVarResponse = request, Unit>( localVariableConfig ) @@ -179,20 +175,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body List of user object * @return RequestConfig */ - fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun createUsersWithListInputRequestConfig(body: kotlin.collections.List) : RequestConfig> { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.POST, path = "/user/createWithList", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -208,7 +202,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun deleteUser(username: kotlin.String) : Unit { val localVariableConfig = deleteUserRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -233,20 +227,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be deleted * @return RequestConfig */ - fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun deleteUserRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.DELETE, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -263,7 +255,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun getUserByName(username: kotlin.String) : User { val localVariableConfig = getUserByNameRequestConfig(username = username) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -288,20 +280,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param username The name that needs to be fetched. Use user1 for testing. * @return RequestConfig */ - fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun getUserByNameRequestConfig(username: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -319,7 +309,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun loginUser(username: kotlin.String, password: kotlin.String) : kotlin.String { val localVariableConfig = loginUserRequestConfig(username = username, password = password) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -345,24 +335,22 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param password The password for login in clear text * @return RequestConfig */ - fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun loginUserRequestConfig(username: kotlin.String, password: kotlin.String) : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf>() .apply { put("username", listOf(username.toString())) put("password", listOf(password.toString())) } val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/login", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -377,7 +365,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun logoutUser() : Unit { val localVariableConfig = logoutUserRequestConfig() - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -401,20 +389,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * * @return RequestConfig */ - fun logoutUserRequestConfig() : RequestConfig { - val localVariableBody: kotlin.Any? = null + fun logoutUserRequestConfig() : RequestConfig { + val localVariableBody = null val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.GET, path = "/user/logout", query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } /** @@ -431,7 +417,7 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { fun updateUser(username: kotlin.String, body: User) : Unit { val localVariableConfig = updateUserRequestConfig(username = username, body = body) - val localVarResponse = request( + val localVarResponse = request( localVariableConfig ) @@ -457,20 +443,18 @@ class UserApi(basePath: kotlin.String = defaultBasePath) : ApiClient(basePath) { * @param body Updated user object * @return RequestConfig */ - fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { - val localVariableBody: kotlin.Any? = body + fun updateUserRequestConfig(username: kotlin.String, body: User) : RequestConfig { + val localVariableBody = body val localVariableQuery: MultiValueMap = mutableMapOf() val localVariableHeaders: MutableMap = mutableMapOf() - - val localVariableConfig = RequestConfig( + + return RequestConfig( method = RequestMethod.PUT, path = "/user/{username}".replace("{"+"username"+"}", "$username"), query = localVariableQuery, headers = localVariableHeaders, body = localVariableBody ) - - return localVariableConfig } } diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index c548762e28be..0961cf760c64 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -12,16 +12,17 @@ import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.Headers import okhttp3.MultipartBody -import java.io.File import java.io.BufferedWriter +import java.io.File import java.io.FileWriter import java.net.URLConnection -import java.util.Date import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime import java.time.OffsetDateTime import java.time.OffsetTime +import java.util.Date +import java.util.Locale open class ApiClient(val baseUrl: String) { companion object { @@ -61,9 +62,7 @@ open class ApiClient(val baseUrl: String) { protected inline fun requestBody(content: T, mediaType: String = JsonMediaType): RequestBody = when { - content is File -> content.asRequestBody( - mediaType.toMediaTypeOrNull() - ) + content is File -> content.asRequestBody(mediaType.toMediaTypeOrNull()) mediaType == FormDataMediaType -> { MultipartBody.Builder() .setType(MultipartBody.FORM) @@ -131,7 +130,7 @@ open class ApiClient(val baseUrl: String) { } } - protected fun updateAuthParams(requestConfig: RequestConfig) { + protected fun updateAuthParams(requestConfig: RequestConfig) { if (requestConfig.headers["api_key"].isNullOrEmpty()) { if (apiKey["api_key"] != null) { if (apiKeyPrefix["api_key"] != null) { @@ -148,7 +147,7 @@ open class ApiClient(val baseUrl: String) { } } - protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { + protected inline fun request(requestConfig: RequestConfig): ApiInfrastructureResponse { val httpUrl = baseUrl.toHttpUrlOrNull() ?: throw IllegalStateException("baseUrl is invalid.") // take authMethod from operation @@ -182,7 +181,7 @@ open class ApiClient(val baseUrl: String) { } // TODO: support multiple contentType options here. - val contentType = (headers[ContentType] as String).substringBefore(";").toLowerCase() + val contentType = (headers[ContentType] as String).substringBefore(";").lowercase(Locale.getDefault()) val request = when (requestConfig.method) { RequestMethod.DELETE -> Request.Builder().url(url).delete(requestBody(requestConfig.body, contentType)) @@ -197,57 +196,46 @@ open class ApiClient(val baseUrl: String) { }.build() val response = client.newCall(request).execute() - val accept = response.header(ContentType)?.substringBefore(";")?.toLowerCase() + val accept = response.header(ContentType)?.substringBefore(";")?.lowercase(Locale.getDefault()) // TODO: handle specific mapping types. e.g. Map> - when { - response.isRedirect -> return Redirection( - response.code, - response.headers.toMultimap() + return when { + response.isRedirect -> Redirection( + response.code, + response.headers.toMultimap() ) - response.isInformational -> return Informational( - response.message, - response.code, - response.headers.toMultimap() + response.isInformational -> Informational( + response.message, + response.code, + response.headers.toMultimap() ) - response.isSuccessful -> return Success( - responseBody(response.body, accept), - response.code, - response.headers.toMultimap() + response.isSuccessful -> Success( + responseBody(response.body, accept), + response.code, + response.headers.toMultimap() ) - response.isClientError -> return ClientError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + response.isClientError -> ClientError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) - else -> return ServerError( - response.message, - response.body?.string(), - response.code, - response.headers.toMultimap() + else -> ServerError( + response.message, + response.body?.string(), + response.code, + response.headers.toMultimap() ) } } - protected fun parameterToString(value: Any?): String { - when (value) { - null -> { - return "" - } - is Array<*> -> { - return toMultiValue(value, "csv").toString() - } - is Iterable<*> -> { - return toMultiValue(value, "csv").toString() - } - is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> { - return parseDateToQueryString(value) - } - else -> { - return value.toString() - } - } + protected fun parameterToString(value: Any?): String = when (value) { + null -> "" + is Array<*> -> toMultiValue(value, "csv").toString() + is Iterable<*> -> toMultiValue(value, "csv").toString() + is OffsetDateTime, is OffsetTime, is LocalDateTime, is LocalDate, is LocalTime, is Date -> + parseDateToQueryString(value) + else -> value.toString() } protected inline fun parseDateToQueryString(value : T): String { diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt index 0f2790f370e2..7e948e1dd071 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt @@ -8,10 +8,10 @@ package org.openapitools.client.infrastructure * NOTE: Headers is a Map because rfc2616 defines * multi-valued headers as csv-only. */ -data class RequestConfig( +data class RequestConfig( val method: RequestMethod, val path: String, val headers: MutableMap = mutableMapOf(), val query: MutableMap> = mutableMapOf(), - val body: kotlin.Any? = null + val body: T? = null ) \ No newline at end of file From 6cf48432495f866276023bc983c3484cb498a61c Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Tue, 1 Jun 2021 03:09:22 +0100 Subject: [PATCH 179/186] [swift5][client] update dependencies (#9633) * [swift5][client] update dependencies * [swift5][client] update sample projects * [swift5][client] update dependencies in Carthage --- .../main/resources/swift5/Cartfile.mustache | 6 +- .../main/resources/swift5/Extensions.mustache | 43 ------ .../resources/swift5/Package.swift.mustache | 6 +- .../main/resources/swift5/Podspec.mustache | 6 +- .../petstore/swift5/alamofireLibrary/Cartfile | 2 +- .../swift5/alamofireLibrary/Package.resolved | 9 ++ .../swift5/alamofireLibrary/Package.swift | 2 +- .../alamofireLibrary/PetstoreClient.podspec | 2 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ .../SwaggerClientTests/Podfile | 13 -- .../SwaggerClientTests/Podfile.lock | 23 --- .../SwaggerClient.xcodeproj/project.pbxproj | 137 ++++-------------- .../contents.xcworkspacedata | 4 +- .../xcshareddata/swiftpm/Package.resolved | 25 ++++ .../petstore/swift5/combineLibrary/Cartfile | 2 +- .../swift5/combineLibrary/Package.resolved | 16 ++ .../swift5/combineLibrary/Package.swift | 2 +- .../combineLibrary/PetstoreClient.podspec | 2 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ .../combineLibrary/SwaggerClientTests/Podfile | 13 -- .../SwaggerClientTests/Podfile.lock | 16 -- .../SwaggerClient.xcodeproj/project.pbxproj | 131 +++++------------ .../contents.xcworkspacedata | 4 +- .../xcshareddata/swiftpm/Package.resolved | 16 ++ .../client/petstore/swift5/default/Cartfile | 2 +- .../petstore/swift5/default/Package.resolved | 4 +- .../petstore/swift5/default/Package.swift | 2 +- .../swift5/default/PetstoreClient.podspec | 2 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ .../swift5/default/SwaggerClientTests/Podfile | 13 -- .../default/SwaggerClientTests/Podfile.lock | 16 -- .../SwaggerClient.xcodeproj/project.pbxproj | 134 ++++------------- .../contents.xcworkspacedata | 4 +- .../xcshareddata/swiftpm/Package.resolved | 16 ++ .../petstore/swift5/deprecated/Cartfile | 2 +- .../swift5/deprecated/Package.resolved | 16 ++ .../petstore/swift5/deprecated/Package.swift | 2 +- .../swift5/deprecated/PetstoreClient.podspec | 2 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ .../petstore/swift5/nonPublicApi/Cartfile | 2 +- .../swift5/nonPublicApi/Package.resolved | 16 ++ .../swift5/nonPublicApi/Package.swift | 2 +- .../nonPublicApi/PetstoreClient.podspec | 2 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ .../petstore/swift5/objcCompatible/Cartfile | 2 +- .../swift5/objcCompatible/Package.resolved | 16 ++ .../swift5/objcCompatible/Package.swift | 2 +- .../objcCompatible/PetstoreClient.podspec | 2 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ samples/client/petstore/swift5/oneOf/Cartfile | 2 +- .../petstore/swift5/oneOf/Package.swift | 2 +- .../swift5/oneOf/PetstoreClient.podspec | 2 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ .../swift5/promisekitLibrary/Cartfile | 4 +- .../swift5/promisekitLibrary/Package.resolved | 13 +- .../swift5/promisekitLibrary/Package.swift | 4 +- .../promisekitLibrary/PetstoreClient.podspec | 4 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ .../SwaggerClientTests/Podfile | 13 -- .../SwaggerClientTests/Podfile.lock | 23 --- .../SwaggerClient.xcodeproj/project.pbxproj | 131 +++++------------ .../contents.xcworkspacedata | 4 +- .../xcshareddata/swiftpm/Package.resolved | 25 ++++ .../swift5/readonlyProperties/Cartfile | 2 +- .../swift5/readonlyProperties/Package.swift | 2 +- .../readonlyProperties/PetstoreClient.podspec | 2 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ .../petstore/swift5/resultLibrary/Cartfile | 2 +- .../swift5/resultLibrary/Package.resolved | 16 ++ .../swift5/resultLibrary/Package.swift | 2 +- .../resultLibrary/PetstoreClient.podspec | 2 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ .../contents.xcworkspacedata | 7 + .../petstore/swift5/rxswiftLibrary/Cartfile | 4 +- .../swift5/rxswiftLibrary/Package.resolved | 13 +- .../swift5/rxswiftLibrary/Package.swift | 4 +- .../rxswiftLibrary/PetstoreClient.podspec | 4 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ .../rxswiftLibrary/SwaggerClientTests/Podfile | 13 -- .../SwaggerClientTests/Podfile.lock | 23 --- .../SwaggerClient.xcodeproj/project.pbxproj | 133 +++++------------ .../contents.xcworkspacedata | 4 +- .../xcshareddata/swiftpm/Package.resolved | 25 ++++ .../SwaggerClientTests/PetAPITests.swift | 2 +- .../swift5/urlsessionLibrary/Cartfile | 2 +- .../swift5/urlsessionLibrary/Package.resolved | 16 ++ .../swift5/urlsessionLibrary/Package.swift | 2 +- .../urlsessionLibrary/PetstoreClient.podspec | 2 +- .../Sources/PetstoreClient/Extensions.swift | 43 ------ .../SwaggerClientTests/Podfile | 13 -- .../SwaggerClientTests/Podfile.lock | 16 -- .../SwaggerClient.xcodeproj/project.pbxproj | 134 ++++------------- .../contents.xcworkspacedata | 4 +- .../xcshareddata/swiftpm/Package.resolved | 16 ++ .../petstore/swift5/x-swift-hashable/Cartfile | 2 +- .../swift5/x-swift-hashable/Package.swift | 2 +- .../x-swift-hashable/PetstoreClient.podspec | 2 +- .../Classes/OpenAPIs/Extensions.swift | 43 ------ 98 files changed, 522 insertions(+), 1474 deletions(-) delete mode 100644 samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/Podfile delete mode 100644 samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/Podfile.lock create mode 100644 samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 samples/client/petstore/swift5/combineLibrary/Package.resolved delete mode 100644 samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/Podfile delete mode 100644 samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/Podfile.lock create mode 100644 samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 samples/client/petstore/swift5/default/SwaggerClientTests/Podfile delete mode 100644 samples/client/petstore/swift5/default/SwaggerClientTests/Podfile.lock create mode 100644 samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 samples/client/petstore/swift5/deprecated/Package.resolved create mode 100644 samples/client/petstore/swift5/nonPublicApi/Package.resolved create mode 100644 samples/client/petstore/swift5/objcCompatible/Package.resolved delete mode 100644 samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/Podfile delete mode 100644 samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/Podfile.lock create mode 100644 samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 samples/client/petstore/swift5/resultLibrary/Package.resolved create mode 100644 samples/client/petstore/swift5/rxswiftLibrary/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata delete mode 100644 samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/Podfile delete mode 100644 samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/Podfile.lock create mode 100644 samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Package.resolved delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/Podfile delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/Podfile.lock create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/modules/openapi-generator/src/main/resources/swift5/Cartfile.mustache b/modules/openapi-generator/src/main/resources/swift5/Cartfile.mustache index 64dac06473e1..5dbbc4577207 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Cartfile.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Cartfile.mustache @@ -1,4 +1,4 @@ {{#useAlamofire}}github "Alamofire/Alamofire" ~> 4.9.1{{/useAlamofire}}{{#usePromiseKit}} -github "mxcl/PromiseKit" ~> 6.13.1{{/usePromiseKit}}{{#useRxSwift}} -github "ReactiveX/RxSwift" ~> 5.1.1{{/useRxSwift}} -github "Flight-School/AnyCodable" ~> 0.4.0 +github "mxcl/PromiseKit" ~> 6.15.3{{/usePromiseKit}}{{#useRxSwift}} +github "ReactiveX/RxSwift" ~> 6.2.0{{/useRxSwift}} +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache b/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache index e3b069f432c2..a4d5dd4b3058 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Extensions.mustache @@ -202,46 +202,3 @@ extension RequestBuilder { return deferred.promise } }{{/usePromiseKit}} - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache b/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache index 353c6e9f3415..5dc55ffef832 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Package.swift.mustache @@ -19,15 +19,15 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), {{#useAlamofire}} .package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.9.1"), {{/useAlamofire}} {{#usePromiseKit}} - .package(url: "https://github.com/mxcl/PromiseKit.git", from: "6.12.0"), + .package(url: "https://github.com/mxcl/PromiseKit.git", from: "6.15.3"), {{/usePromiseKit}} {{#useRxSwift}} - .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "5.0.0"), + .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.2.0"), {{/useRxSwift}} ], targets: [ diff --git a/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache b/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache index 09f07162c03f..7ad13354aac2 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Podspec.mustache @@ -27,13 +27,13 @@ Pod::Spec.new do |s| {{/podDocumentationURL}} s.source_files = '{{#swiftPackagePath}}{{swiftPackagePath}}{{/swiftPackagePath}}{{^swiftPackagePath}}{{#useSPMFileStructure}}Sources/{{projectName}}{{/useSPMFileStructure}}{{^useSPMFileStructure}}{{projectName}}/Classes{{/useSPMFileStructure}}{{/swiftPackagePath}}/**/*.swift' {{#usePromiseKit}} - s.dependency 'PromiseKit/CorePromise', '~> 6.13.1' + s.dependency 'PromiseKit/CorePromise', '~> 6.15.3' {{/usePromiseKit}} {{#useRxSwift}} - s.dependency 'RxSwift', '~> 5.1.1' + s.dependency 'RxSwift', '~> 6.2.0' {{/useRxSwift}} {{#useAlamofire}} s.dependency 'Alamofire', '~> 4.9.1' {{/useAlamofire}} - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/alamofireLibrary/Cartfile b/samples/client/petstore/swift5/alamofireLibrary/Cartfile index cf67badb8507..01ae988a6d4f 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/Cartfile +++ b/samples/client/petstore/swift5/alamofireLibrary/Cartfile @@ -1,2 +1,2 @@ github "Alamofire/Alamofire" ~> 4.9.1 -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/alamofireLibrary/Package.resolved b/samples/client/petstore/swift5/alamofireLibrary/Package.resolved index ca6137050ebc..4c8626cac13e 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/Package.resolved +++ b/samples/client/petstore/swift5/alamofireLibrary/Package.resolved @@ -9,6 +9,15 @@ "revision": "747c8db8d57b68d5e35275f10c92d55f982adbd4", "version": "4.9.1" } + }, + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } } ] }, diff --git a/samples/client/petstore/swift5/alamofireLibrary/Package.swift b/samples/client/petstore/swift5/alamofireLibrary/Package.swift index 41b3c7aba32d..153013e9e935 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/Package.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), .package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.9.1"), ], targets: [ diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient.podspec index 23fbf0941061..dbe8000cc21b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient.podspec @@ -12,5 +12,5 @@ Pod::Spec.new do |s| s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' s.dependency 'Alamofire', '~> 4.9.1' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 11e807937bdc..e23035dde30e 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/Podfile b/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/Podfile deleted file mode 100644 index 77432f9eee92..000000000000 --- a/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -platform :ios, '9.0' - -source 'https://cdn.cocoapods.org/' - -use_frameworks! - -target 'SwaggerClient' do - pod "PetstoreClient", :path => "../" - - target 'SwaggerClientTests' do - inherit! :search_paths - end -end diff --git a/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/Podfile.lock b/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/Podfile.lock deleted file mode 100644 index 30f84a6b9c3a..000000000000 --- a/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/Podfile.lock +++ /dev/null @@ -1,23 +0,0 @@ -PODS: - - Alamofire (4.9.1) - - PetstoreClient (1.0.0): - - Alamofire (~> 4.9.1) - -DEPENDENCIES: - - PetstoreClient (from `../`) - -SPEC REPOS: - trunk: - - Alamofire - -EXTERNAL SOURCES: - PetstoreClient: - :path: "../" - -SPEC CHECKSUMS: - Alamofire: 85e8a02c69d6020a0d734f6054870d7ecb75cf18 - PetstoreClient: bc687d8c4d0c762098d72690e220cae37e281311 - -PODFILE CHECKSUM: 509bec696cc1d8641751b52e4fe4bef04ac4542c - -COCOAPODS: 1.10.0 diff --git a/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj index 901182fb107a..03aed8e5f82c 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj @@ -3,11 +3,10 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ - 198019EEC6E3CB01FC884C7A /* Pods_SwaggerClientTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D829DFE4E137D91D6174D75A /* Pods_SwaggerClientTests.framework */; }; 1A501F48219C3DC600F372F6 /* DateFormatTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A501F47219C3DC600F372F6 /* DateFormatTests.swift */; }; 6D4EFB951C692C6300B96B06 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */; }; 6D4EFB971C692C6300B96B06 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB961C692C6300B96B06 /* ViewController.swift */; }; @@ -18,9 +17,9 @@ 6D4EFBB71C693BED00B96B06 /* StoreAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */; }; 6D4EFBB91C693BFC00B96B06 /* UserAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */; }; A5465873259E306E00C3929B /* BearerDecodableRequestBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5465872259E306E00C3929B /* BearerDecodableRequestBuilder.swift */; }; + A5782C6D2664F91D00CAA106 /* PetstoreClient in Frameworks */ = {isa = PBXBuildFile; productRef = A5782C6C2664F91D00CAA106 /* PetstoreClient */; }; A5EA12542419387200E30FC3 /* FileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA12522419387100E30FC3 /* FileUtils.swift */; }; A5EA12552419387200E30FC3 /* UIImage+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA12532419387100E30FC3 /* UIImage+Extras.swift */; }; - B68489033454646C60C16C88 /* Pods_SwaggerClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79549D5237E5E83F567030EC /* Pods_SwaggerClient.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -35,7 +34,6 @@ /* Begin PBXFileReference section */ 1A501F47219C3DC600F372F6 /* DateFormatTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateFormatTests.swift; sourceTree = ""; }; - 32ED0E88E0B89A537075D9C9 /* Pods-SwaggerClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.debug.xcconfig"; path = "Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.debug.xcconfig"; sourceTree = ""; }; 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwaggerClient.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 6D4EFB961C692C6300B96B06 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; @@ -48,15 +46,9 @@ 6D4EFBB41C693BE200B96B06 /* PetAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAPITests.swift; sourceTree = ""; }; 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreAPITests.swift; sourceTree = ""; }; 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserAPITests.swift; sourceTree = ""; }; - 74246FD63841F7C179AD697F /* Pods-SwaggerClientTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.debug.xcconfig"; path = "Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.debug.xcconfig"; sourceTree = ""; }; - 79549D5237E5E83F567030EC /* Pods_SwaggerClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8ABA6AE59F792DAA1F79C48F /* Pods-SwaggerClientTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.release.xcconfig"; path = "Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.release.xcconfig"; sourceTree = ""; }; A5465872259E306E00C3929B /* BearerDecodableRequestBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BearerDecodableRequestBuilder.swift; sourceTree = ""; }; A5EA12522419387100E30FC3 /* FileUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileUtils.swift; sourceTree = ""; }; A5EA12532419387100E30FC3 /* UIImage+Extras.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Extras.swift"; sourceTree = ""; }; - C07EC0A94AA0F86D60668B32 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D829DFE4E137D91D6174D75A /* Pods_SwaggerClientTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClientTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FB503FF47F354A87D697DD0A /* Pods-SwaggerClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.release.xcconfig"; path = "Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -64,7 +56,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B68489033454646C60C16C88 /* Pods_SwaggerClient.framework in Frameworks */, + A5782C6D2664F91D00CAA106 /* PetstoreClient in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -72,7 +64,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 198019EEC6E3CB01FC884C7A /* Pods_SwaggerClientTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -82,9 +73,6 @@ 3FABC56EC0BA84CBF4F99564 /* Frameworks */ = { isa = PBXGroup; children = ( - C07EC0A94AA0F86D60668B32 /* Pods.framework */, - 79549D5237E5E83F567030EC /* Pods_SwaggerClient.framework */, - D829DFE4E137D91D6174D75A /* Pods_SwaggerClientTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -96,7 +84,6 @@ 6D4EFBA81C692C6300B96B06 /* SwaggerClientTests */, 6D4EFB921C692C6300B96B06 /* Products */, 3FABC56EC0BA84CBF4F99564 /* Frameworks */, - AC485EA5DC51CA28F3F7FECF /* Pods */, ); sourceTree = ""; }; @@ -137,18 +124,6 @@ path = SwaggerClientTests; sourceTree = ""; }; - AC485EA5DC51CA28F3F7FECF /* Pods */ = { - isa = PBXGroup; - children = ( - 32ED0E88E0B89A537075D9C9 /* Pods-SwaggerClient.debug.xcconfig */, - FB503FF47F354A87D697DD0A /* Pods-SwaggerClient.release.xcconfig */, - 74246FD63841F7C179AD697F /* Pods-SwaggerClientTests.debug.xcconfig */, - 8ABA6AE59F792DAA1F79C48F /* Pods-SwaggerClientTests.release.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -156,17 +131,18 @@ isa = PBXNativeTarget; buildConfigurationList = 6D4EFBAE1C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClient" */; buildPhases = ( - 53EC90CFFB0E0FABA75F972D /* [CP] Check Pods Manifest.lock */, 6D4EFB8D1C692C6300B96B06 /* Sources */, 6D4EFB8E1C692C6300B96B06 /* Frameworks */, 6D4EFB8F1C692C6300B96B06 /* Resources */, - 3E0F8DF721D95AAFC75864D4 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = SwaggerClient; + packageProductDependencies = ( + A5782C6C2664F91D00CAA106 /* PetstoreClient */, + ); productName = SwaggerClient; productReference = 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */; productType = "com.apple.product-type.application"; @@ -175,7 +151,6 @@ isa = PBXNativeTarget; buildConfigurationList = 6D4EFBB11C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClientTests" */; buildPhases = ( - 89F684025365A60C007C7DA9 /* [CP] Check Pods Manifest.lock */, 6D4EFBA11C692C6300B96B06 /* Sources */, 6D4EFBA21C692C6300B96B06 /* Frameworks */, 6D4EFBA31C692C6300B96B06 /* Resources */, @@ -250,73 +225,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 3E0F8DF721D95AAFC75864D4 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework", - "${BUILT_PRODUCTS_DIR}/PetstoreClient/PetstoreClient.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PetstoreClient.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 53EC90CFFB0E0FABA75F972D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClient-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 89F684025365A60C007C7DA9 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClientTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 6D4EFB8D1C692C6300B96B06 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -481,11 +389,13 @@ }; 6D4EFBAF1C692C6300B96B06 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 32ED0E88E0B89A537075D9C9 /* Pods-SwaggerClient.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -494,11 +404,13 @@ }; 6D4EFBB01C692C6300B96B06 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FB503FF47F354A87D697DD0A /* Pods-SwaggerClient.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -507,11 +419,14 @@ }; 6D4EFBB21C692C6300B96B06 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 74246FD63841F7C179AD697F /* Pods-SwaggerClientTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -521,11 +436,14 @@ }; 6D4EFBB31C692C6300B96B06 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8ABA6AE59F792DAA1F79C48F /* Pods-SwaggerClientTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -564,6 +482,13 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + A5782C6C2664F91D00CAA106 /* PetstoreClient */ = { + isa = XCSwiftPackageProductDependency; + productName = PetstoreClient; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 6D4EFB891C692C6300B96B06 /* Project object */; } diff --git a/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata index 9b3fa18954f7..00ec9b53a7f1 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata +++ b/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata @@ -2,9 +2,9 @@ + location = "group:.."> + location = "group:SwaggerClient.xcodeproj"> diff --git a/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved b/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..4c8626cac13e --- /dev/null +++ b/samples/client/petstore/swift5/alamofireLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,25 @@ +{ + "object": { + "pins": [ + { + "package": "Alamofire", + "repositoryURL": "https://github.com/Alamofire/Alamofire.git", + "state": { + "branch": null, + "revision": "747c8db8d57b68d5e35275f10c92d55f982adbd4", + "version": "4.9.1" + } + }, + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/combineLibrary/Cartfile b/samples/client/petstore/swift5/combineLibrary/Cartfile index 84aaa61ef2d3..843f7adc7794 100644 --- a/samples/client/petstore/swift5/combineLibrary/Cartfile +++ b/samples/client/petstore/swift5/combineLibrary/Cartfile @@ -1,2 +1,2 @@ -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/combineLibrary/Package.resolved b/samples/client/petstore/swift5/combineLibrary/Package.resolved new file mode 100644 index 000000000000..d384b276b4bc --- /dev/null +++ b/samples/client/petstore/swift5/combineLibrary/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/combineLibrary/Package.swift b/samples/client/petstore/swift5/combineLibrary/Package.swift index b724838fe8d3..5cde507bdcf9 100644 --- a/samples/client/petstore/swift5/combineLibrary/Package.swift +++ b/samples/client/petstore/swift5/combineLibrary/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/combineLibrary/PetstoreClient.podspec index de06558efbdb..60f05891b241 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient.podspec @@ -11,5 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 11e807937bdc..e23035dde30e 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/Podfile b/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/Podfile deleted file mode 100644 index 77432f9eee92..000000000000 --- a/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -platform :ios, '9.0' - -source 'https://cdn.cocoapods.org/' - -use_frameworks! - -target 'SwaggerClient' do - pod "PetstoreClient", :path => "../" - - target 'SwaggerClientTests' do - inherit! :search_paths - end -end diff --git a/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/Podfile.lock b/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/Podfile.lock deleted file mode 100644 index a621fdeec885..000000000000 --- a/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/Podfile.lock +++ /dev/null @@ -1,16 +0,0 @@ -PODS: - - PetstoreClient (1.0.0) - -DEPENDENCIES: - - PetstoreClient (from `../`) - -EXTERNAL SOURCES: - PetstoreClient: - :path: "../" - -SPEC CHECKSUMS: - PetstoreClient: b26b235a3ece06dbf1da99dc67e48aa201659f21 - -PODFILE CHECKSUM: 509bec696cc1d8641751b52e4fe4bef04ac4542c - -COCOAPODS: 1.9.0 diff --git a/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj index 0be50e9f6f19..84e7599d4d34 100644 --- a/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj @@ -3,14 +3,13 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ + A5782C732664FABF00CAA106 /* PetstoreClient in Frameworks */ = {isa = PBXBuildFile; productRef = A5782C722664FABF00CAA106 /* PetstoreClient */; }; A5EA12582419390400E30FC3 /* FileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA12562419390400E30FC3 /* FileUtils.swift */; }; A5EA12592419390400E30FC3 /* UIImage+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA12572419390400E30FC3 /* UIImage+Extras.swift */; }; - B024164FBFF71BF644D4419A /* Pods_SwaggerClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 177A58DD5CF63F2989335DCC /* Pods_SwaggerClient.framework */; }; - B1D0246C8960F47A60098F37 /* Pods_SwaggerClientTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F96A0131101344CC5406CB3 /* Pods_SwaggerClientTests.framework */; }; B596E4BD205657A500B46F03 /* APIHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B596E4BC205657A500B46F03 /* APIHelperTests.swift */; }; EAEC0BC21D4E30CE00C908A3 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAEC0BC11D4E30CE00C908A3 /* AppDelegate.swift */; }; EAEC0BC41D4E30CE00C908A3 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAEC0BC31D4E30CE00C908A3 /* ViewController.swift */; }; @@ -33,11 +32,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 177A58DD5CF63F2989335DCC /* Pods_SwaggerClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2DEFA8828BD4E38FA5262F53 /* Pods-SwaggerClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.release.xcconfig"; sourceTree = ""; }; - 4EF2021609D112A6F5AE0F55 /* Pods-SwaggerClientTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.debug.xcconfig"; sourceTree = ""; }; - 6F96A0131101344CC5406CB3 /* Pods_SwaggerClientTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClientTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D99518E8E05FD856A952698 /* Pods-SwaggerClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.debug.xcconfig"; sourceTree = ""; }; A5EA12562419390400E30FC3 /* FileUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileUtils.swift; sourceTree = ""; }; A5EA12572419390400E30FC3 /* UIImage+Extras.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Extras.swift"; sourceTree = ""; }; B596E4BC205657A500B46F03 /* APIHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIHelperTests.swift; sourceTree = ""; }; @@ -53,7 +47,6 @@ EAEC0BE31D4E330700C908A3 /* PetAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAPITests.swift; sourceTree = ""; }; EAEC0BE51D4E379000C908A3 /* StoreAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreAPITests.swift; sourceTree = ""; }; EAEC0BE71D4E38CB00C908A3 /* UserAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserAPITests.swift; sourceTree = ""; }; - EFD8AB05F53C74985527D117 /* Pods-SwaggerClientTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -61,7 +54,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B024164FBFF71BF644D4419A /* Pods_SwaggerClient.framework in Frameworks */, + A5782C732664FABF00CAA106 /* PetstoreClient in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -69,41 +62,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B1D0246C8960F47A60098F37 /* Pods_SwaggerClientTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 55DC454FF5FFEF8A9CBC1CA3 /* Frameworks */ = { + A5782C712664FABE00CAA106 /* Frameworks */ = { isa = PBXGroup; children = ( - 177A58DD5CF63F2989335DCC /* Pods_SwaggerClient.framework */, - 6F96A0131101344CC5406CB3 /* Pods_SwaggerClientTests.framework */, ); name = Frameworks; sourceTree = ""; }; - CB19142D951AB5DD885404A8 /* Pods */ = { - isa = PBXGroup; - children = ( - 8D99518E8E05FD856A952698 /* Pods-SwaggerClient.debug.xcconfig */, - 2DEFA8828BD4E38FA5262F53 /* Pods-SwaggerClient.release.xcconfig */, - 4EF2021609D112A6F5AE0F55 /* Pods-SwaggerClientTests.debug.xcconfig */, - EFD8AB05F53C74985527D117 /* Pods-SwaggerClientTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; EAEC0BB51D4E30CE00C908A3 = { isa = PBXGroup; children = ( EAEC0BC01D4E30CE00C908A3 /* SwaggerClient */, EAEC0BD51D4E30CE00C908A3 /* SwaggerClientTests */, EAEC0BBF1D4E30CE00C908A3 /* Products */, - CB19142D951AB5DD885404A8 /* Pods */, - 55DC454FF5FFEF8A9CBC1CA3 /* Frameworks */, + A5782C712664FABE00CAA106 /* Frameworks */, ); sourceTree = ""; }; @@ -150,17 +128,18 @@ isa = PBXNativeTarget; buildConfigurationList = EAEC0BDB1D4E30CE00C908A3 /* Build configuration list for PBXNativeTarget "SwaggerClient" */; buildPhases = ( - 898E536ECC2C4811DDDF67C1 /* [CP] Check Pods Manifest.lock */, EAEC0BBA1D4E30CE00C908A3 /* Sources */, EAEC0BBB1D4E30CE00C908A3 /* Frameworks */, EAEC0BBC1D4E30CE00C908A3 /* Resources */, - 8A7961360961F06AADAF17C9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = SwaggerClient; + packageProductDependencies = ( + A5782C722664FABF00CAA106 /* PetstoreClient */, + ); productName = SwaggerClient; productReference = EAEC0BBE1D4E30CE00C908A3 /* SwaggerClient.app */; productType = "com.apple.product-type.application"; @@ -169,7 +148,6 @@ isa = PBXNativeTarget; buildConfigurationList = EAEC0BDE1D4E30CE00C908A3 /* Build configuration list for PBXNativeTarget "SwaggerClientTests" */; buildPhases = ( - 82CB35D52E274C6177DAC0DD /* [CP] Check Pods Manifest.lock */, EAEC0BCE1D4E30CE00C908A3 /* Sources */, EAEC0BCF1D4E30CE00C908A3 /* Frameworks */, EAEC0BD01D4E30CE00C908A3 /* Resources */, @@ -244,63 +222,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 82CB35D52E274C6177DAC0DD /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClientTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 898E536ECC2C4811DDDF67C1 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClient-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8A7961360961F06AADAF17C9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/PetstoreClient/PetstoreClient.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PetstoreClient.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ EAEC0BBA1D4E30CE00C908A3 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -456,7 +377,8 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.3; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 4.2; VALIDATE_PRODUCT = YES; }; @@ -464,11 +386,13 @@ }; EAEC0BDC1D4E30CE00C908A3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8D99518E8E05FD856A952698 /* Pods-SwaggerClient.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -478,11 +402,13 @@ }; EAEC0BDD1D4E30CE00C908A3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2DEFA8828BD4E38FA5262F53 /* Pods-SwaggerClient.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -492,12 +418,15 @@ }; EAEC0BDF1D4E30CE00C908A3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4EF2021609D112A6F5AE0F55 /* Pods-SwaggerClientTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -508,12 +437,15 @@ }; EAEC0BE01D4E30CE00C908A3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EFD8AB05F53C74985527D117 /* Pods-SwaggerClientTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -552,6 +484,13 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + A5782C722664FABF00CAA106 /* PetstoreClient */ = { + isa = XCSwiftPackageProductDependency; + productName = PetstoreClient; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = EAEC0BB61D4E30CE00C908A3 /* Project object */; } diff --git a/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata index 9b3fa18954f7..00ec9b53a7f1 100644 --- a/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata +++ b/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata @@ -2,9 +2,9 @@ + location = "group:.."> + location = "group:SwaggerClient.xcodeproj"> diff --git a/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved b/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..d384b276b4bc --- /dev/null +++ b/samples/client/petstore/swift5/combineLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/default/Cartfile b/samples/client/petstore/swift5/default/Cartfile index 84aaa61ef2d3..843f7adc7794 100644 --- a/samples/client/petstore/swift5/default/Cartfile +++ b/samples/client/petstore/swift5/default/Cartfile @@ -1,2 +1,2 @@ -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/default/Package.resolved b/samples/client/petstore/swift5/default/Package.resolved index 85bb93ced12f..d384b276b4bc 100644 --- a/samples/client/petstore/swift5/default/Package.resolved +++ b/samples/client/petstore/swift5/default/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/Flight-School/AnyCodable", "state": { "branch": null, - "revision": "38b05fc9f86501ef8018aa90cf3d83bd97f74067", - "version": "0.4.0" + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" } } ] diff --git a/samples/client/petstore/swift5/default/Package.swift b/samples/client/petstore/swift5/default/Package.swift index b724838fe8d3..5cde507bdcf9 100644 --- a/samples/client/petstore/swift5/default/Package.swift +++ b/samples/client/petstore/swift5/default/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/default/PetstoreClient.podspec b/samples/client/petstore/swift5/default/PetstoreClient.podspec index de06558efbdb..60f05891b241 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/default/PetstoreClient.podspec @@ -11,5 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 11e807937bdc..e23035dde30e 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/default/SwaggerClientTests/Podfile b/samples/client/petstore/swift5/default/SwaggerClientTests/Podfile deleted file mode 100644 index 77432f9eee92..000000000000 --- a/samples/client/petstore/swift5/default/SwaggerClientTests/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -platform :ios, '9.0' - -source 'https://cdn.cocoapods.org/' - -use_frameworks! - -target 'SwaggerClient' do - pod "PetstoreClient", :path => "../" - - target 'SwaggerClientTests' do - inherit! :search_paths - end -end diff --git a/samples/client/petstore/swift5/default/SwaggerClientTests/Podfile.lock b/samples/client/petstore/swift5/default/SwaggerClientTests/Podfile.lock deleted file mode 100644 index 11d11529e9e4..000000000000 --- a/samples/client/petstore/swift5/default/SwaggerClientTests/Podfile.lock +++ /dev/null @@ -1,16 +0,0 @@ -PODS: - - PetstoreClient (1.0.0) - -DEPENDENCIES: - - PetstoreClient (from `../`) - -EXTERNAL SOURCES: - PetstoreClient: - :path: "../" - -SPEC CHECKSUMS: - PetstoreClient: b26b235a3ece06dbf1da99dc67e48aa201659f21 - -PODFILE CHECKSUM: 509bec696cc1d8641751b52e4fe4bef04ac4542c - -COCOAPODS: 1.10.0 diff --git a/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj index ca2ec05d5dca..7d9d50e1fff6 100644 --- a/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj @@ -3,12 +3,11 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ 1A501F48219C3DC600F372F6 /* DateFormatTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A501F47219C3DC600F372F6 /* DateFormatTests.swift */; }; - 23B2E76564651097BE2FE501 /* Pods_SwaggerClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F98CC8B18E5FA9213F6A68D /* Pods_SwaggerClient.framework */; }; 6D4EFB951C692C6300B96B06 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */; }; 6D4EFB971C692C6300B96B06 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB961C692C6300B96B06 /* ViewController.swift */; }; 6D4EFB9A1C692C6300B96B06 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6D4EFB981C692C6300B96B06 /* Main.storyboard */; }; @@ -17,9 +16,9 @@ 6D4EFBB51C693BE200B96B06 /* PetAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB41C693BE200B96B06 /* PetAPITests.swift */; }; 6D4EFBB71C693BED00B96B06 /* StoreAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */; }; 6D4EFBB91C693BFC00B96B06 /* UserAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */; }; + A5782C752664FB6500CAA106 /* PetstoreClient in Frameworks */ = {isa = PBXBuildFile; productRef = A5782C742664FB6500CAA106 /* PetstoreClient */; }; A5EA124F241901AA00E30FC3 /* UIImage+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA124E241901AA00E30FC3 /* UIImage+Extras.swift */; }; A5EA1251241905F000E30FC3 /* FileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA1250241905F000E30FC3 /* FileUtils.swift */; }; - FB5CCC7EFA680BB2746B695B /* Pods_SwaggerClientTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83FDC034BBA2A07AE9975250 /* Pods_SwaggerClientTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -33,7 +32,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 081E9B893DEB1589CB807EA7 /* Pods-SwaggerClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.debug.xcconfig"; sourceTree = ""; }; 1A501F47219C3DC600F372F6 /* DateFormatTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateFormatTests.swift; sourceTree = ""; }; 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwaggerClient.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -47,14 +45,8 @@ 6D4EFBB41C693BE200B96B06 /* PetAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAPITests.swift; sourceTree = ""; }; 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreAPITests.swift; sourceTree = ""; }; 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserAPITests.swift; sourceTree = ""; }; - 7F98CC8B18E5FA9213F6A68D /* Pods_SwaggerClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 83FDC034BBA2A07AE9975250 /* Pods_SwaggerClientTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClientTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A5EA124E241901AA00E30FC3 /* UIImage+Extras.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Extras.swift"; sourceTree = ""; }; A5EA1250241905F000E30FC3 /* FileUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileUtils.swift; sourceTree = ""; }; - ACB80AC61FA8D8916D4559AA /* Pods-SwaggerClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.release.xcconfig"; sourceTree = ""; }; - C07EC0A94AA0F86D60668B32 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E43FC34A9681D65ED44EE914 /* Pods-SwaggerClientTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.debug.xcconfig"; sourceTree = ""; }; - ED8576754DBB828CAE63EA87 /* Pods-SwaggerClientTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -62,7 +54,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 23B2E76564651097BE2FE501 /* Pods_SwaggerClient.framework in Frameworks */, + A5782C752664FB6500CAA106 /* PetstoreClient in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -70,30 +62,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FB5CCC7EFA680BB2746B695B /* Pods_SwaggerClientTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 203D4495376E4EB72474B091 /* Pods */ = { - isa = PBXGroup; - children = ( - 081E9B893DEB1589CB807EA7 /* Pods-SwaggerClient.debug.xcconfig */, - ACB80AC61FA8D8916D4559AA /* Pods-SwaggerClient.release.xcconfig */, - E43FC34A9681D65ED44EE914 /* Pods-SwaggerClientTests.debug.xcconfig */, - ED8576754DBB828CAE63EA87 /* Pods-SwaggerClientTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; 3FABC56EC0BA84CBF4F99564 /* Frameworks */ = { isa = PBXGroup; children = ( - C07EC0A94AA0F86D60668B32 /* Pods.framework */, - 7F98CC8B18E5FA9213F6A68D /* Pods_SwaggerClient.framework */, - 83FDC034BBA2A07AE9975250 /* Pods_SwaggerClientTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -105,7 +82,6 @@ 6D4EFBA81C692C6300B96B06 /* SwaggerClientTests */, 6D4EFB921C692C6300B96B06 /* Products */, 3FABC56EC0BA84CBF4F99564 /* Frameworks */, - 203D4495376E4EB72474B091 /* Pods */, ); sourceTree = ""; }; @@ -152,17 +128,18 @@ isa = PBXNativeTarget; buildConfigurationList = 6D4EFBAE1C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClient" */; buildPhases = ( - 5BC9214E8D9BA5A427A3775B /* [CP] Check Pods Manifest.lock */, 6D4EFB8D1C692C6300B96B06 /* Sources */, 6D4EFB8E1C692C6300B96B06 /* Frameworks */, 6D4EFB8F1C692C6300B96B06 /* Resources */, - FDCA0F14611FE114BFEBA8BB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = SwaggerClient; + packageProductDependencies = ( + A5782C742664FB6500CAA106 /* PetstoreClient */, + ); productName = SwaggerClient; productReference = 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */; productType = "com.apple.product-type.application"; @@ -171,7 +148,6 @@ isa = PBXNativeTarget; buildConfigurationList = 6D4EFBB11C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClientTests" */; buildPhases = ( - EEDC5E683F9569976B7C1192 /* [CP] Check Pods Manifest.lock */, 6D4EFBA11C692C6300B96B06 /* Sources */, 6D4EFBA21C692C6300B96B06 /* Frameworks */, 6D4EFBA31C692C6300B96B06 /* Resources */, @@ -246,71 +222,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 5BC9214E8D9BA5A427A3775B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClient-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - EEDC5E683F9569976B7C1192 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClientTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - FDCA0F14611FE114BFEBA8BB /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/PetstoreClient/PetstoreClient.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PetstoreClient.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 6D4EFB8D1C692C6300B96B06 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -474,11 +385,13 @@ }; 6D4EFBAF1C692C6300B96B06 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 081E9B893DEB1589CB807EA7 /* Pods-SwaggerClient.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -487,11 +400,13 @@ }; 6D4EFBB01C692C6300B96B06 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ACB80AC61FA8D8916D4559AA /* Pods-SwaggerClient.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -500,11 +415,14 @@ }; 6D4EFBB21C692C6300B96B06 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E43FC34A9681D65ED44EE914 /* Pods-SwaggerClientTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -514,11 +432,14 @@ }; 6D4EFBB31C692C6300B96B06 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED8576754DBB828CAE63EA87 /* Pods-SwaggerClientTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -557,6 +478,13 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + A5782C742664FB6500CAA106 /* PetstoreClient */ = { + isa = XCSwiftPackageProductDependency; + productName = PetstoreClient; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 6D4EFB891C692C6300B96B06 /* Project object */; } diff --git a/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata index 9b3fa18954f7..00ec9b53a7f1 100644 --- a/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata +++ b/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata @@ -2,9 +2,9 @@ + location = "group:.."> + location = "group:SwaggerClient.xcodeproj"> diff --git a/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved b/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..d384b276b4bc --- /dev/null +++ b/samples/client/petstore/swift5/default/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/deprecated/Cartfile b/samples/client/petstore/swift5/deprecated/Cartfile index 84aaa61ef2d3..843f7adc7794 100644 --- a/samples/client/petstore/swift5/deprecated/Cartfile +++ b/samples/client/petstore/swift5/deprecated/Cartfile @@ -1,2 +1,2 @@ -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/deprecated/Package.resolved b/samples/client/petstore/swift5/deprecated/Package.resolved new file mode 100644 index 000000000000..d384b276b4bc --- /dev/null +++ b/samples/client/petstore/swift5/deprecated/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/deprecated/Package.swift b/samples/client/petstore/swift5/deprecated/Package.swift index b724838fe8d3..5cde507bdcf9 100644 --- a/samples/client/petstore/swift5/deprecated/Package.swift +++ b/samples/client/petstore/swift5/deprecated/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient.podspec b/samples/client/petstore/swift5/deprecated/PetstoreClient.podspec index de06558efbdb..60f05891b241 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient.podspec @@ -11,5 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 11e807937bdc..e23035dde30e 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/nonPublicApi/Cartfile b/samples/client/petstore/swift5/nonPublicApi/Cartfile index 84aaa61ef2d3..843f7adc7794 100644 --- a/samples/client/petstore/swift5/nonPublicApi/Cartfile +++ b/samples/client/petstore/swift5/nonPublicApi/Cartfile @@ -1,2 +1,2 @@ -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/nonPublicApi/Package.resolved b/samples/client/petstore/swift5/nonPublicApi/Package.resolved new file mode 100644 index 000000000000..d384b276b4bc --- /dev/null +++ b/samples/client/petstore/swift5/nonPublicApi/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/nonPublicApi/Package.swift b/samples/client/petstore/swift5/nonPublicApi/Package.swift index b724838fe8d3..5cde507bdcf9 100644 --- a/samples/client/petstore/swift5/nonPublicApi/Package.swift +++ b/samples/client/petstore/swift5/nonPublicApi/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient.podspec b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient.podspec index de06558efbdb..60f05891b241 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient.podspec @@ -11,5 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 481f3ce95cec..65ae1c6c6425 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/objcCompatible/Cartfile b/samples/client/petstore/swift5/objcCompatible/Cartfile index 84aaa61ef2d3..843f7adc7794 100644 --- a/samples/client/petstore/swift5/objcCompatible/Cartfile +++ b/samples/client/petstore/swift5/objcCompatible/Cartfile @@ -1,2 +1,2 @@ -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/objcCompatible/Package.resolved b/samples/client/petstore/swift5/objcCompatible/Package.resolved new file mode 100644 index 000000000000..d384b276b4bc --- /dev/null +++ b/samples/client/petstore/swift5/objcCompatible/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/objcCompatible/Package.swift b/samples/client/petstore/swift5/objcCompatible/Package.swift index b724838fe8d3..5cde507bdcf9 100644 --- a/samples/client/petstore/swift5/objcCompatible/Package.swift +++ b/samples/client/petstore/swift5/objcCompatible/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient.podspec b/samples/client/petstore/swift5/objcCompatible/PetstoreClient.podspec index de06558efbdb..60f05891b241 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient.podspec @@ -11,5 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 11e807937bdc..e23035dde30e 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/oneOf/Cartfile b/samples/client/petstore/swift5/oneOf/Cartfile index 84aaa61ef2d3..843f7adc7794 100644 --- a/samples/client/petstore/swift5/oneOf/Cartfile +++ b/samples/client/petstore/swift5/oneOf/Cartfile @@ -1,2 +1,2 @@ -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/oneOf/Package.swift b/samples/client/petstore/swift5/oneOf/Package.swift index b724838fe8d3..5cde507bdcf9 100644 --- a/samples/client/petstore/swift5/oneOf/Package.swift +++ b/samples/client/petstore/swift5/oneOf/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient.podspec b/samples/client/petstore/swift5/oneOf/PetstoreClient.podspec index 5999bbadb384..8355c5f50e6d 100644 --- a/samples/client/petstore/swift5/oneOf/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient.podspec @@ -11,5 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 11e807937bdc..e23035dde30e 100644 --- a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/promisekitLibrary/Cartfile b/samples/client/petstore/swift5/promisekitLibrary/Cartfile index 84476a72b7c7..e8692e8c2045 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/Cartfile +++ b/samples/client/petstore/swift5/promisekitLibrary/Cartfile @@ -1,3 +1,3 @@ -github "mxcl/PromiseKit" ~> 6.13.1 -github "Flight-School/AnyCodable" ~> 0.4.0 +github "mxcl/PromiseKit" ~> 6.15.3 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/promisekitLibrary/Package.resolved b/samples/client/petstore/swift5/promisekitLibrary/Package.resolved index b74611fc3d6e..63ce26f05eba 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/Package.resolved +++ b/samples/client/petstore/swift5/promisekitLibrary/Package.resolved @@ -1,13 +1,22 @@ { "object": { "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + }, { "package": "PromiseKit", "repositoryURL": "https://github.com/mxcl/PromiseKit.git", "state": { "branch": null, - "revision": "80963d4317bcdc03891e0fbaa744f20511d1bc08", - "version": "6.12.0" + "revision": "d2f7ba14bcdc45e18f4f60ad9df883fb9055f081", + "version": "6.15.3" } } ] diff --git a/samples/client/petstore/swift5/promisekitLibrary/Package.swift b/samples/client/petstore/swift5/promisekitLibrary/Package.swift index d88580abc72c..831b4d0a740c 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/Package.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/Package.swift @@ -19,8 +19,8 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), - .package(url: "https://github.com/mxcl/PromiseKit.git", from: "6.12.0"), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), + .package(url: "https://github.com/mxcl/PromiseKit.git", from: "6.15.3"), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient.podspec index 44b020f516e8..5e3450043c00 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient.podspec @@ -11,6 +11,6 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'PromiseKit/CorePromise', '~> 6.13.1' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'PromiseKit/CorePromise', '~> 6.15.3' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index e03e70ec7688..68c3c6ee7e40 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -202,46 +202,3 @@ extension RequestBuilder { return deferred.promise } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/Podfile b/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/Podfile deleted file mode 100644 index 77432f9eee92..000000000000 --- a/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -platform :ios, '9.0' - -source 'https://cdn.cocoapods.org/' - -use_frameworks! - -target 'SwaggerClient' do - pod "PetstoreClient", :path => "../" - - target 'SwaggerClientTests' do - inherit! :search_paths - end -end diff --git a/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/Podfile.lock b/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/Podfile.lock deleted file mode 100644 index c75f76b2fb89..000000000000 --- a/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/Podfile.lock +++ /dev/null @@ -1,23 +0,0 @@ -PODS: - - PetstoreClient (1.0.0): - - PromiseKit/CorePromise (~> 6.13.1) - - PromiseKit/CorePromise (6.13.1) - -DEPENDENCIES: - - PetstoreClient (from `../`) - -SPEC REPOS: - trunk: - - PromiseKit - -EXTERNAL SOURCES: - PetstoreClient: - :path: "../" - -SPEC CHECKSUMS: - PetstoreClient: bf095c434cf89014d1b574779fcc7701a551fcce - PromiseKit: 28fda91c973cc377875d8c0ea4f973013c05b6db - -PODFILE CHECKSUM: 509bec696cc1d8641751b52e4fe4bef04ac4542c - -COCOAPODS: 1.10.0 diff --git a/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj index 47fa20866cea..6013383e0d12 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj @@ -3,11 +3,10 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ - 54DA06C1D70D78EC0EC72B61 /* Pods_SwaggerClientTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F65B6638217EDDC99D103B16 /* Pods_SwaggerClientTests.framework */; }; 6D4EFB951C692C6300B96B06 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */; }; 6D4EFB971C692C6300B96B06 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB961C692C6300B96B06 /* ViewController.swift */; }; 6D4EFB9A1C692C6300B96B06 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6D4EFB981C692C6300B96B06 /* Main.storyboard */; }; @@ -16,7 +15,7 @@ 6D4EFBB51C693BE200B96B06 /* PetAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB41C693BE200B96B06 /* PetAPITests.swift */; }; 6D4EFBB71C693BED00B96B06 /* StoreAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */; }; 6D4EFBB91C693BFC00B96B06 /* UserAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */; }; - 751C65B82F596107A3DC8ED9 /* Pods_SwaggerClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F60AECFF321A25553B6A5B0 /* Pods_SwaggerClient.framework */; }; + A5782C6B2664F87200CAA106 /* PetstoreClient in Frameworks */ = {isa = PBXBuildFile; productRef = A5782C6A2664F87200CAA106 /* PetstoreClient */; }; A5EA125C2419398500E30FC3 /* UIImage+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA125A2419398500E30FC3 /* UIImage+Extras.swift */; }; A5EA125D2419398500E30FC3 /* FileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA125B2419398500E30FC3 /* FileUtils.swift */; }; /* End PBXBuildFile section */ @@ -32,7 +31,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 289E8A9E9C0BB66AD190C7C6 /* Pods-SwaggerClientTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.debug.xcconfig"; sourceTree = ""; }; 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwaggerClient.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 6D4EFB961C692C6300B96B06 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; @@ -45,14 +43,8 @@ 6D4EFBB41C693BE200B96B06 /* PetAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAPITests.swift; sourceTree = ""; }; 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreAPITests.swift; sourceTree = ""; }; 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserAPITests.swift; sourceTree = ""; }; - 8F60AECFF321A25553B6A5B0 /* Pods_SwaggerClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A5EA125A2419398500E30FC3 /* UIImage+Extras.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Extras.swift"; sourceTree = ""; }; A5EA125B2419398500E30FC3 /* FileUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileUtils.swift; sourceTree = ""; }; - A638467ACFB30852DEA51F7A /* Pods-SwaggerClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.debug.xcconfig"; sourceTree = ""; }; - B4B2BEC2ECA535C616F2F3FE /* Pods-SwaggerClientTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.release.xcconfig"; sourceTree = ""; }; - C07EC0A94AA0F86D60668B32 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F65B6638217EDDC99D103B16 /* Pods_SwaggerClientTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClientTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FC60BDC7328C2AA916F25840 /* Pods-SwaggerClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -60,7 +52,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 751C65B82F596107A3DC8ED9 /* Pods_SwaggerClient.framework in Frameworks */, + A5782C6B2664F87200CAA106 /* PetstoreClient in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -68,30 +60,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 54DA06C1D70D78EC0EC72B61 /* Pods_SwaggerClientTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0CAA98BEFA303B94D3664C7D /* Pods */ = { - isa = PBXGroup; - children = ( - A638467ACFB30852DEA51F7A /* Pods-SwaggerClient.debug.xcconfig */, - FC60BDC7328C2AA916F25840 /* Pods-SwaggerClient.release.xcconfig */, - 289E8A9E9C0BB66AD190C7C6 /* Pods-SwaggerClientTests.debug.xcconfig */, - B4B2BEC2ECA535C616F2F3FE /* Pods-SwaggerClientTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; 3FABC56EC0BA84CBF4F99564 /* Frameworks */ = { isa = PBXGroup; children = ( - C07EC0A94AA0F86D60668B32 /* Pods.framework */, - 8F60AECFF321A25553B6A5B0 /* Pods_SwaggerClient.framework */, - F65B6638217EDDC99D103B16 /* Pods_SwaggerClientTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -103,7 +80,6 @@ 6D4EFBA81C692C6300B96B06 /* SwaggerClientTests */, 6D4EFB921C692C6300B96B06 /* Products */, 3FABC56EC0BA84CBF4F99564 /* Frameworks */, - 0CAA98BEFA303B94D3664C7D /* Pods */, ); sourceTree = ""; }; @@ -149,17 +125,18 @@ isa = PBXNativeTarget; buildConfigurationList = 6D4EFBAE1C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClient" */; buildPhases = ( - 1F03F780DC2D9727E5E64BA9 /* [CP] Check Pods Manifest.lock */, 6D4EFB8D1C692C6300B96B06 /* Sources */, 6D4EFB8E1C692C6300B96B06 /* Frameworks */, 6D4EFB8F1C692C6300B96B06 /* Resources */, - 4485A75250058E2D5BBDF63F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = SwaggerClient; + packageProductDependencies = ( + A5782C6A2664F87200CAA106 /* PetstoreClient */, + ); productName = SwaggerClient; productReference = 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */; productType = "com.apple.product-type.application"; @@ -168,7 +145,6 @@ isa = PBXNativeTarget; buildConfigurationList = 6D4EFBB11C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClientTests" */; buildPhases = ( - 79FE27B09B2DD354C831BD49 /* [CP] Check Pods Manifest.lock */, 6D4EFBA11C692C6300B96B06 /* Sources */, 6D4EFBA21C692C6300B96B06 /* Frameworks */, 6D4EFBA31C692C6300B96B06 /* Resources */, @@ -243,65 +219,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 1F03F780DC2D9727E5E64BA9 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClient-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 4485A75250058E2D5BBDF63F /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/PetstoreClient/PetstoreClient.framework", - "${BUILT_PRODUCTS_DIR}/PromiseKit/PromiseKit.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PetstoreClient.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PromiseKit.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 79FE27B09B2DD354C831BD49 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClientTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 6D4EFB8D1C692C6300B96B06 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -455,7 +372,8 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.2; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; @@ -464,11 +382,13 @@ }; 6D4EFBAF1C692C6300B96B06 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A638467ACFB30852DEA51F7A /* Pods-SwaggerClient.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -477,11 +397,13 @@ }; 6D4EFBB01C692C6300B96B06 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FC60BDC7328C2AA916F25840 /* Pods-SwaggerClient.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -490,11 +412,14 @@ }; 6D4EFBB21C692C6300B96B06 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 289E8A9E9C0BB66AD190C7C6 /* Pods-SwaggerClientTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -504,11 +429,14 @@ }; 6D4EFBB31C692C6300B96B06 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B4B2BEC2ECA535C616F2F3FE /* Pods-SwaggerClientTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -547,6 +475,13 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + A5782C6A2664F87200CAA106 /* PetstoreClient */ = { + isa = XCSwiftPackageProductDependency; + productName = PetstoreClient; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 6D4EFB891C692C6300B96B06 /* Project object */; } diff --git a/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata index 9b3fa18954f7..00ec9b53a7f1 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata +++ b/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata @@ -2,9 +2,9 @@ + location = "group:.."> + location = "group:SwaggerClient.xcodeproj"> diff --git a/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved b/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..63ce26f05eba --- /dev/null +++ b/samples/client/petstore/swift5/promisekitLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,25 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + }, + { + "package": "PromiseKit", + "repositoryURL": "https://github.com/mxcl/PromiseKit.git", + "state": { + "branch": null, + "revision": "d2f7ba14bcdc45e18f4f60ad9df883fb9055f081", + "version": "6.15.3" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/readonlyProperties/Cartfile b/samples/client/petstore/swift5/readonlyProperties/Cartfile index 84aaa61ef2d3..843f7adc7794 100644 --- a/samples/client/petstore/swift5/readonlyProperties/Cartfile +++ b/samples/client/petstore/swift5/readonlyProperties/Cartfile @@ -1,2 +1,2 @@ -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/readonlyProperties/Package.swift b/samples/client/petstore/swift5/readonlyProperties/Package.swift index b724838fe8d3..5cde507bdcf9 100644 --- a/samples/client/petstore/swift5/readonlyProperties/Package.swift +++ b/samples/client/petstore/swift5/readonlyProperties/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec index de06558efbdb..60f05891b241 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient.podspec @@ -11,5 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 11e807937bdc..e23035dde30e 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/resultLibrary/Cartfile b/samples/client/petstore/swift5/resultLibrary/Cartfile index 84aaa61ef2d3..843f7adc7794 100644 --- a/samples/client/petstore/swift5/resultLibrary/Cartfile +++ b/samples/client/petstore/swift5/resultLibrary/Cartfile @@ -1,2 +1,2 @@ -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/resultLibrary/Package.resolved b/samples/client/petstore/swift5/resultLibrary/Package.resolved new file mode 100644 index 000000000000..d384b276b4bc --- /dev/null +++ b/samples/client/petstore/swift5/resultLibrary/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/resultLibrary/Package.swift b/samples/client/petstore/swift5/resultLibrary/Package.swift index b724838fe8d3..5cde507bdcf9 100644 --- a/samples/client/petstore/swift5/resultLibrary/Package.swift +++ b/samples/client/petstore/swift5/resultLibrary/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/resultLibrary/PetstoreClient.podspec index de06558efbdb..60f05891b241 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient.podspec @@ -11,5 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 11e807937bdc..e23035dde30e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/rxswiftLibrary/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift5/rxswiftLibrary/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000000..919434a6254f --- /dev/null +++ b/samples/client/petstore/swift5/rxswiftLibrary/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/samples/client/petstore/swift5/rxswiftLibrary/Cartfile b/samples/client/petstore/swift5/rxswiftLibrary/Cartfile index 2fd5cfcce547..a49f6c9da038 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/Cartfile +++ b/samples/client/petstore/swift5/rxswiftLibrary/Cartfile @@ -1,3 +1,3 @@ -github "ReactiveX/RxSwift" ~> 5.1.1 -github "Flight-School/AnyCodable" ~> 0.4.0 +github "ReactiveX/RxSwift" ~> 6.2.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/rxswiftLibrary/Package.resolved b/samples/client/petstore/swift5/rxswiftLibrary/Package.resolved index e3afef806b8d..231d85369677 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/Package.resolved +++ b/samples/client/petstore/swift5/rxswiftLibrary/Package.resolved @@ -1,13 +1,22 @@ { "object": { "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + }, { "package": "RxSwift", "repositoryURL": "https://github.com/ReactiveX/RxSwift.git", "state": { "branch": null, - "revision": "b3e888b4972d9bc76495dd74d30a8c7fad4b9395", - "version": "5.0.1" + "revision": "7c17a6ccca06b5c107cfa4284e634562ddaf5951", + "version": "6.2.0" } } ] diff --git a/samples/client/petstore/swift5/rxswiftLibrary/Package.swift b/samples/client/petstore/swift5/rxswiftLibrary/Package.swift index f3bcac26bb04..36541008daaa 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/Package.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/Package.swift @@ -19,8 +19,8 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), - .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "5.0.0"), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), + .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.2.0"), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient.podspec index 2cd686660982..32a1ff8ae6f4 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient.podspec @@ -11,6 +11,6 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'RxSwift', '~> 5.1.1' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'RxSwift', '~> 6.2.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 71e752b2e9f3..dc0913d093f8 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -100,46 +100,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/Podfile b/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/Podfile deleted file mode 100644 index 77432f9eee92..000000000000 --- a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -platform :ios, '9.0' - -source 'https://cdn.cocoapods.org/' - -use_frameworks! - -target 'SwaggerClient' do - pod "PetstoreClient", :path => "../" - - target 'SwaggerClientTests' do - inherit! :search_paths - end -end diff --git a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/Podfile.lock b/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/Podfile.lock deleted file mode 100644 index be3757ec1f40..000000000000 --- a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/Podfile.lock +++ /dev/null @@ -1,23 +0,0 @@ -PODS: - - PetstoreClient (1.0.0): - - RxSwift (~> 5.1.1) - - RxSwift (5.1.1) - -DEPENDENCIES: - - PetstoreClient (from `../`) - -SPEC REPOS: - trunk: - - RxSwift - -EXTERNAL SOURCES: - PetstoreClient: - :path: "../" - -SPEC CHECKSUMS: - PetstoreClient: f3d073d9543d90440a155feec649c16b98d84c31 - RxSwift: 81470a2074fa8780320ea5fe4102807cb7118178 - -PODFILE CHECKSUM: 509bec696cc1d8641751b52e4fe4bef04ac4542c - -COCOAPODS: 1.10.0 diff --git a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj index f04b8be9b6a9..a9c4af1c818d 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj @@ -3,14 +3,13 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ + A5782C702664FA2300CAA106 /* PetstoreClient in Frameworks */ = {isa = PBXBuildFile; productRef = A5782C6F2664FA2300CAA106 /* PetstoreClient */; }; A5EA1260241941BE00E30FC3 /* FileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA125E241941BE00E30FC3 /* FileUtils.swift */; }; A5EA1261241941BE00E30FC3 /* UIImage+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA125F241941BE00E30FC3 /* UIImage+Extras.swift */; }; - B024164FBFF71BF644D4419A /* Pods_SwaggerClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 177A58DD5CF63F2989335DCC /* Pods_SwaggerClient.framework */; }; - B1D0246C8960F47A60098F37 /* Pods_SwaggerClientTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F96A0131101344CC5406CB3 /* Pods_SwaggerClientTests.framework */; }; B596E4BD205657A500B46F03 /* APIHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B596E4BC205657A500B46F03 /* APIHelperTests.swift */; }; EAEC0BC21D4E30CE00C908A3 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAEC0BC11D4E30CE00C908A3 /* AppDelegate.swift */; }; EAEC0BC41D4E30CE00C908A3 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAEC0BC31D4E30CE00C908A3 /* ViewController.swift */; }; @@ -33,11 +32,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 177A58DD5CF63F2989335DCC /* Pods_SwaggerClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2DEFA8828BD4E38FA5262F53 /* Pods-SwaggerClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.release.xcconfig"; sourceTree = ""; }; - 4EF2021609D112A6F5AE0F55 /* Pods-SwaggerClientTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.debug.xcconfig"; sourceTree = ""; }; - 6F96A0131101344CC5406CB3 /* Pods_SwaggerClientTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClientTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D99518E8E05FD856A952698 /* Pods-SwaggerClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.debug.xcconfig"; sourceTree = ""; }; A5EA125E241941BE00E30FC3 /* FileUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileUtils.swift; sourceTree = ""; }; A5EA125F241941BE00E30FC3 /* UIImage+Extras.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Extras.swift"; sourceTree = ""; }; B596E4BC205657A500B46F03 /* APIHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIHelperTests.swift; sourceTree = ""; }; @@ -53,7 +47,6 @@ EAEC0BE31D4E330700C908A3 /* PetAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAPITests.swift; sourceTree = ""; }; EAEC0BE51D4E379000C908A3 /* StoreAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreAPITests.swift; sourceTree = ""; }; EAEC0BE71D4E38CB00C908A3 /* UserAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserAPITests.swift; sourceTree = ""; }; - EFD8AB05F53C74985527D117 /* Pods-SwaggerClientTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -61,7 +54,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B024164FBFF71BF644D4419A /* Pods_SwaggerClient.framework in Frameworks */, + A5782C702664FA2300CAA106 /* PetstoreClient in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -69,41 +62,26 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B1D0246C8960F47A60098F37 /* Pods_SwaggerClientTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 55DC454FF5FFEF8A9CBC1CA3 /* Frameworks */ = { + A5782C6E2664FA2300CAA106 /* Frameworks */ = { isa = PBXGroup; children = ( - 177A58DD5CF63F2989335DCC /* Pods_SwaggerClient.framework */, - 6F96A0131101344CC5406CB3 /* Pods_SwaggerClientTests.framework */, ); name = Frameworks; sourceTree = ""; }; - CB19142D951AB5DD885404A8 /* Pods */ = { - isa = PBXGroup; - children = ( - 8D99518E8E05FD856A952698 /* Pods-SwaggerClient.debug.xcconfig */, - 2DEFA8828BD4E38FA5262F53 /* Pods-SwaggerClient.release.xcconfig */, - 4EF2021609D112A6F5AE0F55 /* Pods-SwaggerClientTests.debug.xcconfig */, - EFD8AB05F53C74985527D117 /* Pods-SwaggerClientTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; EAEC0BB51D4E30CE00C908A3 = { isa = PBXGroup; children = ( EAEC0BC01D4E30CE00C908A3 /* SwaggerClient */, EAEC0BD51D4E30CE00C908A3 /* SwaggerClientTests */, EAEC0BBF1D4E30CE00C908A3 /* Products */, - CB19142D951AB5DD885404A8 /* Pods */, - 55DC454FF5FFEF8A9CBC1CA3 /* Frameworks */, + A5782C6E2664FA2300CAA106 /* Frameworks */, ); sourceTree = ""; }; @@ -150,17 +128,18 @@ isa = PBXNativeTarget; buildConfigurationList = EAEC0BDB1D4E30CE00C908A3 /* Build configuration list for PBXNativeTarget "SwaggerClient" */; buildPhases = ( - 898E536ECC2C4811DDDF67C1 /* [CP] Check Pods Manifest.lock */, EAEC0BBA1D4E30CE00C908A3 /* Sources */, EAEC0BBB1D4E30CE00C908A3 /* Frameworks */, EAEC0BBC1D4E30CE00C908A3 /* Resources */, - 8A7961360961F06AADAF17C9 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = SwaggerClient; + packageProductDependencies = ( + A5782C6F2664FA2300CAA106 /* PetstoreClient */, + ); productName = SwaggerClient; productReference = EAEC0BBE1D4E30CE00C908A3 /* SwaggerClient.app */; productType = "com.apple.product-type.application"; @@ -169,7 +148,6 @@ isa = PBXNativeTarget; buildConfigurationList = EAEC0BDE1D4E30CE00C908A3 /* Build configuration list for PBXNativeTarget "SwaggerClientTests" */; buildPhases = ( - 82CB35D52E274C6177DAC0DD /* [CP] Check Pods Manifest.lock */, EAEC0BCE1D4E30CE00C908A3 /* Sources */, EAEC0BCF1D4E30CE00C908A3 /* Frameworks */, EAEC0BD01D4E30CE00C908A3 /* Resources */, @@ -244,65 +222,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 82CB35D52E274C6177DAC0DD /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClientTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 898E536ECC2C4811DDDF67C1 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClient-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 8A7961360961F06AADAF17C9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/PetstoreClient/PetstoreClient.framework", - "${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PetstoreClient.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ EAEC0BBA1D4E30CE00C908A3 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -458,7 +377,8 @@ IPHONEOS_DEPLOYMENT_TARGET = 9.3; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 4.2; VALIDATE_PRODUCT = YES; }; @@ -466,11 +386,13 @@ }; EAEC0BDC1D4E30CE00C908A3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8D99518E8E05FD856A952698 /* Pods-SwaggerClient.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -480,11 +402,13 @@ }; EAEC0BDD1D4E30CE00C908A3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2DEFA8828BD4E38FA5262F53 /* Pods-SwaggerClient.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -494,12 +418,15 @@ }; EAEC0BDF1D4E30CE00C908A3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4EF2021609D112A6F5AE0F55 /* Pods-SwaggerClientTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -510,12 +437,15 @@ }; EAEC0BE01D4E30CE00C908A3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EFD8AB05F53C74985527D117 /* Pods-SwaggerClientTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ENABLE_MODULES = YES; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -554,6 +484,13 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + A5782C6F2664FA2300CAA106 /* PetstoreClient */ = { + isa = XCSwiftPackageProductDependency; + productName = PetstoreClient; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = EAEC0BB61D4E30CE00C908A3 /* Project object */; } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata index 9b3fa18954f7..00ec9b53a7f1 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata +++ b/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata @@ -2,9 +2,9 @@ + location = "group:.."> + location = "group:SwaggerClient.xcodeproj"> diff --git a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved b/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..231d85369677 --- /dev/null +++ b/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,25 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + }, + { + "package": "RxSwift", + "repositoryURL": "https://github.com/ReactiveX/RxSwift.git", + "state": { + "branch": null, + "revision": "7c17a6ccca06b5c107cfa4284e634562ddaf5951", + "version": "6.2.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift b/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift index fb68168b697c..db7609caf07d 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/SwaggerClientTests/SwaggerClientTests/PetAPITests.swift @@ -62,7 +62,7 @@ class PetAPITests: XCTestCase { expectation.fulfill() }, onError: { _ in XCTFail("error getting pet") - }).disposed(by: disposeBag) + }).disposed(by: disposeBag) self.waitForExpectations(timeout: testTimeout, handler: nil) } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Cartfile b/samples/client/petstore/swift5/urlsessionLibrary/Cartfile index 84aaa61ef2d3..843f7adc7794 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Cartfile +++ b/samples/client/petstore/swift5/urlsessionLibrary/Cartfile @@ -1,2 +1,2 @@ -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Package.resolved b/samples/client/petstore/swift5/urlsessionLibrary/Package.resolved new file mode 100644 index 000000000000..d384b276b4bc --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Package.swift b/samples/client/petstore/swift5/urlsessionLibrary/Package.swift index 99e2642257ad..eea99ce549e1 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Package.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec b/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec index 66ef37061f85..350282d85aee 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient.podspec @@ -11,5 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'Sources/PetstoreClient/**/*.swift' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift index 11e807937bdc..e23035dde30e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif diff --git a/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/Podfile b/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/Podfile deleted file mode 100644 index 77432f9eee92..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -platform :ios, '9.0' - -source 'https://cdn.cocoapods.org/' - -use_frameworks! - -target 'SwaggerClient' do - pod "PetstoreClient", :path => "../" - - target 'SwaggerClientTests' do - inherit! :search_paths - end -end diff --git a/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/Podfile.lock b/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/Podfile.lock deleted file mode 100644 index a621fdeec885..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/Podfile.lock +++ /dev/null @@ -1,16 +0,0 @@ -PODS: - - PetstoreClient (1.0.0) - -DEPENDENCIES: - - PetstoreClient (from `../`) - -EXTERNAL SOURCES: - PetstoreClient: - :path: "../" - -SPEC CHECKSUMS: - PetstoreClient: b26b235a3ece06dbf1da99dc67e48aa201659f21 - -PODFILE CHECKSUM: 509bec696cc1d8641751b52e4fe4bef04ac4542c - -COCOAPODS: 1.9.0 diff --git a/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj b/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj index 9c371f929dbf..aab810debd09 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj +++ b/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcodeproj/project.pbxproj @@ -3,12 +3,11 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ 1A501F48219C3DC600F372F6 /* DateFormatTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A501F47219C3DC600F372F6 /* DateFormatTests.swift */; }; - 23B2E76564651097BE2FE501 /* Pods_SwaggerClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F98CC8B18E5FA9213F6A68D /* Pods_SwaggerClient.framework */; }; 6D4EFB951C692C6300B96B06 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */; }; 6D4EFB971C692C6300B96B06 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFB961C692C6300B96B06 /* ViewController.swift */; }; 6D4EFB9A1C692C6300B96B06 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6D4EFB981C692C6300B96B06 /* Main.storyboard */; }; @@ -18,9 +17,9 @@ 6D4EFBB71C693BED00B96B06 /* StoreAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */; }; 6D4EFBB91C693BFC00B96B06 /* UserAPITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */; }; A5465867259E09C600C3929B /* BearerDecodableRequestBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5465866259E09C600C3929B /* BearerDecodableRequestBuilder.swift */; }; + A5782C772664FBA800CAA106 /* PetstoreClient in Frameworks */ = {isa = PBXBuildFile; productRef = A5782C762664FBA800CAA106 /* PetstoreClient */; }; A5EA12642419439700E30FC3 /* FileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA12622419439700E30FC3 /* FileUtils.swift */; }; A5EA12652419439700E30FC3 /* UIImage+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5EA12632419439700E30FC3 /* UIImage+Extras.swift */; }; - FB5CCC7EFA680BB2746B695B /* Pods_SwaggerClientTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83FDC034BBA2A07AE9975250 /* Pods_SwaggerClientTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -34,7 +33,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 081E9B893DEB1589CB807EA7 /* Pods-SwaggerClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.debug.xcconfig"; sourceTree = ""; }; 1A501F47219C3DC600F372F6 /* DateFormatTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DateFormatTests.swift; sourceTree = ""; }; 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwaggerClient.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6D4EFB941C692C6300B96B06 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -48,15 +46,9 @@ 6D4EFBB41C693BE200B96B06 /* PetAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PetAPITests.swift; sourceTree = ""; }; 6D4EFBB61C693BED00B96B06 /* StoreAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoreAPITests.swift; sourceTree = ""; }; 6D4EFBB81C693BFC00B96B06 /* UserAPITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserAPITests.swift; sourceTree = ""; }; - 7F98CC8B18E5FA9213F6A68D /* Pods_SwaggerClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 83FDC034BBA2A07AE9975250 /* Pods_SwaggerClientTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwaggerClientTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A5465866259E09C600C3929B /* BearerDecodableRequestBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BearerDecodableRequestBuilder.swift; sourceTree = ""; }; A5EA12622419439700E30FC3 /* FileUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileUtils.swift; sourceTree = ""; }; A5EA12632419439700E30FC3 /* UIImage+Extras.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Extras.swift"; sourceTree = ""; }; - ACB80AC61FA8D8916D4559AA /* Pods-SwaggerClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClient.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient.release.xcconfig"; sourceTree = ""; }; - C07EC0A94AA0F86D60668B32 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E43FC34A9681D65ED44EE914 /* Pods-SwaggerClientTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.debug.xcconfig"; sourceTree = ""; }; - ED8576754DBB828CAE63EA87 /* Pods-SwaggerClientTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwaggerClientTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwaggerClientTests/Pods-SwaggerClientTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -64,7 +56,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 23B2E76564651097BE2FE501 /* Pods_SwaggerClient.framework in Frameworks */, + A5782C772664FBA800CAA106 /* PetstoreClient in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -72,30 +64,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FB5CCC7EFA680BB2746B695B /* Pods_SwaggerClientTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 203D4495376E4EB72474B091 /* Pods */ = { - isa = PBXGroup; - children = ( - 081E9B893DEB1589CB807EA7 /* Pods-SwaggerClient.debug.xcconfig */, - ACB80AC61FA8D8916D4559AA /* Pods-SwaggerClient.release.xcconfig */, - E43FC34A9681D65ED44EE914 /* Pods-SwaggerClientTests.debug.xcconfig */, - ED8576754DBB828CAE63EA87 /* Pods-SwaggerClientTests.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; 3FABC56EC0BA84CBF4F99564 /* Frameworks */ = { isa = PBXGroup; children = ( - C07EC0A94AA0F86D60668B32 /* Pods.framework */, - 7F98CC8B18E5FA9213F6A68D /* Pods_SwaggerClient.framework */, - 83FDC034BBA2A07AE9975250 /* Pods_SwaggerClientTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -107,7 +84,6 @@ 6D4EFBA81C692C6300B96B06 /* SwaggerClientTests */, 6D4EFB921C692C6300B96B06 /* Products */, 3FABC56EC0BA84CBF4F99564 /* Frameworks */, - 203D4495376E4EB72474B091 /* Pods */, ); sourceTree = ""; }; @@ -155,17 +131,18 @@ isa = PBXNativeTarget; buildConfigurationList = 6D4EFBAE1C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClient" */; buildPhases = ( - 5BC9214E8D9BA5A427A3775B /* [CP] Check Pods Manifest.lock */, 6D4EFB8D1C692C6300B96B06 /* Sources */, 6D4EFB8E1C692C6300B96B06 /* Frameworks */, 6D4EFB8F1C692C6300B96B06 /* Resources */, - FDCA0F14611FE114BFEBA8BB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = SwaggerClient; + packageProductDependencies = ( + A5782C762664FBA800CAA106 /* PetstoreClient */, + ); productName = SwaggerClient; productReference = 6D4EFB911C692C6300B96B06 /* SwaggerClient.app */; productType = "com.apple.product-type.application"; @@ -174,7 +151,6 @@ isa = PBXNativeTarget; buildConfigurationList = 6D4EFBB11C692C6300B96B06 /* Build configuration list for PBXNativeTarget "SwaggerClientTests" */; buildPhases = ( - EEDC5E683F9569976B7C1192 /* [CP] Check Pods Manifest.lock */, 6D4EFBA11C692C6300B96B06 /* Sources */, 6D4EFBA21C692C6300B96B06 /* Frameworks */, 6D4EFBA31C692C6300B96B06 /* Resources */, @@ -249,71 +225,6 @@ }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 5BC9214E8D9BA5A427A3775B /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClient-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - EEDC5E683F9569976B7C1192 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-SwaggerClientTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - FDCA0F14611FE114BFEBA8BB /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/PetstoreClient/PetstoreClient.framework", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PetstoreClient.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SwaggerClient/Pods-SwaggerClient-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 6D4EFB8D1C692C6300B96B06 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -478,11 +389,13 @@ }; 6D4EFBAF1C692C6300B96B06 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 081E9B893DEB1589CB807EA7 /* Pods-SwaggerClient.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -491,11 +404,13 @@ }; 6D4EFBB01C692C6300B96B06 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ACB80AC61FA8D8916D4559AA /* Pods-SwaggerClient.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SwaggerClient/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClient; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -504,11 +419,14 @@ }; 6D4EFBB21C692C6300B96B06 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E43FC34A9681D65ED44EE914 /* Pods-SwaggerClientTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -518,11 +436,14 @@ }; 6D4EFBB31C692C6300B96B06 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED8576754DBB828CAE63EA87 /* Pods-SwaggerClientTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; INFOPLIST_FILE = SwaggerClientTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.swagger.SwaggerClientTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -561,6 +482,13 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + A5782C762664FBA800CAA106 /* PetstoreClient */ = { + isa = XCSwiftPackageProductDependency; + productName = PetstoreClient; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 6D4EFB891C692C6300B96B06 /* Project object */; } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata index 9b3fa18954f7..00ec9b53a7f1 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata +++ b/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/contents.xcworkspacedata @@ -2,9 +2,9 @@ + location = "group:.."> + location = "group:SwaggerClient.xcodeproj"> diff --git a/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved b/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000000..d384b276b4bc --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/SwaggerClientTests/SwaggerClient.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "AnyCodable", + "repositoryURL": "https://github.com/Flight-School/AnyCodable", + "state": { + "branch": null, + "revision": "876d162385e9862ae8b3c8d65dc301312b040005", + "version": "0.6.0" + } + } + ] + }, + "version": 1 +} diff --git a/samples/client/petstore/swift5/x-swift-hashable/Cartfile b/samples/client/petstore/swift5/x-swift-hashable/Cartfile index 84aaa61ef2d3..843f7adc7794 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/Cartfile +++ b/samples/client/petstore/swift5/x-swift-hashable/Cartfile @@ -1,2 +1,2 @@ -github "Flight-School/AnyCodable" ~> 0.4.0 +github "Flight-School/AnyCodable" ~> 0.6.0 diff --git a/samples/client/petstore/swift5/x-swift-hashable/Package.swift b/samples/client/petstore/swift5/x-swift-hashable/Package.swift index b724838fe8d3..5cde507bdcf9 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/Package.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // Dependencies declare other packages that this package depends on. - .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.4.0")), + .package(url: "https://github.com/Flight-School/AnyCodable", .exact("0.6.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient.podspec b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient.podspec index de06558efbdb..60f05891b241 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient.podspec +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient.podspec @@ -11,5 +11,5 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/openapitools/openapi-generator' s.summary = 'PetstoreClient' s.source_files = 'PetstoreClient/Classes/**/*.swift' - s.dependency 'AnyCodable-FlightSchool', '~> 0.4.0' + s.dependency 'AnyCodable-FlightSchool', '~> 0.6.0' end diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift index 11e807937bdc..e23035dde30e 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Extensions.swift @@ -186,46 +186,3 @@ extension HTTPURLResponse { return Array(200 ..< 300).contains(statusCode) } } - -#if canImport(AnyCodable) -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} -#endif From 463ae10c4a52622bdb62f1bc247fa541ccad2843 Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Tue, 1 Jun 2021 03:09:48 +0100 Subject: [PATCH 180/186] [kotlin][client] update dependencies (#9629) * [kotlin][client] update dependencies * [kotlin][client] update sample projects * [kotlin][client] fix update dependencies --- .../kotlin-client/build.gradle.mustache | 62 +++++++++---------- .../auth/OAuthOkHttpClient.kt.mustache | 8 +-- .../client/petstore/kotlin-gson/build.gradle | 10 +-- .../petstore/kotlin-jackson/build.gradle | 14 ++--- .../kotlin-json-request-string/build.gradle | 12 ++-- .../build.gradle | 10 +-- .../kotlin-moshi-codegen/build.gradle | 12 ++-- .../petstore/kotlin-nonpublic/build.gradle | 12 ++-- .../petstore/kotlin-nullable/build.gradle | 12 ++-- .../petstore/kotlin-okhttp3/build.gradle | 12 ++-- .../build.gradle | 20 +++--- .../client/auth/OAuthOkHttpClient.kt | 8 +-- .../kotlin-retrofit2-rx3/build.gradle | 28 ++++----- .../client/auth/OAuthOkHttpClient.kt | 8 +-- .../petstore/kotlin-retrofit2/build.gradle | 22 +++---- .../client/auth/OAuthOkHttpClient.kt | 8 +-- .../petstore/kotlin-string/build.gradle | 12 ++-- .../petstore/kotlin-threetenbp/build.gradle | 14 ++--- .../kotlin-uppercase-enum/build.gradle | 12 ++-- samples/client/petstore/kotlin/build.gradle | 12 ++-- 20 files changed, 154 insertions(+), 154 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache index 18f64464c8e4..c5d0f13b5e1a 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/build.gradle.mustache @@ -7,18 +7,18 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' {{#jvm-retrofit2}} - ext.retrofitVersion = '2.7.2' + ext.retrofitVersion = '2.9.0' {{/jvm-retrofit2}} {{#useRxJava}} ext.rxJavaVersion = '1.3.8' {{/useRxJava}} {{#useRxJava2}} - ext.rxJava2Version = '2.2.20' + ext.rxJava2Version = '2.2.21' {{/useRxJava2}} {{#useRxJava3}} - ext.rxJava3Version = '3.0.10' + ext.rxJava3Version = '3.0.12' {{/useRxJava3}} repositories { @@ -52,67 +52,67 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" {{#moshi}} {{^moshiCodeGen}} - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" {{/moshiCodeGen}} {{#moshiCodeGen}} - compile "com.squareup.moshi:moshi:1.11.0" - kapt "com.squareup.moshi:moshi-kotlin-codegen:1.11.0" + implementation "com.squareup.moshi:moshi:1.12.0" + kapt "com.squareup.moshi:moshi-kotlin-codegen:1.12.0" {{/moshiCodeGen}} {{/moshi}} {{#gson}} - compile "com.google.code.gson:gson:2.8.6" + implementation "com.google.code.gson:gson:2.8.7" {{/gson}} {{#jackson}} - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.fasterxml.jackson.module:jackson-module-kotlin:2.12.1" - compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.1" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.12.3" + implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3" {{/jackson}} {{#kotlinx_serialization}} - compile "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.1" + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.1" {{/kotlinx_serialization}} {{#jvm-okhttp3}} - compile "com.squareup.okhttp3:okhttp:3.12.13" + implementation "com.squareup.okhttp3:okhttp:3.12.13" {{/jvm-okhttp3}} {{#jvm-okhttp4}} - compile "com.squareup.okhttp3:okhttp:4.9.0" + implementation "com.squareup.okhttp3:okhttp:4.9.1" {{/jvm-okhttp4}} {{#threetenbp}} - compile "org.threeten:threetenbp:1.5.0" + implementation "org.threeten:threetenbp:1.5.1" {{/threetenbp}} {{#jvm-retrofit2}} {{#hasOAuthMethods}} - compile "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0" + implementation "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.2" {{/hasOAuthMethods}} - compile "com.squareup.okhttp3:logging-interceptor:4.9.0" + implementation "com.squareup.okhttp3:logging-interceptor:4.9.1" {{#useRxJava}} - compile "io.reactivex:rxjava:$rxJavaVersion" - compile "com.squareup.retrofit2:adapter-rxjava:$retrofitVersion" + implementation "io.reactivex:rxjava:$rxJavaVersion" + implementation "com.squareup.retrofit2:adapter-rxjava:$retrofitVersion" {{/useRxJava}} {{#useRxJava2}} - compile "io.reactivex.rxjava2:rxjava:$rxJava2Version" - compile "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion" + implementation "io.reactivex.rxjava2:rxjava:$rxJava2Version" + implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion" {{/useRxJava2}} {{#useRxJava3}} - compile "io.reactivex.rxjava3:rxjava:$rxJava3Version" - compile "com.squareup.retrofit2:adapter-rxjava3:2.9.0" + implementation "io.reactivex.rxjava3:rxjava:$rxJava3Version" + implementation "com.squareup.retrofit2:adapter-rxjava3:2.9.0" {{/useRxJava3}} - compile "com.squareup.retrofit2:retrofit:$retrofitVersion" + implementation "com.squareup.retrofit2:retrofit:$retrofitVersion" {{#gson}} - compile "com.squareup.retrofit2:converter-gson:$retrofitVersion" + implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion" {{/gson}} {{#moshi}} - compile "com.squareup.retrofit2:converter-moshi:$retrofitVersion" + implementation "com.squareup.retrofit2:converter-moshi:$retrofitVersion" {{/moshi}} {{#kotlinx_serialization}} - compile "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0" + implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0" {{/kotlinx_serialization}} - compile "com.squareup.retrofit2:converter-scalars:$retrofitVersion" + implementation "com.squareup.retrofit2:converter-scalars:$retrofitVersion" {{/jvm-retrofit2}} - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } {{#kotlinx_serialization}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/auth/OAuthOkHttpClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/auth/OAuthOkHttpClient.kt.mustache index 106b0581994b..5c30002e94bb 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/auth/OAuthOkHttpClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-retrofit2/auth/OAuthOkHttpClient.kt.mustache @@ -13,14 +13,13 @@ import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody class OAuthOkHttpClient( - private var client: OkHttpClient + private var client: OkHttpClient = OkHttpClient() ) : HttpClient { - constructor() : this(OkHttpClient()) - @Throws(OAuthSystemException::class, OAuthProblemException::class) override fun execute( request: OAuthClientRequest, @@ -39,7 +38,7 @@ class OAuthOkHttpClient( } } - val body: RequestBody? = if (request.body != null) RequestBody.create(mediaType, request.body) else null + val body: RequestBody? = if (request.body != null) request.body.toRequestBody(mediaType) else null requestBuilder.method(requestMethod, body) try { @@ -48,6 +47,7 @@ class OAuthOkHttpClient( response.body?.string(), response.body?.contentType()?.toString(), response.code, + response.headers.toMultimap(), responseClass) } catch (e: IOException) { throw OAuthSystemException(e) diff --git a/samples/client/petstore/kotlin-gson/build.gradle b/samples/client/petstore/kotlin-gson/build.gradle index a99b1cf2af2f..5cad8581cb64 100644 --- a/samples/client/petstore/kotlin-gson/build.gradle +++ b/samples/client/petstore/kotlin-gson/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -28,8 +28,8 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "com.google.code.gson:gson:2.8.6" - compile "com.squareup.okhttp3:okhttp:4.9.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "com.google.code.gson:gson:2.8.7" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-jackson/build.gradle b/samples/client/petstore/kotlin-jackson/build.gradle index 0429e1f7c305..5cbe1fb014f9 100644 --- a/samples/client/petstore/kotlin-jackson/build.gradle +++ b/samples/client/petstore/kotlin-jackson/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -28,10 +28,10 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.fasterxml.jackson.module:jackson-module-kotlin:2.12.1" - compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.1" - compile "com.squareup.okhttp3:okhttp:4.9.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.12.3" + implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-json-request-string/build.gradle b/samples/client/petstore/kotlin-json-request-string/build.gradle index 378951fb75a5..189e54f81959 100644 --- a/samples/client/petstore/kotlin-json-request-string/build.gradle +++ b/samples/client/petstore/kotlin-json-request-string/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -29,9 +29,9 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" - compile "com.squareup.okhttp3:okhttp:4.9.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle index a99b1cf2af2f..5cad8581cb64 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -28,8 +28,8 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "com.google.code.gson:gson:2.8.6" - compile "com.squareup.okhttp3:okhttp:4.9.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "com.google.code.gson:gson:2.8.7" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-moshi-codegen/build.gradle b/samples/client/petstore/kotlin-moshi-codegen/build.gradle index 7fec302dc5aa..ff73803f4b61 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/build.gradle +++ b/samples/client/petstore/kotlin-moshi-codegen/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -29,9 +29,9 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "com.squareup.moshi:moshi:1.11.0" - kapt "com.squareup.moshi:moshi-kotlin-codegen:1.11.0" - compile "com.squareup.okhttp3:okhttp:4.9.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "com.squareup.moshi:moshi:1.12.0" + kapt "com.squareup.moshi:moshi-kotlin-codegen:1.12.0" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-nonpublic/build.gradle b/samples/client/petstore/kotlin-nonpublic/build.gradle index 260bd6bda6e2..bb575e6e4bf7 100644 --- a/samples/client/petstore/kotlin-nonpublic/build.gradle +++ b/samples/client/petstore/kotlin-nonpublic/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -28,9 +28,9 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" - compile "com.squareup.okhttp3:okhttp:4.9.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-nullable/build.gradle b/samples/client/petstore/kotlin-nullable/build.gradle index 260bd6bda6e2..bb575e6e4bf7 100644 --- a/samples/client/petstore/kotlin-nullable/build.gradle +++ b/samples/client/petstore/kotlin-nullable/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -28,9 +28,9 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" - compile "com.squareup.okhttp3:okhttp:4.9.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-okhttp3/build.gradle b/samples/client/petstore/kotlin-okhttp3/build.gradle index e872269b3fb5..4d9f2f630d47 100644 --- a/samples/client/petstore/kotlin-okhttp3/build.gradle +++ b/samples/client/petstore/kotlin-okhttp3/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -28,9 +28,9 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" - compile "com.squareup.okhttp3:okhttp:3.12.13" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" + implementation "com.squareup.okhttp3:okhttp:3.12.13" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle index f7a6d02171ed..60257e316011 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/build.gradle @@ -7,8 +7,8 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' - ext.retrofitVersion = '2.7.2' + ext.kotlin_version = '1.5.10' + ext.retrofitVersion = '2.9.0' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -31,14 +31,14 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.1" - compile "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0" - compile "com.squareup.okhttp3:logging-interceptor:4.9.0" - compile "com.squareup.retrofit2:retrofit:$retrofitVersion" - compile "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0" - compile "com.squareup.retrofit2:converter-scalars:$retrofitVersion" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.1" + implementation "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.2" + implementation "com.squareup.okhttp3:logging-interceptor:4.9.1" + implementation "com.squareup.retrofit2:retrofit:$retrofitVersion" + implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0" + implementation "com.squareup.retrofit2:converter-scalars:$retrofitVersion" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt index 93adbda3fc98..aa70ca9d2f18 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt @@ -13,14 +13,13 @@ import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody class OAuthOkHttpClient( - private var client: OkHttpClient + private var client: OkHttpClient = OkHttpClient() ) : HttpClient { - constructor() : this(OkHttpClient()) - @Throws(OAuthSystemException::class, OAuthProblemException::class) override fun execute( request: OAuthClientRequest, @@ -39,7 +38,7 @@ class OAuthOkHttpClient( } } - val body: RequestBody? = if (request.body != null) RequestBody.create(mediaType, request.body) else null + val body: RequestBody? = if (request.body != null) request.body.toRequestBody(mediaType) else null requestBuilder.method(requestMethod, body) try { @@ -48,6 +47,7 @@ class OAuthOkHttpClient( response.body?.string(), response.body?.contentType()?.toString(), response.code, + response.headers.toMultimap(), responseClass) } catch (e: IOException) { throw OAuthSystemException(e) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle b/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle index 3ddd8d97e8fc..2f5e94a4fcda 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle +++ b/samples/client/petstore/kotlin-retrofit2-rx3/build.gradle @@ -7,9 +7,9 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' - ext.retrofitVersion = '2.7.2' - ext.rxJava3Version = '3.0.10' + ext.kotlin_version = '1.5.10' + ext.retrofitVersion = '2.9.0' + ext.rxJava3Version = '3.0.12' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -30,15 +30,15 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" - compile "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0" - compile "com.squareup.okhttp3:logging-interceptor:4.9.0" - compile "io.reactivex.rxjava3:rxjava:$rxJava3Version" - compile "com.squareup.retrofit2:adapter-rxjava3:2.9.0" - compile "com.squareup.retrofit2:retrofit:$retrofitVersion" - compile "com.squareup.retrofit2:converter-moshi:$retrofitVersion" - compile "com.squareup.retrofit2:converter-scalars:$retrofitVersion" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" + implementation "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.2" + implementation "com.squareup.okhttp3:logging-interceptor:4.9.1" + implementation "io.reactivex.rxjava3:rxjava:$rxJava3Version" + implementation "com.squareup.retrofit2:adapter-rxjava3:2.9.0" + implementation "com.squareup.retrofit2:retrofit:$retrofitVersion" + implementation "com.squareup.retrofit2:converter-moshi:$retrofitVersion" + implementation "com.squareup.retrofit2:converter-scalars:$retrofitVersion" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt index 93adbda3fc98..aa70ca9d2f18 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt @@ -13,14 +13,13 @@ import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody class OAuthOkHttpClient( - private var client: OkHttpClient + private var client: OkHttpClient = OkHttpClient() ) : HttpClient { - constructor() : this(OkHttpClient()) - @Throws(OAuthSystemException::class, OAuthProblemException::class) override fun execute( request: OAuthClientRequest, @@ -39,7 +38,7 @@ class OAuthOkHttpClient( } } - val body: RequestBody? = if (request.body != null) RequestBody.create(mediaType, request.body) else null + val body: RequestBody? = if (request.body != null) request.body.toRequestBody(mediaType) else null requestBuilder.method(requestMethod, body) try { @@ -48,6 +47,7 @@ class OAuthOkHttpClient( response.body?.string(), response.body?.contentType()?.toString(), response.code, + response.headers.toMultimap(), responseClass) } catch (e: IOException) { throw OAuthSystemException(e) diff --git a/samples/client/petstore/kotlin-retrofit2/build.gradle b/samples/client/petstore/kotlin-retrofit2/build.gradle index 6674970e550b..ec9a8e9ac245 100644 --- a/samples/client/petstore/kotlin-retrofit2/build.gradle +++ b/samples/client/petstore/kotlin-retrofit2/build.gradle @@ -7,8 +7,8 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' - ext.retrofitVersion = '2.7.2' + ext.kotlin_version = '1.5.10' + ext.retrofitVersion = '2.9.0' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -29,13 +29,13 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" - compile "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.0" - compile "com.squareup.okhttp3:logging-interceptor:4.9.0" - compile "com.squareup.retrofit2:retrofit:$retrofitVersion" - compile "com.squareup.retrofit2:converter-moshi:$retrofitVersion" - compile "com.squareup.retrofit2:converter-scalars:$retrofitVersion" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" + implementation "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:1.0.2" + implementation "com.squareup.okhttp3:logging-interceptor:4.9.1" + implementation "com.squareup.retrofit2:retrofit:$retrofitVersion" + implementation "com.squareup.retrofit2:converter-moshi:$retrofitVersion" + implementation "com.squareup.retrofit2:converter-scalars:$retrofitVersion" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt index 93adbda3fc98..aa70ca9d2f18 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/auth/OAuthOkHttpClient.kt @@ -13,14 +13,13 @@ import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody class OAuthOkHttpClient( - private var client: OkHttpClient + private var client: OkHttpClient = OkHttpClient() ) : HttpClient { - constructor() : this(OkHttpClient()) - @Throws(OAuthSystemException::class, OAuthProblemException::class) override fun execute( request: OAuthClientRequest, @@ -39,7 +38,7 @@ class OAuthOkHttpClient( } } - val body: RequestBody? = if (request.body != null) RequestBody.create(mediaType, request.body) else null + val body: RequestBody? = if (request.body != null) request.body.toRequestBody(mediaType) else null requestBuilder.method(requestMethod, body) try { @@ -48,6 +47,7 @@ class OAuthOkHttpClient( response.body?.string(), response.body?.contentType()?.toString(), response.code, + response.headers.toMultimap(), responseClass) } catch (e: IOException) { throw OAuthSystemException(e) diff --git a/samples/client/petstore/kotlin-string/build.gradle b/samples/client/petstore/kotlin-string/build.gradle index 260bd6bda6e2..bb575e6e4bf7 100644 --- a/samples/client/petstore/kotlin-string/build.gradle +++ b/samples/client/petstore/kotlin-string/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -28,9 +28,9 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" - compile "com.squareup.okhttp3:okhttp:4.9.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-threetenbp/build.gradle b/samples/client/petstore/kotlin-threetenbp/build.gradle index 1d9880723863..b4e0d0acc7a9 100644 --- a/samples/client/petstore/kotlin-threetenbp/build.gradle +++ b/samples/client/petstore/kotlin-threetenbp/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -28,10 +28,10 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" - compile "com.squareup.okhttp3:okhttp:4.9.0" - compile "org.threeten:threetenbp:1.5.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + implementation "org.threeten:threetenbp:1.5.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin-uppercase-enum/build.gradle b/samples/client/petstore/kotlin-uppercase-enum/build.gradle index 260bd6bda6e2..bb575e6e4bf7 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/build.gradle +++ b/samples/client/petstore/kotlin-uppercase-enum/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -28,9 +28,9 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" - compile "com.squareup.okhttp3:okhttp:4.9.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } diff --git a/samples/client/petstore/kotlin/build.gradle b/samples/client/petstore/kotlin/build.gradle index 260bd6bda6e2..bb575e6e4bf7 100644 --- a/samples/client/petstore/kotlin/build.gradle +++ b/samples/client/petstore/kotlin/build.gradle @@ -7,7 +7,7 @@ wrapper { } buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { maven { url "https://repo1.maven.org/maven2" } @@ -28,9 +28,9 @@ test { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" - compile "com.squareup.moshi:moshi-kotlin:1.11.0" - compile "com.squareup.okhttp3:okhttp:4.9.0" - testCompile "io.kotlintest:kotlintest-runner-junit5:3.4.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" + implementation "com.squareup.moshi:moshi-kotlin:1.12.0" + implementation "com.squareup.okhttp3:okhttp:4.9.1" + testImplementation "io.kotlintest:kotlintest-runner-junit5:3.4.2" } From ae0cce0481aa5850a363d456e85dc1c996737777 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Tue, 1 Jun 2021 11:26:15 +0800 Subject: [PATCH 181/186] add sponsor message to python fastapi (#9637) --- .../languages/PythonFastAPIServerCodegen.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java index f973a6f26098..5cf315ab1357 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFastAPIServerCodegen.java @@ -275,4 +275,16 @@ public String apiFileFolder() { public String modelFileFolder() { return outputFolder + File.separator + SRC_DIR + File.separator + modelPackage().replace('.', File.separatorChar); } + + @Override + public void postProcess() { + System.out.println("################################################################################"); + System.out.println("# Thanks for using OpenAPI Generator. #"); + System.out.println("# Please consider donation to help us maintain this project \uD83D\uDE4F #"); + System.out.println("# https://opencollective.com/openapi_generator/donate #"); + System.out.println("# #"); + System.out.println("# This generator's contributed by Nikita Vakula (https://github.com/krjakbrjak)#"); + System.out.println("# Please support his work directly via https://paypal.me/krjakbrjaki \uD83D\uDE4F #"); + System.out.println("################################################################################"); + } } From 9bce71656c37e5968c33258f0d3a69e4882135a3 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Tue, 1 Jun 2021 12:45:01 -0400 Subject: [PATCH 182/186] Swift5 namespace changes (#9624) * [swift5] Rename the API class to {{projectName}} Instead of {{projectName}}API. This removes some unnecessary naming complexity. * [swift5] Define models and Configuration classes under namespace When swiftUseApiNamespace is set, API classes get defined under the projectName namespace. This does the same for models and the Configuration class. Plus adding a deprecation warning when using the un-namespaced variants. * [swift5] Use CodingKeys in model decoder Fixes: 0f5e7d1e3cb9 ("Swift5 models improvements (#9205)") * [swift5] Add swiftUseApiNamespace to urlsessionLibrary config * Update samples * Try to reduce model changes Co-authored-by: Bruno Coelho <4brunu@gmail.com> --- bin/configs/swift5-urlsessionLibrary.yaml | 1 + .../languages/Swift5ClientCodegen.java | 2 +- .../src/main/resources/swift5/APIs.mustache | 11 +- .../resources/swift5/Configuration.mustache | 9 + .../src/main/resources/swift5/api.mustache | 16 +- .../AlamofireImplementations.mustache | 2 +- .../URLSessionImplementations.mustache | 4 +- .../src/main/resources/swift5/model.mustache | 10 + .../resources/swift5/modelObject.mustache | 7 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../OpenAPIs/APIs/AnotherFakeAPI.swift | 6 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 72 +- .../APIs/FakeClassnameTags123API.swift | 6 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 54 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../OpenAPIs/AlamofireImplementations.swift | 2 +- .../OpenAPIs/Models/StringBooleanMap.swift | 5 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../OpenAPIs/APIs/AnotherFakeAPI.swift | 6 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 72 +- .../APIs/FakeClassnameTags123API.swift | 6 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 54 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../OpenAPIs/Models/StringBooleanMap.swift | 5 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../OpenAPIs/APIs/AnotherFakeAPI.swift | 6 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 84 +-- .../APIs/FakeClassnameTags123API.swift | 6 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 54 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../Models/AdditionalPropertiesAnyType.swift | 7 +- .../Models/AdditionalPropertiesArray.swift | 7 +- .../Models/AdditionalPropertiesBoolean.swift | 7 +- .../Models/AdditionalPropertiesInteger.swift | 7 +- .../Models/AdditionalPropertiesNumber.swift | 7 +- .../Models/AdditionalPropertiesObject.swift | 7 +- .../Models/AdditionalPropertiesString.swift | 7 +- .../OpenAPIs/Models/StringBooleanMap.swift | 5 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 48 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../OpenAPIs/APIs/AnotherFakeAPI.swift | 6 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 72 +- .../APIs/FakeClassnameTags123API.swift | 6 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 54 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../OpenAPIs/Models/StringBooleanMap.swift | 5 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../OpenAPIs/APIs/AnotherFakeAPI.swift | 6 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 72 +- .../APIs/FakeClassnameTags123API.swift | 6 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 54 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../OpenAPIs/Models/StringBooleanMap.swift | 5 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../Classes/OpenAPIs/APIs/DefaultAPI.swift | 6 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../OpenAPIs/APIs/AnotherFakeAPI.swift | 6 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 72 +- .../APIs/FakeClassnameTags123API.swift | 6 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 54 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../OpenAPIs/Models/StringBooleanMap.swift | 5 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../OpenAPIs/APIs/AnotherFakeAPI.swift | 6 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 72 +- .../APIs/FakeClassnameTags123API.swift | 6 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 54 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../OpenAPIs/Models/StringBooleanMap.swift | 5 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../OpenAPIs/APIs/AnotherFakeAPI.swift | 6 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 72 +- .../APIs/FakeClassnameTags123API.swift | 6 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 54 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../OpenAPIs/Models/StringBooleanMap.swift | 5 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- .../Classes/OpenAPIs/APIs.swift | 11 +- .../OpenAPIs/APIs/AnotherFakeAPI.swift | 6 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 72 +- .../APIs/FakeClassnameTags123API.swift | 6 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 54 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- .../contents.xcworkspacedata | 7 + .../urlsessionLibrary/Sources/APIHelper.swift | 71 -- .../urlsessionLibrary/Sources/APIs.swift | 62 -- .../Sources/APIs/AnotherFakeAPI.swift | 54 -- .../Sources/APIs/FakeAPI.swift | 684 ------------------ .../APIs/FakeClassnameTags123API.swift | 57 -- .../Sources/APIs/PetAPI.swift | 483 ------------- .../Sources/APIs/StoreAPI.swift | 189 ----- .../Sources/APIs/UserAPI.swift | 366 ---------- .../Sources/CodableHelper.swift | 49 -- .../Sources/Configuration.swift | 14 - .../Sources/Extensions.swift | 227 ------ .../Sources/JSONDataEncoding.swift | 53 -- .../Sources/JSONEncodingHelper.swift | 45 -- .../urlsessionLibrary/Sources/Models.swift | 54 -- .../Models/AdditionalPropertiesClass.swift | 47 -- .../Sources/Models/Animal.swift | 47 -- .../Sources/Models/AnimalFarm.swift | 11 - .../Sources/Models/ApiResponse.swift | 53 -- .../Models/ArrayOfArrayOfNumberOnly.swift | 41 -- .../Sources/Models/ArrayOfNumberOnly.swift | 41 -- .../Sources/Models/ArrayTest.swift | 53 -- .../Sources/Models/Capitalization.swift | 72 -- .../Sources/Models/Cat.swift | 53 -- .../Sources/Models/CatAllOf.swift | 41 -- .../Sources/Models/Category.swift | 47 -- .../Sources/Models/ClassModel.swift | 23 - .../Sources/Models/Client.swift | 41 -- .../Sources/Models/Dog.swift | 53 -- .../Sources/Models/DogAllOf.swift | 41 -- .../Sources/Models/EnumArrays.swift | 55 -- .../Sources/Models/EnumClass.swift | 15 - .../Sources/Models/EnumTest.swift | 83 --- .../Sources/Models/File.swift | 43 -- .../Sources/Models/FileSchemaTestClass.swift | 47 -- .../Sources/Models/FormatTest.swift | 113 --- .../Sources/Models/HasOnlyReadOnly.swift | 47 -- .../Sources/Models/List.swift | 41 -- .../Sources/Models/MapTest.swift | 63 -- ...opertiesAndAdditionalPropertiesClass.swift | 53 -- .../Sources/Models/Model200Response.swift | 26 - .../Sources/Models/Name.swift | 60 -- .../Sources/Models/NumberOnly.swift | 41 -- .../Sources/Models/Order.swift | 77 -- .../Sources/Models/OuterComposite.swift | 53 -- .../Sources/Models/OuterEnum.swift | 15 - .../Sources/Models/Pet.swift | 77 -- .../Sources/Models/ReadOnlyFirst.swift | 47 -- .../Sources/Models/Return.swift | 23 - .../Sources/Models/SpecialModelName.swift | 41 -- .../Sources/Models/StringBooleanMap.swift | 56 -- .../Sources/Models/Tag.swift | 47 -- .../Sources/Models/TypeHolderDefault.swift | 65 -- .../Sources/Models/TypeHolderExample.swift | 65 -- .../Sources/Models/User.swift | 84 --- .../Sources/OpenISO8601DateFormatter.swift | 44 -- .../Sources/PetstoreClient/APIs.swift | 11 +- .../PetstoreClient/APIs/AnotherFakeAPI.swift | 10 +- .../Sources/PetstoreClient/APIs/FakeAPI.swift | 76 +- .../APIs/FakeClassnameTags123API.swift | 10 +- .../Sources/PetstoreClient/APIs/PetAPI.swift | 58 +- .../PetstoreClient/APIs/StoreAPI.swift | 28 +- .../Sources/PetstoreClient/APIs/UserAPI.swift | 52 +- .../PetstoreClient/Configuration.swift | 5 + .../Models/AdditionalPropertiesClass.swift | 6 + .../PetstoreClient/Models/Animal.swift | 6 + .../PetstoreClient/Models/AnimalFarm.swift | 6 + .../PetstoreClient/Models/ApiResponse.swift | 6 + .../Models/ArrayOfArrayOfNumberOnly.swift | 6 + .../Models/ArrayOfNumberOnly.swift | 6 + .../PetstoreClient/Models/ArrayTest.swift | 6 + .../Models/Capitalization.swift | 6 + .../Sources/PetstoreClient/Models/Cat.swift | 6 + .../PetstoreClient/Models/CatAllOf.swift | 6 + .../PetstoreClient/Models/Category.swift | 6 + .../PetstoreClient/Models/ClassModel.swift | 6 + .../PetstoreClient/Models/Client.swift | 6 + .../Sources/PetstoreClient/Models/Dog.swift | 6 + .../PetstoreClient/Models/DogAllOf.swift | 6 + .../PetstoreClient/Models/EnumArrays.swift | 6 + .../PetstoreClient/Models/EnumClass.swift | 6 + .../PetstoreClient/Models/EnumTest.swift | 6 + .../Sources/PetstoreClient/Models/File.swift | 6 + .../Models/FileSchemaTestClass.swift | 6 + .../PetstoreClient/Models/FormatTest.swift | 6 + .../Models/HasOnlyReadOnly.swift | 6 + .../Sources/PetstoreClient/Models/List.swift | 6 + .../PetstoreClient/Models/MapTest.swift | 6 + ...opertiesAndAdditionalPropertiesClass.swift | 6 + .../Models/Model200Response.swift | 6 + .../Sources/PetstoreClient/Models/Name.swift | 6 + .../PetstoreClient/Models/NumberOnly.swift | 6 + .../Sources/PetstoreClient/Models/Order.swift | 6 + .../Models/OuterComposite.swift | 6 + .../PetstoreClient/Models/OuterEnum.swift | 6 + .../Sources/PetstoreClient/Models/Pet.swift | 6 + .../PetstoreClient/Models/ReadOnlyFirst.swift | 6 + .../PetstoreClient/Models/Return.swift | 6 + .../Models/SpecialModelName.swift | 6 + .../Models/StringBooleanMap.swift | 11 +- .../Sources/PetstoreClient/Models/Tag.swift | 6 + .../Models/TypeHolderDefault.swift | 6 + .../Models/TypeHolderExample.swift | 6 + .../Sources/PetstoreClient/Models/User.swift | 6 + .../URLSessionImplementations.swift | 4 +- .../Sources/SynchronizedDictionary.swift | 36 - .../Sources/URLSessionImplementations.swift | 606 ---------------- .../Classes/OpenAPIs/APIs.swift | 11 +- .../OpenAPIs/APIs/AnotherFakeAPI.swift | 6 +- .../Classes/OpenAPIs/APIs/FakeAPI.swift | 72 +- .../APIs/FakeClassnameTags123API.swift | 6 +- .../Classes/OpenAPIs/APIs/PetAPI.swift | 54 +- .../Classes/OpenAPIs/APIs/StoreAPI.swift | 24 +- .../Classes/OpenAPIs/APIs/UserAPI.swift | 48 +- .../OpenAPIs/Models/StringBooleanMap.swift | 5 +- .../OpenAPIs/URLSessionImplementations.swift | 4 +- 220 files changed, 1717 insertions(+), 6456 deletions(-) create mode 100644 samples/client/petstore/swift5/urlsessionLibrary/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/APIHelper.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/AnotherFakeAPI.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeAPI.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeClassnameTags123API.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/PetAPI.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/StoreAPI.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/UserAPI.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/CodableHelper.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Configuration.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Extensions.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONDataEncoding.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONEncodingHelper.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AnimalFarm.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ClassModel.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumClass.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Model200Response.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterEnum.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Return.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/OpenISO8601DateFormatter.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/SynchronizedDictionary.swift delete mode 100644 samples/client/petstore/swift5/urlsessionLibrary/Sources/URLSessionImplementations.swift diff --git a/bin/configs/swift5-urlsessionLibrary.yaml b/bin/configs/swift5-urlsessionLibrary.yaml index b260611e6029..1520a7c1ea98 100644 --- a/bin/configs/swift5-urlsessionLibrary.yaml +++ b/bin/configs/swift5-urlsessionLibrary.yaml @@ -11,3 +11,4 @@ additionalProperties: podHomepage: https://github.com/openapitools/openapi-generator useSPMFileStructure: true useClasses: true + swiftUseApiNamespace: true diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java index d44d34ca0396..f06bbd057c61 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/Swift5ClientCodegen.java @@ -446,7 +446,7 @@ public void processOpts() { additionalProperties.put(READONLY_PROPERTIES, readonlyProperties); // Setup swiftUseApiNamespace option, which makes all the API - // classes inner-class of {{projectName}}API + // classes inner-class of {{projectName}} if (additionalProperties.containsKey(SWIFT_USE_API_NAMESPACE)) { setSwiftUseApiNamespace(convertPropertyToBooleanAndWriteBack(SWIFT_USE_API_NAMESPACE)); } diff --git a/modules/openapi-generator/src/main/resources/swift5/APIs.mustache b/modules/openapi-generator/src/main/resources/swift5/APIs.mustache index 42bdf74007f1..b05f06301797 100644 --- a/modules/openapi-generator/src/main/resources/swift5/APIs.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/APIs.mustache @@ -6,7 +6,10 @@ import Foundation -{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class {{projectName}}API { +@available(*, deprecated, renamed: "{{projectName}}") +{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} typealias {{projectName}}API = {{projectName}} + +{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class {{projectName}} { {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var basePath = "{{{basePath}}}" {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var credential: URLCredential? {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var customHeaders: [String: String] = [:]{{#useAlamofire}} @@ -33,7 +36,7 @@ import Foundation self.parameters = parameters self.headers = headers - addHeaders({{projectName}}API.customHeaders) + addHeaders({{projectName}}.customHeaders) } {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func addHeaders(_ aHeaders: [String: String]) { @@ -42,7 +45,7 @@ import Foundation } } - {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func execute(_ apiResponseQueue: DispatchQueue = {{projectName}}API.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func execute(_ apiResponseQueue: DispatchQueue = {{projectName}}.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -52,7 +55,7 @@ import Foundation } {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func addCredential() -> Self { - credential = {{projectName}}API.credential + credential = {{projectName}}.credential return self } } diff --git a/modules/openapi-generator/src/main/resources/swift5/Configuration.mustache b/modules/openapi-generator/src/main/resources/swift5/Configuration.mustache index 78f54279711d..a154850602e5 100644 --- a/modules/openapi-generator/src/main/resources/swift5/Configuration.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/Configuration.mustache @@ -6,9 +6,18 @@ import Foundation +{{#swiftUseApiNamespace}} +@available(*, deprecated, renamed: "{{projectName}}.Configuration") +{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} typealias Configuration = {{projectName}}.Configuration + +extension {{projectName}} { +{{/swiftUseApiNamespace}} {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class Configuration { // This value is used to configure the date formatter that is used to serialize dates into JSON format. // You must set it prior to encoding any dates, and it will only be read once. @available(*, unavailable, message: "To set a different date format, use CodableHelper.dateFormatter instead.") {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static var dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" } +{{#swiftUseApiNamespace}} +} +{{/swiftUseApiNamespace}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/swift5/api.mustache b/modules/openapi-generator/src/main/resources/swift5/api.mustache index ac3b4b3d9541..92643fdf2686 100644 --- a/modules/openapi-generator/src/main/resources/swift5/api.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/api.mustache @@ -12,7 +12,7 @@ import RxSwift{{/useRxSwift}}{{#useCombine}} import Combine #endif{{/useCombine}}{{#swiftUseApiNamespace}} -extension {{projectName}}API { +extension {{projectName}} { {{/swiftUseApiNamespace}} {{#description}} @@ -49,7 +49,7 @@ extension {{projectName}}API { {{#isDeprecated}} @available(*, deprecated, message: "This operation is deprecated.") {{/isDeprecated}} - {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}apiResponseQueue: DispatchQueue = {{projectName}}API.apiResponseQueue, completion: @escaping ((_ data: {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}?, _ error: Error?) -> Void)) { + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}apiResponseQueue: DispatchQueue = {{projectName}}.apiResponseQueue, completion: @escaping ((_ data: {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}?, _ error: Error?) -> Void)) { {{operationId}}WithRequestBuilder({{#allParams}}{{paramName}}: {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}).execute(apiResponseQueue) { result -> Void in switch result { {{#returnType}} @@ -81,7 +81,7 @@ extension {{projectName}}API { {{#isDeprecated}} @available(*, deprecated, message: "This operation is deprecated.") {{/isDeprecated}} - {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func {{operationId}}({{#allParams}} {{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}apiResponseQueue: DispatchQueue = {{projectName}}API.apiResponseQueue) -> Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> { + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func {{operationId}}({{#allParams}} {{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}apiResponseQueue: DispatchQueue = {{projectName}}.apiResponseQueue) -> Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> { let deferred = Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}>.pending() {{operationId}}WithRequestBuilder({{#allParams}}{{paramName}}: {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}).execute(apiResponseQueue) { result -> Void in switch result { @@ -112,7 +112,7 @@ extension {{projectName}}API { {{#isDeprecated}} @available(*, deprecated, message: "This operation is deprecated.") {{/isDeprecated}} - {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}apiResponseQueue: DispatchQueue = {{projectName}}API.apiResponseQueue) -> Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> { + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}apiResponseQueue: DispatchQueue = {{projectName}}.apiResponseQueue) -> Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}> { return Observable.create { observer -> Disposable in {{operationId}}WithRequestBuilder({{#allParams}}{{paramName}}: {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}).execute(apiResponseQueue) { result -> Void in switch result { @@ -147,7 +147,7 @@ extension {{projectName}}API { @available(*, deprecated, message: "This operation is deprecated.") {{/isDeprecated}} @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}apiResponseQueue: DispatchQueue = {{projectName}}API.apiResponseQueue) -> AnyPublisher<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}, Error> { + {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}apiResponseQueue: DispatchQueue = {{projectName}}.apiResponseQueue) -> AnyPublisher<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}, Error> { return Future<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}, Error>.init { promise in {{operationId}}WithRequestBuilder({{#allParams}}{{paramName}}: {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}).execute(apiResponseQueue) { result -> Void in switch result { @@ -179,7 +179,7 @@ extension {{projectName}}API { {{#isDeprecated}} @available(*, deprecated, message: "This operation is deprecated.") {{/isDeprecated}} - open class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}apiResponseQueue: DispatchQueue = {{projectName}}API.apiResponseQueue, completion: @escaping ((_ result: Swift.Result<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}, Error>) -> Void)) { + open class func {{operationId}}({{#allParams}}{{paramName}}: {{#isEnum}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}_{{operationId}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}{{^required}}? = nil{{/required}}{{^-last}}, {{/-last}}{{/allParams}}{{#hasParams}}, {{/hasParams}}apiResponseQueue: DispatchQueue = {{projectName}}.apiResponseQueue, completion: @escaping ((_ result: Swift.Result<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}, Error>) -> Void)) { {{operationId}}WithRequestBuilder({{#allParams}}{{paramName}}: {{paramName}}{{^-last}}, {{/-last}}{{/allParams}}).execute(apiResponseQueue) { result -> Void in switch result { {{#returnType}} @@ -229,7 +229,7 @@ extension {{projectName}}API { let {{paramName}}PreEscape = "\({{#isEnum}}{{paramName}}{{#isContainer}}{{{dataType}}}{{/isContainer}}{{^isContainer}}.rawValue{{/isContainer}}{{/isEnum}}{{^isEnum}}APIHelper.mapValueToPathItem({{paramName}}){{/isEnum}})" let {{paramName}}PostEscape = {{paramName}}PreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{{=<% %>=}}{<%baseName%>}<%={{ }}=%>", with: {{paramName}}PostEscape, options: .literal, range: nil){{/pathParams}} - let URLString = {{projectName}}API.basePath + path + let URLString = {{projectName}}.basePath + path {{#bodyParam}} let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: {{paramName}}) {{/bodyParam}} @@ -264,7 +264,7 @@ extension {{projectName}}API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}>.Type = {{projectName}}API.requestBuilderFactory.{{#returnType}}getBuilder(){{/returnType}}{{^returnType}}getNonDecodableBuilder(){{/returnType}} + let requestBuilder: RequestBuilder<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Void{{/returnType}}>.Type = {{projectName}}.requestBuilderFactory.{{#returnType}}getBuilder(){{/returnType}}{{^returnType}}getNonDecodableBuilder(){{/returnType}} return requestBuilder.init(method: "{{httpMethod}}", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache b/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache index b7aac0d8ef16..b336fa9a7a63 100644 --- a/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/libraries/alamofire/AlamofireImplementations.mustache @@ -76,7 +76,7 @@ private var managerStore = SynchronizedDictionary, Error>) -> Void) { + override {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func execute(_ apiResponseQueue: DispatchQueue = {{projectName}}.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let managerId = UUID().uuidString // Create a new manager for each request to customize its request header let manager = createSessionManager() diff --git a/modules/openapi-generator/src/main/resources/swift5/libraries/urlsession/URLSessionImplementations.mustache b/modules/openapi-generator/src/main/resources/swift5/libraries/urlsession/URLSessionImplementations.mustache index 931de1b954a8..d77fead4b312 100644 --- a/modules/openapi-generator/src/main/resources/swift5/libraries/urlsession/URLSessionImplementations.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/libraries/urlsession/URLSessionImplementations.mustache @@ -93,7 +93,7 @@ private var urlSessionStore = SynchronizedDictionary() return modifiedRequest } - override {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func execute(_ apiResponseQueue: DispatchQueue = {{projectName}}API.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func execute(_ apiResponseQueue: DispatchQueue = {{projectName}}.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ private var urlSessionStore = SynchronizedDictionary() for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in {{projectName}}API.customHeaders { + for (key, value) in {{projectName}}.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/modules/openapi-generator/src/main/resources/swift5/model.mustache b/modules/openapi-generator/src/main/resources/swift5/model.mustache index 53892df270e7..f9107398cfa3 100644 --- a/modules/openapi-generator/src/main/resources/swift5/model.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/model.mustache @@ -9,6 +9,13 @@ import Foundation #if canImport(AnyCodable) import AnyCodable #endif +{{#swiftUseApiNamespace}} + +@available(*, deprecated, renamed: "{{projectName}}.{{classname}}") +{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} typealias {{classname}} = {{projectName}}.{{classname}} + +extension {{projectName}} { +{{/swiftUseApiNamespace}} {{#description}} /** {{description}} */{{/description}}{{#isDeprecated}} @@ -17,3 +24,6 @@ import AnyCodable {{> modelArray}}{{/isArray}}{{^isArray}}{{#isEnum}} {{> modelEnum}}{{/isEnum}}{{^isEnum}} {{> modelObject}}{{/isEnum}}{{/isArray}}{{/vendorExtensions.x-is-one-of-interface}}{{/model}}{{/models}} +{{#swiftUseApiNamespace}} +} +{{/swiftUseApiNamespace}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache index 336ee3467c85..da0d44247fc0 100644 --- a/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/modelObject.mustache @@ -76,16 +76,17 @@ // Decodable protocol methods {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}}{{#objcCompatible}} required{{/objcCompatible}} init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) {{#allVars}} - {{{name}}} = try container.decode{{#required}}{{#isNullable}}IfPresent{{/isNullable}}{{/required}}{{^required}}IfPresent{{/required}}({{{datatypeWithEnum}}}.self, forKey: "{{{baseName}}}") + {{{name}}} = try container.decode{{#required}}{{#isNullable}}IfPresent{{/isNullable}}{{/required}}{{^required}}IfPresent{{/required}}({{{datatypeWithEnum}}}.self, forKey: .{{{name}}}) {{/allVars}} var nonAdditionalPropertyKeys = Set() {{#allVars}} nonAdditionalPropertyKeys.insert("{{{baseName}}}") {{/allVars}} - additionalProperties = try container.decodeMap({{{additionalPropertiesType}}}.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap({{{additionalPropertiesType}}}.self, excludedKeys: nonAdditionalPropertyKeys) }{{/additionalPropertiesType}}{{/generateModelAdditionalProperties}}{{^objcCompatible}}{{#useClasses}}{{#vendorExtensions.x-swift-hashable}} {{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}public{{/nonPublicApi}} static func == (lhs: {{classname}}, rhs: {{classname}}) -> Bool { diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift index c6beeedf9a4b..85346c2896e9 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io:80/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -30,7 +33,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -39,7 +42,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -49,7 +52,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 72b89640eeb4..542fb6f69ba8 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -15,7 +15,7 @@ open class AnotherFakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -35,7 +35,7 @@ open class AnotherFakeAPI { */ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class AnotherFakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index cf92424d9cc1..9b75edc92ee6 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -14,7 +14,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -33,7 +33,7 @@ open class FakeAPI { */ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -44,7 +44,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -55,7 +55,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -74,7 +74,7 @@ open class FakeAPI { */ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -85,7 +85,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -96,7 +96,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -115,7 +115,7 @@ open class FakeAPI { */ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -126,7 +126,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -137,7 +137,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -156,7 +156,7 @@ open class FakeAPI { */ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -167,7 +167,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -178,7 +178,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -197,7 +197,7 @@ open class FakeAPI { */ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -208,7 +208,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -220,7 +220,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -239,7 +239,7 @@ open class FakeAPI { */ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -253,7 +253,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -265,7 +265,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -285,7 +285,7 @@ open class FakeAPI { */ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -296,7 +296,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -357,7 +357,7 @@ open class FakeAPI { */ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -386,7 +386,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -472,7 +472,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -499,7 +499,7 @@ open class FakeAPI { */ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -524,7 +524,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -541,7 +541,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -566,7 +566,7 @@ open class FakeAPI { */ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -584,7 +584,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -596,7 +596,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -615,7 +615,7 @@ open class FakeAPI { */ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -626,7 +626,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -639,7 +639,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -659,7 +659,7 @@ open class FakeAPI { */ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -676,7 +676,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index d4d651664963..fd7d845d3406 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -15,7 +15,7 @@ open class FakeClassnameTags123API { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -38,7 +38,7 @@ open class FakeClassnameTags123API { */ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class FakeClassnameTags123API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index a1fe0d12b1da..d7d5bdfa2eaa 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -15,7 +15,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -37,7 +37,7 @@ open class PetAPI { */ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -48,7 +48,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +61,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -87,7 +87,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -98,7 +98,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -119,7 +119,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -142,7 +142,7 @@ open class PetAPI { */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -156,7 +156,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -169,7 +169,7 @@ open class PetAPI { - parameter completion: completion handler to receive the data and the error objects */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -193,7 +193,7 @@ open class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -207,7 +207,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -219,7 +219,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -245,7 +245,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -256,7 +256,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -268,7 +268,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -290,7 +290,7 @@ open class PetAPI { */ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -301,7 +301,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -315,7 +315,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -342,7 +342,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -359,7 +359,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -400,7 +400,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -417,7 +417,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -458,7 +458,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -475,7 +475,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 501f11f5f219..c80d4286b536 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -15,7 +15,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -38,7 +38,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -60,7 +60,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -82,7 +82,7 @@ open class StoreAPI { */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -93,7 +93,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +105,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -128,7 +128,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -139,7 +139,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -151,7 +151,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -170,7 +170,7 @@ open class StoreAPI { */ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -181,7 +181,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 254474014d31..542dc212bd1b 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -15,7 +15,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -35,7 +35,7 @@ open class UserAPI { */ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -58,7 +58,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -77,7 +77,7 @@ open class UserAPI { */ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -88,7 +88,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -100,7 +100,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -119,7 +119,7 @@ open class UserAPI { */ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -130,7 +130,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -142,7 +142,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -165,7 +165,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -176,7 +176,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -188,7 +188,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -210,7 +210,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -221,7 +221,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -234,7 +234,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -255,7 +255,7 @@ open class UserAPI { */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -270,7 +270,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -281,7 +281,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -299,7 +299,7 @@ open class UserAPI { */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -310,7 +310,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -323,7 +323,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -347,7 +347,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -358,7 +358,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift index 8b73fa8aaf63..c5bab793d7bb 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/AlamofireImplementations.swift @@ -76,7 +76,7 @@ open class AlamofireRequestBuilder: RequestBuilder { return manager.request(URLString, method: method, parameters: parameters, encoding: encoding, headers: headers) } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let managerId = UUID().uuidString // Create a new manager for each request to customize its request header let manager = createSessionManager() diff --git a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index d3b2bda9b779..f575c9df65ca 100644 --- a/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/alamofireLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -42,9 +42,10 @@ public struct StringBooleanMap: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift index dbdab491ff7d..01bc6ff0d8d0 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io:80/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 9db7ad8a0d37..f7f14df25d33 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -20,7 +20,7 @@ open class AnotherFakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -43,7 +43,7 @@ open class AnotherFakeAPI { */ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -54,7 +54,7 @@ open class AnotherFakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 20e0b55d9e8c..c25873363548 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -19,7 +19,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -41,7 +41,7 @@ open class FakeAPI { */ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -52,7 +52,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -65,7 +65,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -87,7 +87,7 @@ open class FakeAPI { */ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -98,7 +98,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -111,7 +111,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -133,7 +133,7 @@ open class FakeAPI { */ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -144,7 +144,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -157,7 +157,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -179,7 +179,7 @@ open class FakeAPI { */ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -190,7 +190,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -203,7 +203,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -225,7 +225,7 @@ open class FakeAPI { */ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -236,7 +236,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -250,7 +250,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -272,7 +272,7 @@ open class FakeAPI { */ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -286,7 +286,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -300,7 +300,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -323,7 +323,7 @@ open class FakeAPI { */ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -334,7 +334,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -361,7 +361,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { @@ -400,7 +400,7 @@ open class FakeAPI { */ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -429,7 +429,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -517,7 +517,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { @@ -547,7 +547,7 @@ open class FakeAPI { */ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -572,7 +572,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -591,7 +591,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { @@ -619,7 +619,7 @@ open class FakeAPI { */ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -637,7 +637,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -651,7 +651,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { @@ -673,7 +673,7 @@ open class FakeAPI { */ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -684,7 +684,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -699,7 +699,7 @@ open class FakeAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { @@ -722,7 +722,7 @@ open class FakeAPI { */ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -739,7 +739,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index 85eab81386f0..094b75647ae6 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -20,7 +20,7 @@ open class FakeClassnameTags123API { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -46,7 +46,7 @@ open class FakeClassnameTags123API { */ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -57,7 +57,7 @@ open class FakeClassnameTags123API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 10ce86076cf1..b1d495832c66 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -20,7 +20,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -45,7 +45,7 @@ open class PetAPI { */ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -56,7 +56,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -71,7 +71,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { @@ -100,7 +100,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -111,7 +111,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -134,7 +134,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher<[Pet], Error> { + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher<[Pet], Error> { return Future<[Pet], Error>.init { promise in findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { @@ -160,7 +160,7 @@ open class PetAPI { */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -174,7 +174,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -189,7 +189,7 @@ open class PetAPI { #if canImport(Combine) @available(*, deprecated, message: "This operation is deprecated.") @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher<[Pet], Error> { + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher<[Pet], Error> { return Future<[Pet], Error>.init { promise in findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { @@ -216,7 +216,7 @@ open class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -230,7 +230,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -244,7 +244,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { @@ -273,7 +273,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -284,7 +284,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -298,7 +298,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -323,7 +323,7 @@ open class PetAPI { */ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -334,7 +334,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -350,7 +350,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { @@ -380,7 +380,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -397,7 +397,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -413,7 +413,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { @@ -443,7 +443,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -460,7 +460,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -476,7 +476,7 @@ open class PetAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { @@ -506,7 +506,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -523,7 +523,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 12a0d5688d52..9e4aa781716d 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -20,7 +20,7 @@ open class StoreAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { @@ -46,7 +46,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -57,7 +57,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -70,7 +70,7 @@ open class StoreAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher<[String: Int], Error> { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher<[String: Int], Error> { return Future<[String: Int], Error>.init { promise in getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { @@ -95,7 +95,7 @@ open class StoreAPI { */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -106,7 +106,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -120,7 +120,7 @@ open class StoreAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { @@ -146,7 +146,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -157,7 +157,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -171,7 +171,7 @@ open class StoreAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -193,7 +193,7 @@ open class StoreAPI { */ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -204,7 +204,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index cbee9448a008..fa260d3e83a8 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -20,7 +20,7 @@ open class UserAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -43,7 +43,7 @@ open class UserAPI { */ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -54,7 +54,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -68,7 +68,7 @@ open class UserAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -90,7 +90,7 @@ open class UserAPI { */ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -101,7 +101,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -115,7 +115,7 @@ open class UserAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -137,7 +137,7 @@ open class UserAPI { */ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -148,7 +148,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -162,7 +162,7 @@ open class UserAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { @@ -188,7 +188,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -199,7 +199,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -213,7 +213,7 @@ open class UserAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { @@ -238,7 +238,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -249,7 +249,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -264,7 +264,7 @@ open class UserAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { @@ -288,7 +288,7 @@ open class UserAPI { */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -303,7 +303,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -316,7 +316,7 @@ open class UserAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { @@ -337,7 +337,7 @@ open class UserAPI { */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -348,7 +348,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -363,7 +363,7 @@ open class UserAPI { */ #if canImport(Combine) @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) - open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> AnyPublisher { + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> AnyPublisher { return Future.init { promise in updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -390,7 +390,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -401,7 +401,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index d3b2bda9b779..f575c9df65ca 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -42,9 +42,10 @@ public struct StringBooleanMap: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs.swift index dbdab491ff7d..01bc6ff0d8d0 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io:80/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 72b89640eeb4..542fb6f69ba8 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -15,7 +15,7 @@ open class AnotherFakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -35,7 +35,7 @@ open class AnotherFakeAPI { */ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class AnotherFakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 6d02c24d05f9..eb6d1e67c4f5 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -15,7 +15,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createXmlItem(xmlItem: XmlItem, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createXmlItem(xmlItem: XmlItem, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createXmlItemWithRequestBuilder(xmlItem: xmlItem).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -35,7 +35,7 @@ open class FakeAPI { */ open class func createXmlItemWithRequestBuilder(xmlItem: XmlItem) -> RequestBuilder { let path = "/fake/create_xml_item" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: xmlItem) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -57,7 +57,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -76,7 +76,7 @@ open class FakeAPI { */ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -87,7 +87,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -98,7 +98,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -117,7 +117,7 @@ open class FakeAPI { */ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -128,7 +128,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -139,7 +139,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -158,7 +158,7 @@ open class FakeAPI { */ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -169,7 +169,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -180,7 +180,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -199,7 +199,7 @@ open class FakeAPI { */ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -210,7 +210,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -221,7 +221,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -240,7 +240,7 @@ open class FakeAPI { */ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -251,7 +251,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -263,7 +263,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -282,7 +282,7 @@ open class FakeAPI { */ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -296,7 +296,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -308,7 +308,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -328,7 +328,7 @@ open class FakeAPI { */ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -339,7 +339,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -364,7 +364,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -400,7 +400,7 @@ open class FakeAPI { */ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -429,7 +429,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -515,7 +515,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -542,7 +542,7 @@ open class FakeAPI { */ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -567,7 +567,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -584,7 +584,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -609,7 +609,7 @@ open class FakeAPI { */ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -627,7 +627,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -639,7 +639,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -658,7 +658,7 @@ open class FakeAPI { */ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -669,7 +669,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -682,7 +682,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -702,7 +702,7 @@ open class FakeAPI { */ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -719,7 +719,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -734,7 +734,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testQueryParameterCollectionFormat(pipe: [String], ioutil: [String], http: [String], url: [String], context: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testQueryParameterCollectionFormat(pipe: [String], ioutil: [String], http: [String], url: [String], context: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testQueryParameterCollectionFormatWithRequestBuilder(pipe: pipe, ioutil: ioutil, http: http, url: url, context: context).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -757,7 +757,7 @@ open class FakeAPI { */ open class func testQueryParameterCollectionFormatWithRequestBuilder(pipe: [String], ioutil: [String], http: [String], url: [String], context: [String]) -> RequestBuilder { let path = "/fake/test-query-paramters" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -775,7 +775,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index d4d651664963..fd7d845d3406 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -15,7 +15,7 @@ open class FakeClassnameTags123API { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -38,7 +38,7 @@ open class FakeClassnameTags123API { */ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class FakeClassnameTags123API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 5c220c11bb5f..fa8620ba081c 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -15,7 +15,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -37,7 +37,7 @@ open class PetAPI { */ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -48,7 +48,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +61,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -87,7 +87,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -98,7 +98,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -119,7 +119,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -142,7 +142,7 @@ open class PetAPI { */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -156,7 +156,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -169,7 +169,7 @@ open class PetAPI { - parameter completion: completion handler to receive the data and the error objects */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: Set, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Set?, _ error: Error?) -> Void)) { + open class func findPetsByTags(tags: Set, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Set?, _ error: Error?) -> Void)) { findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -193,7 +193,7 @@ open class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: Set) -> RequestBuilder> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -207,7 +207,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -219,7 +219,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -245,7 +245,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -256,7 +256,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -268,7 +268,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -290,7 +290,7 @@ open class PetAPI { */ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -301,7 +301,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -315,7 +315,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -342,7 +342,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -359,7 +359,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -400,7 +400,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -417,7 +417,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -458,7 +458,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -475,7 +475,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 501f11f5f219..c80d4286b536 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -15,7 +15,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -38,7 +38,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -60,7 +60,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -82,7 +82,7 @@ open class StoreAPI { */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -93,7 +93,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +105,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -128,7 +128,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -139,7 +139,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -151,7 +151,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -170,7 +170,7 @@ open class StoreAPI { */ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -181,7 +181,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 254474014d31..542dc212bd1b 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -15,7 +15,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -35,7 +35,7 @@ open class UserAPI { */ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -58,7 +58,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -77,7 +77,7 @@ open class UserAPI { */ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -88,7 +88,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -100,7 +100,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -119,7 +119,7 @@ open class UserAPI { */ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -130,7 +130,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -142,7 +142,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -165,7 +165,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -176,7 +176,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -188,7 +188,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -210,7 +210,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -221,7 +221,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -234,7 +234,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -255,7 +255,7 @@ open class UserAPI { */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -270,7 +270,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -281,7 +281,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -299,7 +299,7 @@ open class UserAPI { */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -310,7 +310,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -323,7 +323,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -347,7 +347,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -358,7 +358,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift index 1ad80b83a3ee..96d07d1ef30c 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesAnyType.swift @@ -49,11 +49,12 @@ public struct AdditionalPropertiesAnyType: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) - name = try container.decodeIfPresent(String.self, forKey: "name") + name = try container.decodeIfPresent(String.self, forKey: .name) var nonAdditionalPropertyKeys = Set() nonAdditionalPropertyKeys.insert("name") - additionalProperties = try container.decodeMap(AnyCodable.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(AnyCodable.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift index 273a9f185e3e..106e4dd6de18 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesArray.swift @@ -49,11 +49,12 @@ public struct AdditionalPropertiesArray: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) - name = try container.decodeIfPresent(String.self, forKey: "name") + name = try container.decodeIfPresent(String.self, forKey: .name) var nonAdditionalPropertyKeys = Set() nonAdditionalPropertyKeys.insert("name") - additionalProperties = try container.decodeMap([AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap([AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift index 164ae0e09c06..bfbd7a5f20d8 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesBoolean.swift @@ -49,11 +49,12 @@ public struct AdditionalPropertiesBoolean: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) - name = try container.decodeIfPresent(String.self, forKey: "name") + name = try container.decodeIfPresent(String.self, forKey: .name) var nonAdditionalPropertyKeys = Set() nonAdditionalPropertyKeys.insert("name") - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift index dcf8d5c01cd2..b57691746cad 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesInteger.swift @@ -49,11 +49,12 @@ public struct AdditionalPropertiesInteger: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) - name = try container.decodeIfPresent(String.self, forKey: "name") + name = try container.decodeIfPresent(String.self, forKey: .name) var nonAdditionalPropertyKeys = Set() nonAdditionalPropertyKeys.insert("name") - additionalProperties = try container.decodeMap(Int.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Int.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift index ea7bd4639165..fd6a6a52d064 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesNumber.swift @@ -49,11 +49,12 @@ public struct AdditionalPropertiesNumber: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) - name = try container.decodeIfPresent(String.self, forKey: "name") + name = try container.decodeIfPresent(String.self, forKey: .name) var nonAdditionalPropertyKeys = Set() nonAdditionalPropertyKeys.insert("name") - additionalProperties = try container.decodeMap(Double.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Double.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift index cf9072f53a2d..675a07ca0c1e 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesObject.swift @@ -49,11 +49,12 @@ public struct AdditionalPropertiesObject: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) - name = try container.decodeIfPresent(String.self, forKey: "name") + name = try container.decodeIfPresent(String.self, forKey: .name) var nonAdditionalPropertyKeys = Set() nonAdditionalPropertyKeys.insert("name") - additionalProperties = try container.decodeMap([String: AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap([String: AnyCodable].self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift index d34017e6c970..df5aa8b69533 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/AdditionalPropertiesString.swift @@ -49,11 +49,12 @@ public struct AdditionalPropertiesString: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) - name = try container.decodeIfPresent(String.self, forKey: "name") + name = try container.decodeIfPresent(String.self, forKey: .name) var nonAdditionalPropertyKeys = Set() nonAdditionalPropertyKeys.insert("name") - additionalProperties = try container.decodeMap(String.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(String.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index d3b2bda9b779..f575c9df65ca 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -42,9 +42,10 @@ public struct StringBooleanMap: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs.swift index 57308c82f8ed..850c8fc43833 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 10fd471343e7..bf00a6fa7412 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -15,7 +15,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func addPet(pet: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func addPet(pet: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { addPetWithRequestBuilder(pet: pet).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -37,7 +37,7 @@ open class PetAPI { */ open class func addPetWithRequestBuilder(pet: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: pet) let urlComponents = URLComponents(string: URLString) @@ -48,7 +48,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +61,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -87,7 +87,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -98,7 +98,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -119,7 +119,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -142,7 +142,7 @@ open class PetAPI { */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -156,7 +156,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -169,7 +169,7 @@ open class PetAPI { - parameter completion: completion handler to receive the data and the error objects */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -193,7 +193,7 @@ open class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -207,7 +207,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -219,7 +219,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -245,7 +245,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -256,7 +256,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -268,7 +268,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePet(pet: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePet(pet: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithRequestBuilder(pet: pet).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -290,7 +290,7 @@ open class PetAPI { */ open class func updatePetWithRequestBuilder(pet: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: pet) let urlComponents = URLComponents(string: URLString) @@ -301,7 +301,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -315,7 +315,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -342,7 +342,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -359,7 +359,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -400,7 +400,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -417,7 +417,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 48b322233343..9d68c2def6ed 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -15,7 +15,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -38,7 +38,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{orderId}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -60,7 +60,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -82,7 +82,7 @@ open class StoreAPI { */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -93,7 +93,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +105,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -128,7 +128,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{orderId}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -139,7 +139,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -151,7 +151,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func placeOrder(order: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func placeOrder(order: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { placeOrderWithRequestBuilder(order: order).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -170,7 +170,7 @@ open class StoreAPI { */ open class func placeOrderWithRequestBuilder(order: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: order) let urlComponents = URLComponents(string: URLString) @@ -181,7 +181,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index b35fc94ae58d..106277bbe05e 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -15,7 +15,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUser(user: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUser(user: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUserWithRequestBuilder(user: user).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -38,7 +38,7 @@ open class UserAPI { */ open class func createUserWithRequestBuilder(user: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: user) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +61,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithArrayInput(user: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithArrayInput(user: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithArrayInputWithRequestBuilder(user: user).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -83,7 +83,7 @@ open class UserAPI { */ open class func createUsersWithArrayInputWithRequestBuilder(user: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: user) let urlComponents = URLComponents(string: URLString) @@ -94,7 +94,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -106,7 +106,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithListInput(user: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithListInput(user: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithListInputWithRequestBuilder(user: user).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -128,7 +128,7 @@ open class UserAPI { */ open class func createUsersWithListInputWithRequestBuilder(user: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: user) let urlComponents = URLComponents(string: URLString) @@ -139,7 +139,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -151,7 +151,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -177,7 +177,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -188,7 +188,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -200,7 +200,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -222,7 +222,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -233,7 +233,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -246,7 +246,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -267,7 +267,7 @@ open class UserAPI { */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -282,7 +282,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -293,7 +293,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -314,7 +314,7 @@ open class UserAPI { */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -325,7 +325,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -338,7 +338,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updateUser(username: String, user: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updateUser(username: String, user: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updateUserWithRequestBuilder(username: username, user: user).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -365,7 +365,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: user) let urlComponents = URLComponents(string: URLString) @@ -376,7 +376,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs.swift index 026f2295d319..e98c4bb0fbe7 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -internal class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +internal typealias PetstoreClientAPI = PetstoreClient + +internal class PetstoreClient { internal static var basePath = "http://petstore.swagger.io:80/v2" internal static var credential: URLCredential? internal static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ internal class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } internal func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ internal class RequestBuilder { } } - internal func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + internal func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } internal func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ internal class RequestBuilder { } internal func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 18a502d453b8..3962e550ac49 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -15,7 +15,7 @@ internal class AnotherFakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + internal class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -35,7 +35,7 @@ internal class AnotherFakeAPI { */ internal class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ internal class AnotherFakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 99317dab5072..b38a586bd0f2 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -14,7 +14,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { + internal class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -33,7 +33,7 @@ internal class FakeAPI { */ internal class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -44,7 +44,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -55,7 +55,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { + internal class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -74,7 +74,7 @@ internal class FakeAPI { */ internal class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -85,7 +85,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -96,7 +96,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { + internal class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -115,7 +115,7 @@ internal class FakeAPI { */ internal class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -126,7 +126,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -137,7 +137,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + internal class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -156,7 +156,7 @@ internal class FakeAPI { */ internal class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -167,7 +167,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -178,7 +178,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -197,7 +197,7 @@ internal class FakeAPI { */ internal class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -208,7 +208,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -220,7 +220,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -239,7 +239,7 @@ internal class FakeAPI { */ internal class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -253,7 +253,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -265,7 +265,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + internal class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -285,7 +285,7 @@ internal class FakeAPI { */ internal class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -296,7 +296,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -321,7 +321,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testEndpointParameters(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func testEndpointParameters(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(integer: integer, int32: int32, int64: int64, number: number, float: float, double: double, string: string, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -357,7 +357,7 @@ internal class FakeAPI { */ internal class func testEndpointParametersWithRequestBuilder(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double, string: String? = nil, patternWithoutDelimiter: String, byte: Data, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -386,7 +386,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -472,7 +472,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -499,7 +499,7 @@ internal class FakeAPI { */ internal class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -524,7 +524,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -541,7 +541,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -566,7 +566,7 @@ internal class FakeAPI { */ internal class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -584,7 +584,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -596,7 +596,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -615,7 +615,7 @@ internal class FakeAPI { */ internal class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -626,7 +626,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -639,7 +639,7 @@ internal class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -659,7 +659,7 @@ internal class FakeAPI { */ internal class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -676,7 +676,7 @@ internal class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index 5a85c1b29296..f746118089c4 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -15,7 +15,7 @@ internal class FakeClassnameTags123API { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + internal class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -38,7 +38,7 @@ internal class FakeClassnameTags123API { */ internal class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ internal class FakeClassnameTags123API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index ab2066aa50c8..67a5a95b72b2 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -15,7 +15,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -37,7 +37,7 @@ internal class PetAPI { */ internal class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -48,7 +48,7 @@ internal class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +61,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func deletePet(apiKey: String? = nil, petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func deletePet(apiKey: String? = nil, petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deletePetWithRequestBuilder(apiKey: apiKey, petId: petId).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -87,7 +87,7 @@ internal class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -98,7 +98,7 @@ internal class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -119,7 +119,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + internal class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -142,7 +142,7 @@ internal class PetAPI { */ internal class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -156,7 +156,7 @@ internal class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -169,7 +169,7 @@ internal class PetAPI { - parameter completion: completion handler to receive the data and the error objects */ @available(*, deprecated, message: "This operation is deprecated.") - internal class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + internal class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -193,7 +193,7 @@ internal class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") internal class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -207,7 +207,7 @@ internal class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -219,7 +219,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { + internal class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -245,7 +245,7 @@ internal class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -256,7 +256,7 @@ internal class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -268,7 +268,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -290,7 +290,7 @@ internal class PetAPI { */ internal class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -301,7 +301,7 @@ internal class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -315,7 +315,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -342,7 +342,7 @@ internal class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -359,7 +359,7 @@ internal class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -373,7 +373,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + internal class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -400,7 +400,7 @@ internal class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -417,7 +417,7 @@ internal class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -431,7 +431,7 @@ internal class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func uploadFileWithRequiredFile(petId: Int64, additionalMetadata: String? = nil, requiredFile: URL, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + internal class func uploadFileWithRequiredFile(petId: Int64, additionalMetadata: String? = nil, requiredFile: URL, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, requiredFile: requiredFile).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -458,7 +458,7 @@ internal class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -475,7 +475,7 @@ internal class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 49812742b01d..4b57f341494c 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -15,7 +15,7 @@ internal class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -38,7 +38,7 @@ internal class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ internal class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -60,7 +60,7 @@ internal class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { + internal class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -82,7 +82,7 @@ internal class StoreAPI { */ internal class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -93,7 +93,7 @@ internal class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +105,7 @@ internal class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + internal class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -128,7 +128,7 @@ internal class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -139,7 +139,7 @@ internal class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -151,7 +151,7 @@ internal class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + internal class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -170,7 +170,7 @@ internal class StoreAPI { */ internal class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -181,7 +181,7 @@ internal class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 2a1babfaa48f..01b5c8c07924 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -15,7 +15,7 @@ internal class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -35,7 +35,7 @@ internal class UserAPI { */ internal class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ internal class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -58,7 +58,7 @@ internal class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -77,7 +77,7 @@ internal class UserAPI { */ internal class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -88,7 +88,7 @@ internal class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -100,7 +100,7 @@ internal class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -119,7 +119,7 @@ internal class UserAPI { */ internal class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -130,7 +130,7 @@ internal class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -142,7 +142,7 @@ internal class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -165,7 +165,7 @@ internal class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -176,7 +176,7 @@ internal class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -188,7 +188,7 @@ internal class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { + internal class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -210,7 +210,7 @@ internal class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -221,7 +221,7 @@ internal class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -234,7 +234,7 @@ internal class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + internal class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -255,7 +255,7 @@ internal class UserAPI { */ internal class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -270,7 +270,7 @@ internal class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -281,7 +281,7 @@ internal class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -299,7 +299,7 @@ internal class UserAPI { */ internal class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -310,7 +310,7 @@ internal class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -323,7 +323,7 @@ internal class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - internal class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + internal class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -347,7 +347,7 @@ internal class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -358,7 +358,7 @@ internal class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 0da1a5ed223a..a0f5dc1082eb 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -42,9 +42,10 @@ internal struct StringBooleanMap: Codable, Hashable { // Decodable protocol methods internal init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 66b9d23bb399..05391a8fe6b9 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ internal class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override internal func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override internal func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ internal class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs.swift index dbdab491ff7d..01bc6ff0d8d0 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io:80/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index c0b90bf2f941..440c9b339a79 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -15,7 +15,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -35,7 +35,7 @@ import Foundation */ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index f37371daf503..4d94d2c69131 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -14,7 +14,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -33,7 +33,7 @@ import Foundation */ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -44,7 +44,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -55,7 +55,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -74,7 +74,7 @@ import Foundation */ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -85,7 +85,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -96,7 +96,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -115,7 +115,7 @@ import Foundation */ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -126,7 +126,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -137,7 +137,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -156,7 +156,7 @@ import Foundation */ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -167,7 +167,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -178,7 +178,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -197,7 +197,7 @@ import Foundation */ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -208,7 +208,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -220,7 +220,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -239,7 +239,7 @@ import Foundation */ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -253,7 +253,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -265,7 +265,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -285,7 +285,7 @@ import Foundation */ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -296,7 +296,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -321,7 +321,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -357,7 +357,7 @@ import Foundation */ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -386,7 +386,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -472,7 +472,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -499,7 +499,7 @@ import Foundation */ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -524,7 +524,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -541,7 +541,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -566,7 +566,7 @@ import Foundation */ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -584,7 +584,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -596,7 +596,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -615,7 +615,7 @@ import Foundation */ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -626,7 +626,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -639,7 +639,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -659,7 +659,7 @@ import Foundation */ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -676,7 +676,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index cae3d8e7da27..36099b5f1a35 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -15,7 +15,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -38,7 +38,7 @@ import Foundation */ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index a46c4b36d5c0..1bdfc19cd71f 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -15,7 +15,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -37,7 +37,7 @@ import Foundation */ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -48,7 +48,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +61,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -87,7 +87,7 @@ import Foundation let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -98,7 +98,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -119,7 +119,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -142,7 +142,7 @@ import Foundation */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -156,7 +156,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -169,7 +169,7 @@ import Foundation - parameter completion: completion handler to receive the data and the error objects */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -193,7 +193,7 @@ import Foundation @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -207,7 +207,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -219,7 +219,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -245,7 +245,7 @@ import Foundation let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -256,7 +256,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -268,7 +268,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -290,7 +290,7 @@ import Foundation */ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -301,7 +301,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -315,7 +315,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -342,7 +342,7 @@ import Foundation let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -359,7 +359,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -373,7 +373,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -400,7 +400,7 @@ import Foundation let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -417,7 +417,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -431,7 +431,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -458,7 +458,7 @@ import Foundation let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -475,7 +475,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 990aaaef8bec..4acac5ebd4fc 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -15,7 +15,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -38,7 +38,7 @@ import Foundation let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -60,7 +60,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -82,7 +82,7 @@ import Foundation */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -93,7 +93,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +105,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -128,7 +128,7 @@ import Foundation let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -139,7 +139,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -151,7 +151,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -170,7 +170,7 @@ import Foundation */ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -181,7 +181,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 8fd6953a3f6b..fb331f2a38d4 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -15,7 +15,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -35,7 +35,7 @@ import Foundation */ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -58,7 +58,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -77,7 +77,7 @@ import Foundation */ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -88,7 +88,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -100,7 +100,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -119,7 +119,7 @@ import Foundation */ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -130,7 +130,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -142,7 +142,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -165,7 +165,7 @@ import Foundation let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -176,7 +176,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -188,7 +188,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -210,7 +210,7 @@ import Foundation let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -221,7 +221,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -234,7 +234,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -255,7 +255,7 @@ import Foundation */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -270,7 +270,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -281,7 +281,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -299,7 +299,7 @@ import Foundation */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -310,7 +310,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -323,7 +323,7 @@ import Foundation - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -347,7 +347,7 @@ import Foundation let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -358,7 +358,7 @@ import Foundation let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index f3da87612bc8..9ca13a19d8ef 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -42,9 +42,10 @@ import AnyCodable // Decodable protocol methods public required init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs.swift index d2b0a9186b2e..7935d8a9fa6a 100644 --- a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://localhost" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs/DefaultAPI.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs/DefaultAPI.swift index 7bf2ca84749a..5e6a278c0d02 100644 --- a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs/DefaultAPI.swift +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/APIs/DefaultAPI.swift @@ -13,7 +13,7 @@ open class DefaultAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func rootGet(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Fruit?, _ error: Error?) -> Void)) { + open class func rootGet(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Fruit?, _ error: Error?) -> Void)) { rootGetWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -30,7 +30,7 @@ open class DefaultAPI { */ open class func rootGetWithRequestBuilder() -> RequestBuilder { let path = "/" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -41,7 +41,7 @@ open class DefaultAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/oneOf/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift index dbdab491ff7d..01bc6ff0d8d0 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io:80/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 96d992e7647c..72ecfdc6f768 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -16,7 +16,7 @@ open class AnotherFakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func call123testSpecialTags( body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func call123testSpecialTags( body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -38,7 +38,7 @@ open class AnotherFakeAPI { */ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class AnotherFakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index eadb85f7b623..89d44314c534 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -15,7 +15,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func fakeOuterBooleanSerialize( body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func fakeOuterBooleanSerialize( body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -36,7 +36,7 @@ open class FakeAPI { */ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -47,7 +47,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -58,7 +58,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func fakeOuterCompositeSerialize( body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func fakeOuterCompositeSerialize( body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -79,7 +79,7 @@ open class FakeAPI { */ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -90,7 +90,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -101,7 +101,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func fakeOuterNumberSerialize( body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func fakeOuterNumberSerialize( body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -122,7 +122,7 @@ open class FakeAPI { */ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -133,7 +133,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -144,7 +144,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func fakeOuterStringSerialize( body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func fakeOuterStringSerialize( body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -165,7 +165,7 @@ open class FakeAPI { */ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -176,7 +176,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -187,7 +187,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testBodyWithFileSchema( body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testBodyWithFileSchema( body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -208,7 +208,7 @@ open class FakeAPI { */ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -219,7 +219,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -231,7 +231,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testBodyWithQueryParams( query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testBodyWithQueryParams( query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -252,7 +252,7 @@ open class FakeAPI { */ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -266,7 +266,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -278,7 +278,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testClientModel( body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testClientModel( body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -300,7 +300,7 @@ open class FakeAPI { */ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -311,7 +311,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -336,7 +336,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testEndpointParameters( number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testEndpointParameters( number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { @@ -374,7 +374,7 @@ open class FakeAPI { */ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -403,7 +403,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -489,7 +489,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testEnumParameters( enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testEnumParameters( enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { @@ -518,7 +518,7 @@ open class FakeAPI { */ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -543,7 +543,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -560,7 +560,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testGroupParameters( requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testGroupParameters( requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { @@ -587,7 +587,7 @@ open class FakeAPI { */ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -605,7 +605,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -617,7 +617,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testInlineAdditionalProperties( param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testInlineAdditionalProperties( param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { @@ -638,7 +638,7 @@ open class FakeAPI { */ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -649,7 +649,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -662,7 +662,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testJsonFormData( param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testJsonFormData( param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { @@ -684,7 +684,7 @@ open class FakeAPI { */ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -701,7 +701,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index 14e41e22c1d7..5cd88bffeae4 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -16,7 +16,7 @@ open class FakeClassnameTags123API { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func testClassname( body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func testClassname( body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -41,7 +41,7 @@ open class FakeClassnameTags123API { */ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -52,7 +52,7 @@ open class FakeClassnameTags123API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 4160df0cc9e0..2ca6128ac8dc 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -16,7 +16,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func addPet( body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func addPet( body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -40,7 +40,7 @@ open class PetAPI { */ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -51,7 +51,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -64,7 +64,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func deletePet( petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func deletePet( petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { @@ -92,7 +92,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -103,7 +103,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -124,7 +124,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise<[Pet]> */ - open class func findPetsByStatus( status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise<[Pet]> { + open class func findPetsByStatus( status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise<[Pet]> { let deferred = Promise<[Pet]>.pending() findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { @@ -149,7 +149,7 @@ open class PetAPI { */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -163,7 +163,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -176,7 +176,7 @@ open class PetAPI { - returns: Promise<[Pet]> */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags( tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise<[Pet]> { + open class func findPetsByTags( tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise<[Pet]> { let deferred = Promise<[Pet]>.pending() findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { @@ -202,7 +202,7 @@ open class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -216,7 +216,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -228,7 +228,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func getPetById( petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func getPetById( petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { @@ -256,7 +256,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -267,7 +267,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -279,7 +279,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func updatePet( body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func updatePet( body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -303,7 +303,7 @@ open class PetAPI { */ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -314,7 +314,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -328,7 +328,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func updatePetWithForm( petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func updatePetWithForm( petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { @@ -357,7 +357,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -374,7 +374,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -388,7 +388,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func uploadFile( petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func uploadFile( petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { @@ -417,7 +417,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -434,7 +434,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -448,7 +448,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func uploadFileWithRequiredFile( petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func uploadFileWithRequiredFile( petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { @@ -477,7 +477,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -494,7 +494,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 88305f77980d..2a877b9fb576 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -16,7 +16,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func deleteOrder( orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func deleteOrder( orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { @@ -41,7 +41,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -52,7 +52,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -63,7 +63,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise<[String: Int]> */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise<[String: Int]> { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise<[String: Int]> { let deferred = Promise<[String: Int]>.pending() getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { @@ -87,7 +87,7 @@ open class StoreAPI { */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -98,7 +98,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -110,7 +110,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func getOrderById( orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func getOrderById( orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { @@ -135,7 +135,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -146,7 +146,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -158,7 +158,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func placeOrder( body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func placeOrder( body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -179,7 +179,7 @@ open class StoreAPI { */ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -190,7 +190,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 1bdb11595739..6b12f6a0b09b 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -16,7 +16,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func createUser( body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func createUser( body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -38,7 +38,7 @@ open class UserAPI { */ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +61,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func createUsersWithArrayInput( body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func createUsersWithArrayInput( body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -82,7 +82,7 @@ open class UserAPI { */ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -93,7 +93,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +105,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func createUsersWithListInput( body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func createUsersWithListInput( body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -126,7 +126,7 @@ open class UserAPI { */ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -137,7 +137,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -149,7 +149,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func deleteUser( username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func deleteUser( username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { @@ -174,7 +174,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -185,7 +185,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -197,7 +197,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func getUserByName( username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func getUserByName( username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { @@ -221,7 +221,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -232,7 +232,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -245,7 +245,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func loginUser( username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func loginUser( username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { @@ -268,7 +268,7 @@ open class UserAPI { */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -283,7 +283,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -294,7 +294,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { @@ -314,7 +314,7 @@ open class UserAPI { */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -325,7 +325,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -338,7 +338,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Promise */ - open class func updateUser( username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Promise { + open class func updateUser( username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Promise { let deferred = Promise.pending() updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -364,7 +364,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -375,7 +375,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index d3b2bda9b779..f575c9df65ca 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -42,9 +42,10 @@ public struct StringBooleanMap: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs.swift index dbdab491ff7d..01bc6ff0d8d0 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io:80/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 72b89640eeb4..542fb6f69ba8 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -15,7 +15,7 @@ open class AnotherFakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -35,7 +35,7 @@ open class AnotherFakeAPI { */ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class AnotherFakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index cf92424d9cc1..9b75edc92ee6 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -14,7 +14,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -33,7 +33,7 @@ open class FakeAPI { */ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -44,7 +44,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -55,7 +55,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -74,7 +74,7 @@ open class FakeAPI { */ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -85,7 +85,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -96,7 +96,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -115,7 +115,7 @@ open class FakeAPI { */ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -126,7 +126,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -137,7 +137,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -156,7 +156,7 @@ open class FakeAPI { */ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -167,7 +167,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -178,7 +178,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -197,7 +197,7 @@ open class FakeAPI { */ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -208,7 +208,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -220,7 +220,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -239,7 +239,7 @@ open class FakeAPI { */ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -253,7 +253,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -265,7 +265,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -285,7 +285,7 @@ open class FakeAPI { */ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -296,7 +296,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -357,7 +357,7 @@ open class FakeAPI { */ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -386,7 +386,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -472,7 +472,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -499,7 +499,7 @@ open class FakeAPI { */ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -524,7 +524,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -541,7 +541,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -566,7 +566,7 @@ open class FakeAPI { */ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -584,7 +584,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -596,7 +596,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -615,7 +615,7 @@ open class FakeAPI { */ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -626,7 +626,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -639,7 +639,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -659,7 +659,7 @@ open class FakeAPI { */ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -676,7 +676,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index d4d651664963..fd7d845d3406 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -15,7 +15,7 @@ open class FakeClassnameTags123API { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -38,7 +38,7 @@ open class FakeClassnameTags123API { */ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class FakeClassnameTags123API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index a1fe0d12b1da..d7d5bdfa2eaa 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -15,7 +15,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -37,7 +37,7 @@ open class PetAPI { */ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -48,7 +48,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +61,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -87,7 +87,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -98,7 +98,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -119,7 +119,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -142,7 +142,7 @@ open class PetAPI { */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -156,7 +156,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -169,7 +169,7 @@ open class PetAPI { - parameter completion: completion handler to receive the data and the error objects */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -193,7 +193,7 @@ open class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -207,7 +207,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -219,7 +219,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -245,7 +245,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -256,7 +256,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -268,7 +268,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -290,7 +290,7 @@ open class PetAPI { */ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -301,7 +301,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -315,7 +315,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -342,7 +342,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -359,7 +359,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -400,7 +400,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -417,7 +417,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -458,7 +458,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -475,7 +475,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 501f11f5f219..c80d4286b536 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -15,7 +15,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -38,7 +38,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -60,7 +60,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -82,7 +82,7 @@ open class StoreAPI { */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -93,7 +93,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +105,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -128,7 +128,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -139,7 +139,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -151,7 +151,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -170,7 +170,7 @@ open class StoreAPI { */ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -181,7 +181,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 254474014d31..542dc212bd1b 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -15,7 +15,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -35,7 +35,7 @@ open class UserAPI { */ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -58,7 +58,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -77,7 +77,7 @@ open class UserAPI { */ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -88,7 +88,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -100,7 +100,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -119,7 +119,7 @@ open class UserAPI { */ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -130,7 +130,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -142,7 +142,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -165,7 +165,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -176,7 +176,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -188,7 +188,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -210,7 +210,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -221,7 +221,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -234,7 +234,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -255,7 +255,7 @@ open class UserAPI { */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -270,7 +270,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -281,7 +281,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -299,7 +299,7 @@ open class UserAPI { */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -310,7 +310,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -323,7 +323,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -347,7 +347,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -358,7 +358,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 37ff29a73151..19103698f9a5 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -42,9 +42,10 @@ public struct StringBooleanMap: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift index dbdab491ff7d..01bc6ff0d8d0 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io:80/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 19521eb4d659..f2f733281fc6 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -15,7 +15,7 @@ open class AnotherFakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -35,7 +35,7 @@ open class AnotherFakeAPI { */ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class AnotherFakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index a1eb0539707f..180df7841ae7 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -14,7 +14,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -33,7 +33,7 @@ open class FakeAPI { */ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -44,7 +44,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -55,7 +55,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -74,7 +74,7 @@ open class FakeAPI { */ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -85,7 +85,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -96,7 +96,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -115,7 +115,7 @@ open class FakeAPI { */ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -126,7 +126,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -137,7 +137,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -156,7 +156,7 @@ open class FakeAPI { */ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -167,7 +167,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -178,7 +178,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -197,7 +197,7 @@ open class FakeAPI { */ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -208,7 +208,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -220,7 +220,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -239,7 +239,7 @@ open class FakeAPI { */ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -253,7 +253,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -265,7 +265,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -285,7 +285,7 @@ open class FakeAPI { */ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -296,7 +296,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -357,7 +357,7 @@ open class FakeAPI { */ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -386,7 +386,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -472,7 +472,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -499,7 +499,7 @@ open class FakeAPI { */ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -524,7 +524,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -541,7 +541,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -566,7 +566,7 @@ open class FakeAPI { */ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -584,7 +584,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -596,7 +596,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -615,7 +615,7 @@ open class FakeAPI { */ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -626,7 +626,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -639,7 +639,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -659,7 +659,7 @@ open class FakeAPI { */ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -676,7 +676,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index f4608c34d82e..161b2c3f7585 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -15,7 +15,7 @@ open class FakeClassnameTags123API { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -38,7 +38,7 @@ open class FakeClassnameTags123API { */ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class FakeClassnameTags123API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index 521125d8db8b..23e7fc21b701 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -15,7 +15,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -37,7 +37,7 @@ open class PetAPI { */ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -48,7 +48,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +61,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -87,7 +87,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -98,7 +98,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -119,7 +119,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result<[Pet], Error>) -> Void)) { + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result<[Pet], Error>) -> Void)) { findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -142,7 +142,7 @@ open class PetAPI { */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -156,7 +156,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -169,7 +169,7 @@ open class PetAPI { - parameter completion: completion handler to receive the result */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result<[Pet], Error>) -> Void)) { + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result<[Pet], Error>) -> Void)) { findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -193,7 +193,7 @@ open class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -207,7 +207,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -219,7 +219,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -245,7 +245,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -256,7 +256,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -268,7 +268,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -290,7 +290,7 @@ open class PetAPI { */ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -301,7 +301,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -315,7 +315,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -342,7 +342,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -359,7 +359,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -400,7 +400,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -417,7 +417,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -458,7 +458,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -475,7 +475,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 18f3dd90a5e6..ccdb44bf803e 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -15,7 +15,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -38,7 +38,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -60,7 +60,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result<[String: Int], Error>) -> Void)) { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result<[String: Int], Error>) -> Void)) { getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -82,7 +82,7 @@ open class StoreAPI { */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -93,7 +93,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +105,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -128,7 +128,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -139,7 +139,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -151,7 +151,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -170,7 +170,7 @@ open class StoreAPI { */ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -181,7 +181,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 2dfa75460f04..ea100babfcad 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -15,7 +15,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -35,7 +35,7 @@ open class UserAPI { */ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -58,7 +58,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -77,7 +77,7 @@ open class UserAPI { */ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -88,7 +88,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -100,7 +100,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -119,7 +119,7 @@ open class UserAPI { */ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -130,7 +130,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -142,7 +142,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -165,7 +165,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -176,7 +176,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -188,7 +188,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -210,7 +210,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -221,7 +221,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -234,7 +234,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -255,7 +255,7 @@ open class UserAPI { */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -270,7 +270,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -281,7 +281,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -299,7 +299,7 @@ open class UserAPI { */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -310,7 +310,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -323,7 +323,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the result */ - open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ result: Swift.Result) -> Void)) { updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -347,7 +347,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -358,7 +358,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index d3b2bda9b779..f575c9df65ca 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -42,9 +42,10 @@ public struct StringBooleanMap: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift index dbdab491ff7d..01bc6ff0d8d0 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io:80/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 12e7760ec2c5..d46906177c87 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -16,7 +16,7 @@ open class AnotherFakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -40,7 +40,7 @@ open class AnotherFakeAPI { */ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -51,7 +51,7 @@ open class AnotherFakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index 06b88c2a71fb..abf1a1b7f5de 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -15,7 +15,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -38,7 +38,7 @@ open class FakeAPI { */ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -60,7 +60,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -83,7 +83,7 @@ open class FakeAPI { */ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -94,7 +94,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +105,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -128,7 +128,7 @@ open class FakeAPI { */ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -139,7 +139,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -150,7 +150,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -173,7 +173,7 @@ open class FakeAPI { */ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -184,7 +184,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -195,7 +195,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -218,7 +218,7 @@ open class FakeAPI { */ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -229,7 +229,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -241,7 +241,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -264,7 +264,7 @@ open class FakeAPI { */ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -278,7 +278,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -290,7 +290,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -314,7 +314,7 @@ open class FakeAPI { */ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -325,7 +325,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -350,7 +350,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { @@ -390,7 +390,7 @@ open class FakeAPI { */ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -419,7 +419,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -505,7 +505,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { @@ -536,7 +536,7 @@ open class FakeAPI { */ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -561,7 +561,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -578,7 +578,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { @@ -607,7 +607,7 @@ open class FakeAPI { */ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -625,7 +625,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -637,7 +637,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { @@ -660,7 +660,7 @@ open class FakeAPI { */ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -671,7 +671,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -684,7 +684,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { @@ -708,7 +708,7 @@ open class FakeAPI { */ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -725,7 +725,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index a0f65c5269e5..4e4de2bab774 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -16,7 +16,7 @@ open class FakeClassnameTags123API { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -43,7 +43,7 @@ open class FakeClassnameTags123API { */ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -54,7 +54,7 @@ open class FakeClassnameTags123API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index bb299e77d8c9..a51e91c1f0e0 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -16,7 +16,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -42,7 +42,7 @@ open class PetAPI { */ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -53,7 +53,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -66,7 +66,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { @@ -96,7 +96,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -107,7 +107,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -128,7 +128,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable<[Pet]> */ - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable<[Pet]> { + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable<[Pet]> { return Observable.create { observer -> Disposable in findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { @@ -155,7 +155,7 @@ open class PetAPI { */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -169,7 +169,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -182,7 +182,7 @@ open class PetAPI { - returns: Observable<[Pet]> */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable<[Pet]> { + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable<[Pet]> { return Observable.create { observer -> Disposable in findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { @@ -210,7 +210,7 @@ open class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -224,7 +224,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -236,7 +236,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { @@ -266,7 +266,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -277,7 +277,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -289,7 +289,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -315,7 +315,7 @@ open class PetAPI { */ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -326,7 +326,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -340,7 +340,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { @@ -371,7 +371,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -388,7 +388,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -402,7 +402,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { @@ -433,7 +433,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -450,7 +450,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -464,7 +464,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { @@ -495,7 +495,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -512,7 +512,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 0f1e6023e174..9343800cddb5 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -16,7 +16,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { @@ -43,7 +43,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -54,7 +54,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -65,7 +65,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable<[String: Int]> */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable<[String: Int]> { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable<[String: Int]> { return Observable.create { observer -> Disposable in getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { @@ -91,7 +91,7 @@ open class StoreAPI { */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -102,7 +102,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -114,7 +114,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { @@ -141,7 +141,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -152,7 +152,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -164,7 +164,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -187,7 +187,7 @@ open class StoreAPI { */ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -198,7 +198,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 18bf71fc41ce..2e9dac80ae32 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -16,7 +16,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -40,7 +40,7 @@ open class UserAPI { */ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -51,7 +51,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -63,7 +63,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -86,7 +86,7 @@ open class UserAPI { */ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -97,7 +97,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -109,7 +109,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -132,7 +132,7 @@ open class UserAPI { */ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -143,7 +143,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -155,7 +155,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { @@ -182,7 +182,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -193,7 +193,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -205,7 +205,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { @@ -231,7 +231,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -242,7 +242,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -255,7 +255,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { @@ -280,7 +280,7 @@ open class UserAPI { */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -295,7 +295,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -306,7 +306,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { @@ -328,7 +328,7 @@ open class UserAPI { */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -339,7 +339,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -352,7 +352,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - returns: Observable */ - open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue) -> Observable { + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue) -> Observable { return Observable.create { observer -> Disposable in updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { @@ -380,7 +380,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -391,7 +391,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/urlsessionLibrary/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/samples/client/petstore/swift5/urlsessionLibrary/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000000..919434a6254f --- /dev/null +++ b/samples/client/petstore/swift5/urlsessionLibrary/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIHelper.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIHelper.swift deleted file mode 100644 index f7bb5274bd98..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIHelper.swift +++ /dev/null @@ -1,71 +0,0 @@ -// APIHelper.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -public struct APIHelper { - public static func rejectNil(_ source: [String: Any?]) -> [String: Any]? { - let destination = source.reduce(into: [String: Any]()) { result, item in - if let value = item.value { - result[item.key] = value - } - } - - if destination.isEmpty { - return nil - } - return destination - } - - public static func rejectNilHeaders(_ source: [String: Any?]) -> [String: String] { - return source.reduce(into: [String: String]()) { result, item in - if let collection = item.value as? [Any?] { - result[item.key] = collection.filter { $0 != nil }.map { "\($0!)" }.joined(separator: ",") - } else if let value: Any = item.value { - result[item.key] = "\(value)" - } - } - } - - public static func convertBoolToString(_ source: [String: Any]?) -> [String: Any]? { - guard let source = source else { - return nil - } - - return source.reduce(into: [String: Any]()) { result, item in - switch item.value { - case let x as Bool: - result[item.key] = x.description - default: - result[item.key] = item.value - } - } - } - - public static func mapValueToPathItem(_ source: Any) -> Any { - if let collection = source as? [Any?] { - return collection.filter { $0 != nil }.map { "\($0!)" }.joined(separator: ",") - } - return source - } - - public static func mapValuesToQueryItems(_ source: [String: Any?]) -> [URLQueryItem]? { - let destination = source.filter { $0.value != nil }.reduce(into: [URLQueryItem]()) { result, item in - if let collection = item.value as? [Any?] { - collection.filter { $0 != nil }.map { "\($0!)" }.forEach { value in - result.append(URLQueryItem(name: item.key, value: value)) - } - } else if let value = item.value { - result.append(URLQueryItem(name: item.key, value: "\(value)")) - } - } - - if destination.isEmpty { - return nil - } - return destination - } -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs.swift deleted file mode 100644 index dbdab491ff7d..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs.swift +++ /dev/null @@ -1,62 +0,0 @@ -// APIs.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -open class PetstoreClientAPI { - public static var basePath = "http://petstore.swagger.io:80/v2" - public static var credential: URLCredential? - public static var customHeaders: [String: String] = [:] - public static var requestBuilderFactory: RequestBuilderFactory = URLSessionRequestBuilderFactory() - public static var apiResponseQueue: DispatchQueue = .main -} - -open class RequestBuilder { - var credential: URLCredential? - var headers: [String: String] - public let parameters: [String: Any]? - public let method: String - public let URLString: String - - /// Optional block to obtain a reference to the request's progress instance when available. - /// With the URLSession http client the request's progress only works on iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0. - /// If you need to get the request's progress in older OS versions, please use Alamofire http client. - public var onProgressReady: ((Progress) -> Void)? - - required public init(method: String, URLString: String, parameters: [String: Any]?, headers: [String: String] = [:]) { - self.method = method - self.URLString = URLString - self.parameters = parameters - self.headers = headers - - addHeaders(PetstoreClientAPI.customHeaders) - } - - open func addHeaders(_ aHeaders: [String: String]) { - for (header, value) in aHeaders { - headers[header] = value - } - } - - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } - - public func addHeader(name: String, value: String) -> Self { - if !value.isEmpty { - headers[name] = value - } - return self - } - - open func addCredential() -> Self { - credential = PetstoreClientAPI.credential - return self - } -} - -public protocol RequestBuilderFactory { - func getNonDecodableBuilder() -> RequestBuilder.Type - func getBuilder() -> RequestBuilder.Type -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/AnotherFakeAPI.swift deleted file mode 100644 index 72b89640eeb4..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/AnotherFakeAPI.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// AnotherFakeAPI.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -open class AnotherFakeAPI { - /** - To test special tags - - - parameter body: (body) client model - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { - call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - To test special tags - - PATCH /another-fake/dummy - - To test special tags and operation ID starting with number - - parameter body: (body) client model - - returns: RequestBuilder - */ - open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { - let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeAPI.swift deleted file mode 100644 index cf92424d9cc1..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeAPI.swift +++ /dev/null @@ -1,684 +0,0 @@ -// -// FakeAPI.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -open class FakeAPI { - /** - - - parameter body: (body) Input boolean as post body (optional) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { - fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - - POST /fake/outer/boolean - - Test serialization of outer boolean types - - parameter body: (body) Input boolean as post body (optional) - - returns: RequestBuilder - */ - open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { - let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - - - parameter body: (body) Input composite as post body (optional) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { - fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - - POST /fake/outer/composite - - Test serialization of object with outer number type - - parameter body: (body) Input composite as post body (optional) - - returns: RequestBuilder - */ - open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { - let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - - - parameter body: (body) Input number as post body (optional) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { - fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - - POST /fake/outer/number - - Test serialization of outer number types - - parameter body: (body) Input number as post body (optional) - - returns: RequestBuilder - */ - open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { - let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - - - parameter body: (body) Input string as post body (optional) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { - fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - - POST /fake/outer/string - - Test serialization of outer string types - - parameter body: (body) Input string as post body (optional) - - returns: RequestBuilder - */ - open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { - let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - - - parameter body: (body) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - - PUT /fake/body-with-file-schema - - For this test, the body for this request much reference a schema named `File`. - - parameter body: (body) - - returns: RequestBuilder - */ - open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { - let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - - - parameter query: (query) - - parameter body: (body) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - - PUT /fake/body-with-query-params - - parameter query: (query) - - parameter body: (body) - - returns: RequestBuilder - */ - open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { - let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - var urlComponents = URLComponents(string: URLString) - urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ - "query": query.encodeToJSON(), - ]) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - To test \"client\" model - - - parameter body: (body) client model - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { - testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - To test \"client\" model - - PATCH /fake - - To test \"client\" model - - parameter body: (body) client model - - returns: RequestBuilder - */ - open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { - let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 - - - parameter number: (form) None - - parameter double: (form) None - - parameter patternWithoutDelimiter: (form) None - - parameter byte: (form) None - - parameter integer: (form) None (optional) - - parameter int32: (form) None (optional) - - parameter int64: (form) None (optional) - - parameter float: (form) None (optional) - - parameter string: (form) None (optional) - - parameter binary: (form) None (optional) - - parameter date: (form) None (optional) - - parameter dateTime: (form) None (optional) - - parameter password: (form) None (optional) - - parameter callback: (form) None (optional) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 - - POST /fake - - Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트 - - BASIC: - - type: http - - name: http_basic_test - - parameter number: (form) None - - parameter double: (form) None - - parameter patternWithoutDelimiter: (form) None - - parameter byte: (form) None - - parameter integer: (form) None (optional) - - parameter int32: (form) None (optional) - - parameter int64: (form) None (optional) - - parameter float: (form) None (optional) - - parameter string: (form) None (optional) - - parameter binary: (form) None (optional) - - parameter date: (form) None (optional) - - parameter dateTime: (form) None (optional) - - parameter password: (form) None (optional) - - parameter callback: (form) None (optional) - - returns: RequestBuilder - */ - open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { - let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path - let formParams: [String: Any?] = [ - "integer": integer?.encodeToJSON(), - "int32": int32?.encodeToJSON(), - "int64": int64?.encodeToJSON(), - "number": number.encodeToJSON(), - "float": float?.encodeToJSON(), - "double": double.encodeToJSON(), - "string": string?.encodeToJSON(), - "pattern_without_delimiter": patternWithoutDelimiter.encodeToJSON(), - "byte": byte.encodeToJSON(), - "binary": binary?.encodeToJSON(), - "date": date?.encodeToJSON(), - "dateTime": dateTime?.encodeToJSON(), - "password": password?.encodeToJSON(), - "callback": callback?.encodeToJSON(), - ] - - let nonNullParameters = APIHelper.rejectNil(formParams) - let parameters = APIHelper.convertBoolToString(nonNullParameters) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - "Content-Type": "application/x-www-form-urlencoded", - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - * enum for parameter enumHeaderStringArray - */ - public enum EnumHeaderStringArray_testEnumParameters: String, CaseIterable { - case greaterThan = ">" - case dollar = "$" - } - - /** - * enum for parameter enumHeaderString - */ - public enum EnumHeaderString_testEnumParameters: String, CaseIterable { - case abc = "_abc" - case efg = "-efg" - case xyz = "(xyz)" - } - - /** - * enum for parameter enumQueryStringArray - */ - public enum EnumQueryStringArray_testEnumParameters: String, CaseIterable { - case greaterThan = ">" - case dollar = "$" - } - - /** - * enum for parameter enumQueryString - */ - public enum EnumQueryString_testEnumParameters: String, CaseIterable { - case abc = "_abc" - case efg = "-efg" - case xyz = "(xyz)" - } - - /** - * enum for parameter enumQueryInteger - */ - public enum EnumQueryInteger_testEnumParameters: Int, CaseIterable { - case _1 = 1 - case number2 = -2 - } - - /** - * enum for parameter enumQueryDouble - */ - public enum EnumQueryDouble_testEnumParameters: Double, CaseIterable { - case _11 = 1.1 - case number12 = -1.2 - } - - /** - * enum for parameter enumFormStringArray - */ - public enum EnumFormStringArray_testEnumParameters: String, CaseIterable { - case greaterThan = ">" - case dollar = "$" - } - - /** - * enum for parameter enumFormString - */ - public enum EnumFormString_testEnumParameters: String, CaseIterable { - case abc = "_abc" - case efg = "-efg" - case xyz = "(xyz)" - } - - /** - To test enum parameters - - - parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional) - - parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg) - - parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional) - - parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg) - - parameter enumQueryInteger: (query) Query parameter enum test (double) (optional) - - parameter enumQueryDouble: (query) Query parameter enum test (double) (optional) - - parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar) - - parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - To test enum parameters - - GET /fake - - To test enum parameters - - parameter enumHeaderStringArray: (header) Header parameter enum test (string array) (optional) - - parameter enumHeaderString: (header) Header parameter enum test (string) (optional, default to .efg) - - parameter enumQueryStringArray: (query) Query parameter enum test (string array) (optional) - - parameter enumQueryString: (query) Query parameter enum test (string) (optional, default to .efg) - - parameter enumQueryInteger: (query) Query parameter enum test (double) (optional) - - parameter enumQueryDouble: (query) Query parameter enum test (double) (optional) - - parameter enumFormStringArray: (form) Form parameter enum test (string array) (optional, default to .dollar) - - parameter enumFormString: (form) Form parameter enum test (string) (optional, default to .efg) - - returns: RequestBuilder - */ - open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { - let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path - let formParams: [String: Any?] = [ - "enum_form_string_array": enumFormStringArray?.encodeToJSON(), - "enum_form_string": enumFormString?.encodeToJSON(), - ] - - let nonNullParameters = APIHelper.rejectNil(formParams) - let parameters = APIHelper.convertBoolToString(nonNullParameters) - - var urlComponents = URLComponents(string: URLString) - urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ - "enum_query_string_array": enumQueryStringArray?.encodeToJSON(), - "enum_query_string": enumQueryString?.encodeToJSON(), - "enum_query_integer": enumQueryInteger?.encodeToJSON(), - "enum_query_double": enumQueryDouble?.encodeToJSON(), - ]) - - let nillableHeaders: [String: Any?] = [ - "Content-Type": "application/x-www-form-urlencoded", - "enum_header_string_array": enumHeaderStringArray?.encodeToJSON(), - "enum_header_string": enumHeaderString?.encodeToJSON(), - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Fake endpoint to test group parameters (optional) - - - parameter requiredStringGroup: (query) Required String in group parameters - - parameter requiredBooleanGroup: (header) Required Boolean in group parameters - - parameter requiredInt64Group: (query) Required Integer in group parameters - - parameter stringGroup: (query) String in group parameters (optional) - - parameter booleanGroup: (header) Boolean in group parameters (optional) - - parameter int64Group: (query) Integer in group parameters (optional) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Fake endpoint to test group parameters (optional) - - DELETE /fake - - Fake endpoint to test group parameters (optional) - - parameter requiredStringGroup: (query) Required String in group parameters - - parameter requiredBooleanGroup: (header) Required Boolean in group parameters - - parameter requiredInt64Group: (query) Required Integer in group parameters - - parameter stringGroup: (query) String in group parameters (optional) - - parameter booleanGroup: (header) Boolean in group parameters (optional) - - parameter int64Group: (query) Integer in group parameters (optional) - - returns: RequestBuilder - */ - open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { - let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - var urlComponents = URLComponents(string: URLString) - urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ - "required_string_group": requiredStringGroup.encodeToJSON(), - "required_int64_group": requiredInt64Group.encodeToJSON(), - "string_group": stringGroup?.encodeToJSON(), - "int64_group": int64Group?.encodeToJSON(), - ]) - - let nillableHeaders: [String: Any?] = [ - "required_boolean_group": requiredBooleanGroup.encodeToJSON(), - "boolean_group": booleanGroup?.encodeToJSON(), - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - test inline additionalProperties - - - parameter param: (body) request body - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - test inline additionalProperties - - POST /fake/inline-additionalProperties - - parameter param: (body) request body - - returns: RequestBuilder - */ - open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { - let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - test json serialization of form data - - - parameter param: (form) field1 - - parameter param2: (form) field2 - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - test json serialization of form data - - GET /fake/jsonFormData - - parameter param: (form) field1 - - parameter param2: (form) field2 - - returns: RequestBuilder - */ - open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { - let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path - let formParams: [String: Any?] = [ - "param": param.encodeToJSON(), - "param2": param2.encodeToJSON(), - ] - - let nonNullParameters = APIHelper.rejectNil(formParams) - let parameters = APIHelper.convertBoolToString(nonNullParameters) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - "Content-Type": "application/x-www-form-urlencoded", - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeClassnameTags123API.swift deleted file mode 100644 index d4d651664963..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/FakeClassnameTags123API.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// FakeClassnameTags123API.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -open class FakeClassnameTags123API { - /** - To test class name in snake case - - - parameter body: (body) client model - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { - testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - To test class name in snake case - - PATCH /fake_classname_test - - To test class name in snake case - - API Key: - - type: apiKey api_key_query (QUERY) - - name: api_key_query - - parameter body: (body) client model - - returns: RequestBuilder - */ - open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { - let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/PetAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/PetAPI.swift deleted file mode 100644 index a1fe0d12b1da..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/PetAPI.swift +++ /dev/null @@ -1,483 +0,0 @@ -// -// PetAPI.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -open class PetAPI { - /** - Add a new pet to the store - - - parameter body: (body) Pet object that needs to be added to the store - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Add a new pet to the store - - POST /pet - - OAuth: - - type: oauth2 - - name: petstore_auth - - parameter body: (body) Pet object that needs to be added to the store - - returns: RequestBuilder - */ - open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { - let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Deletes a pet - - - parameter petId: (path) Pet id to delete - - parameter apiKey: (header) (optional) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Deletes a pet - - DELETE /pet/{petId} - - OAuth: - - type: oauth2 - - name: petstore_auth - - parameter petId: (path) Pet id to delete - - parameter apiKey: (header) (optional) - - returns: RequestBuilder - */ - open class func deletePetWithRequestBuilder(petId: Int64, apiKey: String? = nil) -> RequestBuilder { - var path = "/pet/{petId}" - let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" - let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" - path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - "api_key": apiKey?.encodeToJSON(), - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - * enum for parameter status - */ - public enum Status_findPetsByStatus: String, CaseIterable { - case available = "available" - case pending = "pending" - case sold = "sold" - } - - /** - Finds Pets by status - - - parameter status: (query) Status values that need to be considered for filter - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { - findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Finds Pets by status - - GET /pet/findByStatus - - Multiple status values can be provided with comma separated strings - - OAuth: - - type: oauth2 - - name: petstore_auth - - parameter status: (query) Status values that need to be considered for filter - - returns: RequestBuilder<[Pet]> - */ - open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { - let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - var urlComponents = URLComponents(string: URLString) - urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ - "status": status.encodeToJSON(), - ]) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Finds Pets by tags - - - parameter tags: (query) Tags to filter by - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { - findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Finds Pets by tags - - GET /pet/findByTags - - Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. - - OAuth: - - type: oauth2 - - name: petstore_auth - - parameter tags: (query) Tags to filter by - - returns: RequestBuilder<[Pet]> - */ - @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { - let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - var urlComponents = URLComponents(string: URLString) - urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ - "tags": tags.encodeToJSON(), - ]) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Find pet by ID - - - parameter petId: (path) ID of pet to return - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { - getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Find pet by ID - - GET /pet/{petId} - - Returns a single pet - - API Key: - - type: apiKey api_key - - name: api_key - - parameter petId: (path) ID of pet to return - - returns: RequestBuilder - */ - open class func getPetByIdWithRequestBuilder(petId: Int64) -> RequestBuilder { - var path = "/pet/{petId}" - let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" - let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" - path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Update an existing pet - - - parameter body: (body) Pet object that needs to be added to the store - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Update an existing pet - - PUT /pet - - OAuth: - - type: oauth2 - - name: petstore_auth - - parameter body: (body) Pet object that needs to be added to the store - - returns: RequestBuilder - */ - open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { - let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Updates a pet in the store with form data - - - parameter petId: (path) ID of pet that needs to be updated - - parameter name: (form) Updated name of the pet (optional) - - parameter status: (form) Updated status of the pet (optional) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Updates a pet in the store with form data - - POST /pet/{petId} - - OAuth: - - type: oauth2 - - name: petstore_auth - - parameter petId: (path) ID of pet that needs to be updated - - parameter name: (form) Updated name of the pet (optional) - - parameter status: (form) Updated status of the pet (optional) - - returns: RequestBuilder - */ - open class func updatePetWithFormWithRequestBuilder(petId: Int64, name: String? = nil, status: String? = nil) -> RequestBuilder { - var path = "/pet/{petId}" - let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" - let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" - path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path - let formParams: [String: Any?] = [ - "name": name?.encodeToJSON(), - "status": status?.encodeToJSON(), - ] - - let nonNullParameters = APIHelper.rejectNil(formParams) - let parameters = APIHelper.convertBoolToString(nonNullParameters) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - "Content-Type": "application/x-www-form-urlencoded", - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - uploads an image - - - parameter petId: (path) ID of pet to update - - parameter additionalMetadata: (form) Additional data to pass to server (optional) - - parameter file: (form) file to upload (optional) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { - uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - uploads an image - - POST /pet/{petId}/uploadImage - - OAuth: - - type: oauth2 - - name: petstore_auth - - parameter petId: (path) ID of pet to update - - parameter additionalMetadata: (form) Additional data to pass to server (optional) - - parameter file: (form) file to upload (optional) - - returns: RequestBuilder - */ - open class func uploadFileWithRequestBuilder(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil) -> RequestBuilder { - var path = "/pet/{petId}/uploadImage" - let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" - let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" - path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path - let formParams: [String: Any?] = [ - "additionalMetadata": additionalMetadata?.encodeToJSON(), - "file": file?.encodeToJSON(), - ] - - let nonNullParameters = APIHelper.rejectNil(formParams) - let parameters = APIHelper.convertBoolToString(nonNullParameters) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - "Content-Type": "multipart/form-data", - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - uploads an image (required) - - - parameter petId: (path) ID of pet to update - - parameter requiredFile: (form) file to upload - - parameter additionalMetadata: (form) Additional data to pass to server (optional) - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { - uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - uploads an image (required) - - POST /fake/{petId}/uploadImageWithRequiredFile - - OAuth: - - type: oauth2 - - name: petstore_auth - - parameter petId: (path) ID of pet to update - - parameter requiredFile: (form) file to upload - - parameter additionalMetadata: (form) Additional data to pass to server (optional) - - returns: RequestBuilder - */ - open class func uploadFileWithRequiredFileWithRequestBuilder(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil) -> RequestBuilder { - var path = "/fake/{petId}/uploadImageWithRequiredFile" - let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" - let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" - path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path - let formParams: [String: Any?] = [ - "additionalMetadata": additionalMetadata?.encodeToJSON(), - "requiredFile": requiredFile.encodeToJSON(), - ] - - let nonNullParameters = APIHelper.rejectNil(formParams) - let parameters = APIHelper.convertBoolToString(nonNullParameters) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - "Content-Type": "multipart/form-data", - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/StoreAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/StoreAPI.swift deleted file mode 100644 index 501f11f5f219..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/StoreAPI.swift +++ /dev/null @@ -1,189 +0,0 @@ -// -// StoreAPI.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -open class StoreAPI { - /** - Delete purchase order by ID - - - parameter orderId: (path) ID of the order that needs to be deleted - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Delete purchase order by ID - - DELETE /store/order/{order_id} - - For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - - parameter orderId: (path) ID of the order that needs to be deleted - - returns: RequestBuilder - */ - open class func deleteOrderWithRequestBuilder(orderId: String) -> RequestBuilder { - var path = "/store/order/{order_id}" - let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" - let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" - path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Returns pet inventories by status - - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { - getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Returns pet inventories by status - - GET /store/inventory - - Returns a map of status codes to quantities - - API Key: - - type: apiKey api_key - - name: api_key - - returns: RequestBuilder<[String: Int]> - */ - open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { - let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Find purchase order by ID - - - parameter orderId: (path) ID of pet that needs to be fetched - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { - getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Find purchase order by ID - - GET /store/order/{order_id} - - For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - - parameter orderId: (path) ID of pet that needs to be fetched - - returns: RequestBuilder - */ - open class func getOrderByIdWithRequestBuilder(orderId: Int64) -> RequestBuilder { - var path = "/store/order/{order_id}" - let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" - let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" - path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Place an order for a pet - - - parameter body: (body) order placed for purchasing the pet - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { - placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Place an order for a pet - - POST /store/order - - parameter body: (body) order placed for purchasing the pet - - returns: RequestBuilder - */ - open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { - let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/UserAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/UserAPI.swift deleted file mode 100644 index 254474014d31..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/APIs/UserAPI.swift +++ /dev/null @@ -1,366 +0,0 @@ -// -// UserAPI.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -open class UserAPI { - /** - Create user - - - parameter body: (body) Created user object - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Create user - - POST /user - - This can only be done by the logged in user. - - parameter body: (body) Created user object - - returns: RequestBuilder - */ - open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { - let path = "/user" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Creates list of users with given input array - - - parameter body: (body) List of user object - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Creates list of users with given input array - - POST /user/createWithArray - - parameter body: (body) List of user object - - returns: RequestBuilder - */ - open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { - let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Creates list of users with given input array - - - parameter body: (body) List of user object - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Creates list of users with given input array - - POST /user/createWithList - - parameter body: (body) List of user object - - returns: RequestBuilder - */ - open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { - let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Delete user - - - parameter username: (path) The name that needs to be deleted - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Delete user - - DELETE /user/{username} - - This can only be done by the logged in user. - - parameter username: (path) The name that needs to be deleted - - returns: RequestBuilder - */ - open class func deleteUserWithRequestBuilder(username: String) -> RequestBuilder { - var path = "/user/{username}" - let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" - let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" - path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Get user by user name - - - parameter username: (path) The name that needs to be fetched. Use user1 for testing. - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { - getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Get user by user name - - GET /user/{username} - - parameter username: (path) The name that needs to be fetched. Use user1 for testing. - - returns: RequestBuilder - */ - open class func getUserByNameWithRequestBuilder(username: String) -> RequestBuilder { - var path = "/user/{username}" - let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" - let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" - path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Logs user into the system - - - parameter username: (query) The user name for login - - parameter password: (query) The password for login in clear text - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { - loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in - switch result { - case let .success(response): - completion(response.body, nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Logs user into the system - - GET /user/login - - responseHeaders: [X-Rate-Limit(Int), X-Expires-After(Date)] - - parameter username: (query) The user name for login - - parameter password: (query) The password for login in clear text - - returns: RequestBuilder - */ - open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { - let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - var urlComponents = URLComponents(string: URLString) - urlComponents?.queryItems = APIHelper.mapValuesToQueryItems([ - "username": username.encodeToJSON(), - "password": password.encodeToJSON(), - ]) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() - - return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Logs out current logged in user session - - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Logs out current logged in user session - - GET /user/logout - - returns: RequestBuilder - */ - open class func logoutUserWithRequestBuilder() -> RequestBuilder { - let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path - let parameters: [String: Any]? = nil - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - - /** - Updated user - - - parameter username: (path) name that need to be deleted - - parameter body: (body) Updated user object - - parameter apiResponseQueue: The queue on which api response is dispatched. - - parameter completion: completion handler to receive the data and the error objects - */ - open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { - updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in - switch result { - case .success: - completion((), nil) - case let .failure(error): - completion(nil, error) - } - } - } - - /** - Updated user - - PUT /user/{username} - - This can only be done by the logged in user. - - parameter username: (path) name that need to be deleted - - parameter body: (body) Updated user object - - returns: RequestBuilder - */ - open class func updateUserWithRequestBuilder(username: String, body: User) -> RequestBuilder { - var path = "/user/{username}" - let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" - let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" - path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path - let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) - - let urlComponents = URLComponents(string: URLString) - - let nillableHeaders: [String: Any?] = [ - : - ] - - let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() - - return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/CodableHelper.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/CodableHelper.swift deleted file mode 100644 index 09c82e53e132..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/CodableHelper.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// CodableHelper.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -open class CodableHelper { - private static var customDateFormatter: DateFormatter? - private static var defaultDateFormatter: DateFormatter = OpenISO8601DateFormatter() - - private static var customJSONDecoder: JSONDecoder? - private static var defaultJSONDecoder: JSONDecoder = { - let decoder = JSONDecoder() - decoder.dateDecodingStrategy = .formatted(CodableHelper.dateFormatter) - return decoder - }() - - private static var customJSONEncoder: JSONEncoder? - private static var defaultJSONEncoder: JSONEncoder = { - let encoder = JSONEncoder() - encoder.dateEncodingStrategy = .formatted(CodableHelper.dateFormatter) - encoder.outputFormatting = .prettyPrinted - return encoder - }() - - public static var dateFormatter: DateFormatter { - get { return customDateFormatter ?? defaultDateFormatter } - set { customDateFormatter = newValue } - } - public static var jsonDecoder: JSONDecoder { - get { return customJSONDecoder ?? defaultJSONDecoder } - set { customJSONDecoder = newValue } - } - public static var jsonEncoder: JSONEncoder { - get { return customJSONEncoder ?? defaultJSONEncoder } - set { customJSONEncoder = newValue } - } - - open class func decode(_ type: T.Type, from data: Data) -> Swift.Result where T: Decodable { - return Swift.Result { try jsonDecoder.decode(type, from: data) } - } - - open class func encode(_ value: T) -> Swift.Result where T: Encodable { - return Swift.Result { try jsonEncoder.encode(value) } - } -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Configuration.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Configuration.swift deleted file mode 100644 index 18edabbed782..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Configuration.swift +++ /dev/null @@ -1,14 +0,0 @@ -// Configuration.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -open class Configuration { - // This value is used to configure the date formatter that is used to serialize dates into JSON format. - // You must set it prior to encoding any dates, and it will only be read once. - @available(*, unavailable, message: "To set a different date format, use CodableHelper.dateFormatter instead.") - public static var dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Extensions.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Extensions.swift deleted file mode 100644 index 3aef2d1d6c54..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Extensions.swift +++ /dev/null @@ -1,227 +0,0 @@ -// Extensions.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -extension Bool: JSONEncodable { - func encodeToJSON() -> Any { return self as Any } -} - -extension Float: JSONEncodable { - func encodeToJSON() -> Any { return self as Any } -} - -extension Int: JSONEncodable { - func encodeToJSON() -> Any { return self as Any } -} - -extension Int32: JSONEncodable { - func encodeToJSON() -> Any { return NSNumber(value: self as Int32) } -} - -extension Int64: JSONEncodable { - func encodeToJSON() -> Any { return NSNumber(value: self as Int64) } -} - -extension Double: JSONEncodable { - func encodeToJSON() -> Any { return self as Any } -} - -extension String: JSONEncodable { - func encodeToJSON() -> Any { return self as Any } -} - -extension RawRepresentable where RawValue: JSONEncodable { - func encodeToJSON() -> Any { return self.rawValue as Any } -} - -private func encodeIfPossible(_ object: T) -> Any { - if let encodableObject = object as? JSONEncodable { - return encodableObject.encodeToJSON() - } else { - return object as Any - } -} - -extension Array: JSONEncodable { - func encodeToJSON() -> Any { - return self.map(encodeIfPossible) - } -} - -extension Set: JSONEncodable { - func encodeToJSON() -> Any { - return Array(self).encodeToJSON() - } -} - -extension Dictionary: JSONEncodable { - func encodeToJSON() -> Any { - var dictionary = [AnyHashable: Any]() - for (key, value) in self { - dictionary[key] = encodeIfPossible(value) - } - return dictionary as Any - } -} - -extension Data: JSONEncodable { - func encodeToJSON() -> Any { - return self.base64EncodedString(options: Data.Base64EncodingOptions()) - } -} - -extension Date: JSONEncodable { - func encodeToJSON() -> Any { - return CodableHelper.dateFormatter.string(from: self) as Any - } -} - -extension URL: JSONEncodable { - func encodeToJSON() -> Any { - return self - } -} - -extension UUID: JSONEncodable { - func encodeToJSON() -> Any { - return self.uuidString - } -} - -extension String: CodingKey { - - public var stringValue: String { - return self - } - - public init?(stringValue: String) { - self.init(stringLiteral: stringValue) - } - - public var intValue: Int? { - return nil - } - - public init?(intValue: Int) { - return nil - } - -} - -extension KeyedEncodingContainerProtocol { - - public mutating func encodeArray(_ values: [T], forKey key: Self.Key) throws where T: Encodable { - var arrayContainer = nestedUnkeyedContainer(forKey: key) - try arrayContainer.encode(contentsOf: values) - } - - public mutating func encodeArrayIfPresent(_ values: [T]?, forKey key: Self.Key) throws where T: Encodable { - if let values = values { - try encodeArray(values, forKey: key) - } - } - - public mutating func encodeMap(_ pairs: [Self.Key: T]) throws where T: Encodable { - for (key, value) in pairs { - try encode(value, forKey: key) - } - } - - public mutating func encodeMapIfPresent(_ pairs: [Self.Key: T]?) throws where T: Encodable { - if let pairs = pairs { - try encodeMap(pairs) - } - } - -} - -extension KeyedDecodingContainerProtocol { - - public func decodeArray(_ type: T.Type, forKey key: Self.Key) throws -> [T] where T: Decodable { - var tmpArray = [T]() - - var nestedContainer = try nestedUnkeyedContainer(forKey: key) - while !nestedContainer.isAtEnd { - let arrayValue = try nestedContainer.decode(T.self) - tmpArray.append(arrayValue) - } - - return tmpArray - } - - public func decodeArrayIfPresent(_ type: T.Type, forKey key: Self.Key) throws -> [T]? where T: Decodable { - var tmpArray: [T]? - - if contains(key) { - tmpArray = try decodeArray(T.self, forKey: key) - } - - return tmpArray - } - - public func decodeMap(_ type: T.Type, excludedKeys: Set) throws -> [Self.Key: T] where T: Decodable { - var map: [Self.Key: T] = [:] - - for key in allKeys { - if !excludedKeys.contains(key) { - let value = try decode(T.self, forKey: key) - map[key] = value - } - } - - return map - } - -} - -extension HTTPURLResponse { - var isStatusCodeSuccessful: Bool { - return Array(200 ..< 300).contains(statusCode) - } -} - -extension AnyCodable: Hashable { - public func hash(into hasher: inout Hasher) { - switch value { - case let value as Bool: - hasher.combine(value) - case let value as Int: - hasher.combine(value) - case let value as Int8: - hasher.combine(value) - case let value as Int16: - hasher.combine(value) - case let value as Int32: - hasher.combine(value) - case let value as Int64: - hasher.combine(value) - case let value as UInt: - hasher.combine(value) - case let value as UInt8: - hasher.combine(value) - case let value as UInt16: - hasher.combine(value) - case let value as UInt32: - hasher.combine(value) - case let value as UInt64: - hasher.combine(value) - case let value as Float: - hasher.combine(value) - case let value as Double: - hasher.combine(value) - case let value as String: - hasher.combine(value) - case let value as [String: AnyCodable]: - hasher.combine(value) - case let value as [AnyCodable]: - hasher.combine(value) - default: - hasher.combine(0) - } - } -} \ No newline at end of file diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONDataEncoding.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONDataEncoding.swift deleted file mode 100644 index b79e9f5e64d5..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONDataEncoding.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// JSONDataEncoding.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -public struct JSONDataEncoding { - - // MARK: Properties - - private static let jsonDataKey = "jsonData" - - // MARK: Encoding - - /// Creates a URL request by encoding parameters and applying them onto an existing request. - /// - /// - parameter urlRequest: The request to have parameters applied. - /// - parameter parameters: The parameters to apply. This should have a single key/value - /// pair with "jsonData" as the key and a Data object as the value. - /// - /// - throws: An `Error` if the encoding process encounters an error. - /// - /// - returns: The encoded request. - public func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) -> URLRequest { - var urlRequest = urlRequest - - guard let jsonData = parameters?[JSONDataEncoding.jsonDataKey] as? Data, !jsonData.isEmpty else { - return urlRequest - } - - if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { - urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") - } - - urlRequest.httpBody = jsonData - - return urlRequest - } - - public static func encodingParameters(jsonData: Data?) -> [String: Any]? { - var returnedParams: [String: Any]? - if let jsonData = jsonData, !jsonData.isEmpty { - var params: [String: Any] = [:] - params[jsonDataKey] = jsonData - returnedParams = params - } - return returnedParams - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONEncodingHelper.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONEncodingHelper.swift deleted file mode 100644 index 02f78ffb4705..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/JSONEncodingHelper.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// JSONEncodingHelper.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -open class JSONEncodingHelper { - - open class func encodingParameters(forEncodableObject encodableObj: T?) -> [String: Any]? { - var params: [String: Any]? - - // Encode the Encodable object - if let encodableObj = encodableObj { - let encodeResult = CodableHelper.encode(encodableObj) - do { - let data = try encodeResult.get() - params = JSONDataEncoding.encodingParameters(jsonData: data) - } catch { - print(error.localizedDescription) - } - } - - return params - } - - open class func encodingParameters(forEncodableObject encodableObj: Any?) -> [String: Any]? { - var params: [String: Any]? - - if let encodableObj = encodableObj { - do { - let data = try JSONSerialization.data(withJSONObject: encodableObj, options: .prettyPrinted) - params = JSONDataEncoding.encodingParameters(jsonData: data) - } catch { - print(error.localizedDescription) - return nil - } - } - - return params - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models.swift deleted file mode 100644 index 96e26a20f7d6..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models.swift +++ /dev/null @@ -1,54 +0,0 @@ -// Models.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -protocol JSONEncodable { - func encodeToJSON() -> Any -} - -public enum ErrorResponse: Error { - case error(Int, Data?, URLResponse?, Error) -} - -public enum DownloadException: Error { - case responseDataMissing - case responseFailed - case requestMissing - case requestMissingPath - case requestMissingURL -} - -public enum DecodableRequestBuilderError: Error { - case emptyDataResponse - case nilHTTPResponse - case unsuccessfulHTTPStatusCode - case jsonDecoding(DecodingError) - case generalError(Error) -} - -open class Response { - public let statusCode: Int - public let header: [String: String] - public let body: T? - - public init(statusCode: Int, header: [String: String], body: T?) { - self.statusCode = statusCode - self.header = header - self.body = body - } - - public convenience init(response: HTTPURLResponse, body: T?) { - let rawHeader = response.allHeaderFields - var header = [String: String]() - for (key, value) in rawHeader { - if let key = key.base as? String, let value = value as? String { - header[key] = value - } - } - self.init(statusCode: response.statusCode, header: header, body: body) - } -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift deleted file mode 100644 index 5c3e8279143e..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AdditionalPropertiesClass.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// AdditionalPropertiesClass.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class AdditionalPropertiesClass: Codable, Hashable { - - public var mapString: [String: String]? - public var mapMapString: [String: [String: String]]? - - public init(mapString: [String: String]? = nil, mapMapString: [String: [String: String]]? = nil) { - self.mapString = mapString - self.mapMapString = mapMapString - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case mapString = "map_string" - case mapMapString = "map_map_string" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(mapString, forKey: .mapString) - try container.encodeIfPresent(mapMapString, forKey: .mapMapString) - } - - - - public static func == (lhs: AdditionalPropertiesClass, rhs: AdditionalPropertiesClass) -> Bool { - lhs.mapString == rhs.mapString && - lhs.mapMapString == rhs.mapMapString - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(mapString?.hashValue) - hasher.combine(mapMapString?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift deleted file mode 100644 index 6bae9f2d0ecd..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Animal.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// Animal.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class Animal: Codable, Hashable { - - public var className: String - public var color: String? = "red" - - public init(className: String, color: String? = "red") { - self.className = className - self.color = color - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case className - case color - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(className, forKey: .className) - try container.encodeIfPresent(color, forKey: .color) - } - - - - public static func == (lhs: Animal, rhs: Animal) -> Bool { - lhs.className == rhs.className && - lhs.color == rhs.color - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(className.hashValue) - hasher.combine(color?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AnimalFarm.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AnimalFarm.swift deleted file mode 100644 index b20b894a1adb..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/AnimalFarm.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// AnimalFarm.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public typealias AnimalFarm = [Animal] diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift deleted file mode 100644 index a0f3a24a8ee9..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ApiResponse.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// ApiResponse.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class ApiResponse: Codable, Hashable { - - public var code: Int? - public var type: String? - public var message: String? - - public init(code: Int? = nil, type: String? = nil, message: String? = nil) { - self.code = code - self.type = type - self.message = message - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case code - case type - case message - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(code, forKey: .code) - try container.encodeIfPresent(type, forKey: .type) - try container.encodeIfPresent(message, forKey: .message) - } - - - - public static func == (lhs: ApiResponse, rhs: ApiResponse) -> Bool { - lhs.code == rhs.code && - lhs.type == rhs.type && - lhs.message == rhs.message - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(code?.hashValue) - hasher.combine(type?.hashValue) - hasher.combine(message?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift deleted file mode 100644 index b4b66b37be5e..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfArrayOfNumberOnly.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// ArrayOfArrayOfNumberOnly.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { - - public var arrayArrayNumber: [[Double]]? - - public init(arrayArrayNumber: [[Double]]? = nil) { - self.arrayArrayNumber = arrayArrayNumber - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case arrayArrayNumber = "ArrayArrayNumber" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(arrayArrayNumber, forKey: .arrayArrayNumber) - } - - - - public static func == (lhs: ArrayOfArrayOfNumberOnly, rhs: ArrayOfArrayOfNumberOnly) -> Bool { - lhs.arrayArrayNumber == rhs.arrayArrayNumber - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(arrayArrayNumber?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift deleted file mode 100644 index 1efbc2aa9e4d..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayOfNumberOnly.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// ArrayOfNumberOnly.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class ArrayOfNumberOnly: Codable, Hashable { - - public var arrayNumber: [Double]? - - public init(arrayNumber: [Double]? = nil) { - self.arrayNumber = arrayNumber - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case arrayNumber = "ArrayNumber" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(arrayNumber, forKey: .arrayNumber) - } - - - - public static func == (lhs: ArrayOfNumberOnly, rhs: ArrayOfNumberOnly) -> Bool { - lhs.arrayNumber == rhs.arrayNumber - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(arrayNumber?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift deleted file mode 100644 index 6ca479263d3c..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ArrayTest.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// ArrayTest.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class ArrayTest: Codable, Hashable { - - public var arrayOfString: [String]? - public var arrayArrayOfInteger: [[Int64]]? - public var arrayArrayOfModel: [[ReadOnlyFirst]]? - - public init(arrayOfString: [String]? = nil, arrayArrayOfInteger: [[Int64]]? = nil, arrayArrayOfModel: [[ReadOnlyFirst]]? = nil) { - self.arrayOfString = arrayOfString - self.arrayArrayOfInteger = arrayArrayOfInteger - self.arrayArrayOfModel = arrayArrayOfModel - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case arrayOfString = "array_of_string" - case arrayArrayOfInteger = "array_array_of_integer" - case arrayArrayOfModel = "array_array_of_model" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(arrayOfString, forKey: .arrayOfString) - try container.encodeIfPresent(arrayArrayOfInteger, forKey: .arrayArrayOfInteger) - try container.encodeIfPresent(arrayArrayOfModel, forKey: .arrayArrayOfModel) - } - - - - public static func == (lhs: ArrayTest, rhs: ArrayTest) -> Bool { - lhs.arrayOfString == rhs.arrayOfString && - lhs.arrayArrayOfInteger == rhs.arrayArrayOfInteger && - lhs.arrayArrayOfModel == rhs.arrayArrayOfModel - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(arrayOfString?.hashValue) - hasher.combine(arrayArrayOfInteger?.hashValue) - hasher.combine(arrayArrayOfModel?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift deleted file mode 100644 index fd148a09d299..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Capitalization.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// Capitalization.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class Capitalization: Codable, Hashable { - - public var smallCamel: String? - public var capitalCamel: String? - public var smallSnake: String? - public var capitalSnake: String? - public var sCAETHFlowPoints: String? - /** Name of the pet */ - public var ATT_NAME: String? - - public init(smallCamel: String? = nil, capitalCamel: String? = nil, smallSnake: String? = nil, capitalSnake: String? = nil, sCAETHFlowPoints: String? = nil, ATT_NAME: String? = nil) { - self.smallCamel = smallCamel - self.capitalCamel = capitalCamel - self.smallSnake = smallSnake - self.capitalSnake = capitalSnake - self.sCAETHFlowPoints = sCAETHFlowPoints - self.ATT_NAME = ATT_NAME - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case smallCamel - case capitalCamel = "CapitalCamel" - case smallSnake = "small_Snake" - case capitalSnake = "Capital_Snake" - case sCAETHFlowPoints = "SCA_ETH_Flow_Points" - case ATT_NAME - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(smallCamel, forKey: .smallCamel) - try container.encodeIfPresent(capitalCamel, forKey: .capitalCamel) - try container.encodeIfPresent(smallSnake, forKey: .smallSnake) - try container.encodeIfPresent(capitalSnake, forKey: .capitalSnake) - try container.encodeIfPresent(sCAETHFlowPoints, forKey: .sCAETHFlowPoints) - try container.encodeIfPresent(ATT_NAME, forKey: .ATT_NAME) - } - - - - public static func == (lhs: Capitalization, rhs: Capitalization) -> Bool { - lhs.smallCamel == rhs.smallCamel && - lhs.capitalCamel == rhs.capitalCamel && - lhs.smallSnake == rhs.smallSnake && - lhs.capitalSnake == rhs.capitalSnake && - lhs.sCAETHFlowPoints == rhs.sCAETHFlowPoints && - lhs.ATT_NAME == rhs.ATT_NAME - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(smallCamel?.hashValue) - hasher.combine(capitalCamel?.hashValue) - hasher.combine(smallSnake?.hashValue) - hasher.combine(capitalSnake?.hashValue) - hasher.combine(sCAETHFlowPoints?.hashValue) - hasher.combine(ATT_NAME?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift deleted file mode 100644 index 54b81364f35c..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Cat.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// Cat.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class Cat: Codable, Hashable { - - public var className: String - public var color: String? = "red" - public var declawed: Bool? - - public init(className: String, color: String? = "red", declawed: Bool? = nil) { - self.className = className - self.color = color - self.declawed = declawed - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case className - case color - case declawed - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(className, forKey: .className) - try container.encodeIfPresent(color, forKey: .color) - try container.encodeIfPresent(declawed, forKey: .declawed) - } - - - - public static func == (lhs: Cat, rhs: Cat) -> Bool { - lhs.className == rhs.className && - lhs.color == rhs.color && - lhs.declawed == rhs.declawed - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(className.hashValue) - hasher.combine(color?.hashValue) - hasher.combine(declawed?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift deleted file mode 100644 index 5074d59cb5df..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/CatAllOf.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// CatAllOf.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class CatAllOf: Codable, Hashable { - - public var declawed: Bool? - - public init(declawed: Bool? = nil) { - self.declawed = declawed - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case declawed - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(declawed, forKey: .declawed) - } - - - - public static func == (lhs: CatAllOf, rhs: CatAllOf) -> Bool { - lhs.declawed == rhs.declawed - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(declawed?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift deleted file mode 100644 index 242fc578d458..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Category.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// Category.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class Category: Codable, Hashable { - - public var id: Int64? - public var name: String? = "default-name" - - public init(id: Int64? = nil, name: String? = "default-name") { - self.id = id - self.name = name - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case id - case name - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(id, forKey: .id) - try container.encode(name, forKey: .name) - } - - - - public static func == (lhs: Category, rhs: Category) -> Bool { - lhs.id == rhs.id && - lhs.name == rhs.name - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(id?.hashValue) - hasher.combine(name.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ClassModel.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ClassModel.swift deleted file mode 100644 index 1b54393ed9fd..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ClassModel.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// ClassModel.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -/** Model for testing model with \"_class\" property */ -public struct ClassModel: Codable, Hashable { - - public var `class`: String? - - public init(`class`: String? = nil) { - self.`class` = `class` - } - - public enum CodingKeys: String, CodingKey, CaseIterable { - case `class` = "_class" - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift deleted file mode 100644 index 323ab20082de..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Client.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// Client.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class Client: Codable, Hashable { - - public var client: String? - - public init(client: String? = nil) { - self.client = client - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case client - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(client, forKey: .client) - } - - - - public static func == (lhs: Client, rhs: Client) -> Bool { - lhs.client == rhs.client - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(client?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift deleted file mode 100644 index ec8a67480353..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Dog.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// Dog.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class Dog: Codable, Hashable { - - public var className: String - public var color: String? = "red" - public var breed: String? - - public init(className: String, color: String? = "red", breed: String? = nil) { - self.className = className - self.color = color - self.breed = breed - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case className - case color - case breed - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(className, forKey: .className) - try container.encodeIfPresent(color, forKey: .color) - try container.encodeIfPresent(breed, forKey: .breed) - } - - - - public static func == (lhs: Dog, rhs: Dog) -> Bool { - lhs.className == rhs.className && - lhs.color == rhs.color && - lhs.breed == rhs.breed - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(className.hashValue) - hasher.combine(color?.hashValue) - hasher.combine(breed?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift deleted file mode 100644 index 82d185f1a42b..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/DogAllOf.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// DogAllOf.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class DogAllOf: Codable, Hashable { - - public var breed: String? - - public init(breed: String? = nil) { - self.breed = breed - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case breed - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(breed, forKey: .breed) - } - - - - public static func == (lhs: DogAllOf, rhs: DogAllOf) -> Bool { - lhs.breed == rhs.breed - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(breed?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift deleted file mode 100644 index 573cb86e1ba7..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumArrays.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// EnumArrays.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class EnumArrays: Codable, Hashable { - - public enum JustSymbol: String, Codable, CaseIterable { - case greaterThanOrEqualTo = ">=" - case dollar = "$" - } - public enum ArrayEnum: String, Codable, CaseIterable { - case fish = "fish" - case crab = "crab" - } - public var justSymbol: JustSymbol? - public var arrayEnum: [ArrayEnum]? - - public init(justSymbol: JustSymbol? = nil, arrayEnum: [ArrayEnum]? = nil) { - self.justSymbol = justSymbol - self.arrayEnum = arrayEnum - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case justSymbol = "just_symbol" - case arrayEnum = "array_enum" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(justSymbol, forKey: .justSymbol) - try container.encodeIfPresent(arrayEnum, forKey: .arrayEnum) - } - - - - public static func == (lhs: EnumArrays, rhs: EnumArrays) -> Bool { - lhs.justSymbol == rhs.justSymbol && - lhs.arrayEnum == rhs.arrayEnum - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(justSymbol?.hashValue) - hasher.combine(arrayEnum?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumClass.swift deleted file mode 100644 index ab01cf297f8e..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumClass.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// EnumClass.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public enum EnumClass: String, Codable, CaseIterable { - case abc = "_abc" - case efg = "-efg" - case xyz = "(xyz)" -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift deleted file mode 100644 index ca04771171b9..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/EnumTest.swift +++ /dev/null @@ -1,83 +0,0 @@ -// -// EnumTest.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class EnumTest: Codable, Hashable { - - public enum EnumString: String, Codable, CaseIterable { - case upper = "UPPER" - case lower = "lower" - case empty = "" - } - public enum EnumStringRequired: String, Codable, CaseIterable { - case upper = "UPPER" - case lower = "lower" - case empty = "" - } - public enum EnumInteger: Int, Codable, CaseIterable { - case _1 = 1 - case number1 = -1 - } - public enum EnumNumber: Double, Codable, CaseIterable { - case _11 = 1.1 - case number12 = -1.2 - } - public var enumString: EnumString? - public var enumStringRequired: EnumStringRequired - public var enumInteger: EnumInteger? - public var enumNumber: EnumNumber? - public var outerEnum: OuterEnum? - - public init(enumString: EnumString? = nil, enumStringRequired: EnumStringRequired, enumInteger: EnumInteger? = nil, enumNumber: EnumNumber? = nil, outerEnum: OuterEnum? = nil) { - self.enumString = enumString - self.enumStringRequired = enumStringRequired - self.enumInteger = enumInteger - self.enumNumber = enumNumber - self.outerEnum = outerEnum - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case enumString = "enum_string" - case enumStringRequired = "enum_string_required" - case enumInteger = "enum_integer" - case enumNumber = "enum_number" - case outerEnum - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(enumString, forKey: .enumString) - try container.encode(enumStringRequired, forKey: .enumStringRequired) - try container.encodeIfPresent(enumInteger, forKey: .enumInteger) - try container.encodeIfPresent(enumNumber, forKey: .enumNumber) - try container.encodeIfPresent(outerEnum, forKey: .outerEnum) - } - - - - public static func == (lhs: EnumTest, rhs: EnumTest) -> Bool { - lhs.enumString == rhs.enumString && - lhs.enumStringRequired == rhs.enumStringRequired && - lhs.enumInteger == rhs.enumInteger && - lhs.enumNumber == rhs.enumNumber && - lhs.outerEnum == rhs.outerEnum - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(enumString?.hashValue) - hasher.combine(enumStringRequired.hashValue) - hasher.combine(enumInteger?.hashValue) - hasher.combine(enumNumber?.hashValue) - hasher.combine(outerEnum?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift deleted file mode 100644 index a899d021b870..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/File.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// File.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -/** Must be named `File` for test. */ -public final class File: Codable, Hashable { - - /** Test capitalization */ - public var sourceURI: String? - - public init(sourceURI: String? = nil) { - self.sourceURI = sourceURI - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case sourceURI - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(sourceURI, forKey: .sourceURI) - } - - - - public static func == (lhs: File, rhs: File) -> Bool { - lhs.sourceURI == rhs.sourceURI - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(sourceURI?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift deleted file mode 100644 index 2465bd5103f4..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FileSchemaTestClass.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// FileSchemaTestClass.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class FileSchemaTestClass: Codable, Hashable { - - public var file: File? - public var files: [File]? - - public init(file: File? = nil, files: [File]? = nil) { - self.file = file - self.files = files - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case file - case files - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(file, forKey: .file) - try container.encodeIfPresent(files, forKey: .files) - } - - - - public static func == (lhs: FileSchemaTestClass, rhs: FileSchemaTestClass) -> Bool { - lhs.file == rhs.file && - lhs.files == rhs.files - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(file?.hashValue) - hasher.combine(files?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift deleted file mode 100644 index 52c9d58241f6..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/FormatTest.swift +++ /dev/null @@ -1,113 +0,0 @@ -// -// FormatTest.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class FormatTest: Codable, Hashable { - - public var integer: Int? - public var int32: Int? - public var int64: Int64? - public var number: Double - public var float: Float? - public var double: Double? - public var string: String? - public var byte: Data - public var binary: URL? - public var date: Date - public var dateTime: Date? - public var uuid: UUID? - public var password: String - - public init(integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, number: Double, float: Float? = nil, double: Double? = nil, string: String? = nil, byte: Data, binary: URL? = nil, date: Date, dateTime: Date? = nil, uuid: UUID? = nil, password: String) { - self.integer = integer - self.int32 = int32 - self.int64 = int64 - self.number = number - self.float = float - self.double = double - self.string = string - self.byte = byte - self.binary = binary - self.date = date - self.dateTime = dateTime - self.uuid = uuid - self.password = password - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case integer - case int32 - case int64 - case number - case float - case double - case string - case byte - case binary - case date - case dateTime - case uuid - case password - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(integer, forKey: .integer) - try container.encodeIfPresent(int32, forKey: .int32) - try container.encodeIfPresent(int64, forKey: .int64) - try container.encode(number, forKey: .number) - try container.encodeIfPresent(float, forKey: .float) - try container.encodeIfPresent(double, forKey: .double) - try container.encodeIfPresent(string, forKey: .string) - try container.encode(byte, forKey: .byte) - try container.encodeIfPresent(binary, forKey: .binary) - try container.encode(date, forKey: .date) - try container.encodeIfPresent(dateTime, forKey: .dateTime) - try container.encodeIfPresent(uuid, forKey: .uuid) - try container.encode(password, forKey: .password) - } - - - - public static func == (lhs: FormatTest, rhs: FormatTest) -> Bool { - lhs.integer == rhs.integer && - lhs.int32 == rhs.int32 && - lhs.int64 == rhs.int64 && - lhs.number == rhs.number && - lhs.float == rhs.float && - lhs.double == rhs.double && - lhs.string == rhs.string && - lhs.byte == rhs.byte && - lhs.binary == rhs.binary && - lhs.date == rhs.date && - lhs.dateTime == rhs.dateTime && - lhs.uuid == rhs.uuid && - lhs.password == rhs.password - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(integer?.hashValue) - hasher.combine(int32?.hashValue) - hasher.combine(int64?.hashValue) - hasher.combine(number.hashValue) - hasher.combine(float?.hashValue) - hasher.combine(double?.hashValue) - hasher.combine(string?.hashValue) - hasher.combine(byte.hashValue) - hasher.combine(binary?.hashValue) - hasher.combine(date.hashValue) - hasher.combine(dateTime?.hashValue) - hasher.combine(uuid?.hashValue) - hasher.combine(password.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift deleted file mode 100644 index 4044065d4f89..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/HasOnlyReadOnly.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// HasOnlyReadOnly.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class HasOnlyReadOnly: Codable, Hashable { - - public var bar: String? - public var foo: String? - - public init(bar: String? = nil, foo: String? = nil) { - self.bar = bar - self.foo = foo - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case bar - case foo - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(bar, forKey: .bar) - try container.encodeIfPresent(foo, forKey: .foo) - } - - - - public static func == (lhs: HasOnlyReadOnly, rhs: HasOnlyReadOnly) -> Bool { - lhs.bar == rhs.bar && - lhs.foo == rhs.foo - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(bar?.hashValue) - hasher.combine(foo?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift deleted file mode 100644 index c2457325b5bc..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/List.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// List.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class List: Codable, Hashable { - - public var _123list: String? - - public init(_123list: String? = nil) { - self._123list = _123list - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case _123list = "123-list" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(_123list, forKey: ._123list) - } - - - - public static func == (lhs: List, rhs: List) -> Bool { - lhs._123list == rhs._123list - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(_123list?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift deleted file mode 100644 index 83a6f77e76ef..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MapTest.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// MapTest.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class MapTest: Codable, Hashable { - - public enum MapOfEnumString: String, Codable, CaseIterable { - case upper = "UPPER" - case lower = "lower" - } - public var mapMapOfString: [String: [String: String]]? - public var mapOfEnumString: [String: String]? - public var directMap: [String: Bool]? - public var indirectMap: StringBooleanMap? - - public init(mapMapOfString: [String: [String: String]]? = nil, mapOfEnumString: [String: String]? = nil, directMap: [String: Bool]? = nil, indirectMap: StringBooleanMap? = nil) { - self.mapMapOfString = mapMapOfString - self.mapOfEnumString = mapOfEnumString - self.directMap = directMap - self.indirectMap = indirectMap - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case mapMapOfString = "map_map_of_string" - case mapOfEnumString = "map_of_enum_string" - case directMap = "direct_map" - case indirectMap = "indirect_map" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(mapMapOfString, forKey: .mapMapOfString) - try container.encodeIfPresent(mapOfEnumString, forKey: .mapOfEnumString) - try container.encodeIfPresent(directMap, forKey: .directMap) - try container.encodeIfPresent(indirectMap, forKey: .indirectMap) - } - - - - public static func == (lhs: MapTest, rhs: MapTest) -> Bool { - lhs.mapMapOfString == rhs.mapMapOfString && - lhs.mapOfEnumString == rhs.mapOfEnumString && - lhs.directMap == rhs.directMap && - lhs.indirectMap == rhs.indirectMap - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(mapMapOfString?.hashValue) - hasher.combine(mapOfEnumString?.hashValue) - hasher.combine(directMap?.hashValue) - hasher.combine(indirectMap?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift deleted file mode 100644 index 08222b23f5cf..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// MixedPropertiesAndAdditionalPropertiesClass.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { - - public var uuid: UUID? - public var dateTime: Date? - public var map: [String: Animal]? - - public init(uuid: UUID? = nil, dateTime: Date? = nil, map: [String: Animal]? = nil) { - self.uuid = uuid - self.dateTime = dateTime - self.map = map - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case uuid - case dateTime - case map - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(uuid, forKey: .uuid) - try container.encodeIfPresent(dateTime, forKey: .dateTime) - try container.encodeIfPresent(map, forKey: .map) - } - - - - public static func == (lhs: MixedPropertiesAndAdditionalPropertiesClass, rhs: MixedPropertiesAndAdditionalPropertiesClass) -> Bool { - lhs.uuid == rhs.uuid && - lhs.dateTime == rhs.dateTime && - lhs.map == rhs.map - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(uuid?.hashValue) - hasher.combine(dateTime?.hashValue) - hasher.combine(map?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Model200Response.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Model200Response.swift deleted file mode 100644 index 034d4d2979bf..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Model200Response.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// Model200Response.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -/** Model for testing model name starting with number */ -public struct Model200Response: Codable, Hashable { - - public var name: Int? - public var `class`: String? - - public init(name: Int? = nil, `class`: String? = nil) { - self.name = name - self.`class` = `class` - } - - public enum CodingKeys: String, CodingKey, CaseIterable { - case name - case `class` = "class" - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift deleted file mode 100644 index 533e5f2aea3d..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Name.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// Name.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -/** Model for testing model name same as property name */ -public final class Name: Codable, Hashable { - - public var name: Int - public var snakeCase: Int? - public var property: String? - public var _123number: Int? - - public init(name: Int, snakeCase: Int? = nil, property: String? = nil, _123number: Int? = nil) { - self.name = name - self.snakeCase = snakeCase - self.property = property - self._123number = _123number - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case name - case snakeCase = "snake_case" - case property - case _123number = "123Number" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(name, forKey: .name) - try container.encodeIfPresent(snakeCase, forKey: .snakeCase) - try container.encodeIfPresent(property, forKey: .property) - try container.encodeIfPresent(_123number, forKey: ._123number) - } - - - - public static func == (lhs: Name, rhs: Name) -> Bool { - lhs.name == rhs.name && - lhs.snakeCase == rhs.snakeCase && - lhs.property == rhs.property && - lhs._123number == rhs._123number - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(name.hashValue) - hasher.combine(snakeCase?.hashValue) - hasher.combine(property?.hashValue) - hasher.combine(_123number?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift deleted file mode 100644 index be9925066cec..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/NumberOnly.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// NumberOnly.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class NumberOnly: Codable, Hashable { - - public var justNumber: Double? - - public init(justNumber: Double? = nil) { - self.justNumber = justNumber - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case justNumber = "JustNumber" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(justNumber, forKey: .justNumber) - } - - - - public static func == (lhs: NumberOnly, rhs: NumberOnly) -> Bool { - lhs.justNumber == rhs.justNumber - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(justNumber?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift deleted file mode 100644 index cfce5645a20f..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Order.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// Order.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class Order: Codable, Hashable { - - public enum Status: String, Codable, CaseIterable { - case placed = "placed" - case approved = "approved" - case delivered = "delivered" - } - public var id: Int64? - public var petId: Int64? - public var quantity: Int? - public var shipDate: Date? - /** Order Status */ - public var status: Status? - public var complete: Bool? = false - - public init(id: Int64? = nil, petId: Int64? = nil, quantity: Int? = nil, shipDate: Date? = nil, status: Status? = nil, complete: Bool? = false) { - self.id = id - self.petId = petId - self.quantity = quantity - self.shipDate = shipDate - self.status = status - self.complete = complete - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case id - case petId - case quantity - case shipDate - case status - case complete - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(id, forKey: .id) - try container.encodeIfPresent(petId, forKey: .petId) - try container.encodeIfPresent(quantity, forKey: .quantity) - try container.encodeIfPresent(shipDate, forKey: .shipDate) - try container.encodeIfPresent(status, forKey: .status) - try container.encodeIfPresent(complete, forKey: .complete) - } - - - - public static func == (lhs: Order, rhs: Order) -> Bool { - lhs.id == rhs.id && - lhs.petId == rhs.petId && - lhs.quantity == rhs.quantity && - lhs.shipDate == rhs.shipDate && - lhs.status == rhs.status && - lhs.complete == rhs.complete - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(id?.hashValue) - hasher.combine(petId?.hashValue) - hasher.combine(quantity?.hashValue) - hasher.combine(shipDate?.hashValue) - hasher.combine(status?.hashValue) - hasher.combine(complete?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift deleted file mode 100644 index d238c4c13ddf..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterComposite.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// OuterComposite.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class OuterComposite: Codable, Hashable { - - public var myNumber: Double? - public var myString: String? - public var myBoolean: Bool? - - public init(myNumber: Double? = nil, myString: String? = nil, myBoolean: Bool? = nil) { - self.myNumber = myNumber - self.myString = myString - self.myBoolean = myBoolean - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case myNumber = "my_number" - case myString = "my_string" - case myBoolean = "my_boolean" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(myNumber, forKey: .myNumber) - try container.encodeIfPresent(myString, forKey: .myString) - try container.encodeIfPresent(myBoolean, forKey: .myBoolean) - } - - - - public static func == (lhs: OuterComposite, rhs: OuterComposite) -> Bool { - lhs.myNumber == rhs.myNumber && - lhs.myString == rhs.myString && - lhs.myBoolean == rhs.myBoolean - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(myNumber?.hashValue) - hasher.combine(myString?.hashValue) - hasher.combine(myBoolean?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterEnum.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterEnum.swift deleted file mode 100644 index 9bd6f3bef8f6..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/OuterEnum.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// OuterEnum.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public enum OuterEnum: String, Codable, CaseIterable { - case placed = "placed" - case approved = "approved" - case delivered = "delivered" -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift deleted file mode 100644 index c036d6d0cfbc..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Pet.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// Pet.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class Pet: Codable, Hashable { - - public enum Status: String, Codable, CaseIterable { - case available = "available" - case pending = "pending" - case sold = "sold" - } - public var id: Int64? - public var category: Category? - public var name: String - public var photoUrls: [String] - public var tags: [Tag]? - /** pet status in the store */ - public var status: Status? - - public init(id: Int64? = nil, category: Category? = nil, name: String, photoUrls: [String], tags: [Tag]? = nil, status: Status? = nil) { - self.id = id - self.category = category - self.name = name - self.photoUrls = photoUrls - self.tags = tags - self.status = status - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case id - case category - case name - case photoUrls - case tags - case status - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(id, forKey: .id) - try container.encodeIfPresent(category, forKey: .category) - try container.encode(name, forKey: .name) - try container.encode(photoUrls, forKey: .photoUrls) - try container.encodeIfPresent(tags, forKey: .tags) - try container.encodeIfPresent(status, forKey: .status) - } - - - - public static func == (lhs: Pet, rhs: Pet) -> Bool { - lhs.id == rhs.id && - lhs.category == rhs.category && - lhs.name == rhs.name && - lhs.photoUrls == rhs.photoUrls && - lhs.tags == rhs.tags && - lhs.status == rhs.status - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(id?.hashValue) - hasher.combine(category?.hashValue) - hasher.combine(name.hashValue) - hasher.combine(photoUrls.hashValue) - hasher.combine(tags?.hashValue) - hasher.combine(status?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift deleted file mode 100644 index 1e2cdb966f21..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/ReadOnlyFirst.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// ReadOnlyFirst.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class ReadOnlyFirst: Codable, Hashable { - - public var bar: String? - public var baz: String? - - public init(bar: String? = nil, baz: String? = nil) { - self.bar = bar - self.baz = baz - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case bar - case baz - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(bar, forKey: .bar) - try container.encodeIfPresent(baz, forKey: .baz) - } - - - - public static func == (lhs: ReadOnlyFirst, rhs: ReadOnlyFirst) -> Bool { - lhs.bar == rhs.bar && - lhs.baz == rhs.baz - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(bar?.hashValue) - hasher.combine(baz?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Return.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Return.swift deleted file mode 100644 index 2831cd656be0..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Return.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// Return.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -/** Model for testing reserved words */ -public struct Return: Codable, Hashable { - - public var `return`: Int? - - public init(`return`: Int? = nil) { - self.`return` = `return` - } - - public enum CodingKeys: String, CodingKey, CaseIterable { - case `return` = "return" - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift deleted file mode 100644 index 3fd247331743..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/SpecialModelName.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// SpecialModelName.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class SpecialModelName: Codable, Hashable { - - public var specialPropertyName: Int64? - - public init(specialPropertyName: Int64? = nil) { - self.specialPropertyName = specialPropertyName - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case specialPropertyName = "$special[property.name]" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(specialPropertyName, forKey: .specialPropertyName) - } - - - - public static func == (lhs: SpecialModelName, rhs: SpecialModelName) -> Bool { - lhs.specialPropertyName == rhs.specialPropertyName - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(specialPropertyName?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift deleted file mode 100644 index 9e90edf7be9c..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/StringBooleanMap.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// StringBooleanMap.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class StringBooleanMap: Codable, Hashable { - - public enum CodingKeys: CodingKey, CaseIterable { - } - public var additionalProperties: [String: Bool] = [:] - - public subscript(key: String) -> Bool? { - get { - if let value = additionalProperties[key] { - return value - } - return nil - } - - set { - additionalProperties[key] = newValue - } - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - var additionalPropertiesContainer = encoder.container(keyedBy: String.self) - try additionalPropertiesContainer.encodeMap(additionalProperties) - } - - // Decodable protocol methods - - public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) - - var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) - } - - - public static func == (lhs: StringBooleanMap, rhs: StringBooleanMap) -> Bool { - lhs.additionalProperties == rhs.additionalProperties - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(additionalProperties.hashValue) - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift deleted file mode 100644 index b30b0f62acee..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/Tag.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// Tag.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class Tag: Codable, Hashable { - - public var id: Int64? - public var name: String? - - public init(id: Int64? = nil, name: String? = nil) { - self.id = id - self.name = name - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case id - case name - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(id, forKey: .id) - try container.encodeIfPresent(name, forKey: .name) - } - - - - public static func == (lhs: Tag, rhs: Tag) -> Bool { - lhs.id == rhs.id && - lhs.name == rhs.name - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(id?.hashValue) - hasher.combine(name?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift deleted file mode 100644 index f99b86d1d642..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderDefault.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// TypeHolderDefault.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class TypeHolderDefault: Codable, Hashable { - - public var stringItem: String = "what" - public var numberItem: Double - public var integerItem: Int - public var boolItem: Bool = true - public var arrayItem: [Int] - - public init(stringItem: String = "what", numberItem: Double, integerItem: Int, boolItem: Bool = true, arrayItem: [Int]) { - self.stringItem = stringItem - self.numberItem = numberItem - self.integerItem = integerItem - self.boolItem = boolItem - self.arrayItem = arrayItem - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case stringItem = "string_item" - case numberItem = "number_item" - case integerItem = "integer_item" - case boolItem = "bool_item" - case arrayItem = "array_item" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(stringItem, forKey: .stringItem) - try container.encode(numberItem, forKey: .numberItem) - try container.encode(integerItem, forKey: .integerItem) - try container.encode(boolItem, forKey: .boolItem) - try container.encode(arrayItem, forKey: .arrayItem) - } - - - - public static func == (lhs: TypeHolderDefault, rhs: TypeHolderDefault) -> Bool { - lhs.stringItem == rhs.stringItem && - lhs.numberItem == rhs.numberItem && - lhs.integerItem == rhs.integerItem && - lhs.boolItem == rhs.boolItem && - lhs.arrayItem == rhs.arrayItem - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(stringItem.hashValue) - hasher.combine(numberItem.hashValue) - hasher.combine(integerItem.hashValue) - hasher.combine(boolItem.hashValue) - hasher.combine(arrayItem.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift deleted file mode 100644 index d266ad2f0d18..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/TypeHolderExample.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// TypeHolderExample.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class TypeHolderExample: Codable, Hashable { - - public var stringItem: String - public var numberItem: Double - public var integerItem: Int - public var boolItem: Bool - public var arrayItem: [Int] - - public init(stringItem: String, numberItem: Double, integerItem: Int, boolItem: Bool, arrayItem: [Int]) { - self.stringItem = stringItem - self.numberItem = numberItem - self.integerItem = integerItem - self.boolItem = boolItem - self.arrayItem = arrayItem - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case stringItem = "string_item" - case numberItem = "number_item" - case integerItem = "integer_item" - case boolItem = "bool_item" - case arrayItem = "array_item" - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(stringItem, forKey: .stringItem) - try container.encode(numberItem, forKey: .numberItem) - try container.encode(integerItem, forKey: .integerItem) - try container.encode(boolItem, forKey: .boolItem) - try container.encode(arrayItem, forKey: .arrayItem) - } - - - - public static func == (lhs: TypeHolderExample, rhs: TypeHolderExample) -> Bool { - lhs.stringItem == rhs.stringItem && - lhs.numberItem == rhs.numberItem && - lhs.integerItem == rhs.integerItem && - lhs.boolItem == rhs.boolItem && - lhs.arrayItem == rhs.arrayItem - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(stringItem.hashValue) - hasher.combine(numberItem.hashValue) - hasher.combine(integerItem.hashValue) - hasher.combine(boolItem.hashValue) - hasher.combine(arrayItem.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift deleted file mode 100644 index dcbecdf498d8..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/Models/User.swift +++ /dev/null @@ -1,84 +0,0 @@ -// -// User.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -import AnyCodable - -public final class User: Codable, Hashable { - - public var id: Int64? - public var username: String? - public var firstName: String? - public var lastName: String? - public var email: String? - public var password: String? - public var phone: String? - /** User Status */ - public var userStatus: Int? - - public init(id: Int64? = nil, username: String? = nil, firstName: String? = nil, lastName: String? = nil, email: String? = nil, password: String? = nil, phone: String? = nil, userStatus: Int? = nil) { - self.id = id - self.username = username - self.firstName = firstName - self.lastName = lastName - self.email = email - self.password = password - self.phone = phone - self.userStatus = userStatus - } - public enum CodingKeys: String, CodingKey, CaseIterable { - case id - case username - case firstName - case lastName - case email - case password - case phone - case userStatus - } - - // Encodable protocol methods - - public func encode(to encoder: Encoder) throws { - var container = encoder.container(keyedBy: CodingKeys.self) - try container.encodeIfPresent(id, forKey: .id) - try container.encodeIfPresent(username, forKey: .username) - try container.encodeIfPresent(firstName, forKey: .firstName) - try container.encodeIfPresent(lastName, forKey: .lastName) - try container.encodeIfPresent(email, forKey: .email) - try container.encodeIfPresent(password, forKey: .password) - try container.encodeIfPresent(phone, forKey: .phone) - try container.encodeIfPresent(userStatus, forKey: .userStatus) - } - - - - public static func == (lhs: User, rhs: User) -> Bool { - lhs.id == rhs.id && - lhs.username == rhs.username && - lhs.firstName == rhs.firstName && - lhs.lastName == rhs.lastName && - lhs.email == rhs.email && - lhs.password == rhs.password && - lhs.phone == rhs.phone && - lhs.userStatus == rhs.userStatus - - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(id?.hashValue) - hasher.combine(username?.hashValue) - hasher.combine(firstName?.hashValue) - hasher.combine(lastName?.hashValue) - hasher.combine(email?.hashValue) - hasher.combine(password?.hashValue) - hasher.combine(phone?.hashValue) - hasher.combine(userStatus?.hashValue) - - } - -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/OpenISO8601DateFormatter.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/OpenISO8601DateFormatter.swift deleted file mode 100644 index e06208074cd9..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/OpenISO8601DateFormatter.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// OpenISO8601DateFormatter.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -// https://stackoverflow.com/a/50281094/976628 -public class OpenISO8601DateFormatter: DateFormatter { - static let withoutSeconds: DateFormatter = { - let formatter = DateFormatter() - formatter.calendar = Calendar(identifier: .iso8601) - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.timeZone = TimeZone(secondsFromGMT: 0) - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" - return formatter - }() - - private func setup() { - calendar = Calendar(identifier: .iso8601) - locale = Locale(identifier: "en_US_POSIX") - timeZone = TimeZone(secondsFromGMT: 0) - dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" - } - - override init() { - super.init() - setup() - } - - required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - setup() - } - - override public func date(from string: String) -> Date? { - if let result = super.date(from: string) { - return result - } - return OpenISO8601DateFormatter.withoutSeconds.date(from: string) - } -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs.swift index dbdab491ff7d..01bc6ff0d8d0 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io:80/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift index 72b89640eeb4..cce6d705d431 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/AnotherFakeAPI.swift @@ -7,6 +7,9 @@ import Foundation +extension PetstoreClient { + + open class AnotherFakeAPI { /** To test special tags @@ -15,7 +18,7 @@ open class AnotherFakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -35,7 +38,7 @@ open class AnotherFakeAPI { */ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,9 +49,10 @@ open class AnotherFakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift index cf92424d9cc1..dbe358912cbb 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeAPI.swift @@ -7,6 +7,9 @@ import Foundation +extension PetstoreClient { + + open class FakeAPI { /** @@ -14,7 +17,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -33,7 +36,7 @@ open class FakeAPI { */ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -44,7 +47,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -55,7 +58,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -74,7 +77,7 @@ open class FakeAPI { */ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -85,7 +88,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -96,7 +99,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -115,7 +118,7 @@ open class FakeAPI { */ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -126,7 +129,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -137,7 +140,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -156,7 +159,7 @@ open class FakeAPI { */ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -167,7 +170,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -178,7 +181,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -197,7 +200,7 @@ open class FakeAPI { */ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -208,7 +211,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -220,7 +223,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -239,7 +242,7 @@ open class FakeAPI { */ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -253,7 +256,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -265,7 +268,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -285,7 +288,7 @@ open class FakeAPI { */ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -296,7 +299,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -321,7 +324,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -357,7 +360,7 @@ open class FakeAPI { */ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -386,7 +389,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -472,7 +475,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -499,7 +502,7 @@ open class FakeAPI { */ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -524,7 +527,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -541,7 +544,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -566,7 +569,7 @@ open class FakeAPI { */ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -584,7 +587,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -596,7 +599,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -615,7 +618,7 @@ open class FakeAPI { */ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -626,7 +629,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -639,7 +642,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -659,7 +662,7 @@ open class FakeAPI { */ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -676,9 +679,10 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift index d4d651664963..a8bfc8b05464 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/FakeClassnameTags123API.swift @@ -7,6 +7,9 @@ import Foundation +extension PetstoreClient { + + open class FakeClassnameTags123API { /** To test class name in snake case @@ -15,7 +18,7 @@ open class FakeClassnameTags123API { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -38,7 +41,7 @@ open class FakeClassnameTags123API { */ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,9 +52,10 @@ open class FakeClassnameTags123API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift index a1fe0d12b1da..ea664ec3af4d 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/PetAPI.swift @@ -7,6 +7,9 @@ import Foundation +extension PetstoreClient { + + open class PetAPI { /** Add a new pet to the store @@ -15,7 +18,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -37,7 +40,7 @@ open class PetAPI { */ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -48,7 +51,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +64,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -87,7 +90,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -98,7 +101,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -119,7 +122,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -142,7 +145,7 @@ open class PetAPI { */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -156,7 +159,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -169,7 +172,7 @@ open class PetAPI { - parameter completion: completion handler to receive the data and the error objects */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -193,7 +196,7 @@ open class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -207,7 +210,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -219,7 +222,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -245,7 +248,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -256,7 +259,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -268,7 +271,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -290,7 +293,7 @@ open class PetAPI { */ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -301,7 +304,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -315,7 +318,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -342,7 +345,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -359,7 +362,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -373,7 +376,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -400,7 +403,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -417,7 +420,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -431,7 +434,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -458,7 +461,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -475,9 +478,10 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift index 501f11f5f219..6c53077c654b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/StoreAPI.swift @@ -7,6 +7,9 @@ import Foundation +extension PetstoreClient { + + open class StoreAPI { /** Delete purchase order by ID @@ -15,7 +18,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -38,7 +41,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -49,7 +52,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -60,7 +63,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -82,7 +85,7 @@ open class StoreAPI { */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -93,7 +96,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +108,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -128,7 +131,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -139,7 +142,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -151,7 +154,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -170,7 +173,7 @@ open class StoreAPI { */ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -181,9 +184,10 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift index 254474014d31..1b09adafcfb7 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/APIs/UserAPI.swift @@ -7,6 +7,9 @@ import Foundation +extension PetstoreClient { + + open class UserAPI { /** Create user @@ -15,7 +18,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -35,7 +38,7 @@ open class UserAPI { */ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +49,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -58,7 +61,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -77,7 +80,7 @@ open class UserAPI { */ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -88,7 +91,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -100,7 +103,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -119,7 +122,7 @@ open class UserAPI { */ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -130,7 +133,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -142,7 +145,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -165,7 +168,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -176,7 +179,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -188,7 +191,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -210,7 +213,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -221,7 +224,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -234,7 +237,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -255,7 +258,7 @@ open class UserAPI { */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -270,7 +273,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -281,7 +284,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -299,7 +302,7 @@ open class UserAPI { */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -310,7 +313,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -323,7 +326,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -347,7 +350,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -358,9 +361,10 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Configuration.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Configuration.swift index 18edabbed782..2ad2048e74c3 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Configuration.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Configuration.swift @@ -6,9 +6,14 @@ import Foundation +@available(*, deprecated, renamed: "PetstoreClient.Configuration") +public typealias Configuration = PetstoreClient.Configuration + +extension PetstoreClient { open class Configuration { // This value is used to configure the date formatter that is used to serialize dates into JSON format. // You must set it prior to encoding any dates, and it will only be read once. @available(*, unavailable, message: "To set a different date format, use CodableHelper.dateFormatter instead.") public static var dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift index 9363f25a029f..1baefca59430 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AdditionalPropertiesClass.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.AdditionalPropertiesClass") +public typealias AdditionalPropertiesClass = PetstoreClient.AdditionalPropertiesClass + +extension PetstoreClient { + public final class AdditionalPropertiesClass: Codable, Hashable { public var mapString: [String: String]? @@ -45,3 +50,4 @@ public final class AdditionalPropertiesClass: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift index 9a953b845ba8..bb5768728135 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Animal.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Animal") +public typealias Animal = PetstoreClient.Animal + +extension PetstoreClient { + public final class Animal: Codable, Hashable { public var className: String @@ -45,3 +50,4 @@ public final class Animal: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift index a0b09cb97615..ef664c5e4522 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/AnimalFarm.swift @@ -10,4 +10,10 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.AnimalFarm") +public typealias AnimalFarm = PetstoreClient.AnimalFarm + +extension PetstoreClient { + public typealias AnimalFarm = [Animal] +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift index b0e3bad14a11..7682a7cb7f90 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ApiResponse.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.ApiResponse") +public typealias ApiResponse = PetstoreClient.ApiResponse + +extension PetstoreClient { + public final class ApiResponse: Codable, Hashable { public var code: Int? @@ -51,3 +56,4 @@ public final class ApiResponse: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift index f0a8b45f20d3..42b106c6f61e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfArrayOfNumberOnly.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.ArrayOfArrayOfNumberOnly") +public typealias ArrayOfArrayOfNumberOnly = PetstoreClient.ArrayOfArrayOfNumberOnly + +extension PetstoreClient { + public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { public var arrayArrayNumber: [[Double]]? @@ -39,3 +44,4 @@ public final class ArrayOfArrayOfNumberOnly: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift index 08cd71668641..13a415a44694 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayOfNumberOnly.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.ArrayOfNumberOnly") +public typealias ArrayOfNumberOnly = PetstoreClient.ArrayOfNumberOnly + +extension PetstoreClient { + public final class ArrayOfNumberOnly: Codable, Hashable { public var arrayNumber: [Double]? @@ -39,3 +44,4 @@ public final class ArrayOfNumberOnly: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift index c69cc3c6327d..943c193458c9 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ArrayTest.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.ArrayTest") +public typealias ArrayTest = PetstoreClient.ArrayTest + +extension PetstoreClient { + public final class ArrayTest: Codable, Hashable { public var arrayOfString: [String]? @@ -51,3 +56,4 @@ public final class ArrayTest: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift index cc5eeba963bb..d72936f45ac4 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Capitalization.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Capitalization") +public typealias Capitalization = PetstoreClient.Capitalization + +extension PetstoreClient { + public final class Capitalization: Codable, Hashable { public var smallCamel: String? @@ -70,3 +75,4 @@ public final class Capitalization: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift index cbcdf143b875..5ba88eae81cd 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Cat.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Cat") +public typealias Cat = PetstoreClient.Cat + +extension PetstoreClient { + public final class Cat: Codable, Hashable { public var className: String @@ -51,3 +56,4 @@ public final class Cat: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift index 4b4f862fe108..4437f05ec8ca 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/CatAllOf.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.CatAllOf") +public typealias CatAllOf = PetstoreClient.CatAllOf + +extension PetstoreClient { + public final class CatAllOf: Codable, Hashable { public var declawed: Bool? @@ -39,3 +44,4 @@ public final class CatAllOf: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift index 3a88c62a05f4..4cd6f0940b06 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Category.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Category") +public typealias Category = PetstoreClient.Category + +extension PetstoreClient { + public final class Category: Codable, Hashable { public var id: Int64? @@ -45,3 +50,4 @@ public final class Category: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift index fee2cec87bf7..ebba6acf1f30 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ClassModel.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.ClassModel") +public typealias ClassModel = PetstoreClient.ClassModel + +extension PetstoreClient { + /** Model for testing model with \"_class\" property */ public final class ClassModel: Codable, Hashable { @@ -40,3 +45,4 @@ public final class ClassModel: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift index b9c0857371de..d671608ac8e6 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Client.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Client") +public typealias Client = PetstoreClient.Client + +extension PetstoreClient { + public final class Client: Codable, Hashable { public var client: String? @@ -39,3 +44,4 @@ public final class Client: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift index 022fddbb1fb8..a506fe020977 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Dog.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Dog") +public typealias Dog = PetstoreClient.Dog + +extension PetstoreClient { + public final class Dog: Codable, Hashable { public var className: String @@ -51,3 +56,4 @@ public final class Dog: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift index 40f0a1291be5..ea53f2f14e1f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/DogAllOf.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.DogAllOf") +public typealias DogAllOf = PetstoreClient.DogAllOf + +extension PetstoreClient { + public final class DogAllOf: Codable, Hashable { public var breed: String? @@ -39,3 +44,4 @@ public final class DogAllOf: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift index e8a756e0ab3b..82a858e12504 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumArrays.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.EnumArrays") +public typealias EnumArrays = PetstoreClient.EnumArrays + +extension PetstoreClient { + public final class EnumArrays: Codable, Hashable { public enum JustSymbol: String, Codable, CaseIterable { @@ -53,3 +58,4 @@ public final class EnumArrays: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift index 6ea2895aee53..37984373236a 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumClass.swift @@ -10,8 +10,14 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.EnumClass") +public typealias EnumClass = PetstoreClient.EnumClass + +extension PetstoreClient { + public enum EnumClass: String, Codable, CaseIterable { case abc = "_abc" case efg = "-efg" case xyz = "(xyz)" } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift index fdb508f216d1..dc229bc01088 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/EnumTest.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.EnumTest") +public typealias EnumTest = PetstoreClient.EnumTest + +extension PetstoreClient { + public final class EnumTest: Codable, Hashable { public enum EnumString: String, Codable, CaseIterable { @@ -81,3 +86,4 @@ public final class EnumTest: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift index a8e0dfdebbb8..0e8e00f2e4e2 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/File.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.File") +public typealias File = PetstoreClient.File + +extension PetstoreClient { + /** Must be named `File` for test. */ public final class File: Codable, Hashable { @@ -41,3 +46,4 @@ public final class File: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift index c3de2775a3af..3eaf14887a65 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FileSchemaTestClass.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.FileSchemaTestClass") +public typealias FileSchemaTestClass = PetstoreClient.FileSchemaTestClass + +extension PetstoreClient { + public final class FileSchemaTestClass: Codable, Hashable { public var file: File? @@ -45,3 +50,4 @@ public final class FileSchemaTestClass: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift index 0ae5bd7d8a2b..3becb33e171e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/FormatTest.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.FormatTest") +public typealias FormatTest = PetstoreClient.FormatTest + +extension PetstoreClient { + public final class FormatTest: Codable, Hashable { public var integer: Int? @@ -111,3 +116,4 @@ public final class FormatTest: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift index 7093d3cedf01..2eeee949b9e5 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/HasOnlyReadOnly.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.HasOnlyReadOnly") +public typealias HasOnlyReadOnly = PetstoreClient.HasOnlyReadOnly + +extension PetstoreClient { + public final class HasOnlyReadOnly: Codable, Hashable { public var bar: String? @@ -45,3 +50,4 @@ public final class HasOnlyReadOnly: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift index cf232a2e3008..d7bd15e4ab7a 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/List.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.List") +public typealias List = PetstoreClient.List + +extension PetstoreClient { + public final class List: Codable, Hashable { public var _123list: String? @@ -39,3 +44,4 @@ public final class List: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift index 5c42a4be48fa..e1b5051c98ab 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MapTest.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.MapTest") +public typealias MapTest = PetstoreClient.MapTest + +extension PetstoreClient { + public final class MapTest: Codable, Hashable { public enum MapOfEnumString: String, Codable, CaseIterable { @@ -61,3 +66,4 @@ public final class MapTest: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift index faeff27eb6b4..126d5952d232 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/MixedPropertiesAndAdditionalPropertiesClass.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.MixedPropertiesAndAdditionalPropertiesClass") +public typealias MixedPropertiesAndAdditionalPropertiesClass = PetstoreClient.MixedPropertiesAndAdditionalPropertiesClass + +extension PetstoreClient { + public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashable { public var uuid: UUID? @@ -51,3 +56,4 @@ public final class MixedPropertiesAndAdditionalPropertiesClass: Codable, Hashabl } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift index c254a7530aa0..abec4f578a33 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Model200Response.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Model200Response") +public typealias Model200Response = PetstoreClient.Model200Response + +extension PetstoreClient { + /** Model for testing model name starting with number */ public final class Model200Response: Codable, Hashable { @@ -46,3 +51,4 @@ public final class Model200Response: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift index ce7ac369e33a..ae67e9ce2c97 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Name.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Name") +public typealias Name = PetstoreClient.Name + +extension PetstoreClient { + /** Model for testing model name same as property name */ public final class Name: Codable, Hashable { @@ -58,3 +63,4 @@ public final class Name: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift index 072738962043..122ba86ecf64 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/NumberOnly.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.NumberOnly") +public typealias NumberOnly = PetstoreClient.NumberOnly + +extension PetstoreClient { + public final class NumberOnly: Codable, Hashable { public var justNumber: Double? @@ -39,3 +44,4 @@ public final class NumberOnly: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift index 623c7b839c4b..31979b10b855 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Order.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Order") +public typealias Order = PetstoreClient.Order + +extension PetstoreClient { + public final class Order: Codable, Hashable { public enum Status: String, Codable, CaseIterable { @@ -75,3 +80,4 @@ public final class Order: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift index 509f13dc3db0..377df8fd2e0b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterComposite.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.OuterComposite") +public typealias OuterComposite = PetstoreClient.OuterComposite + +extension PetstoreClient { + public final class OuterComposite: Codable, Hashable { public var myNumber: Double? @@ -51,3 +56,4 @@ public final class OuterComposite: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift index 76c34b3c2ce6..78ad5bedb38a 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/OuterEnum.swift @@ -10,8 +10,14 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.OuterEnum") +public typealias OuterEnum = PetstoreClient.OuterEnum + +extension PetstoreClient { + public enum OuterEnum: String, Codable, CaseIterable { case placed = "placed" case approved = "approved" case delivered = "delivered" } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift index c1bf287a8f3a..d93428d9bda5 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Pet.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Pet") +public typealias Pet = PetstoreClient.Pet + +extension PetstoreClient { + public final class Pet: Codable, Hashable { public enum Status: String, Codable, CaseIterable { @@ -75,3 +80,4 @@ public final class Pet: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift index 8e82bd882d02..e3a074ebcc8f 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/ReadOnlyFirst.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.ReadOnlyFirst") +public typealias ReadOnlyFirst = PetstoreClient.ReadOnlyFirst + +extension PetstoreClient { + public final class ReadOnlyFirst: Codable, Hashable { public var bar: String? @@ -45,3 +50,4 @@ public final class ReadOnlyFirst: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift index 4221455581bd..f517ed557148 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Return.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Return") +public typealias Return = PetstoreClient.Return + +extension PetstoreClient { + /** Model for testing reserved words */ public final class Return: Codable, Hashable { @@ -40,3 +45,4 @@ public final class Return: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift index 6e632eb17e79..3b5cc1853195 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/SpecialModelName.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.SpecialModelName") +public typealias SpecialModelName = PetstoreClient.SpecialModelName + +extension PetstoreClient { + public final class SpecialModelName: Codable, Hashable { public var specialPropertyName: Int64? @@ -39,3 +44,4 @@ public final class SpecialModelName: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift index 305ce5056968..1449e89190f2 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/StringBooleanMap.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.StringBooleanMap") +public typealias StringBooleanMap = PetstoreClient.StringBooleanMap + +extension PetstoreClient { + public final class StringBooleanMap: Codable, Hashable { @@ -42,10 +47,11 @@ public final class StringBooleanMap: Codable, Hashable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } public static func == (lhs: StringBooleanMap, rhs: StringBooleanMap) -> Bool { @@ -56,3 +62,4 @@ public final class StringBooleanMap: Codable, Hashable { hasher.combine(additionalProperties.hashValue) } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift index 7b44db425398..cfd84044fe2e 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/Tag.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.Tag") +public typealias Tag = PetstoreClient.Tag + +extension PetstoreClient { + public final class Tag: Codable, Hashable { public var id: Int64? @@ -45,3 +50,4 @@ public final class Tag: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift index 30c51f43aea4..82595deb5009 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderDefault.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.TypeHolderDefault") +public typealias TypeHolderDefault = PetstoreClient.TypeHolderDefault + +extension PetstoreClient { + public final class TypeHolderDefault: Codable, Hashable { public var stringItem: String = "what" @@ -63,3 +68,4 @@ public final class TypeHolderDefault: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift index 4c49c40554a8..9509c507b87b 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/TypeHolderExample.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.TypeHolderExample") +public typealias TypeHolderExample = PetstoreClient.TypeHolderExample + +extension PetstoreClient { + public final class TypeHolderExample: Codable, Hashable { public var stringItem: String @@ -63,3 +68,4 @@ public final class TypeHolderExample: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift index 984e8bfc66c4..63b13180dcd2 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/Models/User.swift @@ -10,6 +10,11 @@ import Foundation import AnyCodable #endif +@available(*, deprecated, renamed: "PetstoreClient.User") +public typealias User = PetstoreClient.User + +extension PetstoreClient { + public final class User: Codable, Hashable { public var id: Int64? @@ -82,3 +87,4 @@ public final class User: Codable, Hashable { } } +} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/Sources/PetstoreClient/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/SynchronizedDictionary.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/SynchronizedDictionary.swift deleted file mode 100644 index acf7ff4031bd..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/SynchronizedDictionary.swift +++ /dev/null @@ -1,36 +0,0 @@ -// SynchronizedDictionary.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation - -internal struct SynchronizedDictionary { - - private var dictionary = [K: V]() - private let queue = DispatchQueue( - label: "SynchronizedDictionary", - qos: DispatchQoS.userInitiated, - attributes: [DispatchQueue.Attributes.concurrent], - autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, - target: nil - ) - - internal subscript(key: K) -> V? { - get { - var value: V? - - queue.sync { - value = self.dictionary[key] - } - - return value - } - set { - queue.sync(flags: DispatchWorkItemFlags.barrier) { - self.dictionary[key] = newValue - } - } - } -} diff --git a/samples/client/petstore/swift5/urlsessionLibrary/Sources/URLSessionImplementations.swift b/samples/client/petstore/swift5/urlsessionLibrary/Sources/URLSessionImplementations.swift deleted file mode 100644 index 52b2071ec1aa..000000000000 --- a/samples/client/petstore/swift5/urlsessionLibrary/Sources/URLSessionImplementations.swift +++ /dev/null @@ -1,606 +0,0 @@ -// URLSessionImplementations.swift -// -// Generated by openapi-generator -// https://openapi-generator.tech -// - -import Foundation -#if !os(macOS) -import MobileCoreServices -#endif - -class URLSessionRequestBuilderFactory: RequestBuilderFactory { - func getNonDecodableBuilder() -> RequestBuilder.Type { - return URLSessionRequestBuilder.self - } - - func getBuilder() -> RequestBuilder.Type { - return URLSessionDecodableRequestBuilder.self - } -} - -// Store the URLSession to retain its reference -private var urlSessionStore = SynchronizedDictionary() - -open class URLSessionRequestBuilder: RequestBuilder { - - /** - May be assigned if you want to control the authentication challenges. - */ - public var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? - - /** - May be assigned if you want to do any of those things: - - control the task completion - - intercept and handle errors like authorization - - retry the request. - */ - @available(*, deprecated, message: "Please override execute() method to intercept and handle errors like authorization or retry the request. Check the Wiki for more info. https://github.com/OpenAPITools/openapi-generator/wiki/FAQ#how-do-i-implement-bearer-token-authentication-with-urlsession-on-the-swift-api-client") - public var taskCompletionShouldRetry: ((Data?, URLResponse?, Error?, @escaping (Bool) -> Void) -> Void)? - - required public init(method: String, URLString: String, parameters: [String: Any]?, headers: [String: String] = [:]) { - super.init(method: method, URLString: URLString, parameters: parameters, headers: headers) - } - - /** - May be overridden by a subclass if you want to control the URLSession - configuration. - */ - open func createURLSession() -> URLSession { - let configuration = URLSessionConfiguration.default - configuration.httpAdditionalHeaders = buildHeaders() - let sessionDelegate = SessionDelegate() - sessionDelegate.credential = credential - sessionDelegate.taskDidReceiveChallenge = taskDidReceiveChallenge - return URLSession(configuration: configuration, delegate: sessionDelegate, delegateQueue: nil) - } - - /** - May be overridden by a subclass if you want to control the Content-Type - that is given to an uploaded form part. - - Return nil to use the default behavior (inferring the Content-Type from - the file extension). Return the desired Content-Type otherwise. - */ - open func contentTypeForFormPart(fileURL: URL) -> String? { - return nil - } - - /** - May be overridden by a subclass if you want to control the URLRequest - configuration (e.g. to override the cache policy). - */ - open func createURLRequest(urlSession: URLSession, method: HTTPMethod, encoding: ParameterEncoding, headers: [String: String]) throws -> URLRequest { - - guard let url = URL(string: URLString) else { - throw DownloadException.requestMissingURL - } - - var originalRequest = URLRequest(url: url) - - originalRequest.httpMethod = method.rawValue - - headers.forEach { key, value in - originalRequest.setValue(value, forHTTPHeaderField: key) - } - - buildHeaders().forEach { key, value in - originalRequest.setValue(value, forHTTPHeaderField: key) - } - - let modifiedRequest = try encoding.encode(originalRequest, with: parameters) - - return modifiedRequest - } - - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { - let urlSessionId = UUID().uuidString - // Create a new manager for each request to customize its request header - let urlSession = createURLSession() - urlSessionStore[urlSessionId] = urlSession - - guard let xMethod = HTTPMethod(rawValue: method) else { - fatalError("Unsuported Http method - \(method)") - } - - let encoding: ParameterEncoding - - switch xMethod { - case .get, .head: - encoding = URLEncoding() - - case .options, .post, .put, .patch, .delete, .trace, .connect: - let contentType = headers["Content-Type"] ?? "application/json" - - if contentType == "application/json" { - encoding = JSONDataEncoding() - } else if contentType == "multipart/form-data" { - encoding = FormDataEncoding(contentTypeForFormPart: contentTypeForFormPart(fileURL:)) - } else if contentType == "application/x-www-form-urlencoded" { - encoding = FormURLEncoding() - } else { - fatalError("Unsuported Media Type - \(contentType)") - } - } - - let cleanupRequest = { - urlSessionStore[urlSessionId]?.finishTasksAndInvalidate() - urlSessionStore[urlSessionId] = nil - } - - do { - let request = try createURLRequest(urlSession: urlSession, method: xMethod, encoding: encoding, headers: headers) - - let dataTask = urlSession.dataTask(with: request) { data, response, error in - - if let taskCompletionShouldRetry = self.taskCompletionShouldRetry { - - taskCompletionShouldRetry(data, response, error) { shouldRetry in - - if shouldRetry { - cleanupRequest() - self.execute(apiResponseQueue, completion) - } else { - apiResponseQueue.async { - self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion) - cleanupRequest() - } - } - } - } else { - apiResponseQueue.async { - self.processRequestResponse(urlRequest: request, data: data, response: response, error: error, completion: completion) - cleanupRequest() - } - } - } - - if #available(iOS 11.0, macOS 10.13, macCatalyst 13.0, tvOS 11.0, watchOS 4.0, *) { - onProgressReady?(dataTask.progress) - } - - dataTask.resume() - - } catch { - apiResponseQueue.async { - cleanupRequest() - completion(.failure(ErrorResponse.error(415, nil, nil, error))) - } - } - } - - fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result, Error>) -> Void) { - - if let error = error { - completion(.failure(ErrorResponse.error(-1, data, response, error))) - return - } - - guard let httpResponse = response as? HTTPURLResponse else { - completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse))) - return - } - - guard httpResponse.isStatusCodeSuccessful else { - completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) - return - } - - switch T.self { - case is String.Type: - - let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? "" - - completion(.success(Response(response: httpResponse, body: body as? T))) - - case is URL.Type: - do { - - guard error == nil else { - throw DownloadException.responseFailed - } - - guard let data = data else { - throw DownloadException.responseDataMissing - } - - let fileManager = FileManager.default - let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] - let requestURL = try getURL(from: urlRequest) - - var requestPath = try getPath(from: requestURL) - - if let headerFileName = getFileName(fromContentDisposition: httpResponse.allHeaderFields["Content-Disposition"] as? String) { - requestPath = requestPath.appending("/\(headerFileName)") - } - - let filePath = documentsDirectory.appendingPathComponent(requestPath) - let directoryPath = filePath.deletingLastPathComponent().path - - try fileManager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) - try data.write(to: filePath, options: .atomic) - - completion(.success(Response(response: httpResponse, body: filePath as? T))) - - } catch let requestParserError as DownloadException { - completion(.failure(ErrorResponse.error(400, data, response, requestParserError))) - } catch { - completion(.failure(ErrorResponse.error(400, data, response, error))) - } - - case is Void.Type: - - completion(.success(Response(response: httpResponse, body: nil))) - - default: - - completion(.success(Response(response: httpResponse, body: data as? T))) - } - - } - - open func buildHeaders() -> [String: String] { - var httpHeaders: [String: String] = [:] - for (key, value) in headers { - httpHeaders[key] = value - } - for (key, value) in PetstoreClientAPI.customHeaders { - httpHeaders[key] = value - } - return httpHeaders - } - - fileprivate func getFileName(fromContentDisposition contentDisposition: String?) -> String? { - - guard let contentDisposition = contentDisposition else { - return nil - } - - let items = contentDisposition.components(separatedBy: ";") - - var filename: String? - - for contentItem in items { - - let filenameKey = "filename=" - guard let range = contentItem.range(of: filenameKey) else { - break - } - - filename = contentItem - return filename? - .replacingCharacters(in: range, with: "") - .replacingOccurrences(of: "\"", with: "") - .trimmingCharacters(in: .whitespacesAndNewlines) - } - - return filename - - } - - fileprivate func getPath(from url: URL) throws -> String { - - guard var path = URLComponents(url: url, resolvingAgainstBaseURL: true)?.path else { - throw DownloadException.requestMissingPath - } - - if path.hasPrefix("/") { - path.remove(at: path.startIndex) - } - - return path - - } - - fileprivate func getURL(from urlRequest: URLRequest) throws -> URL { - - guard let url = urlRequest.url else { - throw DownloadException.requestMissingURL - } - - return url - } - -} - -open class URLSessionDecodableRequestBuilder: URLSessionRequestBuilder { - override fileprivate func processRequestResponse(urlRequest: URLRequest, data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Swift.Result, Error>) -> Void) { - - if let error = error { - completion(.failure(ErrorResponse.error(-1, data, response, error))) - return - } - - guard let httpResponse = response as? HTTPURLResponse else { - completion(.failure(ErrorResponse.error(-2, data, response, DecodableRequestBuilderError.nilHTTPResponse))) - return - } - - guard httpResponse.isStatusCodeSuccessful else { - completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, DecodableRequestBuilderError.unsuccessfulHTTPStatusCode))) - return - } - - switch T.self { - case is String.Type: - - let body = data.flatMap { String(data: $0, encoding: .utf8) } ?? "" - - completion(.success(Response(response: httpResponse, body: body as? T))) - - case is Void.Type: - - completion(.success(Response(response: httpResponse, body: nil))) - - case is Data.Type: - - completion(.success(Response(response: httpResponse, body: data as? T))) - - default: - - guard let data = data, !data.isEmpty else { - completion(.failure(ErrorResponse.error(httpResponse.statusCode, nil, response, DecodableRequestBuilderError.emptyDataResponse))) - return - } - - let decodeResult = CodableHelper.decode(T.self, from: data) - - switch decodeResult { - case let .success(decodableObj): - completion(.success(Response(response: httpResponse, body: decodableObj))) - case let .failure(error): - completion(.failure(ErrorResponse.error(httpResponse.statusCode, data, response, error))) - } - } - } -} - -private class SessionDelegate: NSObject, URLSessionDelegate, URLSessionDataDelegate { - - var credential: URLCredential? - - var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? - - func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { - - var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling - - var credential: URLCredential? - - if let taskDidReceiveChallenge = taskDidReceiveChallenge { - (disposition, credential) = taskDidReceiveChallenge(session, task, challenge) - } else { - if challenge.previousFailureCount > 0 { - disposition = .rejectProtectionSpace - } else { - credential = self.credential ?? session.configuration.urlCredentialStorage?.defaultCredential(for: challenge.protectionSpace) - - if credential != nil { - disposition = .useCredential - } - } - } - - completionHandler(disposition, credential) - } -} - -public enum HTTPMethod: String { - case options = "OPTIONS" - case get = "GET" - case head = "HEAD" - case post = "POST" - case put = "PUT" - case patch = "PATCH" - case delete = "DELETE" - case trace = "TRACE" - case connect = "CONNECT" -} - -public protocol ParameterEncoding { - func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest -} - -private class URLEncoding: ParameterEncoding { - func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { - - var urlRequest = urlRequest - - guard let parameters = parameters else { return urlRequest } - - guard let url = urlRequest.url else { - throw DownloadException.requestMissingURL - } - - if var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false), !parameters.isEmpty { - urlComponents.queryItems = APIHelper.mapValuesToQueryItems(parameters) - urlRequest.url = urlComponents.url - } - - return urlRequest - } -} - -private class FormDataEncoding: ParameterEncoding { - - let contentTypeForFormPart: (_ fileURL: URL) -> String? - - init(contentTypeForFormPart: @escaping (_ fileURL: URL) -> String?) { - self.contentTypeForFormPart = contentTypeForFormPart - } - - func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { - - var urlRequest = urlRequest - - guard let parameters = parameters, !parameters.isEmpty else { - return urlRequest - } - - let boundary = "Boundary-\(UUID().uuidString)" - - urlRequest.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") - - for (key, value) in parameters { - switch value { - case let fileURL as URL: - - urlRequest = try configureFileUploadRequest( - urlRequest: urlRequest, - boundary: boundary, - name: key, - fileURL: fileURL - ) - - case let string as String: - - if let data = string.data(using: .utf8) { - urlRequest = configureDataUploadRequest( - urlRequest: urlRequest, - boundary: boundary, - name: key, - data: data - ) - } - - case let number as NSNumber: - - if let data = number.stringValue.data(using: .utf8) { - urlRequest = configureDataUploadRequest( - urlRequest: urlRequest, - boundary: boundary, - name: key, - data: data - ) - } - - default: - fatalError("Unprocessable value \(value) with key \(key)") - } - } - - var body = urlRequest.httpBody.orEmpty - - body.append("\r\n--\(boundary)--\r\n") - - urlRequest.httpBody = body - - return urlRequest - } - - private func configureFileUploadRequest(urlRequest: URLRequest, boundary: String, name: String, fileURL: URL) throws -> URLRequest { - - var urlRequest = urlRequest - - var body = urlRequest.httpBody.orEmpty - - let fileData = try Data(contentsOf: fileURL) - - let mimetype = contentTypeForFormPart(fileURL) ?? mimeType(for: fileURL) - - let fileName = fileURL.lastPathComponent - - // If we already added something then we need an additional newline. - if body.count > 0 { - body.append("\r\n") - } - - // Value boundary. - body.append("--\(boundary)\r\n") - - // Value headers. - body.append("Content-Disposition: form-data; name=\"\(name)\"; filename=\"\(fileName)\"\r\n") - body.append("Content-Type: \(mimetype)\r\n") - - // Separate headers and body. - body.append("\r\n") - - // The value data. - body.append(fileData) - - urlRequest.httpBody = body - - return urlRequest - } - - private func configureDataUploadRequest(urlRequest: URLRequest, boundary: String, name: String, data: Data) -> URLRequest { - - var urlRequest = urlRequest - - var body = urlRequest.httpBody.orEmpty - - // If we already added something then we need an additional newline. - if body.count > 0 { - body.append("\r\n") - } - - // Value boundary. - body.append("--\(boundary)\r\n") - - // Value headers. - body.append("Content-Disposition: form-data; name=\"\(name)\"\r\n") - - // Separate headers and body. - body.append("\r\n") - - // The value data. - body.append(data) - - urlRequest.httpBody = body - - return urlRequest - - } - - func mimeType(for url: URL) -> String { - let pathExtension = url.pathExtension - - if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() { - if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() { - return mimetype as String - } - } - return "application/octet-stream" - } - -} - -private class FormURLEncoding: ParameterEncoding { - func encode(_ urlRequest: URLRequest, with parameters: [String: Any]?) throws -> URLRequest { - - var urlRequest = urlRequest - - var requestBodyComponents = URLComponents() - requestBodyComponents.queryItems = APIHelper.mapValuesToQueryItems(parameters ?? [:]) - - if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { - urlRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") - } - - urlRequest.httpBody = requestBodyComponents.query?.data(using: .utf8) - - return urlRequest - } -} - -private extension Data { - /// Append string to Data - /// - /// Rather than littering my code with calls to `dataUsingEncoding` to convert strings to Data, and then add that data to the Data, this wraps it in a nice convenient little extension to Data. This converts using UTF-8. - /// - /// - parameter string: The string to be added to the `Data`. - - mutating func append(_ string: String) { - if let data = string.data(using: .utf8) { - append(data) - } - } -} - -private extension Optional where Wrapped == Data { - var orEmpty: Data { - self ?? Data() - } -} - -extension JSONDataEncoding: ParameterEncoding {} diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs.swift index dbdab491ff7d..01bc6ff0d8d0 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs.swift @@ -6,7 +6,10 @@ import Foundation -open class PetstoreClientAPI { +@available(*, deprecated, renamed: "PetstoreClient") +public typealias PetstoreClientAPI = PetstoreClient + +open class PetstoreClient { public static var basePath = "http://petstore.swagger.io:80/v2" public static var credential: URLCredential? public static var customHeaders: [String: String] = [:] @@ -32,7 +35,7 @@ open class RequestBuilder { self.parameters = parameters self.headers = headers - addHeaders(PetstoreClientAPI.customHeaders) + addHeaders(PetstoreClient.customHeaders) } open func addHeaders(_ aHeaders: [String: String]) { @@ -41,7 +44,7 @@ open class RequestBuilder { } } - open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } + open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { } public func addHeader(name: String, value: String) -> Self { if !value.isEmpty { @@ -51,7 +54,7 @@ open class RequestBuilder { } open func addCredential() -> Self { - credential = PetstoreClientAPI.credential + credential = PetstoreClient.credential return self } } diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift index 72b89640eeb4..542fb6f69ba8 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/AnotherFakeAPI.swift @@ -15,7 +15,7 @@ open class AnotherFakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func call123testSpecialTags(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { call123testSpecialTagsWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -35,7 +35,7 @@ open class AnotherFakeAPI { */ open class func call123testSpecialTagsWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/another-fake/dummy" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class AnotherFakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift index cf92424d9cc1..9b75edc92ee6 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeAPI.swift @@ -14,7 +14,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { + open class func fakeOuterBooleanSerialize(body: Bool? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Bool?, _ error: Error?) -> Void)) { fakeOuterBooleanSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -33,7 +33,7 @@ open class FakeAPI { */ open class func fakeOuterBooleanSerializeWithRequestBuilder(body: Bool? = nil) -> RequestBuilder { let path = "/fake/outer/boolean" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -44,7 +44,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -55,7 +55,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { + open class func fakeOuterCompositeSerialize(body: OuterComposite? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: OuterComposite?, _ error: Error?) -> Void)) { fakeOuterCompositeSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -74,7 +74,7 @@ open class FakeAPI { */ open class func fakeOuterCompositeSerializeWithRequestBuilder(body: OuterComposite? = nil) -> RequestBuilder { let path = "/fake/outer/composite" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -85,7 +85,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -96,7 +96,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { + open class func fakeOuterNumberSerialize(body: Double? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Double?, _ error: Error?) -> Void)) { fakeOuterNumberSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -115,7 +115,7 @@ open class FakeAPI { */ open class func fakeOuterNumberSerializeWithRequestBuilder(body: Double? = nil) -> RequestBuilder { let path = "/fake/outer/number" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -126,7 +126,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -137,7 +137,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func fakeOuterStringSerialize(body: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { fakeOuterStringSerializeWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -156,7 +156,7 @@ open class FakeAPI { */ open class func fakeOuterStringSerializeWithRequestBuilder(body: String? = nil) -> RequestBuilder { let path = "/fake/outer/string" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -167,7 +167,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -178,7 +178,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithFileSchema(body: FileSchemaTestClass, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithFileSchemaWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -197,7 +197,7 @@ open class FakeAPI { */ open class func testBodyWithFileSchemaWithRequestBuilder(body: FileSchemaTestClass) -> RequestBuilder { let path = "/fake/body-with-file-schema" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -208,7 +208,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -220,7 +220,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testBodyWithQueryParams(query: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testBodyWithQueryParamsWithRequestBuilder(query: query, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -239,7 +239,7 @@ open class FakeAPI { */ open class func testBodyWithQueryParamsWithRequestBuilder(query: String, body: User) -> RequestBuilder { let path = "/fake/body-with-query-params" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) var urlComponents = URLComponents(string: URLString) @@ -253,7 +253,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -265,7 +265,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClientModel(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClientModelWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -285,7 +285,7 @@ open class FakeAPI { */ open class func testClientModelWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -296,7 +296,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -321,7 +321,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEndpointParameters(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEndpointParametersWithRequestBuilder(number: number, double: double, patternWithoutDelimiter: patternWithoutDelimiter, byte: byte, integer: integer, int32: int32, int64: int64, float: float, string: string, binary: binary, date: date, dateTime: dateTime, password: password, callback: callback).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -357,7 +357,7 @@ open class FakeAPI { */ open class func testEndpointParametersWithRequestBuilder(number: Double, double: Double, patternWithoutDelimiter: String, byte: Data, integer: Int? = nil, int32: Int? = nil, int64: Int64? = nil, float: Float? = nil, string: String? = nil, binary: URL? = nil, date: Date? = nil, dateTime: Date? = nil, password: String? = nil, callback: String? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "integer": integer?.encodeToJSON(), "int32": int32?.encodeToJSON(), @@ -386,7 +386,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -472,7 +472,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testEnumParameters(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testEnumParametersWithRequestBuilder(enumHeaderStringArray: enumHeaderStringArray, enumHeaderString: enumHeaderString, enumQueryStringArray: enumQueryStringArray, enumQueryString: enumQueryString, enumQueryInteger: enumQueryInteger, enumQueryDouble: enumQueryDouble, enumFormStringArray: enumFormStringArray, enumFormString: enumFormString).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -499,7 +499,7 @@ open class FakeAPI { */ open class func testEnumParametersWithRequestBuilder(enumHeaderStringArray: [String]? = nil, enumHeaderString: EnumHeaderString_testEnumParameters? = nil, enumQueryStringArray: [String]? = nil, enumQueryString: EnumQueryString_testEnumParameters? = nil, enumQueryInteger: EnumQueryInteger_testEnumParameters? = nil, enumQueryDouble: EnumQueryDouble_testEnumParameters? = nil, enumFormStringArray: [String]? = nil, enumFormString: EnumFormString_testEnumParameters? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "enum_form_string_array": enumFormStringArray?.encodeToJSON(), "enum_form_string": enumFormString?.encodeToJSON(), @@ -524,7 +524,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -541,7 +541,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testGroupParameters(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testGroupParametersWithRequestBuilder(requiredStringGroup: requiredStringGroup, requiredBooleanGroup: requiredBooleanGroup, requiredInt64Group: requiredInt64Group, stringGroup: stringGroup, booleanGroup: booleanGroup, int64Group: int64Group).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -566,7 +566,7 @@ open class FakeAPI { */ open class func testGroupParametersWithRequestBuilder(requiredStringGroup: Int, requiredBooleanGroup: Bool, requiredInt64Group: Int64, stringGroup: Int? = nil, booleanGroup: Bool? = nil, int64Group: Int64? = nil) -> RequestBuilder { let path = "/fake" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -584,7 +584,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -596,7 +596,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testInlineAdditionalProperties(param: [String: String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testInlineAdditionalPropertiesWithRequestBuilder(param: param).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -615,7 +615,7 @@ open class FakeAPI { */ open class func testInlineAdditionalPropertiesWithRequestBuilder(param: [String: String]) -> RequestBuilder { let path = "/fake/inline-additionalProperties" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: param) let urlComponents = URLComponents(string: URLString) @@ -626,7 +626,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -639,7 +639,7 @@ open class FakeAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func testJsonFormData(param: String, param2: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { testJsonFormDataWithRequestBuilder(param: param, param2: param2).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -659,7 +659,7 @@ open class FakeAPI { */ open class func testJsonFormDataWithRequestBuilder(param: String, param2: String) -> RequestBuilder { let path = "/fake/jsonFormData" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "param": param.encodeToJSON(), "param2": param2.encodeToJSON(), @@ -676,7 +676,7 @@ open class FakeAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift index d4d651664963..fd7d845d3406 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/FakeClassnameTags123API.swift @@ -15,7 +15,7 @@ open class FakeClassnameTags123API { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { + open class func testClassname(body: Client, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Client?, _ error: Error?) -> Void)) { testClassnameWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -38,7 +38,7 @@ open class FakeClassnameTags123API { */ open class func testClassnameWithRequestBuilder(body: Client) -> RequestBuilder { let path = "/fake_classname_test" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class FakeClassnameTags123API { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "PATCH", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift index a1fe0d12b1da..d7d5bdfa2eaa 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/PetAPI.swift @@ -15,7 +15,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func addPet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { addPetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -37,7 +37,7 @@ open class PetAPI { */ open class func addPetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -48,7 +48,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -61,7 +61,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deletePet(petId: Int64, apiKey: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deletePetWithRequestBuilder(petId: petId, apiKey: apiKey).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -87,7 +87,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -98,7 +98,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -119,7 +119,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByStatus(status: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByStatusWithRequestBuilder(status: status).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -142,7 +142,7 @@ open class PetAPI { */ open class func findPetsByStatusWithRequestBuilder(status: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByStatus" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -156,7 +156,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -169,7 +169,7 @@ open class PetAPI { - parameter completion: completion handler to receive the data and the error objects */ @available(*, deprecated, message: "This operation is deprecated.") - open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { + open class func findPetsByTags(tags: [String], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [Pet]?, _ error: Error?) -> Void)) { findPetsByTagsWithRequestBuilder(tags: tags).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -193,7 +193,7 @@ open class PetAPI { @available(*, deprecated, message: "This operation is deprecated.") open class func findPetsByTagsWithRequestBuilder(tags: [String]) -> RequestBuilder<[Pet]> { let path = "/pet/findByTags" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -207,7 +207,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[Pet]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -219,7 +219,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { + open class func getPetById(petId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Pet?, _ error: Error?) -> Void)) { getPetByIdWithRequestBuilder(petId: petId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -245,7 +245,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -256,7 +256,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -268,7 +268,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePet(body: Pet, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -290,7 +290,7 @@ open class PetAPI { */ open class func updatePetWithRequestBuilder(body: Pet) -> RequestBuilder { let path = "/pet" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -301,7 +301,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -315,7 +315,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updatePetWithForm(petId: Int64, name: String? = nil, status: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updatePetWithFormWithRequestBuilder(petId: petId, name: name, status: status).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -342,7 +342,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "name": name?.encodeToJSON(), "status": status?.encodeToJSON(), @@ -359,7 +359,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -373,7 +373,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFile(petId: Int64, additionalMetadata: String? = nil, file: URL? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequestBuilder(petId: petId, additionalMetadata: additionalMetadata, file: file).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -400,7 +400,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "file": file?.encodeToJSON(), @@ -417,7 +417,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -431,7 +431,7 @@ open class PetAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { + open class func uploadFileWithRequiredFile(petId: Int64, requiredFile: URL, additionalMetadata: String? = nil, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: ApiResponse?, _ error: Error?) -> Void)) { uploadFileWithRequiredFileWithRequestBuilder(petId: petId, requiredFile: requiredFile, additionalMetadata: additionalMetadata).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -458,7 +458,7 @@ open class PetAPI { let petIdPreEscape = "\(APIHelper.mapValueToPathItem(petId))" let petIdPostEscape = petIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{petId}", with: petIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let formParams: [String: Any?] = [ "additionalMetadata": additionalMetadata?.encodeToJSON(), "requiredFile": requiredFile.encodeToJSON(), @@ -475,7 +475,7 @@ open class PetAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift index 501f11f5f219..c80d4286b536 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/StoreAPI.swift @@ -15,7 +15,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteOrder(orderId: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteOrderWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -38,7 +38,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -49,7 +49,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -60,7 +60,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { + open class func getInventory(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: [String: Int]?, _ error: Error?) -> Void)) { getInventoryWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -82,7 +82,7 @@ open class StoreAPI { */ open class func getInventoryWithRequestBuilder() -> RequestBuilder<[String: Int]> { let path = "/store/inventory" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -93,7 +93,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder<[String: Int]>.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -105,7 +105,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func getOrderById(orderId: Int64, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { getOrderByIdWithRequestBuilder(orderId: orderId).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -128,7 +128,7 @@ open class StoreAPI { let orderIdPreEscape = "\(APIHelper.mapValueToPathItem(orderId))" let orderIdPostEscape = orderIdPreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{order_id}", with: orderIdPostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -139,7 +139,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -151,7 +151,7 @@ open class StoreAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { + open class func placeOrder(body: Order, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Order?, _ error: Error?) -> Void)) { placeOrderWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -170,7 +170,7 @@ open class StoreAPI { */ open class func placeOrderWithRequestBuilder(body: Order) -> RequestBuilder { let path = "/store/order" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -181,7 +181,7 @@ open class StoreAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift index 254474014d31..542dc212bd1b 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/APIs/UserAPI.swift @@ -15,7 +15,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUser(body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUserWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -35,7 +35,7 @@ open class UserAPI { */ open class func createUserWithRequestBuilder(body: User) -> RequestBuilder { let path = "/user" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -46,7 +46,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -58,7 +58,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithArrayInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithArrayInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -77,7 +77,7 @@ open class UserAPI { */ open class func createUsersWithArrayInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithArray" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -88,7 +88,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -100,7 +100,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func createUsersWithListInput(body: [User], apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { createUsersWithListInputWithRequestBuilder(body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -119,7 +119,7 @@ open class UserAPI { */ open class func createUsersWithListInputWithRequestBuilder(body: [User]) -> RequestBuilder { let path = "/user/createWithList" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -130,7 +130,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "POST", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -142,7 +142,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func deleteUser(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { deleteUserWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -165,7 +165,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -176,7 +176,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "DELETE", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -188,7 +188,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { + open class func getUserByName(username: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: User?, _ error: Error?) -> Void)) { getUserByNameWithRequestBuilder(username: username).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -210,7 +210,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -221,7 +221,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -234,7 +234,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { + open class func loginUser(username: String, password: String, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: String?, _ error: Error?) -> Void)) { loginUserWithRequestBuilder(username: username, password: password).execute(apiResponseQueue) { result -> Void in switch result { case let .success(response): @@ -255,7 +255,7 @@ open class UserAPI { */ open class func loginUserWithRequestBuilder(username: String, password: String) -> RequestBuilder { let path = "/user/login" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil var urlComponents = URLComponents(string: URLString) @@ -270,7 +270,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -281,7 +281,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func logoutUser(apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { logoutUserWithRequestBuilder().execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -299,7 +299,7 @@ open class UserAPI { */ open class func logoutUserWithRequestBuilder() -> RequestBuilder { let path = "/user/logout" - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters: [String: Any]? = nil let urlComponents = URLComponents(string: URLString) @@ -310,7 +310,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "GET", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } @@ -323,7 +323,7 @@ open class UserAPI { - parameter apiResponseQueue: The queue on which api response is dispatched. - parameter completion: completion handler to receive the data and the error objects */ - open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { + open class func updateUser(username: String, body: User, apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, completion: @escaping ((_ data: Void?, _ error: Error?) -> Void)) { updateUserWithRequestBuilder(username: username, body: body).execute(apiResponseQueue) { result -> Void in switch result { case .success: @@ -347,7 +347,7 @@ open class UserAPI { let usernamePreEscape = "\(APIHelper.mapValueToPathItem(username))" let usernamePostEscape = usernamePreEscape.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? "" path = path.replacingOccurrences(of: "{username}", with: usernamePostEscape, options: .literal, range: nil) - let URLString = PetstoreClientAPI.basePath + path + let URLString = PetstoreClient.basePath + path let parameters = JSONEncodingHelper.encodingParameters(forEncodableObject: body) let urlComponents = URLComponents(string: URLString) @@ -358,7 +358,7 @@ open class UserAPI { let headerParameters = APIHelper.rejectNilHeaders(nillableHeaders) - let requestBuilder: RequestBuilder.Type = PetstoreClientAPI.requestBuilderFactory.getNonDecodableBuilder() + let requestBuilder: RequestBuilder.Type = PetstoreClient.requestBuilderFactory.getNonDecodableBuilder() return requestBuilder.init(method: "PUT", URLString: (urlComponents?.string ?? URLString), parameters: parameters, headers: headerParameters) } diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift index 517b23a181f3..9494292aaef9 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/Models/StringBooleanMap.swift @@ -42,9 +42,10 @@ public struct StringBooleanMap: Codable { // Decodable protocol methods public init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: String.self) + let container = try decoder.container(keyedBy: CodingKeys.self) var nonAdditionalPropertyKeys = Set() - additionalProperties = try container.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) + let additionalPropertiesContainer = try decoder.container(keyedBy: String.self) + additionalProperties = try additionalPropertiesContainer.decodeMap(Bool.self, excludedKeys: nonAdditionalPropertyKeys) } } diff --git a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index fbf069a93c49..774c0427eaa2 100644 --- a/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/x-swift-hashable/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -93,7 +93,7 @@ open class URLSessionRequestBuilder: RequestBuilder { return modifiedRequest } - override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClientAPI.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { + override open func execute(_ apiResponseQueue: DispatchQueue = PetstoreClient.apiResponseQueue, _ completion: @escaping (_ result: Swift.Result, Error>) -> Void) { let urlSessionId = UUID().uuidString // Create a new manager for each request to customize its request header let urlSession = createURLSession() @@ -250,7 +250,7 @@ open class URLSessionRequestBuilder: RequestBuilder { for (key, value) in headers { httpHeaders[key] = value } - for (key, value) in PetstoreClientAPI.customHeaders { + for (key, value) in PetstoreClient.customHeaders { httpHeaders[key] = value } return httpHeaders From 0f51662650e30cd1af8aa2dcbc0207faa0e4c999 Mon Sep 17 00:00:00 2001 From: Bruno Coelho <4brunu@users.noreply.github.com> Date: Wed, 2 Jun 2021 04:07:26 +0100 Subject: [PATCH 183/186] [kotlin][client] small improvements (#9640) * [kotlin][client] standardize adapter type names * [kotlin][client] remove unused class * [kotlin][client] fix IDE warning * [kotlin][client] improve import layout * [kotlin][client] update sample projects --- .../languages/KotlinClientCodegen.java | 1 - .../infrastructure/Serializer.kt.mustache | 6 ++-- .../infrastructure/URIAdapter.kt.mustache | 6 ++-- .../infrastructure/URLAdapter.kt.mustache | 2 +- .../infrastructure/UUIDAdapter.kt.mustache | 2 +- .../infrastructure/ApiClient.kt.mustache | 4 +++ .../ApplicationDelegates.kt.mustache | 29 ------------------- .../codegen/DefaultGeneratorTest.java | 8 ++--- .../kotlin-gson/.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../kotlin-jackson/.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- .../.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- .../kotlin-nonpublic/.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- .../kotlin-nullable/.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- .../kotlin-okhttp3/.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- .../client/infrastructure/Serializer.kt | 4 +-- .../client/infrastructure/URIAdapter.kt | 2 +- .../client/infrastructure/URLAdapter.kt | 2 +- .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- .../kotlin-string/.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- .../.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- .../.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- .../petstore/kotlin/.openapi-generator/FILES | 1 - .../client/infrastructure/ApiClient.kt | 1 - .../client/infrastructure/Serializer.kt | 2 +- .../client/infrastructure/URIAdapter.kt | 4 +-- .../client/infrastructure/UUIDAdapter.kt | 2 +- 68 files changed, 64 insertions(+), 114 deletions(-) delete mode 100644 modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApplicationDelegates.kt.mustache diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java index c98ffd60e72e..5c9b27ae59d9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java @@ -525,7 +525,6 @@ private void processJVMOkHttpLibrary(final String infrastructureFolder) { setLibrary(JVM_OKHTTP); // jvm specific supporting files - supportingFiles.add(new SupportingFile("infrastructure/ApplicationDelegates.kt.mustache", infrastructureFolder, "ApplicationDelegates.kt")); supportingFiles.add(new SupportingFile("infrastructure/Errors.kt.mustache", infrastructureFolder, "Errors.kt")); supportingFiles.add(new SupportingFile("infrastructure/ResponseExtensions.kt.mustache", infrastructureFolder, "ResponseExtensions.kt")); supportingFiles.add(new SupportingFile("infrastructure/ApiInfrastructureResponse.kt.mustache", infrastructureFolder, "ApiInfrastructureResponse.kt")); diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache index ba46e7331955..31b83578e7eb 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/Serializer.kt.mustache @@ -60,7 +60,7 @@ import java.util.concurrent.atomic.AtomicLong .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) {{^moshiCodeGen}} .add(KotlinJsonAdapterFactory()) {{/moshiCodeGen}} @@ -105,8 +105,8 @@ import java.util.concurrent.atomic.AtomicLong contextual(AtomicInteger::class, AtomicIntegerAdapter) contextual(AtomicLong::class, AtomicLongAdapter) contextual(AtomicBoolean::class, AtomicBooleanAdapter) - contextual(URI::class, UriAdapter) - contextual(URL::class, UrlAdapter) + contextual(URI::class, URIAdapter) + contextual(URL::class, URLAdapter) contextual(StringBuilder::class, StringBuilderAdapter) } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URIAdapter.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URIAdapter.kt.mustache index 20dd42023e8e..c95829555534 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URIAdapter.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URIAdapter.kt.mustache @@ -16,17 +16,17 @@ import com.squareup.moshi.ToJson import java.net.URI {{#moshi}} -{{#nonPublicApi}}internal {{/nonPublicApi}}class UriAdapter { +{{#nonPublicApi}}internal {{/nonPublicApi}}class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } {{/moshi}} {{#kotlinx_serialization}} @Serializer(forClass = URI::class) -object UriAdapter : KSerializer { +object URIAdapter : KSerializer { override fun serialize(encoder: Encoder, value: URI) { encoder.encodeString(value.toASCIIString()) } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URLAdapter.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URLAdapter.kt.mustache index 7105c43b72b6..eaebad52cc8f 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URLAdapter.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/URLAdapter.kt.mustache @@ -10,7 +10,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor import java.net.URL @Serializer(forClass = URL::class) -object UrlAdapter : KSerializer { +object URLAdapter : KSerializer { override fun serialize(encoder: Encoder, value: URL) { encoder.encodeString(value.toExternalForm()) } diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/UUIDAdapter.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/UUIDAdapter.kt.mustache index 9781ff529ccd..ea903c36ca99 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/UUIDAdapter.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/jvm-common/infrastructure/UUIDAdapter.kt.mustache @@ -21,7 +21,7 @@ import java.util.UUID fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } {{/moshi}} {{#kotlinx_serialization}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache index 2c0c8d8930a3..64ab00cf9b6d 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApiClient.kt.mustache @@ -3,7 +3,11 @@ package {{packageName}}.infrastructure {{#supportAndroidApiLevel25AndBelow}} import android.os.Build {{/supportAndroidApiLevel25AndBelow}} +{{#hasAuthMethods}} +{{#isBasicBasic}} import okhttp3.Credentials +{{/isBasicBasic}} +{{/hasAuthMethods}} import okhttp3.OkHttpClient import okhttp3.RequestBody {{#jvm-okhttp3}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApplicationDelegates.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApplicationDelegates.kt.mustache deleted file mode 100644 index 631122631764..000000000000 --- a/modules/openapi-generator/src/main/resources/kotlin-client/libraries/jvm-okhttp/infrastructure/ApplicationDelegates.kt.mustache +++ /dev/null @@ -1,29 +0,0 @@ -package {{packageName}}.infrastructure - -import kotlin.properties.ReadWriteProperty -import kotlin.reflect.KProperty - -{{#nonPublicApi}}internal {{/nonPublicApi}}object ApplicationDelegates { - /** - * Provides a property delegate, allowing the property to be set once and only once. - * - * If unset (no default value), a get on the property will throw [IllegalStateException]. - */ - fun setOnce(defaultValue: T? = null) : ReadWriteProperty = SetOnce(defaultValue) - - private class SetOnce(defaultValue: T? = null) : ReadWriteProperty { - private var isSet = false - private var value: T? = defaultValue - - override fun getValue(thisRef: Any?, property: KProperty<*>): T { - return value ?: throw IllegalStateException("${property.name} not initialized") - } - - override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) = synchronized(this) { - if (!isSet) { - this.value = value - isSet = true - } - } - } -} \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java index dac059152231..7e6a986bb324 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java @@ -459,7 +459,7 @@ public void testBuiltinLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 27); + Assert.assertEquals(files.size(), 26); // Generator should report a library templated file as a generated file TestUtils.ensureContainsFile(files, output, "src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt"); @@ -501,7 +501,7 @@ public void testBuiltinNonLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 27); + Assert.assertEquals(files.size(), 26); // Generator should report README.md as a generated file TestUtils.ensureContainsFile(files, output, "README.md"); @@ -566,7 +566,7 @@ public void testCustomLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 27); + Assert.assertEquals(files.size(), 26); // Generator should report a library templated file as a generated file TestUtils.ensureContainsFile(files, output, "src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt"); @@ -620,7 +620,7 @@ public void testCustomNonLibraryTemplates() throws IOException { List files = generator.opts(clientOptInput).generate(); - Assert.assertEquals(files.size(), 27); + Assert.assertEquals(files.size(), 26); // Generator should report README.md as a generated file TestUtils.ensureContainsFile(files, output, "README.md"); diff --git a/samples/client/petstore/kotlin-gson/.openapi-generator/FILES b/samples/client/petstore/kotlin-gson/.openapi-generator/FILES index bf441309074d..1f38d3fbe2d3 100644 --- a/samples/client/petstore/kotlin-gson/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-gson/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/DateAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt diff --git a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index e8c4090e0679..8ba19ee8e157 100644 --- a/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-gson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin-jackson/.openapi-generator/FILES b/samples/client/petstore/kotlin-jackson/.openapi-generator/FILES index 6bfd310bbcad..816d952128d8 100644 --- a/samples/client/petstore/kotlin-jackson/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-jackson/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt src/main/kotlin/org/openapitools/client/infrastructure/RequestConfig.kt diff --git a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 0c29beb9558a..6cf2ef9b0d10 100644 --- a/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jackson/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES index ca4c31651a48..16c712325f82 100644 --- a/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-json-request-string/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index ea327d4b6a4a..fc1578908831 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,7 +1,6 @@ package org.openapitools.client.infrastructure import android.os.Build -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 5b6d177ca893..e77581231c31 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,7 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 87de0b17353b..927522757da9 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -class UriAdapter { +class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index a4a44cc18b73..7ccf7dc25d2d 100644 --- a/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin-json-request-string/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/FILES b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/FILES index bf441309074d..1f38d3fbe2d3 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/DateAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/Errors.kt diff --git a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index e8c4090e0679..8ba19ee8e157 100644 --- a/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-jvm-okhttp4-coroutines/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES index ca4c31651a48..16c712325f82 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-moshi-codegen/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 0961cf760c64..ae6e80e95062 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index e1cee08d055b..ebd1a2a526b0 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -11,7 +11,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 87de0b17353b..927522757da9 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -class UriAdapter { +class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index a4a44cc18b73..7ccf7dc25d2d 100644 --- a/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin-moshi-codegen/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } diff --git a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES index ca4c31651a48..16c712325f82 100644 --- a/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-nonpublic/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index d4fccce2715b..ed34dce24467 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 914d277df5e7..acc0b33ae20c 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,7 +12,7 @@ internal object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index bfe929176150..3e509e9a8315 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -internal class UriAdapter { +internal class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index 02fa692b57dc..b5de20257ba1 100644 --- a/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin-nonpublic/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ internal class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } diff --git a/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES b/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES index ca4c31651a48..16c712325f82 100644 --- a/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-nullable/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 0961cf760c64..ae6e80e95062 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 5b6d177ca893..e77581231c31 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,7 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 87de0b17353b..927522757da9 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -class UriAdapter { +class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index a4a44cc18b73..7ccf7dc25d2d 100644 --- a/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin-nullable/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } diff --git a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES index ca4c31651a48..16c712325f82 100644 --- a/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-okhttp3/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 49cf4c675b7e..538c66cec2e3 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.MediaType diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 5b6d177ca893..e77581231c31 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,7 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 87de0b17353b..927522757da9 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -class UriAdapter { +class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index a4a44cc18b73..7ccf7dc25d2d 100644 --- a/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin-okhttp3/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 624053c30742..e769dec78ea3 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -28,8 +28,8 @@ object Serializer { contextual(AtomicInteger::class, AtomicIntegerAdapter) contextual(AtomicLong::class, AtomicLongAdapter) contextual(AtomicBoolean::class, AtomicBooleanAdapter) - contextual(URI::class, UriAdapter) - contextual(URL::class, UrlAdapter) + contextual(URI::class, URIAdapter) + contextual(URL::class, URLAdapter) contextual(StringBuilder::class, StringBuilderAdapter) } diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 0b734134afaf..0856c99813c1 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -10,7 +10,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor import java.net.URI @Serializer(forClass = URI::class) -object UriAdapter : KSerializer { +object URIAdapter : KSerializer { override fun serialize(encoder: Encoder, value: URI) { encoder.encodeString(value.toASCIIString()) } diff --git a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URLAdapter.kt b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URLAdapter.kt index 29546fc3ce9e..2df3308b76a3 100644 --- a/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URLAdapter.kt +++ b/samples/client/petstore/kotlin-retrofit2-kotlinx_serialization/src/main/kotlin/org/openapitools/client/infrastructure/URLAdapter.kt @@ -10,7 +10,7 @@ import kotlinx.serialization.descriptors.SerialDescriptor import java.net.URL @Serializer(forClass = URL::class) -object UrlAdapter : KSerializer { +object URLAdapter : KSerializer { override fun serialize(encoder: Encoder, value: URL) { encoder.encodeString(value.toExternalForm()) } diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 5b6d177ca893..e77581231c31 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,7 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 87de0b17353b..927522757da9 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -class UriAdapter { +class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index a4a44cc18b73..7ccf7dc25d2d 100644 --- a/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin-retrofit2-rx3/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 5b6d177ca893..e77581231c31 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,7 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 87de0b17353b..927522757da9 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -class UriAdapter { +class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index a4a44cc18b73..7ccf7dc25d2d 100644 --- a/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin-retrofit2/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } diff --git a/samples/client/petstore/kotlin-string/.openapi-generator/FILES b/samples/client/petstore/kotlin-string/.openapi-generator/FILES index ca4c31651a48..16c712325f82 100644 --- a/samples/client/petstore/kotlin-string/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-string/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 0961cf760c64..ae6e80e95062 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 5b6d177ca893..e77581231c31 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,7 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 87de0b17353b..927522757da9 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -class UriAdapter { +class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index a4a44cc18b73..7ccf7dc25d2d 100644 --- a/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin-string/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } diff --git a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES index ca4c31651a48..16c712325f82 100644 --- a/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-threetenbp/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 27297844d606..ad394bbefb02 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 5b6d177ca893..e77581231c31 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,7 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 87de0b17353b..927522757da9 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -class UriAdapter { +class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index a4a44cc18b73..7ccf7dc25d2d 100644 --- a/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin-threetenbp/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } diff --git a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES index bfbf9941fa57..c817d8024848 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin-uppercase-enum/.openapi-generator/FILES @@ -11,7 +11,6 @@ src/main/kotlin/org/openapitools/client/apis/EnumApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 0dad05161fae..e65bce97f7e6 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 5b6d177ca893..e77581231c31 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,7 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 87de0b17353b..927522757da9 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -class UriAdapter { +class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index a4a44cc18b73..7ccf7dc25d2d 100644 --- a/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin-uppercase-enum/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } diff --git a/samples/client/petstore/kotlin/.openapi-generator/FILES b/samples/client/petstore/kotlin/.openapi-generator/FILES index ca4c31651a48..16c712325f82 100644 --- a/samples/client/petstore/kotlin/.openapi-generator/FILES +++ b/samples/client/petstore/kotlin/.openapi-generator/FILES @@ -20,7 +20,6 @@ src/main/kotlin/org/openapitools/client/apis/UserApi.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiAbstractions.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt src/main/kotlin/org/openapitools/client/infrastructure/ApiInfrastructureResponse.kt -src/main/kotlin/org/openapitools/client/infrastructure/ApplicationDelegates.kt src/main/kotlin/org/openapitools/client/infrastructure/BigDecimalAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/BigIntegerAdapter.kt src/main/kotlin/org/openapitools/client/infrastructure/ByteArrayAdapter.kt diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt index 0961cf760c64..ae6e80e95062 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt @@ -1,6 +1,5 @@ package org.openapitools.client.infrastructure -import okhttp3.Credentials import okhttp3.OkHttpClient import okhttp3.RequestBody import okhttp3.RequestBody.Companion.asRequestBody diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt index 5b6d177ca893..e77581231c31 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/Serializer.kt @@ -12,7 +12,7 @@ object Serializer { .add(LocalDateAdapter()) .add(UUIDAdapter()) .add(ByteArrayAdapter()) - .add(UriAdapter()) + .add(URIAdapter()) .add(KotlinJsonAdapterFactory()) .add(BigDecimalAdapter()) .add(BigIntegerAdapter()) diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt index 87de0b17353b..927522757da9 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/URIAdapter.kt @@ -4,10 +4,10 @@ import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson import java.net.URI -class UriAdapter { +class URIAdapter { @ToJson fun toJson(uri: URI) = uri.toString() @FromJson - fun fromJson(s: String) = URI.create(s) + fun fromJson(s: String): URI = URI.create(s) } diff --git a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt index a4a44cc18b73..7ccf7dc25d2d 100644 --- a/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt +++ b/samples/client/petstore/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/UUIDAdapter.kt @@ -9,5 +9,5 @@ class UUIDAdapter { fun toJson(uuid: UUID) = uuid.toString() @FromJson - fun fromJson(s: String) = UUID.fromString(s) + fun fromJson(s: String): UUID = UUID.fromString(s) } From b9e75951e76eea7149333de6420c98e33beb1924 Mon Sep 17 00:00:00 2001 From: Michael Janssen Date: Wed, 2 Jun 2021 05:54:16 +0200 Subject: [PATCH 184/186] Add nullable annotation support to AspNetCoreServer (#9620) * Add nullable annotation support to AspNetCoreServer * Adjust naming for compatability with PR #9235 by @dehl-labs --- docs/generators/aspnetcore.md | 1 + .../languages/AspNetCoreServerCodegen.java | 23 +++- .../aspnetcore/3.0/Project.csproj.mustache | 3 + .../codegen/csharp/CSharpModelTest.java | 121 ++++++++++++++++++ 4 files changed, 147 insertions(+), 1 deletion(-) diff --git a/docs/generators/aspnetcore.md b/docs/generators/aspnetcore.md index 849f4ff93134..14d54f778d4c 100644 --- a/docs/generators/aspnetcore.md +++ b/docs/generators/aspnetcore.md @@ -19,6 +19,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |licenseUrl|The URL of the license| |http://localhost| |modelClassModifier|Model Class Modifier can be nothing or partial| |partial| |newtonsoftVersion|Version for Microsoft.AspNetCore.Mvc.NewtonsoftJson for ASP.NET Core 3.0+| |3.0.0| +|nullableReferenceTypes|Annotate Project with <Nullable>annotations</Nullable> and use ? annotation on all nullable attributes. Only supported on C# 8 / ASP.NET Core 3.0 or newer.| |false| |operationIsAsync|Set methods to async or sync (default).| |false| |operationModifier|Operation Modifier can be virtual or abstract|
    **virtual**
    Keep method virtual
    **abstract**
    Make method abstract
    |virtual| |operationResultTask|Set methods result to Task<>.| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index 1bc11ce94ca1..141cd952bdec 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -60,6 +60,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { public static final String USE_NEWTONSOFT = "useNewtonsoft"; public static final String USE_DEFAULT_ROUTING = "useDefaultRouting"; public static final String NEWTONSOFT_VERSION = "newtonsoftVersion"; + public static final String NULLABLE_REFERENCE_TYPES = "nullableReferenceTypes"; private String packageGuid = "{" + randomUUID().toString().toUpperCase(Locale.ROOT) + "}"; private String userSecretsGuid = randomUUID().toString(); @@ -84,6 +85,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { private boolean useFrameworkReference = false; private boolean useNewtonsoft = true; private boolean useDefaultRouting = true; + private boolean nullableReferenceTypes = false; private String newtonsoftVersion = "3.0.0"; public AspNetCoreServerCodegen() { @@ -249,6 +251,11 @@ public AspNetCoreServerCodegen() { "Use default routing for the ASP.NET Core version.", useDefaultRouting); + addSwitch(NULLABLE_REFERENCE_TYPES, + "Annotate Project with annotations and use ? annotation on all nullable attributes. " + + "Only supported on C# 8 / ASP.NET Core 3.0 or newer.", + nullableReferenceTypes); + addOption(CodegenConstants.ENUM_NAME_SUFFIX, CodegenConstants.ENUM_NAME_SUFFIX_DESC, enumNameSuffix); @@ -366,6 +373,7 @@ public void processOpts() { setIsFramework(); setUseNewtonsoft(); setUseEndpointRouting(); + setNullableReferenceTypes(); supportingFiles.add(new SupportingFile("build.sh.mustache", "", "build.sh")); supportingFiles.add(new SupportingFile("build.bat.mustache", "", "build.bat")); @@ -520,7 +528,7 @@ public String toRegularExpression(String pattern) { @Override public String getNullableType(Schema p, String type) { if (languageSpecificPrimitives.contains(type)) { - if (isSupportNullable() && ModelUtils.isNullable(p) && nullableType.contains(type)) { + if (isSupportNullable() && ModelUtils.isNullable(p) && (nullableType.contains(type) || nullableReferenceTypes)) { return type + "?"; } else { return type; @@ -649,6 +657,19 @@ private void setUseSwashbuckle() { } } + private void setNullableReferenceTypes() { + if (additionalProperties.containsKey(NULLABLE_REFERENCE_TYPES)) { + if (aspnetCoreVersion.getOptValue().startsWith("2.")) { + LOGGER.warn("Nullable annotation are not supported in ASP.NET core version 2. Setting " + NULLABLE_REFERENCE_TYPES + " to false"); + additionalProperties.put(NULLABLE_REFERENCE_TYPES, false); + } else { + nullableReferenceTypes = convertPropertyToBooleanAndWriteBack(NULLABLE_REFERENCE_TYPES); + } + } else { + additionalProperties.put(NULLABLE_REFERENCE_TYPES, nullableReferenceTypes); + } + } + private void setOperationIsAsync() { if (isLibrary) { operationIsAsync = false; diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Project.csproj.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Project.csproj.mustache index 70f7388a9884..ee3ced7ba192 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Project.csproj.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Project.csproj.mustache @@ -7,6 +7,9 @@ true true {{packageVersion}} +{{#nullableReferenceTypes}} + annotations +{{/nullableReferenceTypes}} {{#isLibrary}} Library {{/isLibrary}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CSharpModelTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CSharpModelTest.java index 40ebe3023153..4a8f8f3e3bc6 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CSharpModelTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CSharpModelTest.java @@ -25,6 +25,7 @@ import org.openapitools.codegen.CodegenProperty; import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.TestUtils; +import org.openapitools.codegen.languages.AspNetCoreServerCodegen; import org.openapitools.codegen.languages.CSharpClientCodegen; import org.testng.Assert; import org.testng.annotations.Test; @@ -264,6 +265,126 @@ public void nullablePropertyTest() { Assert.assertTrue(property3.isPrimitiveType); } + @Test(description = "convert a model with a nullable property without nullable annotation") + public void nullablePropertyWithoutNullableReferenceTypesTest() { + final Schema model = new Schema() + .description("a sample model") + .addProperties("id", new IntegerSchema().format(SchemaTypeUtil.INTEGER64_FORMAT).nullable(true)) + .addProperties("urls", new ArraySchema() + .items(new StringSchema()).nullable(true)) + .addProperties("name", new StringSchema().nullable(true)) + .addProperties("subObject", new Schema().addProperties("name", new StringSchema()).nullable(true)) + .addRequiredItem("id"); + final DefaultCodegen codegen = new AspNetCoreServerCodegen(); + OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model); + codegen.setOpenAPI(openAPI); + final CodegenModel cm = codegen.fromModel("sample", model); + + Assert.assertEquals(cm.name, "sample"); + Assert.assertEquals(cm.classname, "Sample"); + Assert.assertEquals(cm.description, "a sample model"); + Assert.assertEquals(cm.vars.size(), 4); + + final CodegenProperty property1 = cm.vars.get(0); + Assert.assertEquals(property1.baseName, "id"); + Assert.assertEquals(property1.dataType, "long?"); + Assert.assertEquals(property1.name, "Id"); + Assert.assertNull(property1.defaultValue); + Assert.assertEquals(property1.baseType, "long?"); + Assert.assertTrue(property1.required); + Assert.assertTrue(property1.isPrimitiveType); + + final CodegenProperty property2 = cm.vars.get(1); + Assert.assertEquals(property2.baseName, "urls"); + Assert.assertEquals(property2.dataType, "List"); + Assert.assertEquals(property2.name, "Urls"); + Assert.assertNull(property2.defaultValue); + Assert.assertEquals(property2.baseType, "List"); + Assert.assertEquals(property2.containerType, "array"); + Assert.assertFalse(property2.required); + Assert.assertTrue(property2.isPrimitiveType); + Assert.assertTrue(property2.isContainer); + + final CodegenProperty property3 = cm.vars.get(2); + Assert.assertEquals(property3.baseName, "name"); + Assert.assertEquals(property3.dataType, "string"); + Assert.assertEquals(property3.name, "Name"); + Assert.assertNull(property3.defaultValue); + Assert.assertEquals(property3.baseType, "string"); + Assert.assertFalse(property3.required); + Assert.assertTrue(property3.isPrimitiveType); + + final CodegenProperty property4 = cm.vars.get(3); + Assert.assertEquals(property4.baseName, "subObject"); + Assert.assertEquals(property4.dataType, "Object"); + Assert.assertEquals(property4.name, "SubObject"); + Assert.assertNull(property4.defaultValue); + Assert.assertEquals(property4.baseType, "Object"); + Assert.assertFalse(property4.required); + Assert.assertTrue(property4.isPrimitiveType); + } + + @Test(description = "convert a model with a nullable property using nullable annotation") + public void nullablePropertyWithNullableReferenceTypesTest() { + final Schema model = new Schema() + .description("a sample model") + .addProperties("id", new IntegerSchema().format(SchemaTypeUtil.INTEGER64_FORMAT).nullable(true)) + .addProperties("urls", new ArraySchema() + .items(new StringSchema()).nullable(true)) + .addProperties("name", new StringSchema().nullable(true)) + .addProperties("subObject", new Schema().addProperties("name", new StringSchema()).nullable(true)) + .addRequiredItem("id"); + final DefaultCodegen codegen = new AspNetCoreServerCodegen(); + codegen.additionalProperties().put(AspNetCoreServerCodegen.NULLABLE_REFERENCE_TYPES, true); + codegen.processOpts(); + OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model); + codegen.setOpenAPI(openAPI); + final CodegenModel cm = codegen.fromModel("sample", model); + + Assert.assertEquals(cm.name, "sample"); + Assert.assertEquals(cm.classname, "Sample"); + Assert.assertEquals(cm.description, "a sample model"); + Assert.assertEquals(cm.vars.size(), 4); + + final CodegenProperty property1 = cm.vars.get(0); + Assert.assertEquals(property1.baseName, "id"); + Assert.assertEquals(property1.dataType, "long?"); + Assert.assertEquals(property1.name, "Id"); + Assert.assertNull(property1.defaultValue); + Assert.assertEquals(property1.baseType, "long?"); + Assert.assertTrue(property1.required); + Assert.assertTrue(property1.isPrimitiveType); + + final CodegenProperty property2 = cm.vars.get(1); + Assert.assertEquals(property2.baseName, "urls"); + Assert.assertEquals(property2.dataType, "List"); + Assert.assertEquals(property2.name, "Urls"); + Assert.assertNull(property2.defaultValue); + Assert.assertEquals(property2.baseType, "List?"); + Assert.assertEquals(property2.containerType, "array"); + Assert.assertFalse(property2.required); + Assert.assertTrue(property2.isPrimitiveType); + Assert.assertTrue(property2.isContainer); + + final CodegenProperty property3 = cm.vars.get(2); + Assert.assertEquals(property3.baseName, "name"); + Assert.assertEquals(property3.dataType, "string?"); + Assert.assertEquals(property3.name, "Name"); + Assert.assertNull(property3.defaultValue); + Assert.assertEquals(property3.baseType, "string?"); + Assert.assertFalse(property3.required); + Assert.assertFalse(property3.isPrimitiveType); + + final CodegenProperty property4 = cm.vars.get(3); + Assert.assertEquals(property4.baseName, "subObject"); + Assert.assertEquals(property4.dataType, "Object?"); + Assert.assertEquals(property4.name, "SubObject"); + Assert.assertNull(property4.defaultValue); + Assert.assertEquals(property4.baseType, "Object?"); + Assert.assertFalse(property4.required); + Assert.assertFalse(property4.isPrimitiveType); + } + @Test(description = "convert a model with list property") public void listPropertyTest() { final Schema model = new Schema() From 7bb7c72cc53c8063c781ea0b38691cca4955a29f Mon Sep 17 00:00:00 2001 From: Troy P Date: Wed, 2 Jun 2021 09:03:45 -0700 Subject: [PATCH 185/186] Adding usePythonSrcRootInImports logic to AbstractPythonConnexionServerCodegen. (#9558) (#9559) --- docs/generators/python-aiohttp.md | 1 + docs/generators/python-blueplanet.md | 1 + docs/generators/python-flask.md | 1 + .../languages/AbstractPythonCodegen.java | 1 + .../AbstractPythonConnexionServerCodegen.java | 26 +++- ...tractPythonConnexionServerCodegenTest.java | 114 ++++++++++++++++++ 6 files changed, 140 insertions(+), 4 deletions(-) create mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/python/AbstractPythonConnexionServerCodegenTest.java diff --git a/docs/generators/python-aiohttp.md b/docs/generators/python-aiohttp.md index 7c46da0b5b44..9adef96ba51f 100644 --- a/docs/generators/python-aiohttp.md +++ b/docs/generators/python-aiohttp.md @@ -23,6 +23,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| |supportPython2|support python2. This option has been deprecated and will be removed in the 5.x release.| |false| |useNose|use the nose test framework| |false| +|usePythonSrcRootInImports|include pythonSrcRoot in import namespaces.| |false| ## IMPORT MAPPING diff --git a/docs/generators/python-blueplanet.md b/docs/generators/python-blueplanet.md index 81c9b89cbf3d..ba461d1822fe 100644 --- a/docs/generators/python-blueplanet.md +++ b/docs/generators/python-blueplanet.md @@ -23,6 +23,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| |supportPython2|support python2. This option has been deprecated and will be removed in the 5.x release.| |false| |useNose|use the nose test framework| |false| +|usePythonSrcRootInImports|include pythonSrcRoot in import namespaces.| |false| ## IMPORT MAPPING diff --git a/docs/generators/python-flask.md b/docs/generators/python-flask.md index 92bf4fdb97fa..9e69fa443023 100644 --- a/docs/generators/python-flask.md +++ b/docs/generators/python-flask.md @@ -23,6 +23,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| |supportPython2|support python2. This option has been deprecated and will be removed in the 5.x release.| |false| |useNose|use the nose test framework| |false| +|usePythonSrcRootInImports|include pythonSrcRoot in import namespaces.| |false| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java index 2765920fab4f..eced1ac0e782 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonCodegen.java @@ -600,6 +600,7 @@ public String patternCorrection(String pattern) { public void setPackageName(String packageName) { this.packageName = packageName; + additionalProperties.put(CodegenConstants.PACKAGE_NAME, this.packageName); } public void setProjectName(String projectName) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonConnexionServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonConnexionServerCodegen.java index 3898b7c09daf..df60913e61e4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonConnexionServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractPythonConnexionServerCodegen.java @@ -52,6 +52,7 @@ public abstract class AbstractPythonConnexionServerCodegen extends AbstractPytho // nose is a python testing framework, we use pytest if USE_NOSE is unset public static final String USE_NOSE = "useNose"; public static final String PYTHON_SRC_ROOT = "pythonSrcRoot"; + public static final String USE_PYTHON_SRC_ROOT_IN_IMPORTS = "usePythonSrcRootInImports"; static final String MEDIA_TYPE = "mediaType"; protected int serverPort = 8080; @@ -62,6 +63,7 @@ public abstract class AbstractPythonConnexionServerCodegen extends AbstractPytho protected boolean featureCORS = Boolean.FALSE; protected boolean useNose = Boolean.FALSE; protected String pythonSrcRoot; + protected boolean usePythonSrcRootInImports = Boolean.FALSE; public AbstractPythonConnexionServerCodegen(String templateDirectory, boolean fixBodyNameValue) { super(); @@ -79,7 +81,7 @@ public AbstractPythonConnexionServerCodegen(String templateDirectory, boolean fi typeMapping.put("map", "Dict"); // set the output folder here - outputFolder = "generated-code/connexion"; + outputFolder = "generated-code" + File.separatorChar + "connexion"; apiTemplateFiles.put("controller.mustache", ".py"); modelTemplateFiles.put("model.mustache", ".py"); @@ -132,6 +134,8 @@ public AbstractPythonConnexionServerCodegen(String templateDirectory, boolean fi defaultValue(Boolean.FALSE.toString())); cliOptions.add(new CliOption(PYTHON_SRC_ROOT, "put python sources in this subdirectory of output folder (defaults to \"\" for). Use this for src/ layout."). defaultValue("")); + cliOptions.add(new CliOption(USE_PYTHON_SRC_ROOT_IN_IMPORTS, "include pythonSrcRoot in import namespaces."). + defaultValue("false")); } protected void addSupportingFiles() { @@ -147,7 +151,6 @@ public void processOpts() { setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); } else { setPackageName("openapi_server"); - additionalProperties.put(CodegenConstants.PACKAGE_NAME, this.packageName); } if (additionalProperties.containsKey(CodegenConstants.PACKAGE_VERSION)) { setPackageVersion((String) additionalProperties.get(CodegenConstants.PACKAGE_VERSION)); @@ -177,9 +180,19 @@ public void processOpts() { if (additionalProperties.containsKey(USE_NOSE)) { setUseNose((String) additionalProperties.get(USE_NOSE)); } + if (additionalProperties.containsKey(USE_PYTHON_SRC_ROOT_IN_IMPORTS)) { + setUsePythonSrcRootInImports((String) additionalProperties.get(USE_PYTHON_SRC_ROOT_IN_IMPORTS)); + } if (additionalProperties.containsKey(PYTHON_SRC_ROOT)) { - setPythonSrcRoot((String) additionalProperties.get(PYTHON_SRC_ROOT)); - additionalProperties.put(PYTHON_SRC_ROOT, pythonSrcRoot); + String pythonSrcRoot = (String) additionalProperties.get(PYTHON_SRC_ROOT); + if (usePythonSrcRootInImports) { + // if we prepend the package name if the pythonSrcRoot we get the desired effect. + // but we also need to set pythonSrcRoot itself to "" to ensure all the paths are + // what we expect. + setPackageName(pythonSrcRoot + "." + packageName); + pythonSrcRoot = ""; + } + setPythonSrcRoot(pythonSrcRoot); } else { setPythonSrcRoot(""); } @@ -218,6 +231,11 @@ public void setPythonSrcRoot(String val) { } else { this.pythonSrcRoot = pySrcRoot + File.separator; } + additionalProperties.put(PYTHON_SRC_ROOT, StringUtils.defaultIfBlank(this.pythonSrcRoot, null)); + } + + public void setUsePythonSrcRootInImports(String val) { + this.usePythonSrcRootInImports = Boolean.parseBoolean(val); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/AbstractPythonConnexionServerCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/AbstractPythonConnexionServerCodegenTest.java new file mode 100644 index 000000000000..0e1e46c347f8 --- /dev/null +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/python/AbstractPythonConnexionServerCodegenTest.java @@ -0,0 +1,114 @@ +package org.openapitools.codegen.python; + +import static org.openapitools.codegen.languages.AbstractPythonConnexionServerCodegen.PYTHON_SRC_ROOT; +import static org.openapitools.codegen.languages.AbstractPythonConnexionServerCodegen.USE_PYTHON_SRC_ROOT_IN_IMPORTS; + +import java.io.File; +import java.util.Collections; +import java.util.Map; +import java.util.Objects; + +import com.google.common.collect.ImmutableMap; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.openapitools.codegen.CodegenConstants; +import org.openapitools.codegen.languages.AbstractPythonConnexionServerCodegen; +import org.testng.Assert; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +public class AbstractPythonConnexionServerCodegenTest { + + /** + * Passing "description" as first param to succinctly identify the significance of test parameters. + */ + @Test(dataProvider = "data") + public void test(String description, Map additionalProperties, String modelName, + ExpectedValues expectedValues) { + AbstractPythonConnexionServerCodegen codegen = new MockAbstractPythonConnexionServerCodegen("", false); + codegen.additionalProperties().putAll(additionalProperties); + codegen.processOpts(); + String pythonSrcRoot = Objects.toString(codegen.additionalProperties().get(PYTHON_SRC_ROOT), null); + Assert.assertEquals(pythonSrcRoot, expectedValues.pythonSrcRoot); + Assert.assertEquals(codegen.apiPackage(), expectedValues.expectedApiPackage); + Assert.assertEquals(codegen.modelFileFolder(), expectedValues.expectedModelFileFolder); + Assert.assertEquals(codegen.apiFileFolder(), expectedValues.expectedApiFileFolder); + Assert.assertEquals(codegen.toModelImport(modelName), expectedValues.expectedImport); + } + + @DataProvider + public Object[][] data() { + return new Object[][]{ + new Object[]{ + "Default setup", + Collections.emptyMap(), + "TestModel", + new ExpectedValues("from openapi_server.models.test_model import TestModel", + "openapi_server.controllers", + platformAgnosticPath("generated-code", "connexion", "openapi_server", "models"), + platformAgnosticPath("generated-code", "connexion", "openapi_server", "controllers"), + null) + }, + new Object[]{ + "Default setup with Python src root", + ImmutableMap.of(PYTHON_SRC_ROOT, "test_root"), + "TestModel", + new ExpectedValues("from openapi_server.models.test_model import TestModel", + "openapi_server.controllers", + platformAgnosticPath("generated-code", "connexion", "test_root", "openapi_server", "models"), + platformAgnosticPath("generated-code", "connexion", "test_root", "openapi_server", "controllers"), + "test_root") + }, + new Object[]{ + "Python src in import", + ImmutableMap.of(PYTHON_SRC_ROOT, "test_root", USE_PYTHON_SRC_ROOT_IN_IMPORTS, "true"), + "TestModel", + new ExpectedValues("from test_root.openapi_server.models.test_model import TestModel", + "test_root.openapi_server.controllers", + platformAgnosticPath("generated-code", "connexion", "test_root", "openapi_server", "models"), + platformAgnosticPath("generated-code", "connexion", "test_root", "openapi_server", "controllers"), + null) + }, + new Object[]{ + "Python src in import with specified package", + ImmutableMap.of(PYTHON_SRC_ROOT, "test_root", + USE_PYTHON_SRC_ROOT_IN_IMPORTS, "true", + CodegenConstants.PACKAGE_NAME, "test_package"), + "TestModel", + new ExpectedValues("from test_root.test_package.models.test_model import TestModel", + "test_root.test_package.controllers", + platformAgnosticPath("generated-code", "connexion", "test_root", "test_package", "models"), + platformAgnosticPath("generated-code", "connexion", "test_root", "test_package", "controllers"), + null) + } + }; + } + + private static String platformAgnosticPath(String... nodes) { + return StringUtils.join(nodes, File.separatorChar); + } + + private static class MockAbstractPythonConnexionServerCodegen extends AbstractPythonConnexionServerCodegen { + public MockAbstractPythonConnexionServerCodegen(String templateDirectory, boolean fixBodyNameValue) { + super(templateDirectory, fixBodyNameValue); + } + } + + private static class ExpectedValues { + public final String expectedImport; + public final String expectedApiPackage; + public final String expectedModelFileFolder; + public final String expectedApiFileFolder; + public final String pythonSrcRoot; + + public ExpectedValues(String expectedImport, String expectedApiPackage, String expectedModelFileFolder, + String expectedApiFileFolder, String pythonSrcRoot) { + this.expectedImport = expectedImport; + this.expectedApiPackage = expectedApiPackage; + this.expectedModelFileFolder = expectedModelFileFolder; + this.expectedApiFileFolder = expectedApiFileFolder; + this.pythonSrcRoot = pythonSrcRoot != null ? pythonSrcRoot + File.separatorChar : null; + } + } + +} From 3c866fb4a34e86d0ea2fef401a30206d7452bd2a Mon Sep 17 00:00:00 2001 From: Shyla Srinivas <58704937+shylasrinivas@users.noreply.github.com> Date: Wed, 2 Jun 2021 09:13:10 -0700 Subject: [PATCH 186/186] Fix python generation when custom files and templates are specified (#9572) * fix python generation when custom files and templates are specified * add test for processUserDefinedTemplates --- .../codegen/DefaultGenerator.java | 2 +- .../codegen/DefaultGeneratorTest.java | 59 ++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java index 9fde6eaa0478..d2e1bb4500d3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java @@ -938,7 +938,7 @@ private void processUserDefinedTemplates() { // TODO: initial behavior is "merge" user defined with built-in templates. consider offering user a "replace" option. if (userDefinedTemplates != null && !userDefinedTemplates.isEmpty()) { Map supportingFilesMap = config.supportingFiles().stream() - .collect(Collectors.toMap(TemplateDefinition::getTemplateFile, Function.identity())); + .collect(Collectors.toMap(TemplateDefinition::getTemplateFile, Function.identity(), (oldValue, newValue) -> oldValue)); // TemplateFileType.SupportingFiles userDefinedTemplates.stream() diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java index 7e6a986bb324..81869d78f91f 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java @@ -662,5 +662,62 @@ public void testHandlesTrailingSlashInServers() { Assert.assertEquals(servers.get(1).url, "http://trailingshlash.io:80/v1"); Assert.assertEquals(servers.get(2).url, "http://notrailingslash.io:80/v2"); } -} + @Test + public void testProcessUserDefinedTemplatesWithConfig() throws IOException { + Path target = Files.createTempDirectory("test"); + Path templates = Files.createTempDirectory("templates"); + File output = target.toFile(); + try { + // Create custom template + File customTemplate = new File(templates.toFile(), "README.mustache"); + new File(customTemplate.getParent()).mkdirs(); + Files.write(customTemplate.toPath(), + "# {{someKey}}".getBytes(StandardCharsets.UTF_8), + StandardOpenOption.CREATE); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("python") + .setInputSpec("src/test/resources/3_0/petstore.yaml") + .setPackageName("io.something") + .setTemplateDir(templates.toAbsolutePath().toString()) + .addAdditionalProperty("files", "src/test/resources/sampleConfig.json:\n\t folder: supportingjson "+ + "\n\t destinationFilename: supportingconfig.json \n\t templateType: SupportingFiles") + .setSkipOverwrite(false) + .setOutputDir(target.toAbsolutePath().toString()); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + DefaultGenerator generator = new DefaultGenerator(false); + + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); + generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "true"); + generator.setGeneratorPropertyDefault(CodegenConstants.API_DOCS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.API_TESTS, "false"); + + List files = generator.opts(clientOptInput).generate(); + + // remove commented code based on review - files does not seem to be supported in CodegenConfigurator + // supporting files sanity check + // TestUtils.ensureContainsFile(files, output, "sampleConfig.json"); + // Assert.assertTrue(new File(output, "sampleConfig.json").exists()); + + // Generator should report api_client.py as a generated file + TestUtils.ensureContainsFile(files, output, "io/something/api_client.py"); + + // Generated file should exist on the filesystem after generation + File apiClient = new File(output, "io/something/api_client.py"); + Assert.assertTrue(apiClient.exists()); + + // Generated file should contain our custom packageName + TestUtils.assertFileContains(apiClient.toPath(), + "from io.something import rest" + ); + } finally { + output.delete(); + templates.toFile().delete(); + } + } +}

    m+=12=9k&=d&7^p|Bm!(&7ZaY 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

  • $xC{#v7+N0p9amkVWI=`4^;7&jmSYZYGU- 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

  • `|OdZeZuu1h-^8pm#jciHk?~&Tp5O&Eg@&Ar<3+ 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%0AkeNb?L(B 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 DSU7Lt literal 7907132 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%0Aaw6c00 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